5

我遇到了本地化字符串的一个奇怪问题。我的“en.lproj”文件夹中只有一个“Localizable.strings”,它工作正常。所有字符串都显示在设备上。但下次我编译并运行时,它只显示字符串的 ID。即使我什么也没做,只点击构建和调试。下一次它再次正常工作,下一次再次显示 ID。

那么有人知道为什么会这样吗?我总是需要构建两次,这有点烦人。

4

2 回答 2

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 文件的内容从应用程序包(不是来自我的源代码)复制到一个 XML 文件中(编译时,.strings 文件被转换为 XML)并添加到我的项目中。然后我在启动时将此文件加载到字典中,如果对 NSLocalizedString 的调用返回的是键而不是值,我会对我加载的字典进行查找。从理论上讲,您可以为所有语言执行此操作,但我只是遇到了英语问题。

是的,这不是问题的答案,但它是一种解决方法。

于 2011-12-14T21:12:44.843 回答
3

检查您的项目中是否有多个 Localizable.strings。将它们合并为一个为我解决了这个问题。(检查您使用的任何外部代码,例如 ShareKit)

于 2011-11-12T10:54:39.967 回答