使用XLIFF改进Android字符串资源

15

我看到一些谷歌应用程序和代码示例使用XLIFF标签来包装变量。我发现这样做有很多好处,特别是可以替换那些不具有描述性的格式参数,比如 %1$s

不幸的是,XLIFF 在ADT中似乎集成效果不好。例如,考虑以下字符串资源:

<resources 
    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" 
    xmlns:tools="http://schemas.android.com/tools">

    <string name="share_with_application">
        Share your score of <xliff:g id="score" example="1337">%1$s</xliff:g>
        with <xliff:g id="application_name" example="Bluetooth">%2$s</xliff:g>!  
    </string>

</resources>

图形布局预览

在上面的示例中,字符串在第一个<xliff>标签之后被截断。人们还希望使用example属性,从而生成一个图形预览,显示:

与蓝牙分享您的1337分数!

目前在我的字符串资源中使用XLIFF标签有什么好处吗?


我看到一些谷歌应用和代码示例使用XLIFF标签来包装变量。如果你有一个使用XLIFF的Android项目示例,不包括AOSP应用,请指向它。AOSP应用有自己的构建过程,可能会集成XLIFF。使用XLIFF并没有被文档化为Android SDK支持的功能。 - CommonsWare
谢谢您的见解。看起来SDK目录中的strings.xml示例只有XLIFF命名空间声明,实际上并没有使用标签。您能否更深入地了解这些自定义构建过程?它们是Jenkins插件吗? - Paul Lammertsma
你能提供更多关于这些定制构建过程的细节吗?这些应用程序是作为完整固件构建(例如lunch)的一部分构建的,但我从未完成过完整的固件构建,更不用说剖析它所做的所有细节了。它们是 Jenkins 插件吗?我非常怀疑;至少,你不需要 Jenkins 来构建固件。 - CommonsWare
@CommonsWare刚刚在查看一些源代码时发现了这个标签。我在文档中找到了一个部分,建议使用它来标记某些字符串的部分为不可翻译的。那么现在可以安全地使用它吗? ADT仍无法识别它,但在实际设备上测试似乎没问题。 - Tony Chan
@Turbo:嗯,如果没有其他问题,<xliff:g> 应该是安全的。除此之外是否有用,我不敢说。 - CommonsWare
3个回答

14

这个计划也会在 Eclipse 中实现吗?另外,您能否确认 xliff 标签的目的是标记不可翻译的文本,还是有其他用途? - Tony Chan
3
根据 Android 文档,xliff:g 标签用于标记不可翻译的文本:https://developer.android.com/distribute/googleplay/publish/localizing.html#strings。 - ZoFreX
1
@ZoFreX提到的上述URL已经移动:https://developer.android.com/guide/topics/resources/localization.html#checklist - Paul Lammertsma

6

为了明确起见,在Android字符串资源中使用XLIFF标签已经完全记录在

https://developer.android.com/distribute/tools/localization-checklist.html#manage-strings

这些字符串即使在Eclipse构建中也可以正常工作(支持在构建应用程序的aapt工具中)。
然而,如问题所示,ADT中包含的图形布局工具不会对xliff标记进行任何允许,仅在第一个标记的子字符串后截断字符串。
Android Studio中的图形工具很好地处理这样的字符串,知道并利用了xliff标记。
实际上,我发现在我的源代码中完整的相当冗长,因此我调整了名称空间声明,以便我只使用。
<resources xmlns:x="urn:oasis:names:tc:xliff:document:1.2">

   <string name="greeting">Hello <x:g id="name">%1$s</x:g>!</string>

</resources>

1

现在我已经亲手尝试了从源代码构建AOSP,CommonsWare是正确的:该构建过程完全不同,确实许多AOSP应用程序包含XLIFF标签。很遗憾这不能与ADT集成,但事实就是如此。


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