应用本地化在iOS中显示键而不是值

dgenwo3n  于 12个月前  发布在  iOS
关注(0)|答案(3)|浏览(120)

我一直在我的应用程序中使用本地化,但由于某种原因,一些字符串(不是全部)不会翻译,我看到的是键而不是值。我试着通过这样做来检查应用程序是否找到本地化文件:

NSString *enPath = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSString *hePath = [[NSBundle mainBundle] pathForResource:@"he" ofType:@"lproj"];
NSString *ruPath = [[NSBundle mainBundle] pathForResource:@"ru" ofType:@"lproj"];
NSString *esPath = [[NSBundle mainBundle] pathForResource:@"es" ofType:@"lproj"];
NSString *frPath = [[NSBundle mainBundle] pathForResource:@"fr" ofType:@"lproj"];
NSString *arPath = [[NSBundle mainBundle] pathForResource:@"ar" ofType:@"lproj"];

没有一个是零。
我已经检查了本地化文件的名称,它应该是Localizable.strings。还检查了该键是否存在于Localizable.strings文件中。
我也试过:

  • 空置高速缓存
  • 清除所有目标
  • 删除派生数据文件夹
  • 重启
  • 重置模拟器
  • 转换成UTF-16
  • 删除所有本地化文件并重新创建它们。

还试图做的一切,是在this的问题。
重要的是,这不仅仅是一个模拟器/缓存问题。它也显示在下载应用程序的设备上。(我有企业账户)。
我还能做些什么来识别或解决问题?

72qzrwbm

72qzrwbm1#

所以我找到了问题所在。在我的字符串文件中的4个地方有一行如下:

"KEY" ;= "Value"

这一行会导致某种崩溃,但由于某种原因,让编译器成功构建。这就是为什么我找不到bug的原因,只有当我决定把最后一个没有翻译的键和值移到Localizable.strings文件的顶部时。然后,我能够理解并看到问题是在文件中间的某个地方,顶部的键和值被翻译得很好。

x8goxv8g

x8goxv8g2#

你可以做的一件事就是复制一个字符串文件,将扩展名改为plist,然后尝试在Xcode中打开它。如果字符串文件中有任何问题,它将显示在Xcode中,因为字典将只包含键,直到出现错误。然后可以执行Find操作并查找错误,直到确定所有字符串都出现在plist文件中。然后可以将该文件重命名回.strings

s4n0splo

s4n0splo3#

如果指定table:nil,则NSBundle将尝试从默认表(SOMELANG.lproj/Localizable.strings中的表)获取本地化。如果在其他地方有localization,则应使用table:@"File"显式指定表(或以类似方式使用NSLocalizedStringFromTable()宏:

NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil);

此外,仔细检查Localizable.strings文件是否已添加到

Targets -> BuildPhases -> Copy Bundle Resources

它不是自动为我添加的。

相关问题