Как использовать 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, если у вас включена функция сгибания кода для строк, она будет заменяться идентификатором, когда будет показана свернутая строка. Вы увидите что-то вроде этого:

// 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>

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

Ответ 2

% 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