Поддержка мультиязычности Android: проблема форматирования строк из-за разного количества заполнителей - PullRequest
0 голосов
/ 30 августа 2018

Я делаю французское приложение для Android и пытаюсь поддерживать английский.

Я использую «заполнители» для форматирования своих строк, чтобы я мог адаптировать их для пользователей мужского и женского пола. Например, эта строка в моем strings.xml файле:

<string name="encouraging_comment">
    Les %1$s sont compliqué%2$ss...
</string>

станет "Les hommes sont compqués" (" Men сложно") или "Les femmes sont compqué e s "(" Женщины сложные ").

И в этом моя проблема. Перевод строки, как следует ...

<string name="encouraging_comment">
    %1$s are complicated...
</string>

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

Как мне решить эту проблему? Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Один из способов сделать это - создать строку locale в вашем strings.xml

для Английский Strings.xml

<string name="locale">En</string>

для French Strings.xml

<string name="locale">Fr</string>  

Затем при настройке строки

 switch (getString(R.string.locale)) {
            case "Fr":
                //set your string for French
                break;
            case "En":
                //set your string for English 
                break;
        }
0 голосов
/ 30 августа 2018

Просто опустите второй заполнитель из английской строки шаблона и используйте пустую строку для второго аргумента (или любой другой строки, это не имеет значения, значение будет проигнорировано) при отображении строки:

XML:

<string name="encouraging_comment">
    %1$s are complicated...
</string>

Java:

getString(R.string.encouraging_comment, "women", "");
getString(R.string.encouraging_comment, "men", "");

Это работает, потому что это не ошибка, если есть больше аргументов, чем заполнителей, только если меньше аргументов, чем заполнителей.

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

(French,  Female) -> ("femmes", "e")
(French,  Male)   -> ("hommes", "" )
(English, Female) -> ("women",  "" )
(English, Male)   -> ("men",    "" )
0 голосов
/ 30 августа 2018

AFAIK, вы можете сделать это, добавив проверку в свой код, как

String result;
if ( Locale.getDefault().getLanguage().equals("en")){  // examples "en", "fr", "sp"
      result= getString(R.string.encouraging_comment, myString);
    }
    else{
      result= getString(R.string.encouraging_comment, myString, myStringTwo);
    }
textView.setText(result);

Надеюсь, это поможет вам:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...