Ответ 1
Мы только что добавили поддержку этого в Android Studio, для версии 0.3: https://android-review.googlesource.com/#/c/67724/
Я видел некоторые приложения 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 в моих ресурсах строк?
Мы только что добавили поддержку этого в 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, но это так, как есть.