gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:45 24 4
gpt4 key购买 nike

我正在尝试使用 LocaleManager 更改我的应用程序中的语言。我的代码在 Nougat 和 Oreo 上完美运行,但在 Marshmallow 上它不起作用。我有一个设置 Activity ,我在其中添加一个对话框来更改语言。这是我的代码:

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)
}
}
}

这是我为自定义对话框设置的设置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, 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()
}

在我需要更改语言文本的每个 Activity 中,我都添加了这个 fragment :

override fun attachBaseContext(base: Context) {
super.attachBaseContext(LocaleManager.setLocale(base))
}

最佳答案

我认为您必须将字符串类型“gu-rIN”更改为简单的“gu”类型翻译

关于android - 用于更改语言的 LocaleManager 在 Marshmallow 设备中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52216485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com