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