将某些XIB / Storyboard字符串标记为不可本地化

时间:2014-12-10 17:32:14

标签: ios xcode localization storyboard xib

我正在使用Base Internationalization for XIB / Storyboard文件和“Export for Localization”方法,使用XLIFF文件进行翻译。

我有一些标签,按钮等具有应翻译的文本,但我也有标签,我们使用一些占位符文本(如全名),这样你就可以看到填充时的视图有了数据,但这些标签总是以编程方式来自插座。

是否有某种方法可以将此标签的.text属性标记为在XIB中设置为不可本地化,以便它不会在XLIFF(或生成的.strings)文件中结束。

我知道我可以删除文本 - 我还想过有一个前缀(比如@“!DNL!”)意味着翻译不应该本地化,但我希望只有一种标准方式这样做。

3 个答案:

答案 0 :(得分:5)

我在“身份”标签中的“评论本地化程序”字段中添加了“DNL”注释。然后,我运行此命令以自动从XLIFF中删除所有这些元素:

xmlstarlet ed -d "//*[contains(text(), 'Note = \"DNL\"')]/.." en.xliff > out.xliff

基本上,它使用xmlstarlet(可以通过自制软件下载)来查找包含文本Note = "DNL"的所有元素,然后从XLIFF中删除该元素的父元素。

结合使用xcodebuild -exportLocalizations,您可以制作一个非常简单的脚本来生成XLIFF:

xcodebuild -exportLocalizations -localizationPath build -project ProjectName.xcodeproj
xmlstarlet ed -d "//*[contains(text(), 'Note = \"DNL\"')]/.." build/en.xliff > build/out.xliff 

答案 1 :(得分:4)

事实证明,Xcode的本地化导出忽略了故事板中的属性字符串。

因此,只需在属性检查器中为每个要排除的标签/按钮设置文本类型为Attributed

enter image description here

这将为您提供一个属性字符串而不是一个纯字符串,据我所知,除了现在必须保存在内存中的(空)属性列表之外,它没有任何影响。

答案 2 :(得分:3)

现在可以使用我最近编写的BartyCrouch命令行实用程序来解决this problem(请参阅该线程上my answer中的安装说明)。

BartyCrouch为您运行ibtool并在其生成的.strings文件之上进行其他处理。如果您在基础国际化Storyboard / XIB文件中包含#bc-ignore!到您的值或评论中,它将从翻译中排除视图。

请查看related section within the README on GitHub了解详细信息。