Kotlin: Как сделать приложение мультиязычным

Чтобы добавить мультиязычность в Android‑приложение (на Kotlin + Jetpack Compose), следуйте пошаговому руководству.

Создайте файлы ресурсов для разных языков


В папке "res" вашего проекта создайте отдельные директории для каждого языка по шаблону values-<код_языка>.

Примеры:
  • "values" — язык по умолчанию (обычно английский);
  • "values-ru" — русский;
  • "values-es" — испанский;
  • "values-de" — немецкий.

Добавьте строки в strings.xml


В каждой папке создайте файл "strings.xml" и заполните его переводами. Ключи (name) должны совпадать во всех файлах!

Пример для "values/strings.xml" (английский):
<resources>
    <string name="app_name">My App</string>
    <string name="welcome">Welcome!</string>
    <string name="button_text">Click me</string>
</resources>

Пример для "values-ru/strings.xml" (русский):
<resources>
    <string name="app_name">Моё приложение</string>
    <string name="welcome">Добро пожаловать!</string>
    <string name="button_text">Нажми меня</string>
</resources>

Используйте строки в Compose


В Composable‑функциях обращайтесь к строкам через stringResource():
@Composable
fun MyScreen() {
    Column {
        Text(text = stringResource(R.string.welcome))
        Button(onClick = { /* ... */ }) {
            Text(text = stringResource(R.string.button_text))
        }
    }
}

Поддерживайте строки с переменными


Если в тексте есть динамические части (имя пользователя, число), используйте плейсхолдеры:

В "strings.xml":
<string name="greeting">Hello, %1$s!</string>
<string name="items_count">You have %1$d items</string>

В Compose:
Text(text = stringResource(R.string.greeting, "Alice"))
Text(text = stringResource(R.string.items_count, 5))


Тестируйте локализацию



Вариант 1: Через эмулятор
  1. Откройте настройки эмулятора → System → Languages & input → Languages.
  2. Добавьте нужный язык и переместите его наверх.
  3. Запустите приложение — текст должен измениться.

Вариант 2: Через предпросмотр в Android Studio
Добавьте аннотацию @Preview с указанием локали:
@Preview(locale = "ru")
@Composable
fun PreviewMyScreen() {
    MyScreen()
}

Дополнительные настройки (опционально)



1. Поддержка RTL‑языков (справа налево)
Для арабского, иврита и др. создайте папки:
  • "values-ar-rSA" (арабский, Саудовская Аравия);
  • "values-iw-rIL" (иврит, Израиль).

2. Локализация изображений
Поместите изображения для разных языков в папки:
  • "drawable-ru"
  • "drawable-es"

Распространённые ошибки и их решение



«Не найдено resource»
  • Проверьте, что файл "strings.xml" есть во всех языковых папках.
  • Убедитесь, что ключи (name) совпадают.

«Текст не обновляется»
  • Перезапустите приложение после смены языка на устройстве.
  • Очистите кэш: Build → Clean Project.

«Плейсхолдеры не подставляются»
  • Проверьте порядок аргументов в stringResource().
  • Убедитесь, что типы совпадают (%1$s — строка, %1$d — число).

Итог


Вы настроили мультиязычность за 7 шагов:
  1. Создали папки values-<язык>.
  2. Заполнили "strings.xml" переводами.
  3. Использовали stringResource() в Compose.
  4. Добавили поддержку переменных.
  5. Протестировали через эмулятор или предпросмотр.
  6. Учитывали RTL и изображения.
  7. Исправили типичные ошибки.

Теперь приложение автоматически отображает текст на языке устройства пользователя.

Автор:  31.01.2026 08:23:21 pm