android – 用于更改语言的LocaleManager在Marshmallow设备中不起作用

android – 用于更改语言的LocaleManager在Marshmallow设备中不起作用,第1张

概述我正在尝试使用LocaleManager更改我的应用程序中的语言.我的代码在Nougat和Oreo上完美运行,但在Marshmallow上它不起作用.我有一个设置活动,我在其中添加一个对话框来更改语言.这是我的代码: LocaleManager.kt: class LocaleManager { companion object { val LANGUAGE_ENGLI 我正在尝试使用LocaleManager更改我的应用程序中的语言.我的代码在Nougat和Oreo上完美运行,但在Marshmallow上它不起作用.我有一个设置活动,我在其中添加一个对话框来更改语言.这是我的代码:

LocaleManager.kt:

class LocaleManager {    companion object {        val LANGUAGE_ENGliSH = "en"        private val LANGUAGE_KEY = "display_lang"        fun setNewLocale(c: Context,language: String): Context {            persistLanguage(c,language)            return updateResources(c,language)        }        private fun persistLanguage(c: Context,language: String) {            val prefs = PreferenceManager.getDefaultSharedPreferences(c)            prefs.edit().putString(LANGUAGE_KEY,language).apply()        }        private fun updateResources(context: Context,language: String): Context {            val locale = Locale(language)            Locale.setDefault(locale)            val config = Configuration(context.resources.configuration)            config.setLocale(locale)            return context.createConfigurationContext(config)        }        fun setLocale(c: Context): Context {            return updateResources(c,getLanguage(c))        }        fun getLanguage(c: Context): String {            val prefs = PreferenceManager.getDefaultSharedPreferences(c)            return prefs.getString(LANGUAGE_KEY,LANGUAGE_ENGliSH)        }    }}

这是我自定义对话框的Setting Activity.kt:

fun showChangeLangDialog() {    val factory = LayoutInflater.from(this)    val langDialog = factory.inflate(R.layout.select_lang_dialog,null)    val langList = resources.getStringArray(R.array.languages)    langList.forEach {        val obj = JsONObject(it)        val rdbtnLang = Radiobutton(this)        rdbtnLang.ID = obj.getInt("ID")        rdbtnLang.text = obj.getString("lang")        Log.e("Lan",LocaleManager.getLanguage(this))        if (LocaleManager.getLanguage(this) == obj.getString("code")) {            rdbtnLang.isChecked = true        }        rdbtnLang.textSize = 20f        rdbtnLang.setpadding(20,30,30)        langDialog.selectLangList.addVIEw(rdbtnLang)    }    AlertDialog.Builder(this)            .setTitle(R.string.selectLang)            .setPositivebutton(R.string.ok) { dialog,i ->                langList.forEach {                    val obj = JsONObject(it)                    if (langDialog.selectLangList.checkedRadiobuttonID == obj.getInt("ID")) {                        setNewLocale(obj.getString("code"))                    }                }                dialog.dismiss()            }            .setNegativebutton(R.string.cancel) { dialog,whichbutton ->                dialog.dismiss()            }            .setVIEw(langDialog)            .create()            .show()}

在我需要更改语言文本的每个活动中,我都会添加以下代码段:

overrIDe fun attachBaseContext(base: Context) {    super.attachBaseContext(LocaleManager.setLocale(base))}
解决方法 我认为你必须将你的字符串类型“gu-rIN”改为简单的“gu”类型翻译 总结

以上是内存溢出为你收集整理的android – 用于更改语言的LocaleManager在Marshmallow设备中不起作用全部内容,希望文章能够帮你解决android – 用于更改语言的LocaleManager在Marshmallow设备中不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1126223.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存