在Android Jetpack Compose中管理Locale

8

如何在使用 Android Jetpack Compose 时管理语言环境。Compose 如何找到要在视图中设置的语言环境。

2个回答

10

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时,这也完美地工作,因为它返回在应用程序语言设置中选择的任何语言。


顺便说一下,Compose的Locale.current不具备状态感知能力:https://issuetracker.google.com/issues/240191036 - undefined
是的,我在答案的部分中提到了这一点,它说:“使用LocalConfiguration.current是很重要的,这样如果有配置更改,函数将重新组合,您将获得最新的Locale而不是旧的。” - undefined

4

1
此链接已失效 - 返回404。 - MSpeed
确实,他们已经更改了链接。已更新! - Stephen Vinouze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接