Android - Программное переключение языка в релизной сборке

18 Мар 2023г. в 13:51

Сделал переключалку языка

На эмуляторе и по шнурку работает хорошо. Но когда делаю release сборку AAB для стора, то переключение не работает. При том что в логах все как нужно...

App : Application() {
override fun attachBaseContext(base: Context) {
super.attachBaseContext(LocaleManager.setLocale(base))
}
}

open class BaseActivity : AppCompatActivity() {

override fun attachBaseContext(base: Context) {
super.attachBaseContext(LocaleManager.setLocale(base))
}

fun changeLocal(language: Language) {
LocaleManager.setNewLocale(this, language)
}
}

object LocaleManager {

private const val localePrefKey = "localePrefKey"

fun setLocale(context: Context) : Context {
return setNewLocale(context, getLanguage())
}

fun setNewLocale(context: Context, language: Language) : Context {
Preferences.putString(localePrefKey, language.code)

return updateResources(context, language.code)
}

fun getLanguage(): Language {
val pref = Preferences.getString(localePrefKey, "")

return Language.values().find {
it.code == if(pref == "") Locale.getDefault().language else pref
} ?: Language.EN
}

private fun updateResources(context: Context, language: String) : Context {

val locale = Locale(language)
Locale.setDefault(locale)

return context.createConfigurationContext(
Configuration(context.resources.configuration).apply {
setLocale(locale)
}
)
}

}
Что самое странное всегда берется тот язык что по умолчанию, как будто весь этот код игнорируется, но когда я вывожу в логи, то пишет что язык переключен.


Оставить комментарий

Ваше имя::


Комментарий::




(2023-03-18 13:51:14)
Спасибо комментаторам, нашел решение. Добавляем в gradle следующий блок, и все.

android {
bundle {
language {
enableSplit = false
}
}
}
С AAB собирается APK только с теми ресурсами, что требуются скачивающему устройству. Таким образом мы просим положить все строковые ресурсы, а не обрезать их.