应用程序本地化显示密钥而不是iOS中的值

时间:2015-12-14 10:11:01

标签: ios objective-c localization nslocalizedstring localizable.strings

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

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问题中的所有操作。

重要的是要说这不仅仅是模拟器/缓存问题。它也在下载应用程序的设备上显示。 (我有企业帐户)。

我还可以做些什么来识别或解决问题?

3 个答案:

答案 0 :(得分:9)

所以我发现了问题,我想谁为我翻译"KEY" ;= "Value" 文件是一个混蛋。在我的字符串文件的4个位置,有一行如下:

Localizable.strings

这一行导致某种崩溃,但让编译器出于某种原因成功构建。这就是为什么我无法找到错误的原因,只有当我决定采用不翻译的最后一个Key和Value并将它们移到{{1}}文件的顶部时。然后我能够理解并看到问题出现在文件中间的某个位置,并且顶部的键和值被翻译得很好。

答案 1 :(得分:2)

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

enter image description here

答案 2 :(得分:1)

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

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

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

Targets -> BuildPhases -> Copy Bundle Resources

我没有自动添加。