Как использовать 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