gpt4 book ai didi

android - 如何使用 Jetpack Compose 实现应用本地化

转载 作者:行者123 更新时间:2023-12-04 23:58:18 28 4
gpt4 key购买 nike

如何使用 Jetpack Compose 实现应用本地化?我的意思是我不希望用户更改他们的设备语言,而是让他们只更改应用程序语言。如何做到这一点?我找到的所有资源都在谈论更改设备语言。

最佳答案

这就是我根据这个答案所做的 here .
在您的应用程序类中,执行以下操作:

class MyApp : Application() {
override fun attachBaseContext(base: Context) {
super.attachBaseContext(LocaleHelper.setLocale(base, myLang))
}

companion object {
var myLang = "en"
}
}
我将语言保存在 myLang变量,但实际上您将保存在 Shared Preferences .
onAttachBaseContext setLocale被调用(它在下面声明)。
然后,在您的 Activity 中,您将执行相同的操作:
class MainActivity : AppCompatActivity() {
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(
LocaleHelper.setLocale(newBase, MyApp.myLang)
)
}
}
下面的对象将设置语言为 MyApp.myLang并更新 Context目的。
object LocaleHelper {
fun setLocale(context: Context, language: String): Context? {
MyApp.myLang = language
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return updateResources(context, language);
}
return updateResourcesLegacy(context, language);
}

@TargetApi(Build.VERSION_CODES.N)
private fun updateResources(context: Context, language: String): Context? {
val locale = Locale(language)
Locale.setDefault(locale)
val configuration = context.resources.configuration
configuration.setLocale(locale)
configuration.setLayoutDirection(locale)
return context.createConfigurationContext(configuration)
}

private fun updateResourcesLegacy(context: Context, language: String): Context {
val locale = Locale(language)
Locale.setDefault(locale)
val resources = context.resources
val configuration = resources.configuration
configuration.locale = locale
resources.updateConfiguration(configuration, resources.displayMetrics)
return context
}
}
最后,在您的可组合文件中,您可以执行以下操作:
@Composable
fun TestLanguage() {
val context = LocalContext.current
Text(text = stringResource(id = R.string.activity_java_text))
Button(onClick = {
LocaleHelper.setLocale(context, "pt")
(context as? Activity)?.recreate()
}) {
Text(text = stringResource(id = R.string.btn_ok))
}
}
注意 recreate方法被调用以重新创建当前 Activity 并应用语言更改。

关于android - 如何使用 Jetpack Compose 实现应用本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72989987/

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