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设备中不起作用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)