将某些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