用于更改语言的区域设置管理器在棉花糖设备中不起作用



我正在尝试使用LocaleManager更改应用程序中的语言。我的代码在牛轧糖和奥利奥上运行完美,但在棉花糖上它不起作用。我有一个设置活动,我在其中添加一个对话框来更改语言。这是我的代码:

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

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

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

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

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

最新更新