应用程序本地化显示 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 中的键而不是值的主要内容,如果未能解决你的问题,请参考以下文章

获取值的键而不是获取键值? [复制]

材质 UI 多选不同的代码值和可见值 - 显示键而不是值

i18next 显示键而不是值

Java Dictionary 类存储键值

如何获取字典中的键列表?

lodash groupby 使用字符串键而不是数字