如何在Xcode 5中修改故事板后同步本地化的故事板的字符串

时间:2014-01-02 23:22:38

标签: ios7 localization interface-builder xcode5 uistoryboard

我刚刚开始在 XCode 5 中查看IOS Apps的本地化,并且我尝试添加意大利语本地化Adding Italian Localization

Xcode 5自动生成带有单个条目的 Main.strings 文件,这是我放在 Main.storyboard 文件中的唯一标签:

/* Class = "IBUILabel"; text = "Label"; ObjectID = "PeT-4z-NSf"; */
"PeT-4z-NSf.text" = "Etichetta";

XCode 5 generated file

如果我稍后修改了 Main.storyboard 文件,在视图中添加了一个新按钮,那么如果可能的话,如何判断 Xcode 5 添加缺少的本地化字符串到 Main.strings 文件?我应该通过查看 Interface Builder 中的对象ID 字段手动添加新条目(它可以工作,但我不知道这是否是它的意思更新故事板的本地化)?我可以在 Main.storyboard 文件上运行类似 genstrings 的内容来提取所有标签的文本,并将新的文本添加到本地化的 Main.strings 文件?

8 个答案:

答案 0 :(得分:19)

结帐 BartyCrouch ,它完美地解决了您的问题。此外,它还是开源积极维护,并且可以在您的项目中轻松安装和集成

通过Homebrew安装 BartyCrouch:

brew install bartycrouch

或者,通过Mint安装:

mint install Flinesoft/BartyCrouch

逐步更新您的Storyboards / XIBs字符串文件:

$ bartycrouch update

这将完全符合您的要求。

为了保持您的Storyboards / XIBs Strings文件随时更新我强烈建议您添加构建脚本(有关如何添加构建脚本的说明{{3} }):

if which bartycrouch > /dev/null; then
    bartycrouch update -x
    bartycrouch lint -x
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

除了逐步更新您的Storyboards / XIBs字符串文件外,这还将确保您的Localizable.strings文件保持更新,并使用NSLocalizedString代码中新添加的密钥并显示警告重复键或空值。

请务必在here上查看BartyCrouch以获取更多信息。

答案 1 :(得分:16)

Xcode没有自动更新的文件(至少5.x版本没有)是应用程序的Localizable Strings。您可以按以下方式从Main.storyboard构建一个新文件:

在项目导航器(最左侧窗格)中,单击Main.storyboard文件。在“实用工具”窗格(最右侧窗格)中,单击显示文件检查器图标。它是下图中最左边的蓝色图标:

File inspector is the leftmost icon

在将出现的右侧窗格中,其中一个部分将为本地化

Localization section

取消选中English (Localizable Strings)行,然后在弹出的窗口中选中从磁盘删除本地化资源文件,然后点击删除按钮(您执行此操作)不必检查删除,在这种情况下,Xcode将要求您在下次构建时覆盖它的权限。)

然后再次检查English (Localizable Strings)以从头开始构建它。

答案 2 :(得分:5)

使用Xcode 6,以下对我有用:

我改变了语言的本地化来自" Localizable Strings"到" Interface Builder ......"像在the SO question posted by h.orim建议的那样。但是设置没有改变,它仍然设置为" Localizable Strings"。现在的下一步是再次执行此操作,因此Xcode将找到它刚刚创建的Storyboard并显示一个提示,询问是否应该使用或替换它。现在点击"使用文件"而不是"替换"否则会再次发生同样的事情。

现在您应该拥有所需语言的本地化故事板。现在切换回" Localizable Strings"您将拥有一个文件,其中包含故事板中使用的所有当前字符串,并且您之前的翻译仍然存在。

答案 3 :(得分:4)

您可以使用名为UpdatStoryboardStrings的脚本!
在此处获取:https://github.com/AppliedIS/iOSL10n
使用说明:http://blog.appliedis.com/2013/05/22/localization-of-an-xcode-ios-app-part-2/

答案 4 :(得分:4)

另一种方法是通过在故事板上选择要翻译的字段来手动完成。转到“Identity Inspector”并复制对象ID(类似于HP8-op-SmX)。

identity inspector

之后,打开storyboard langage文件(Main.strings,大多数情况下)并超过Object ID。根据您的需要,您只需添加.text或.placeholder。

   "HP8-op-SmX.placeholder" = "My translated placeholder text";
   "HP9-op-VvD.text" = "My translated text";

保存,清洁&建立。这有点痛苦但如果你只需要翻译一些东西就可以节省很多时间。

答案 5 :(得分:2)

使用Xcode 6+,理想情况下开发人员不必手动管理字符串文件。使用XLIFF导出自动收集要发送给翻译人员的开发语言字符串,然后使用XLIFF导入更新带翻译的字符串文件。

https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html#//apple_ref/doc/uid/10000171i-CH5-SW9

另一种选择是直接使用ibtool --export-strings-file

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ibtool.1.html

答案 6 :(得分:0)

有两种选择:

选项1

Xcode可以通过将文件转换为[Interface Builder Cocoa Touch Storyboard]文件类型或[Localizable Strings]文件类型来“重新加载”文件。

从项目浏览器中选择基本情节提要文件 在文件检查器中找到“本地化”部分 如果文件当前是[Localizable Strings],请将其更改为[Interface Builder Cocoa Touch Storyboard],反之亦然。 Xcode应该将您的情节提要板转换为当前版本,同时保留您以前的本地化工作。如果需要,您可以在此处将文件更改回原始文件类型。

选项2

使用ibtool提取情节提要中的字符串。

打开终端应用程序 找到您的Base.lproj目录 使用此行提取字符串:

ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings ibtool将字符串提取到file_name.strings之后,您可以将其复制并粘贴到原始.strings文件中

答案 7 :(得分:0)

经过Xcode 11测试后,您只需取消选择语言即可。 enter image description here

请勿删除磁盘上的文件。 enter image description here

然后选择使用现有文件。 enter image description here

将保留旧的翻译并添加新的密钥。