我有2个字符串文件“ en”和“ tr”。当我更改电话的语言字符串文件时,它会自动更改(我没有为此结果编写额外的代码,也不知道如何发生)。我想以编程方式更改字符串文件。 我用了这段代码。我收到Toast消息,但语言没有改变。为什么?之前,我将这些代码用于我用Java而不是Kotlin编写的另一个应用程序,并且这些代码工作正常。请不要重复,因为我读了很多问题。到目前为止,我已经尝试了4个小时。
override fun onResume() {
buttonDate()
changeLanguage()
super.onResume()
}
fun changeLanguage(){
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext)
val language = sharedPreferences.getString("language","bak")
Toast.makeText(applicationContext,language,Toast.LENGTH_SHORT).show()
if(language=="English"){
Toast.makeText(applicationContext,"English",Toast.LENGTH_SHORT).show()
language("")
}else if(language=="Turkish"){
Toast.makeText(applicationContext,"Turkish",Toast.LENGTH_SHORT).show()
language("tr")
}
}
fun language(language: String){
val locale = Locale(language)
Locale.setDefault(locale)
val resources = getResources()
val configuration = resources.getConfiguration()
configuration.locale = locale
resources.updateConfiguration(configuration, resources.getDisplayMetrics())
}
答案 0 :(得分:1)
您甚至需要在调用onCreate之前更新配置。要做到这一点 创建像这样的BaseActivity类
open class BaseActivity : AppCompatActivity() {
companion object {
public var dLocale: Locale? = null
}
init {
updateConfig(this)
}
fun updateConfig(wrapper: ContextThemeWrapper) {
if(dLocale==Locale("") ) // Do nothing if dLocale is null
return
Locale.setDefault(dLocale)
val configuration = Configuration()
configuration.setLocale(dLocale)
wrapper.applyOverrideConfiguration(configuration)
}
}
扩展了您在此类课程中的活动。
像这样在您的App类中设置dLocale:
class App : Application() {
override fun onCreate() {
super.onCreate()
var change = ""
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
val language = sharedPreferences.getString("language", "bak")
if (language == "Turkish") {
change="tr"
} else if (language=="English" ) {
change = "en"
}else {
change =""
}
BaseActivity.dLocale = Locale(change) //set any locale you want here
}
}
您还需要像这样在清单文件中设置App类:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
//..
<application
android:name=".App"
//..>
</application>
</manifest>
注意:我们应该仅在App
onCreate
中设置dLocale,以确保所有活动都使用相同的语言。