我遇到了本地化字符串的一个奇怪问题。我的'en.lproj'文件夹中只有一个'Localizable.strings',它运行正常。所有字符串都显示在设备上。但是下次我编译并运行时,它只显示字符串的ID。即使我什么也没做,只点击构建和调试。并且下次再次正常工作,下次再次显示ID。
所以有人知道为什么会这样吗?我总是需要建立两次,这有点烦人。
答案 0 :(得分:4)
我的解决方案在底部:
我遇到了同样的问题:交替运行产生正确,然后错误的翻译(虽然只有英文)。
将“-NSShowNonLocalizedStrings YES”作为参数添加到应用程序中:
Localizable string "MyKey" not found in strings table "Localizable" of bundle CFBundle
所以,我尝试直接从包中加载密钥文件作为字符串并转储它。好吧,它没有正常工作的时间,它显示了一堆内置的iOS消息。所以,我去了构建的APP文件,打开了包内容,并查看了en.lproj / Localizable.strings文件......瞧!该文件已填充Apple iOS键/值对。在下一个版本中,它按预期填充。
当然,这与文件的编码无关(应该是UTF-16)。我提到这个具体问题时找不到任何东西。
我的解决方案:
我将合法英语Localizable.strings文件的内容从APP PACKAGE (不是从我的来源)复制到XML文件中(编译时,.strings文件转换为XML)和添加到我的项目中。然后我在启动时将此文件加载到字典中,如果对NSLocalizedString的调用返回了键而不是值,我对我加载的字典进行了查找。从理论上讲,你可以为所有语言做到这一点,但我只是遇到了英语问题。
是的,这不是问题的答案,但这是一种解决方法。
答案 1 :(得分:3)
检查项目中是否有多个Localizable.strings。将它们合并为一个解决了它。 (检查您使用的任何外部代码,例如ShareKit)