Как быстро узнать и поменять user locale в Android (для пользователя и разработчика)

В первых 200 символах: чтобы узнать locale — откройте Настройки → Система → Языки и ввод (первый в списке = приоритетный); чтобы изменить — добавьте язык и переместите его вверх или в приложении используйте AppCompatDelegate для per‑app locale.

Locale определяет язык интерфейса и форматы дат, чисел и валют. Ниже — краткие, практичные инструкции для пользователей и разработчиков: как посмотреть текущий locale, как поменять системно и в приложении, примеры кода и типичные проблемы с решениями.

Что такое Locale и почему это важно

Locale — объект с языком (например, "ru") и страной/региональным тегом (например, "RU"). Он влияет на:

  • выбор строк из res/values-XX;
  • форматирование дат/чисел/currency;
  • порядок слов и падежи при локализации.

Начиная с Android 7+ пользователь может иметь несколько локалей; Android 13+ поддерживает per‑app locale (внешне через настройки или программно).

Locale влияет не только на переводы — он меняет парсинг/формат вывода дат, чисел и валют, поэтому корректный выбор критичен для e‑commerce и финансовых приложений.

Как узнать текущий Locale

Для пользователя

  • Настройки → Система → Языки и ввод → Языки. Первый в списке — приоритетный системный locale.
  • Для конкретного приложения: Настройки → Приложения → [ваше приложение] → Языки (если опция есть) — там увидите язык формата ru‑RU, en‑US и т. п.

Для разработчика (Kotlin)

  • Общая текущая локаль:
val locale = Locale.getDefault()
val language = locale.language   // "ru"
val country = locale.country     // "RU"
  • App‑специфический (AndroidX, Android 13+):
val locales = AppCompatDelegate.getApplicationLocales()

Совет: всегда учитывайте fallback — если локаль не поддерживается, Android выберет следующий в списке или системный.

Как изменить Locale

Системно (пользователь)

  1. Настройки → Система → Языки и ввод → + Добавить язык.
  2. Выберите язык и перетащите его в начало списка — это станет новым системным locale.
  3. Для форматов (даты/валюты) проверьте раздел Регион/Форматы (на некоторых устройствах в дополнительных настройках).

Если добавили язык, но приложение не сменило интерфейс — в настройках приложения включите per‑app language (если доступно) или перезапустите приложение.

Переключение только в приложении (разработчик)

  • Устаревший способ (менее рекомендуемый):
val newLocale = Locale("en", "US")
Locale.setDefault(newLocale)
val config = resources.configuration
config.setLocale(newLocale)
resources.updateConfiguration(config, resources.displayMetrics)
recreate()
  • Рекомендуемый (AndroidX, per‑app):
AppCompatDelegate.setApplicationLocales(
    LocaleListCompat.forLanguageTags("ru-RU,en-US")
)

Этот метод сохраняет выбор приложения и корректно работает с компонентами UI.

Тестирование

  • На эмуляторе можно задать Custom Locale в AVD Manager (Detail → Custom Locale).
  • Для быстрых проверок используйте ADB (только для тестов):
adb shell "setprop persist.sys.locale fr-FR; stop; start"

(Не использовать в production; перезапуск системы влияет на устройство.)

Частые ошибки

  • Приложение не меняет язык после системной смены: проверьте targetSdkVersion и используемые библиотеки локализации; иногда требуется recreate().
  • Регион форматов не соответствует ожиданиям: Locale управляет форматами, но приложение может вручную задавать валюту/символы — проверьте логику форматирования (NumberFormat.getCurrencyInstance(locale)).
  • Не использовать Locale.setDefault() в фоновом потоке или без recreate() — это может вызвать рассинхронизацию UI и крахи.

Не меняйте locale «в фоне» для уже отображённых Activity без корректного перезапуска — это часто приводит к непредсказуемому поведению UI.

FAQ

  • Как задать несколько языков для приложения?

    • Подготовьте папки res/values-ru/, res/values-en/ и т.д. Android подберёт нужные строки по locale.
  • Работает ли AppCompatDelegate на старых API?

    • AppCompatDelegate предоставляет совместимость через AndroidX; поддержка per‑app locale доступна начиная с соответствующих версий библиотеки и платформы (проверяйте документацию библиотеки).
  • Можно ли заставить устройство полностью поменять регион (не только язык)?

    • Системный регион обычно в дополнительных настройках «Регион/Форматы». Полная смена региона может влиять на магазины и сервисы и доступна не на всех прошивках.

Если вы разработчик — интегрируйте выбор языка в onboarding и тестируйте поведение с разными локалями: это снижает количество багов и повышает конверсию у международной аудитории.