Как быстро узнать и поменять 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
Системно (пользователь)
- Настройки → Система → Языки и ввод → + Добавить язык.
- Выберите язык и перетащите его в начало списка — это станет новым системным locale.
- Для форматов (даты/валюты) проверьте раздел Регион/Форматы (на некоторых устройствах в дополнительных настройках).
Если добавили язык, но приложение не сменило интерфейс — в настройках приложения включите 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 и тестируйте поведение с разными локалями: это снижает количество багов и повышает конверсию у международной аудитории.