Kotlin - 如何更改语言环境

3

我尝试使用 Kotlin 编写以下代码以更改应用程序语言,但该代码无法运行。请问有人能指出我哪里做错了吗?

BaseFragment.kt

open fun setLocale(lang: String, redirectActivity: Boolean, activity: Activity?){
    if(activity != null) {
        val configuration = resources.configuration
        val locale = Locale(lang)
        configuration.setLocale(locale)
        configuration.setLayoutDirection(locale)
        activity.createConfigurationContext(configuration)

        val sharedPref: SharedPreferences =
        activity.getSharedPreferences(getString(R.string.app_name), 0)
        val editor = sharedPref.edit()
        editor.putString("lang", lang)
        editor.apply()

        activity.finish()
        startActivity(activity.intent.putExtra("redirectActivity", redirectActivity))
    }
}

LanguageFragment.kt

BaseFragment.setLocale(newLang, true, activity)
1个回答

4

需要设置默认Locale,然后更新资源以重新创建视图。此外,在Android N以下版本中,还需要更新资源的配置,如下所示:

val locale = Locale(language)
Locale.setDefault(locale)

val resources = context.resources

val configuration = resources.configuration
configuration.locale = locale
configuration.setLayoutDirection(locale)

resources.updateConfiguration(configuration, resources.displayMetrics)

这是一个演示工作版本,其中有一个按钮可将语言保存到共享首选项(与给定的代码片段相同),并使用更新的本地化重新创建。欢迎使用LocaleHelper实用程序类,并像其MainActivity所示调用它。

LocaleHelper().setLocale(this@MainActivity, "en")
recreate()

1
“LocaleHelper”类对我帮助很大,非常感谢。 - Arsee
很高兴能帮上忙,随时乐意提供帮助 @Arsee - SaadAAkash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接