Как поддерживать локали хинди и гуджарати в устройствах ниже android 6? - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу поддерживать язык хинди и гуджарати в моем приложении. Я создал менеджер локали, который обновляет конфигурацию и ресурсы на основе 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...