如何更改 Jetpack Compose 中的语言区域设置

Jus*_*tin 12 locale android-jetpack-compose

我想在 Jetpack Compose 中以编程方式更改语言。我已经阅读了很多帖子并观看了视频,但仍然找不到方法。(帖子和视频均在Android视图系统中。)

\n

如何更改 kotlin 中的语言(区域设置)
\n https://www.youtube.com/watch?v=xxPzi2h0Vvc

\n

我希望我的应用程序像下图一样工作。点击语言后,整个app都会改变语言。下面的代码是可点击的部分。我应该在这个可点击部分和MainActivity.kt中做什么?

\n
@Composable\nfun LanguageScreen(\n    navController: NavController,\n) {\n    val context = LocalContext.current\n    val langList = arrayOf("English", "\xe7\xb9\x81\xe9\xab\x94\xe4\xb8\xad\xe6\x96\x87", "\xe7\xae\x80\xe4\xbd\x93\xe4\xb8\xad\xe6\x96\x87", "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")\n    var items by remember {\n        mutableStateOf(\n            langList.map {\n                LanguageItem(\n                    title = it,\n                    isSelected = false\n                )\n            }\n        )\n    }\n    LazyColumn(\n        modifier = Modifier\n            .fillMaxSize()\n    ) {\n        items(items.size) { i ->\n            Row(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .clickable {\n\n                        items = items.mapIndexed { j, item ->\n                            if (i == j) {\n                                item.copy(isSelected = true)\n                            } else item.copy(isSelected = false)\n                        }\n\n                        if (i == 0) {\n                            setLocaleLang("", context)\n                        } else if (i == 1) {\n                            setLocaleLang("zh-rTW", context)\n                        } else if (i == 2) {\n                            setLocaleLang("zh-rCN", context)\n                        } else {\n                            setLocaleLang("ja", context)\n                        }\n\n                    }\n                    .padding(16.dp),\n                horizontalArrangement = Arrangement.SpaceBetween,\n                verticalAlignment = Alignment.CenterVertically\n            ) {\n                Text(text = items[i].title, fontSize = 20.sp)\n                if (items[i].isSelected) {\n                    Icon(\n                        imageVector = Icons.Default.Check,\n                        contentDescription = "Selected",\n                        tint = Color.Blue,\n                        modifier = Modifier.size(24.dp)\n                    )\n                }\n            }\n            Spacer(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(1.dp)\n                    .background(Color.LightGray)\n            )\n        }\n    }\n}\n\n\nfun setLocaleLang(lang: String, context: Context) {\n    val locale = Locale(lang)\n    Locale.setDefault(locale)\n    val resources = context.resources\n    val configuration = resources.configuration\n    configuration.setLocale(locale)\n    resources.updateConfiguration(configuration, resources.displayMetrics)\n\n    val editor = context.getSharedPreferences("Settings", Context.MODE_PRIVATE).edit()\n    editor.putString("My_Lang", lang)\n    editor.apply()\n}\n\nfun loadLocale(context: Context) {\n    val sharedPreferences = context.getSharedPreferences("Settings", Activity.MODE_PRIVATE)\n    val language = sharedPreferences.getString("My_Lang", "")\n    setLocaleLang(language!!, context)\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

MainActivity.kt

\n
class MainActivity : ComponentActivity() {\n    @ExperimentalFoundationApi\n    override fun onCreate(savedInstanceState: Bundle?) {\n\n        loadLocale(this)\n\n        super.onCreate(savedInstanceState)\n        setContent {\n            SpanishTravelTheme {\n
Run Code Online (Sandbox Code Playgroud)\n

图片: https: //i.stack.imgur.com/y5kcO.png

\n

Ric*_*per 1

尝试这个

 val context = LocalContext.current
 Row(
                modifier = Modifier
                    .fillMaxWidth()
                    .clickable {
                           val locale = Locale(language) //Here I assume you have access to the language you want
        Locale.setDefault(locale)
        val resources = context.getResources()
        val configuration = resources.getConfiguration()
        configuration.locale = locale
        resources.updateConfiguration(configuration, resources.getDisplayMetrics())
                    }
                    .padding(16.dp),
                horizontalArrangement = Arrangement.SpaceBetween,
                verticalAlignment = Alignment.CenterVertically
            )
Run Code Online (Sandbox Code Playgroud)