【发布时间】:2020-06-23 03:22:43
【问题描述】:
我包括本地化来翻译我的应用介绍三种不同的语言,在设置每种语言的翻译字符串后,我转到首选项设置并选中一个复选框,翻译工作正常,问题是当我重新启动应用程序,本地化,即使我已将所选语言保存在 sharedpreference 中并在 mainactivity 中检索它
*这就是我设置语言的方式
var sharedPreferences = requireContext().getSharedPreferences("prefs",
Context.MODE_PRIVATE)
var editor = sharedPreferences.edit()
spanishCheckBox.setOnPreferenceChangeListener(object : Preference.OnPreferenceChangeListener{
override fun onPreferenceChange(preference: Preference?, newValue: Any?): Boolean {
var isSpanishChecked = newValue as Boolean
if(isSpanishChecked){
var Lang = "es"
editor.putString("key",Lang)
editor.apply()
var local = Locale(Lang)
var configuration = Configuration()
configuration.locale = local
resources.updateConfiguration(configuration,resources.displayMetrics)
englishCheckBox.isChecked = false
frenchCheckBox.isChecked = false
Intent(requireContext(),MainActivity::class.java).also {
it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(it)
}
}
return true
}
})
- 这就是我在 mainactivity 中检索数据的方式
fun LoadLanguageConfiguration(){
var sharedpreferences = getSharedPreferences("prefs", Context.MODE_PRIVATE)
var langCode = sharedpreferences.getString("key","")
var local = Locale(langCode)
var configuration = Configuration()
configuration.locale = local
baseContext.createConfigurationContext(configuration)
}
只有当我在应用程序中设置语言时翻译才有效,但当我重新启动应用程序时,它会恢复为默认语言,即英语。
【问题讨论】:
-
你的意思是sharedpreference在应用重启时会删除“key”的值吗?或者值仍然与重新启动前相同,但语言没有改变。
-
在使用调试器检查时,该值被正常检索,但并未应用于本地化,即使我手动设置该值,应用程序语言也不会改变
-
在哪里调用 LoadLanguageConfiguration(),你应该在应用启动的早期调用它。
-
我在 oncreate 中调用,所以一旦应用启动,它应该检查该方法
-
您会尝试在 onStart 函数中调用 LoadLanguageConfiguration() 吗?作为在 onRestart 和 oncreate 之后调用的 android 生命周期 onStart。
标签: android localization