Я хочу поддерживать язык хинди и гуджарати в моем приложении. Я создал менеджер локали, который обновляет конфигурацию и ресурсы на основе android версий.
fun updateLocale(context: Context?): Context? {
context?.let { baseContext ->
Log.e(TAG, "updateLocale: context is not empty")
val preferenceHelper = PreferenceHelper(baseContext)
preferenceHelper.getStringPreference(PreferenceHelper.KEY_LANGUAGE).let {
return if (it.isNotEmpty()) {
val locale = Locale(it)
Locale.setDefault(locale)
val config = baseContext.resources.configuration
config.setLocale(locale)
config.setLayoutDirection(locale)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
val resources = baseContext.resources
resources.updateConfiguration(config, resources.displayMetrics)
baseContext.applicationContext.resources.updateConfiguration(config, resources.displayMetrics)
baseContext
} else {
baseContext.createConfigurationContext(config)
}
} else {
baseContext
}
}
} ?: run {
return context
}
}
Я установил обновление локали локали в моей базовой активности, которая расширяется каждой активностью моего приложения.
override fun attachBaseContext(newBase: Context?) {
super.attachBaseContext(LocaleHelper.updateLocale(newBase))
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
LocaleHelper.updateLocale(this)
}
Итак, для устройств выше android 7 он работает совершенно нормально. Загружает ресурсы из соответствующего строкового файла. Но для устройств ниже 7 он не загружает ресурсы. Однако, когда я проверил язык отображения Locale (используя Locale.getDefault (). DisplayLanguage), он напечатал हिन्दी. Но когда я получаю доступ к строкам, используя resources.getString (R.string.stringName), он возвращает мне engli sh string.
Любые предложения ??
Кроме того, когда я использую simpleDateFormat ("MMM") ", Locale.getDefault ()). Format (Date ()) для регистрации, он записывает название месяца на хинди.
EDIT 1: Мне наконец-то удалось заставить его работать и опубликовать ответ здесь. Изменение языка программно (Android N 7.0 - API 24)