После прочтения этого и этого я все еще не смог заставить изменить язык для работы с API 23 и API 24.
ApplyOverrideConfiguration тоже не помогло.
applyOverrideConfiguration
override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) {
if (overrideConfiguration != null) {
val uiMode = overrideConfiguration.uiMode
overrideConfiguration.setTo(baseContext.resources.configuration)
overrideConfiguration.uiMode = uiMode
}
super.applyOverrideConfiguration(overrideConfiguration)
}
Это очень странно работает на Android 6, после переустановки изменение языка может работать или может не работать , И не во всех видах деятельности. И на Android 7 все работает, но вам нужно перезапустить приложение, чтобы применялся язык
Вот мой код. langChanger находится перед setContentView, чтобы определить язык системы при первом запуске и установить язык приложения на основании этого. И при следующих запусках примените язык, который был сохранен в SharPref.
private fun langChanger() {
PreferenceManager.getDefaultSharedPreferences(this).apply {
var currentLang = getString("LANG", "DEFAULT")
val systemLang = Locale.getDefault().language.toString()
if (currentLang == "DEFAULT") {
if (systemLang == "ru") {
setAppLocale("ru")
PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("LANG", "RUS").apply()
} else if (systemLang == "be") {
setAppLocale("ru")
PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("LANG", "RUS").apply()
} else if (systemLang == "kk") {
setAppLocale("ru")
PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("LANG", "RUS").apply()
} else if (systemLang == "uk") {
setAppLocale("ru")
PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("LANG", "RUS").apply()
} else if (systemLang == "en") {
setAppLocale("en")
PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("LANG", "ENG").apply()
} else {
setAppLocale("en")
PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("LANG", "ENG").apply()
}
} else if (currentLang == "RUS") {
setAppLocale("ru")
} else if (currentLang == "ENG") {
setAppLocale("en")
}
}
}
private fun setAppLocale(localeCode: String) {
val dm: DisplayMetrics = resources.displayMetrics
val conf: Configuration = resources.configuration
val locale = Locale(localeCode.toLowerCase())
setDefault(locale)
if (Build.VERSION.SDK_INT >= 26) {
conf.setLocale(locale)
baseContext.resources.updateConfiguration(conf, dm)
} else {
conf.locale = locale
baseContext.applicationContext.createConfigurationContext(conf)
}
}