使用XLIFF改进Android字符串资源

时间:2012-07-04 15:18:16

标签: android adt xliff

我看过一些使用XLIFF标记的Google应用和代码示例来包装变量。我认为这样做有一些很大的好处,特别是对于替换%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>

Graphical Layout preview

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

  

使用蓝牙分享您的1337分数!

目前在我的字符串资源中使用XLIFF标签是否有任何优点?

3 个答案:

答案 0 :(得分:14)

我们刚刚在Android Studio中添加了对此版本0.3的支持: https://android-review.googlesource.com/#/c/67724/

答案 1 :(得分:6)

为了清楚起见,在

中完整记录了在Android字符串资源中使用XLIFF标记

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

即使在Eclipse构建中,这样的字符串也能正常工作(支持在构建应用程序的aapt工具中)。

但是,如问题所示,ADT中包含的图形布局工具不会对xliff标记进行任何限制,只是在第一个这样标记的子字符串之后截断字符串。

Android Studio中的图形工具可以很好地处理这些字符串,了解并使用xliff标记。

我实际上发现完整的<xliff:g>在我的源代码中相当冗长,因此我调整了namepsace声明以允许我只使用<x:g>

<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>

答案 2 :(得分:1)

现在从源头构建AOSP已经弄脏了,CommonsWare是正确的:构建过程完全不同,实际上很多AOSP应用程序都包含XLIFF标签。它没有与ADT集成,但它确实如此。