Возможны ли параметры в strings.xml?
В моем приложении для Android я собираюсь реализовать мои строки с интернационализацией. У меня проблема с грамматикой и способом построения предложений на разных языках.
Например:
"5 минут назад" - английский
"vor 5 Minuten" - немецкий
Могу ли я сделать что-то вроде следующего в strings.xml?
<string name="timeFormat">{0} minutes ago</string>
А потом какая-то магия, как
getString(R.id.timeFormat, dynamicTimeValue)
Такое поведение решит и другую проблему с разными порядками слов.
Ответы
Ответ 1
Да, просто отформатируйте свои строки стандартным способом String.format()
.
См. метод Context.getString(int, Object...)
и Android или Java Formatter
.
В вашем случае определение строки будет:
<string name="timeFormat">%1$d minutes ago</string>
Ответ 2
Если вам нужны две переменные в XML, вы можете использовать:
%1$d text... %2$d
или %1$s text... %2$s
для строковых переменных.
Пример:
strings.xml
<string name="notyet">Website %1$s isn\'t yet available, I\'m working on it, please wait %2$s more days</string>
activity.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();
Ответ 3
Если вам нужно форматировать строки с помощью String.format(String, Object...), вы можете сделать это, поместив аргументы формата в ресурс строки. Например, со следующим ресурсом:
<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
Ответ 4
Обратите внимание, что для этого конкретного приложения есть стандартная библиотечная функция, android.text.format.DateUtils.getRelativeTimeSpanString()
.
Ответ 5
Существует много способов использовать его, и я рекомендую вам ознакомиться с этой документацией о String Format.
http://developer.android.com/intl/pt-br/reference/java/util/Formatter.html
Но если вам нужна только одна переменная, вам нужно будет использовать% [type], где [type] может быть любым флагом (см. типы флагов внутри сайта выше). (т.е. "Мое имя % s" или для установки моего имени UPPERCASE, используйте это "Мое имя % 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%.