Параметры в строках.xml возможно? [дубликат]


этот вопрос уже есть ответ здесь:

в моем Android-приложении я собираюсь реализовать свои строки с интернационализацией. Поэтому в настоящее время у меня возникла проблема с грамматикой и тем, как строятся предложения на разных языках.

например:

"5 минут назад" - английский язык

"vor 5 Minuten" - немецкий

могу ли я сделать что-то вроде следующего в строках.xml?

<string name="timeFormat">{0} minutes ago</string>

а потом какая-то магия, как

getString(R.id.timeFormat, dynamicTimeValue)

это поведение решило бы и другую проблему с разными порядками слов.

5   227   2010-03-07 22:33:37

5 ответов:

да, просто отформатируйте свои строки в стандартном String.format() путь.

см. Метод Context.getString(int, Object...) и Android или JavaFormatter документация.

в вашем случае, определение строка будет выглядеть следующим образом:

<string name="timeFormat">%1$d minutes ago</string>

Если вам нужны две переменные в XML вы можете использовать:

%1$d text... %2$d или %1$s text... %2$s для строковых переменных.

пример:

строки.xml

<string name="notyet">Website %1$s isn\'t yet available, I\'m working on it, please wait %2$s more days</string>

активности.java

String site = "mywebsite";
String days = "11";

//Toast example
String notyet = getString(R.string.notyet, site, days);
Toast.makeText(getApplicationContext(), notyet, Toast.LENGTH_LONG).show();

PS: прочитайте комментарий Flaxie ниже

Если вам нужно Отформатировать строки с помощью строки.формат(строка, объект...), то вы можете сделать это, поместив свои аргументы формата в строковый ресурс. Например, со следующим ресурсом:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

в этом примере строка формата имеет два аргумента: %1$s-строка и %2$d-десятичное число. Вы можете отформатировать строку с аргументами из вашего приложения, как это:

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

Если вы хотите больше посмотреть: http://developer.android.com/intl/pt-br/guide/topics/resources/string-resource.html#FormattingAndStyling

обратите внимание, что для этого конкретного приложения есть стандартная библиотечная функция,android.text.format.DateUtils.getRelativeTimeSpanString().

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

http://developer.android.com/intl/pt-br/reference/java/util/Formatter.html

но, если вам нужна только одна переменная, вы должны использовать %[тип] здесь [тип] может быть любой флаг (см. типы флагов внутри сайта выше). (т. е. "меня зовут %s " или чтобы установить мое имя в верхнем регистре, используйте это "мое имя %S")

<string name="welcome_messages">Hello, %1$S! You have %2$d new message(s) and your quote is %3$.2f%%.</string>

Hello, ANDROID! You have 1 new message(s) and your quote is 80,50%.