我一直在我的应用程序中使用本地化,但由于某种原因,一些字符串(不是全部)不会翻译,我看到的是键而不是值。我试着通过这样做来检查应用程序是否找到本地化文件:
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的问题。
重要的是,这不仅仅是一个模拟器/缓存问题。它也显示在下载应用程序的设备上。(我有企业账户)。
我还能做些什么来识别或解决问题?
3条答案
按热度按时间72qzrwbm1#
所以我找到了问题所在。在我的字符串文件中的4个地方有一行如下:
这一行会导致某种崩溃,但由于某种原因,让编译器成功构建。这就是为什么我找不到bug的原因,只有当我决定把最后一个没有翻译的键和值移到
Localizable.strings
文件的顶部时。然后,我能够理解并看到问题是在文件中间的某个地方,顶部的键和值被翻译得很好。x8goxv8g2#
你可以做的一件事就是复制一个字符串文件,将扩展名改为plist,然后尝试在Xcode中打开它。如果字符串文件中有任何问题,它将显示在Xcode中,因为字典将只包含键,直到出现错误。然后可以执行Find操作并查找错误,直到确定所有字符串都出现在plist文件中。然后可以将该文件重命名回.strings
s4n0splo3#
如果指定
table:nil
,则NSBundle
将尝试从默认表(SOMELANG.lproj/Localizable.strings
中的表)获取本地化。如果在其他地方有localization
,则应使用table:@"File"
显式指定表(或以类似方式使用NSLocalizedStringFromTable()
宏:此外,仔细检查
Localizable.strings
文件是否已添加到它不是自动为我添加的。