2011-07-15 75 views
5

我遇到了本地化字符串的一个奇怪问题。我的'en.lproj'文件夹中只有一个'Localizable.strings',它工作正常。所有的字符串都显示在设备上。但下次我编译并运行时,它只显示字符串的ID。即使我没有改变,只需点击编译&调试。下一次再次正常工作,下一次再次显示ID。xcode本地化字符串未加载

因此,有谁知道为什么会发生这种情况?我总是需要建造两次,这有点令人讨厌。

+0

它显示任何错误?不知何故文件没有被复制。 –

+0

不,根本没有错误信息。 – boreas

回答

3

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

+0

如果您有多种语言,这并不能解决问题。对于每种语言,您需要包含多个 .lproj文件夹,其中包含“Localized.strings”文件(如果需要,还可以包含+ InfoPlist.strings)。如果你将它们全部合并,你会有许多重复的密钥。 – GtotheB

+0

@GtotheB如果我正确理解你,你想合并所有的语言?不,不要那样做!只合并使用SAME语言的文件(例如,合并来自所有en.lproj的Localizable.strings和所有de.lproj的所有Localizable.strings)分开 – Reggian

+0

我认为这就是你的意思。是的,合并语言表会产生不好的结果。但是,组合(例如)英文表格也可能导致重复的键。所以,如果这样做,确保在整个[现在]单个表中的键是唯一的。 – GtotheB

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的调用返回了键而不是值,我对加载的字典进行了查找。从理论上讲,你可以为所有语言做到这一点,但我只是遇到了英语问题。

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

+0

这个问题只发生在模拟器上吗?或者在模拟器和设备上? – JAHelia

+0

它发生在两个。但是,我最终发现了这个问题。作为iOS数据出现的内容实际上是第三方库的隐藏英语本地化表格。为什么Xcode在两张表之间交替是超出我的,但消除它解决了这个问题。 – GtotheB