我一直在我的应用程序中使用本地化,但由于某种原因,一些字符串(不是全部)不会翻译,我看到的是键而不是值。我尝试通过执行以下操作来检查应用程序是否找到本地化文件:
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
文件中,确实如此。
我也尝试过:
还尝试做this问题中的所有内容。
重要的是要说这不仅仅是模拟器/缓存问题。它还会显示在下载该应用程序的设备上。 (我有企业帐户)。
我还可以做什么来识别或解决问题?
所以我发现了问题。在我的字符串文件的 4 个地方有一行如下:
"KEY" ;= "Value"
此行会导致某种崩溃,但由于某种原因让编译器成功构建。这就是为什么我找不到错误,只有当我决定将最后一个未翻译的键和值移动到
Localizable.strings
文件的顶部时。然后我能够理解并看到问题出在文件中间的某个地方,并且顶部的键和值翻译得很好。
如果您指定
table:nil
,则 NSBundle
将尝试从默认表(SOMELANG.lproj/Localizable.strings
中的表)获取本地化信息。如果您在其他地方有 localization
,则应使用 table:@"File"
明确指定表格(或以类似方式使用 NSLocalizedStringFromTable()
宏:
NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil);
还有, 仔细检查
Localizable.strings
文件是否已添加到
Targets -> BuildPhases -> Copy Bundle Resources
它没有自动为我添加。