Если языковой стандарт устройства установлен на украинский, приложение нормально загружает все языки (UA, RU, EN).
Если в качестве языкового стандарта устройства выбран русский, приложение загружает только RU и EN, но украинские ресурсы (values-uk) не загружаются.
Если языковой стандарт устройства установлен на английский, ни RU, ни UA. ресурсы загружаются — работает только английский язык.
Я тщательно протестировал это и включил журналы, которые показывают, что языковой стандарт установлен правильно во время выполнения, поэтому я не подозреваю, что проблема связана с самой логикой кода.
Вот соответствующий код для изменения языка приложения:
Код: Выделить всё
private fun changeAppLanguage(selectedLanguage: String) {
val languages = resources.getStringArray(R.array.languages)
when (selectedLanguage) {
languages[0] -> {
updateLanguageSettings("uk")
}
languages[1] -> {
updateLanguageSettings("ru")
}
languages[2] -> {
updateLanguageSettings("en")
}
else -> {
updateLanguageSettings("en")
}
}
}
@SuppressLint("AppBundleLocaleChanges")
@Suppress("DEPRECATION")
private fun updateLanguageSettings(language: String) {
saveLanguage(language)
val locale = Locale(language)
val config = resources.configuration
Locale.setDefault(locale)
config.setLocale(locale)
resources.updateConfiguration(config, resources.displayMetrics)
updateViews()
}
(https://i.sstatic.net/5StXJlHO.png)
- Проверено, что все локализованные ресурсы правильно включены в декомпилированный APK (ничего не пропущено).
- В build.gradle добавлено следующее, чтобы обеспечить доступность ресурсов. явно упакованы:
Код: Выделить всё
resourceConfigurations += listOf("en", "ru", "uk", "uk-rUA")
resConfigs("en", "ru", "uk", "uk-rUA")
- Зарегистрированы значения локали, чтобы убедиться, что приложение устанавливает их правильно во время выполнения:
Locale.getDefault() возвращает правильные значения ( uk, ru и т. д.).
resources.configuration.locale также отражает желаемую локаль.
Подробнее здесь: https://stackoverflow.com/questions/792 ... on-certain