Улучшение строковых ресурсов Android с помощью XLIFF

Я видел некоторые приложения Google и образцы кода, используя теги 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>

Graphical Layout preview

В приведенном выше примере строка усекается после первого тега <xliff>. Можно также ожидать, что используется атрибут example, в результате чего будет показан графический просмотр:

Поделитесь своим счетом 1337 с помощью Bluetooth!

Есть ли какие-либо преимущества для использования тегов XLIFF в моих ресурсах строк?

Ответы

Ответ 2

Чтобы быть понятным, использование тегов XLIFF в строковых ресурсах Android полностью задокументировано на

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>

Ответ 3

Теперь, когда мои руки были грязны при создании AOSP из исходного кода, CommonsWare верна: этот процесс сборки полностью отличается, и многие приложения AOSP содержат теги XLIFF. Это слишком плохо, что это не интегрируется с ADT, но это так, как есть.