iPhone Settings.bundle的本地化
出于某种原因,我无法让Settings.bundle识别我的其他语言。 我一定会错过一些明显的东西,但我无法弄清楚。 这是我得到的:
XCode中的项目结构:
XCode Screen Shot http://img687.imageshack.us/img687/1881/screenshot20100624at333.png
Root.plist文件:
Root.plist文件http://img227.imageshack.us/img227/571/screenshot20100624at334.png
法语Root.strings文件
法语Root.strings文件http://img121.imageshack.us/img121/571/screenshot20100624at334.png
从我读过的所有内容来看,我认为项目结构是正确的。 Root.plist中的StringsTable匹配单个.strings文件的名称,而Root.plist中的每个项目的Key在.strings文件中也有匹配。
当我更改默认的iPhone语言时,为什么在我的设置中看不到法文文本?
提前致谢!
我会继续回答自己的问题,因为我通过testing和失败来解决问题。 希望这将有助于未来的其他人。
首先,我认为我的Root.plist
文件可能已经损坏。 我不完全确定为什么,但我完全删除了Settings.bundle
,并重新创build它。
其次,也许是最重要的,主要问题是root.strings
文件中的“ key
”与Root.plist
的“ key
”字段不匹配,实际上与“ Title
”字段匹配。
一旦我对Root.strings
文件进行了这些更改,它就开始工作了。
对我来说,问题就是分手了!
在localizable.strings中,如果你省略“;”会得到一个运行时错误,但是在Root.strings中,你不会得到任何警告,你可以很好地运行它,但它不会工作!
所以仔细检查一下,以确保你打断每个关键:值分号分号!
所有你需要做的是保持(或者添加,如果不存在)在你的设置之后在Root.plist中的“Strings Filename”。
然后,添加价值“根”(或,您的文件的名称和翻译),使所创build的lang.lproj翻译function。
在Xcode 5中,仍然没有明显的方式来定位Settings.bundle。
问题
Xcode不允许本地化仅显示的文件,因为它是直接显示在Xcode中的文件夹内的文件(因此树中的蓝色文件夹图标)。
解决scheme:
- 右键单击Root.strings文件并select“在Finder中显示”
- 项目清单
- 将Root.strings文件移动一个文件夹,以使en.lproj文件夹为空,Cmd-Drag Root.strings文件位于Root.plist旁边。
- 删除现在为空的en.lproj
- 回到Xcode,注意树会反映你现在做出的改变
- cmd-将外部树中的文件拖到外部设置包,以便它出现在源代码旁边。
- 不要复制文件
- 会出现一个对话框,询问您如何处理文件。
- 不要selectcheckbox复制文件(你需要这是一个参考)
- 不要select包含string文件的目标(settings.bundle已经分配给正确的目标)
- 在文件检查器中,您现在可以select本地化文件并将语言添加到本地化中。 这些文件将被正确放置在settings.bundle中,树也会自动反映这些变化。
经过一番反复尝试激活本地化,以下步骤为我工作:
- closuresxcode
- 将设置包拖放到桌面(或任何地方)
- 打开包内容
- 将Root.strings拖放到en.lproj文件夹中
-
复制en.lproj文件夹并重命名为任何您想要的语言(使用2个字母的代码,即fr.lproj)
-
用新的( 不打开xcode )replace原始设置包。
- 现在打开xcode ,新的文件和文件夹应该在那里
现在删除旧的应用程序并运行xcode,在模拟器和设备上正常工作。
注意 :closuresxcode,更新xcode以外的重复设置包并更换仅更新将有所帮助。
在我的情况下,似乎在"Strings Filename"
Root.plist
的属性列表视图中将"Strings Filename"
设置为"Root"
,但在源代码视图中查看文件时,实际上是指向"Root"
"StringsTable"
"Root"
。 解决方法是添加"Strings Filename"
指向"Root"
另一个条目。 (我也尝试删除以前的条目,但它停止工作,所以你需要两个。)