Приложение поддерживает ОС 8.0 +
Я добавил папку values-ar
с поддержкой strings.xml
. Если я переключу язык с настроек телефона на арабский, приложение загрузит нужные ресурсы.
Если я установлю язык по умолчанию во время выполнения в классе Application
, он не сможет загрузить определенные ресурсы ("ar") .
Вот как я могу изменить conf (в Application
class):
fun changeDefaultLocale() {
Locale.setDefault(Locale("ar")
val configuration = resources.configuration
configuration.setLocale(locale)
this.createConfigurationContext(configuration)
}
Что я пробовал:
- переименовать
values-ar
в values-ar-rEG
- добавить
resConfigs "en", "ar"
на app/build.gradle
- добавить
android:configChanges="locale"
к Manifest/<application
- используйте
Locale("ar","AE")
или Locale("ar","EG")
Я поставил точку останова в строке после того, как назвал выше changeDefaultLocale()
fun:
Почему он не загружает правильный файл ресурсов? Повторяю, если я изменю его из настроек телефона, он будет работать правильно.
UPDATE
Используя ответ @Nurbol, я обновил BaseActivity
, как показано ниже, и он работает нормально. Моя проблема сейчас:
Activity A
-> Activity B (here I switch the locale)
, затем, если я нажимаю назад и система восстанавливает Activity A
, , он имеет старую конфигурацию и старую локаль. Как это преодолеть?
override fun attachBaseContext(base: Context) {
super.attachBaseContext(updateBaseContextLocale(base))
}
private fun updateBaseContextLocale(context: Context): Context {
val locale = Locale("ar")
Locale.setDefault(locale)
return updateResourcesLocale(context, locale)
}
@TargetApi(Build.VERSION_CODES.N)
private fun updateResourcesLocale(context: Context, locale: Locale): Context {
val configuration = context.resources.configuration
configuration.setLocale(locale)
return context.createConfigurationContext(configuration)
}