如何在使用 Android Jetpack Compose 时管理语言环境。Compose 如何找到要在视图中设置的语言环境。
如何在使用 Android Jetpack Compose 时管理语言环境。Compose 如何找到要在视图中设置的语言环境。
androidx.compose.ui.text.intl.Locale
存在,如果它符合您的需求,那么很好,您可以使用 Locale.current
。然而,通常情况下,您需要使用 java.util.Locale。
为了做到这一点,我建议使用以下函数:
@Composable
@ReadOnlyComposable
fun getLocale(): Locale? {
val configuration = LocalConfiguration.current
return ConfigurationCompat.getLocales(configuration).get(0)
}
如果您想要使用默认的 Locale.getDefault()
的返回值,而不是 null,您可以将代码调整为以下内容:
@Composable
@ReadOnlyComposable
fun getLocale(): Locale {
val configuration = LocalConfiguration.current
return ConfigurationCompat.getLocales(configuration).get(0) ?: LocaleListCompat.getDefault()[0]!!
}
使用LocalConfiguration.current
很重要,这样如果有配置更改,该函数将重新组合,您将获得最新的Locale而不是过时的。我最近参加了这个讨论,其中提到了这一点。
ConfigurationCompat.getLocales
确保它在所有API版本上都能正常工作。如果您已经使用API >= 24,则可以直接使用LocalConfiguration.current.locales
。
奖励:当使用每应用程序语言APIs时,这也完美地工作,因为它返回在应用程序语言设置中选择的任何语言。
要从可组合中访问Locale,请使用以下内容:
Locale.current
https://developer.android.com/reference/kotlin/androidx/compose/ui/text/intl/Locale#current()
Locale.current
不具备状态感知能力:https://issuetracker.google.com/issues/240191036 - undefined