gpt4 book ai didi

android - 如何更改 kotlin 中的语言(语言环境)

转载 作者:行者123 更新时间:2023-12-01 18:01:07 25 4
gpt4 key购买 nike

我有 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())
}

最佳答案

您甚至需要在调用 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)
}
}

扩展本类(class)的 Activity 。

在您的 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
}
}

您还需要在 list 文件中设置应用程序类,如下所示:

<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,以确保所有 Activity 具有相同的语言。

关于android - 如何更改 kotlin 中的语言(语言环境),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56249754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com