Улучшение строковых ресурсов 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>
В приведенном выше примере строка усекается после первого <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, но это так, как есть.