我一直在我的应用中使用本地化,但出于某种原因,某些字符串(并非所有字符串)都不会翻译,我会看到键而不是值。我试图通过这样做来检查应用程序是否找到了本地化文件:
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问题中的所有操作。
重要的是要说这不仅仅是模拟器/缓存问题。它也在下载应用程序的设备上显示。 (我有企业帐户)。
我还可以做些什么来识别或解决问题?
答案 0 :(得分:9)
所以我发现了问题,我想谁为我翻译"KEY" ;= "Value"
文件是一个混蛋。在我的字符串文件的4个位置,有一行如下:
Localizable.strings
这一行导致某种崩溃,但让编译器出于某种原因成功构建。这就是为什么我无法找到错误的原因,只有当我决定采用不翻译的最后一个Key和Value并将它们移到{{1}}文件的顶部时。然后我能够理解并看到问题出现在文件中间的某个位置,并且顶部的键和值被翻译得很好。
答案 1 :(得分:2)
你可以做的一件事就是捕获这些错误,就是制作一个字符串文件的副本,将扩展名更改为plist并尝试在Xcode中打开它。如果字符串文件中有任何问题,它将显示在Xcode中,因为字典只包含键,直到出现错误。然后,您可以执行查找操作并找到错误,直到您确定所有字符串都出现在plist文件中。然后,您可以将文件重命名为.strings
答案 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
我没有自动添加。