【问题标题】:Localization not working after app restart应用重启后本地化不起作用
【发布时间】: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


【解决方案1】:

问题是我没有在开始和一切之前启动我的语言加载方法,所以我把它作为我的 oncreate 中的第一个方法,一切都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2012-12-11
    • 2012-12-30
    相关资源
    最近更新 更多