应用程序本地化在 iOS 中显示键而不是值

问题描述 投票:0回答:3

我一直在我的应用程序中使用本地化,但由于某种原因,一些字符串(不是全部)不会翻译,我看到的是键而不是值。我尝试通过执行以下操作来检查应用程序是否找到本地化文件:

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问题中的所有内容。

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

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

ios objective-c localization nslocalizedstring localizable.strings
3个回答
8
投票

所以我发现了问题。在我的字符串文件的 4 个地方有一行如下:

"KEY" ;= "Value"

此行会导致某种崩溃,但由于某种原因让编译器成功构建。这就是为什么我找不到错误,只有当我决定将最后一个未翻译的键和值移动到

Localizable.strings
文件的顶部时。然后我能够理解并看到问题出在文件中间的某个地方,并且顶部的键和值翻译得很好。


3
投票

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


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

它没有自动为我添加。

© www.soinside.com 2019 - 2024. All rights reserved.