我正在本地化我的 iOS 应用程序,并且在模拟器中它每次都能以我选择的语言正确运行。
在我的 iPhone 5 上进行测试时,它只会在应用程序第一次运行时正确检测到语言。每隔一次我在设备上重新编译和运行我的应用程序时,它都会检测到“en”作为语言,即使我正在选择 Español(“es”)进行测试。
我使用以下方法检测语言:
[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]
我也用过:
[[NSLocale preferredLanguages] objectAtIndex:0]
结果相同。
如果我在第一次运行后终止应用程序,然后在设备上重新启动它,它会继续正确检测语言。
但是,如果我终止应用程序,然后在初始运行后通过 Xcode 重新编译/重新启动,它将加载检测到“en”(英文)。
之后,除非我完全删除该应用程序并通过 Xcode 重新编译/重新安装/运行该应用程序,否则杀死并重新启动该应用程序会不断检测为英语。然后循环重复......随后的重建/重新启动而不首先从设备中删除应用程序会导致错误检测。
我设备上的所有其他应用程序始终以西班牙语显示。整个用户界面以西班牙语显示。
更新:我现在已经在运行 iOS 6 的 iPad(第 3 代)上进行了测试,并且遇到了相同的行为。
更新 2:
在 didFinishLaunchingWithOptions 中,我有这段代码来检测语言:(语言是 NSString*):
language = [[NSLocale preferredLanguages] objectAtIndex:0];
接下来是这个调试语句,比较我得到的值,以及检测它的稍微不同的方式,只是为了调试:
NSLog(@"Detected language: %@ / %@", language, [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]);
当应用程序在西班牙语模式下正常工作时,输出显示为“检测到的语言:es / es”,然后在没有时显示为“检测到的语言:en / en”。仍然不知道为什么它有时决定加载为英语......
更新4:感谢大家的回答,我尝试了各种建议。不幸的是,我无法授予+100 赏金,因为似乎没有任何建议可以解决问题。如果有人最终找到了适合我的解决方案,届时我将再奖励他们 +50 赏金。
更新 5:我已经从 Xcode 4.5 更新到 4.5.2,并且遇到了同样的问题。
更新 6:我现在从头开始创建了一个新的测试项目,它工作得非常好!显然,我的项目布局方式或其中一个数据文件中一定有问题。我想我的下一个旅程将是从头开始重新创建项目,一个一个地复制文件数据......
更新 7(几个月后):可悲的是,在通过煞费苦心地重新创建我的项目暂时解决它(似乎)之后,我再次面临这个问题。在第一次加载时,语言会正确呈现,但在后续加载时,它会恢复为英语。
已解决请参阅下面的最终解决方案。感谢大家的帮助。我可能会发放一些赏金,因为无论如何它都会浪费掉。