Параметры в строках.xml возможно? [дубликат]
этот вопрос уже есть ответ здесь:
в моем Android-приложении я собираюсь реализовать свои строки с интернационализацией. Поэтому в настоящее время у меня возникла проблема с грамматикой и тем, как строятся предложения на разных языках.
например:
"5 минут назад" - английский язык
"vor 5 Minuten" - немецкий
могу ли я сделать что-то вроде следующего в строках.xml?
<string name="timeFormat">{0} minutes ago</string>
а потом какая-то магия, как
getString(R.id.timeFormat, dynamicTimeValue)
это поведение решило бы и другую проблему с разными порядками слов.
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%.
Comments