Улучшение строковых ресурсов 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 в моих ресурсах строк?

3 ответов


мы только что добавили поддержку для этого в Android Studio, для версии 0.3: https://android-review.googlesource.com/#/c/67724/


чтобы быть ясным, использование тегов 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>

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