Как использовать Android xliff:g

Может кто-нибудь, пожалуйста, объясните xliff:g для строк / локализации.

Я это понимаю xliff:g не должен ничего переводить внутри <> вещи, но я запутался, как именно я использовал бы это в коде.

Примером, который я имею в моем случае, является практика испанских переводов, которые у меня есть:

<string name="order_quantity">Cantidad: <xliff:g id="quantity" example="2">%d/xliff:g</string>

Я сейчас пытаюсь получить локализованные строки с xliff:g работать. Что такое id вот и для чего это нужно? И как это называется?

И что такое %d и что это делает? Какой смысл example? Кроме того, как бы я назвал это в коде, если вообще?

Почему кто-то не может просто сделать следующий код, чтобы вставить следующий XML:

<string name="quant">Quantity: </string>

в Java вроде так:

getString(R.string.quant) + quantity

таким образом, он объединяет переменную количества в getString?

1 ответ

Решение

Незначительная опечатка в вашем примере, должен быть закрывающий тег:

<string name="order_quantity">Cantidad: <xliff:g id="quantity" example="2">%d</xliff:g></string>

id Атрибут просто используется для определения того, что представляет параметр замещения (в вашем случае он представляет количество). Это, как вы сказали, примечание, и фактически не используется программно.

Тем не менее, в Android Studio, если у вас включена функция Code Folding для строк, она заменит идентификатор, когда отобразит свернутую строку. Вы бы увидели что-то вроде этого:

// This...
mTextView.setText(getString(R.string.order_quantity, 2));

// Will show as this when folded:
mTextView.setText("Cantidad: {quantity}");

Что касается вашего второго вопроса, почему бы просто не использовать конкатенацию строк? В других языках подстановка может не идти в конце строки. Вы могли бы иметь что-то вроде:

values/strings.xml
    <string name="order_quantity">%d items</string>

values-es/strings.xml
    <string name="order_quantity">Cantidad: %d</string>

Таким образом, вы можете видеть, что в этом случае простое сложение строк не даст вам правильного результата.

%d используется для представления части памяти в виде целого числа. Чаще всего он используется для вывода некоторого числа на стандартный вывод, как показано ниже:

#include <stdio.h>
int main()
{
    int n = 42;
    printf("The answer to life, universe and everything is %d", n);
    return 0;
}

В отличие от Java, где вы просто объединяете числа, строки и т. Д., C использует этот%% для указания того, что пишется. %d указывает, что, например, в printf() после запятой будет аргумент (в нашем случае это n), который должен быть представлен как int.

Обратитесь к Списку всех спецификаторов формата в программировании на C для полного списка спецификаторов формата

Также обратитесь к официальной документации для разработчиков Android

Другие вопросы по тегам