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:

  1. 右键单击Root.strings文件并select“在Finder中显示”
  2. 项目清单
  3. 将Root.strings文件移动一个文件夹,以使en.lproj文件夹为空,Cmd-Drag Root.strings文件位于Root.plist旁边。
  4. 删除现在为空的en.lproj
  5. 回到Xcode,注意树会反映你现在做出的改变
  6. cmd-将外部树中的文件拖到外部设置包,以便它出现在源代码旁边。
    • 不要复制文件
  7. 会出现一个对话框,询问您如何处理文件。
    • 不要selectcheckbox复制文件(你需要这是一个参考)
    • 不要select包含string文件的目标(settings.bundle已经分配给正确的目标)
  8. 在文件检查器中,您现在可以select本地化文件并将语言添加到本地化中。 这些文件将被正确放置在settings.bundle中,树也会自动反映这些变化。

经过一番反复尝试激活本地化,以下步骤为我工作:

  1. closuresxcode
  2. 将设置包拖放到桌面(或任何地方)
  3. 打开包内容
  4. 将Root.strings拖放到en.lproj文件夹中
  5. 复制en.lproj文件夹并重命名为任何您想要的语言(使用2个字母的代码,即fr.lproj)

  6. 用新的( 不打开xcode )replace原始设置包。

  7. 现在打开xcode ,新的文件和文件夹应该在那里

现在删除旧的应用程序并运行xcode,在模拟器和设备上正常工作。

注意 :closuresxcode,更新xcode以外的重复设置包并更换仅更新将有所帮助。

在我的情况下,似乎在"Strings Filename" Root.plist属性列表视图中将"Strings Filename"设置为"Root" ,但在源代码视图中查看文件时,实际上是指向"Root" "StringsTable" "Root" 。 解决方法是添加"Strings Filename"指向"Root"另一个条目。 (我也尝试删除以前的条目,但它停止工作,所以你需要两个。)