stringResource() в нужном порядке.Настройка строк в strings.xml
В файле "res/values/strings.xml" (и его локализованных аналогах) определите строку с несколькими плейсхолдерами:
ВыделитьXML
<!-- Пример: Приветствие + количество уведомлений -->
<string name="welcome_with_count">
Привет, %1$s! У вас %2$d уведомлений.
</string>
<!-- Пример: Дата + сумма -->
<string name="transaction_summary">
Операция от %1$s на сумму %2$.2f рублей.
</string>Синтаксис плейсхолдеров:
%1$s— первая переменная, типString(s= string);%2$d— вторая переменная, типInt/Long(d= decimal);%2$.2f— вторая переменная, типFloat/Doubleс 2 знаками после запятой (f= float).
Важно:
- Нумерация (
1$,2$) обязательна — иначе порядок аргументов может нарушиться. - Типы (
s,d,f) должны соответствовать передаваемым данным.
Использование в Compose
Передавайте аргументы в том же порядке, в каком они указаны в строке:
ВыделитьKotlin
@Composable
fun UserScreen() {
val username = "Анна"
val notificationsCount = 5
val amount = 1234.56
Column {
// Пример 1: Имя + число
Text(
text = stringResource(
R.string.welcome_with_count,
username,
notificationsCount
)
)
// Пример 2: Дата + сумма (с форматированием)
Text(
text = stringResource(
R.string.transaction_summary,
"15.01.2026",
amount
)
)
}
}Что получится на экране:
- «Привет, Анна! У вас 5 уведомлений.»
- «Операция от 15.01.2026 на сумму 1234.56 рублей.»
Примеры сложных случаев
Строка с тремя переменными
ВыделитьXML
<string name="trip_details">
Вы летите в %1$s (%2$s) с %3$d пассажирами.
</string>ВыделитьKotlin
stringResource(
R.string.trip_details,
"Париж",
"CDG",
2
)
// Результат: «Вы летите в Париж (CDG) с 2 пассажирами.»Переиспользование переменных
ВыделитьXML
<string name="repeat_example">
%1$s сказал: «Привет, %1$s!»
</string>ВыделитьKotlin
stringResource(R.string.repeat_example, "Максим")
// Результат: «Максим сказал: „Привет, Максим!“»Важные правила
Порядок аргументов
- В
stringResource()передавайте переменные в том же порядке, как в строке (%1$,%2$и т. д.). - Если порядок нарушен — текст будет некорректным.
Соответствие типов
%1$s→String;%2$d→Int,Long;%3$.2f→Float,Double(.2— 2 знака после запятой).
Локализация
- Добавьте строки с теми же ключами (
name) во все "strings.xml" для других языков. - Пример для "values-ru/strings.xml":
ВыделитьXML
<string name="welcome_with_count"> Привет, %1$s! У вас %2$d уведомлений. </string>
Экранирование символов
- Если в строке есть символ
%, напишите его дважды:%%. - Например:
<string name="percent">Скидка %1$d%%</string>→ «Скидка 20%».
Проверка
- Запустите приложение на устройстве с нужным языком.
- Убедитесь, что:
- Все переменные подставлены корректно;
- Нет ошибок формата (например,
%1$dвместо%1$s); - Текст не обрезан (проверьте RTL‑языки, если поддерживаются).
Итог
- Используйте плейсхолдеры
%N$t(N— номер,t— тип). - Передавайте аргументы в
stringResource()в правильном порядке. - Локализуйте строки во всех "strings.xml".