将某些XIB / Storyboardstring标记为不可本地化

我正在使用XIB / Storyboard文件的Base Internationalization和使用XLIFF文件的“导出本地化”方法进行翻译。

我有一些标签,button等应该被翻译的文本,但我也有标签,我们使用一些占位符文本(如全名),所以你可以看到什么样的视图,当填充数据,但是这些标签总是以编程的方式来自sockets。

有没有办法将这个标签的.text属性在XIB中设置为非本地化,这样它不会在XLIFF(或者生成的.strings)文件中结束。

我知道,我可以删除文本 – 我也想过有一个前缀(如@“!DNL!”)意思是翻译者不应该本地化,但我希望只有一个标准的方式来做到这一点。

现在可以使用我最近写的BartyCrouch命令行工具来解决这个问题 (请参阅我在该主题的答案中的安装说明)。

BartyCrouch为您运行ibtool ,并在其生成的.strings文件之上执行额外的处理。 如果您包含#bc-ignore!它将排除翻译的意见#bc-ignore! 融入您的基本国际化Storyboard / XIB文件中的价值。

有关详细信息,请在GitHub的README中查看相关部分 。

事实certificate,Xcode的本地化导出忽略了故事板中的属性string。

因此,只需在“ 属性”检查器中将要排除的每个标签/button的文本types设置为“已分配”即可。

在这里输入图像说明

这会给你一个属性string,而不是一个普通的string,据我所知,除了必须保存在内存中的(空)属性列表之外,没有任何意义。

我在“标识”选项卡中将“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