Как заставить Android переводить логические значения?

В Android Studio я пытаюсь локализовать на испанский язык, используя xliff, строку, которая получает <string name = "true_false_test" > True / False? <xliff: g example = "true" id = "true_false" > % b </ xliff: g> </ string> .

На английском языке мой строковый ресурс выглядит так:

<string name="true_false_test">Verdadero/Falso? <xliff:g id="true_false" example="true">%b</xliff:g></string>

На испанском языке вот так:

<string name="TRUE">Ja</string>
<string name="FALSE">Nein</string>

Когда приложение работает на английском языке, это дает одно из следующих:

  • <string name = "do_mary_have_a_little_lamb" > Есть ли у Марии маленький ягненок? <xliff: g name = "trueFalse" example = "true" > % s </ xliff: g> / / ** * функция для преобразования логических значений в локализованные строки true / false * @param b boolean для перевода * @return Строка, содержащая локализованное истинное / ложное сообщение * / private String translateBoolean ( boolean b ) { String trueFalse = Boolean . toString ( b ). toUpperCase (); // true / false - зарезервированное ключевое слово, поэтому конвертируйте в TRUE / FALSE String packageName = getPackageName (); int resId = getResources (). getIdentifier ( trueFalse , "string" , packageName ); // это чтобы убедиться, что мы получили действительный resId else getString () заставит закрыть if ( resId > 0 ) { return getString ( resId ); } else { return trueFalse ; // предоставлять резервную ошибку «true / false», если перевод недоступен } } ? правда
  • True / False? ложный

Но на испанском языке фактическое логическое значение, похоже, не переводится:

  • Правда / Неверно? правда
  • Правда / Неверно? фальшивый

Строка вывода = GetString ( R . Строка . Does_mary_have_a_little_lamb , translateBoolean ( hasLittleLamb )) + " п" ;

android,boolean,android-resources,translate,xliff,

2

Ответов: 3


0

Я не нашел «простого» решения, но мог бы обойти эту задачу следующим образом. Протестировано в Android Studio и 6.0.1 Android.

Во-первых, в res / strings.xml: в теге 'resources' укажите локализованные значения true / false, например:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string name="whip">whip?<xliff:g id="whip">%B</xliff:g></string>
</resources>

private String createOrderSummary(int price) {
    String mess = "Name: "+ getName() +"
";
    mess += getString(R.string.add_whipped_cream, whip);///whip IS A BOOL VAL.
    return  mess;
}

Определите свою строку с тегом xliff, используя % s (NOT% b!), Например:

true

** Ниже приведен пример класса mainActivity.java. Ваша заявка может отличаться. Имейте в виду пространство имен. **

В вашем Java-коде создайте функцию для преобразования логических значений в локализованное строковое представление:

false

Затем используйте его в своих строковых функциях следующим образом:

<string name="boolean_true">true</string>
<string name="boolean_false">false</string>

Вы можете легко расширить приведенный выше пример, чтобы учесть переводы да / нет, вверх / вниз и т. Д. Поскольку этот метод довольно дорог, вы можете подумать о кешировании результатов, если вы его сильно используете.


0

im в классе android. Я думаю, что форматом печати для булевых является «% B» его с капиталом «B», а не строчным «b». Смотрите u на слабину ..

<string name="boolean_true">?</string>
<string name="boolean_false">?</string>

0

Я уже сталкивался с той же проблемой. Затем я обошел и понял это. Хотя этот вопрос был опубликован 2 года назад, я думаю, что мое решение может быть полезным.

Мы можем создавать строки для trueи falseдля разных языков в файлах ресурсов:

Для английского:

boolean

Для китайцев:

boolean isActive = false;
String  strIsActive = isActive
                      ? getString(R.string.boolean_true)
                      : getString(R.string.boolean_false);

Затем мы можем перевести booleanзначения на любые языки, которые мы хотим:

андроид, логический, андроид-ресурсы, переводить, XLIFF,
Похожие вопросы