Jus*_*tin 12 locale android-jetpack-compose
我想在 Jetpack Compose 中以编程方式更改语言。我已经阅读了很多帖子并观看了视频,但仍然找不到方法。(帖子和视频均在Android视图系统中。)
\n如何更改 kotlin 中的语言(区域设置)
\n https://www.youtube.com/watch?v=xxPzi2h0Vvc
我希望我的应用程序像下图一样工作。点击语言后,整个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\nRun Code Online (Sandbox Code Playgroud)\nMainActivity.kt
\nclass MainActivity : ComponentActivity() {\n @ExperimentalFoundationApi\n override fun onCreate(savedInstanceState: Bundle?) {\n\n loadLocale(this)\n\n super.onCreate(savedInstanceState)\n setContent {\n SpanishTravelTheme {\nRun Code Online (Sandbox Code Playgroud)\n图片: https: //i.stack.imgur.com/y5kcO.png
\n尝试这个
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)
| 归档时间: |
|
| 查看次数: |
10759 次 |
| 最近记录: |