如何在xcode4中本地化Settings.bundle?

11

我正在使用xcode4并为我的项目创建了一个Settings.bundle。我可以在xcode4中编辑Root.plist文件,但无法编辑Root.strings文件。它甚至没有显示在编辑器中。

这里是图片描述

如图所示,我无法展开en.lproj文件夹。

但是当我右键单击并在外部编辑器中打开时,它会给我:

这里是图片描述

双击Root.strings会给我:

这里是图片描述

我尝试了几次创建基于窗口的新应用程序项目并创建新的Settings.bundle。我总是无法将其本地化。有什么想法吗?

6个回答

21

在XCode 4.2中,你需要按照以下步骤操作(这只是Xcode 3.2.2和设置束本地化的修改版):

  1. 在Finder中找到你的Settings.bundle。
  2. 右键单击(或Ctrl + 单击),选择“显示包内容”。
  3. 创建一个名为所需语言的文件夹(例如,fr.lproj)。
  4. 将根目录下的strings文件从en.lproj文件夹复制并粘贴到fr.lproj文件夹中。

13

编辑:苹果公司修复了这个错误,他们的更改使我的解决方法失效了。它现在不再起作用,您无法向 "Settings.bundle" 添加文件。

请参考Javi的答案提供的一种似乎可以使用的方法。


希望你会喜欢这个丑陋的解决方案。

  1. 在侧边栏上右键单击设置包。
  2. 选择 New File
  3. 选择资源/字符串文件。
  4. 将其命名为 Root.strings,并确保它放置在 settings.bundle 内部。
  5. 在侧边栏中,该文件将显示两次。在 "root" 部分和 Settings.bundle 中。但是两者都指向相同的文件。
  6. 选择侧栏中的 Root.strings 文件。(我记得你必须将其转换为 UTF16)
  7. 添加本地化,Xcode 将询问您是否要替换该文件。是的,您需要这样做。
  8. 添加尽可能多的本地化。您应该能够在侧边栏的 "root" 部分编辑该文件。

我希望这对你有用,对我来说有效。

如果您还没有这样做,请报告错误 bugreport.apple.com


我现在将安装新版本,让我们看看这是否已修复。 编辑:未修复。


编辑:我不知道我是否正确理解了您的第二个问题。但是,当您向位于捆绑包之外的文件添加本地化时,它会向 "settings.bundle" 添加一个本地化文件夹。

enter image description here

Root.strings 中添加西班牙语本地化之后:

enter image description here

实际文件在foo.lproj文件夹中,只是在xcode侧边栏中不显示它们。如果您检查文件系统中的位置,您会发现它们在设置包内。 图片描述

昨天我使用了英语和德语文件,在模拟器中正常工作。我猜这只是一个错误的侧边栏布局。底层位置和文件处理似乎是正确的。


谢谢,这很好用 :) 新版本中已经修复了吗?我认为已经有一个关于此问题的错误报告了http://www.openradar.me/9127927 - DarkLeafyGreen
检查文件的物理位置是否真正位于设置包内。如果您看不到文件夹,我怀疑它是否能正常工作。 - Matthias Bauch
@Downvoter,这个方法有什么问题吗?我知道我的解决方案比dalind的小改动更复杂。但是你试过用他的方法添加十几种本地化吗?我怀疑你没有。 - Matthias Bauch
2
我不明白。当我点击Settings.bundle并选择New File时,Xcode不允许我将Strings文件放在Settings.bundle中。我应该如何在Xcode中将Root.strings文件放入Settings.bundle中呢? 这是一个可怕的错误!它让我发疯:( - Julian
与朱利安遇到的情况相同(Root.strings未添加到Settings.bundle)。 - Tamara
显示剩余7条评论

7

对我而言,将文件夹“en.lproj”的文件类型(在文件检查器中)从“默认/目录”更改为“目录”即可解决问题。神奇。


我看到了同样的问题。虽然Xcode4说文件类型是“目录 - 自动”(或类似的东西),但手动将其设置为“目录”最终使Root.strings文件出现了。 - DarkDust
1
但由于某些原因,更改并没有持久化。最终采用了fluchtpunkt的解决方案,看起来效果还不错。 - DarkDust

2

我刚刚放弃了尝试处理Root.strings的做法。相反,我只是将plist文件复制到每个*.lproj中,然后它就起作用了!

至于翻译成英语和我的母语,没有问题。

所以我有:

Settings.bundle
|- en.lproj
|  |- Root.plist
|  `- Root.strings -- nothing useful there
|
`- zz.proj
   `- Root.plist

好消息是Root.plist是utf8编码。

2

Xcode 4将"Root.strings"创建为二进制属性列表。因此,我需要将文件类型设置为“属性列表(二进制)”才能正确显示。


我尝试过这个方法——虽然它可以显示默认字符串(在进行dalinds更改以启用目录行为后),但编辑默认值实际上并没有改变设置屏幕上的字符串。 - lilbyrdie

0
如果您已经有一个“属性列表(二进制)”的Root.strings文件,并且希望将其转换为适当的基于文本的字符串文件,则可以使用终端应用程序中的plutil进行转换,例如转换为JSON格式:
> plutil -convert json /path/to/Settings.bundle/en.lproj/Root.strings

注意,您可以运行plutil -h获取使用帮助。

但是,您需要将JSON格式转换:

{"key1":"value1","key2":"value2"}

类似于字符串文件:

"key1" = "value1";
"key2" = "value2";

这在文本编辑器中进行几个搜索/替换操作就很容易实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接