如何更改应用语言?

时间:2019-06-02 11:44:18

标签: android kotlin locale

我正在尝试在运行时更改应用程序语言。我检查了几篇文章,现在我的代码如下:

if(position == 0){//Position 0 of an array to select the language
  val locale = Locale("es_ES")
  val config = applicationContext.resources.configuration
  config.setLocale(locale)
  applicationContext.createConfigurationContext(config)
}

我有一个values-es目录,我在其中拥有自己的strings.xml文件,其中包含转换后的字符串。无论如何,似乎它并没有任何改变。

我再说一遍,我尝试并检查了Stack Overflow中的很多帖子,但是我不知道我在哪里失败。 在此先感谢您,由于我的英语不好我可以提出任何问题。

第二次尝试:

我一直在尝试,现在我的代码如下:

val locale = Locale("es")
Locale.setDefault(locale)
val config = applicationContext.resources.configuration
config.setLocale(locale)
applicationContext.resources.configuration.setTo(config)
Log.d("Configuration",config.toString())
Log.d("Language",config.locales.toLanguageTags())

调试消息是:

D/Configuration: {1.0 310mcc260mnc [es] ldltr sw411dp w683dp h387dp 420dpi nrml land finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 1794, 1080) mAppBounds=Rect(0, 0 - 1794, 1080) mWindowingMode=fullscreen mActivityType=undefined} s.40}


D/Language: es

但是我的字符串没有变化,我的应用程序继续使用strings(en)文件。

val config = application.applicationContext.resources.configuration
                    val locale = Locale("es")
                    Locale.setDefault(locale)
                    config.setLocale(locale)
                    application.applicationContext.resources.configuration.setLocale(locale)
                    application.applicationContext.resources.configuration.updateFrom(config)
                    finish()
                    startActivity(intent)

1 个答案:

答案 0 :(得分:0)

这很奇怪,昨天我遇到了同样的问题,并且此代码对我有效。

storageSize

我这样使用

private fun changeLanguage(lenguage:String){
    val newLocale = Locale(lenguage)
    val activityRes = resources
    val activityConf = activityRes.configuration
    activityConf.setLocale(newLocale)
    activityRes.updateConfiguration(activityConf, activityRes.displayMetrics)

    val applicationRes = applicationContext.resources
    val applicationConf = applicationRes.configuration
    applicationConf.setLocale(newLocale)
    baseContext.createConfigurationContext(
        applicationConf
    )
}

goToLocations("en")

欢呼