应用程序本地化显示 iOS 中的键而不是值
Posted
技术标签:
【中文标题】应用程序本地化显示 iOS 中的键而不是值【英文标题】:App localization showing the key instead of the value in iOS 【发布时间】:2015-12-14 10:11:01 【问题描述】:我一直在我的应用程序中使用本地化,但由于某种原因,某些字符串(不是全部)无法翻译,我看到的是键而不是值。我试图通过这样做来检查应用程序是否找到了本地化文件:
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"];
而且没有一个是 nil。
我检查了本地化文件的名称,它应该是Localizable.strings
。
还检查了密钥是否存在于 Localizable.strings
文件中并且确实存在。
我也试过了:
空缓存 清理所有目标 删除派生数据文件夹 重启 重置模拟器 转换为 UTF-16 删除所有本地化文件并重新创建它们。还尝试完成this 问题中的所有内容。
重要的是,这不仅仅是一个模拟器/缓存问题。它还显示在下载该应用程序的设备上。 (我有企业帐户)。
我还能做些什么来识别或解决问题?
【问题讨论】:
你的文件是 Localizable.string 还是 Localizable.strings ? 文件名为Localizable.strings 【参考方案1】:所以我发现了问题,我猜谁为我翻译了Localizable.strings
文件是个混蛋。在我的字符串文件的 4 个地方有一行如下:
"KEY" ;= "Value"
这一行导致某种崩溃,但由于某种原因让编译器成功构建。这就是为什么我找不到错误的原因,只有当我决定采用最后一个未翻译的键和值并将它们移动到 Localizable.strings
文件的顶部时。然后我能够理解并看到问题出在文件中间的某个地方,并且顶部的键和值被翻译得很好。
【讨论】:
我遇到了类似的问题,在我的情况下它是双重的;;。"KEY" = "Value";;
【参考方案2】:
您可以做的一件事是捕获此类错误,即复制字符串文件,将扩展名更改为 plist 并尝试在 Xcode 中打开它。如果字符串文件中有任何问题,它将显示在 Xcode 中,因为字典将只包含键,直到出现错误为止。然后您可以执行查找操作并查找错误,直到您确定所有字符串都出现在 plist 文件中。然后,您可以将文件重命名为 .strings
【讨论】:
【参考方案3】:如果您指定table:nil
,那么NSBundle
将尝试从默认表(SOMELANG.lproj/Localizable.strings
中的那个)中获取本地化。如果您在其他地方有 localization
,则应使用 table:@"File"
显式指定表(或以类似方式使用 NSLocalizedStringFromTable()
宏:
NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil);
另外,
仔细检查Localizable.strings
文件是否已添加到
Targets -> BuildPhases -> Copy Bundle Resources
它不是为我自动添加的。
【讨论】:
以上是关于应用程序本地化显示 iOS 中的键而不是值的主要内容,如果未能解决你的问题,请参考以下文章