欢迎使用 Android 13 开发者预览版!敬请向我们提供反馈,帮助我们将 Android 13 打造为最佳版本。

按应用设定的语言偏好设置

在许多情况下,多语言用户会将其系统语言设置为某一种语言(例如英语),但又想为特定应用选择其他语言(例如荷兰语、中文或印地语)。为了帮助应用为这些用户提供更好的体验,Android 13 针对支持多种语言的应用引入了以下新功能:

不支持多种语言的应用不受这些变更的影响。

API 实现

对于当前未使用自定义应用内语言选择器的应用,无需执行任何其他操作。

对于具有或想要使用应用内语言选择器的应用,请使用这些新 API(而非应用的自定义逻辑)来处理相关设置和获取用户对应用的首选语言设置。

使用 AndroidX 支持库来实现

为了向后兼容以前的 Android 版本,建议使用 AndroidX 支持库来实现应用内语言选择器。使用 Appcompat 1.6.0-alpha01 或更高版本中提供的 setApplicationLocales() 方法。

例如,如需设置用户的首选语言,您需要让用户在语言选择器中选择语言区域,然后在系统中设置该值:

Kotlin

val appLocale: LocaleListCompat = LocaleListCompat.forLanguageTags("xx-YY")
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale)

Java

LocaleListCompat appLocale = LocaleListCompat.forLanguageTags("xx-YY");
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale);

使用 Android 框架 API 来实现

您还可以通过 setApplicationLocales()getApplicationLocales() 方法,使用 Android 框架 API 来实现应用内语言选择器。

例如,如需设置用户的首选语言,您需要让用户在语言选择器中选择语言区域,然后在系统中设置该值:

// 1. Inside an activity, in-app language picker gets an input locale "xx-YY"
// 2. App calls the API to set its locale
mContext.getSystemService(LocaleManager.class
    ).setApplicationLocales(newLocaleList(Locale.forLanguageTag("xx-YY")));
// 3. The system updates the locale and restarts the app, including any configuration updates
// 4. The app is now displayed in "xx-YY" language

如需获取用户当前的首选语言以显示在语言选择器中,您的应用可以从系统中取回该值:

// 1. App calls the API to get the preferred locale
LocaleList currentAppLocales =
    mContext.getSystemService(LocaleManager.class).getApplicationLocales();
// 2. App uses the returned LocaleList to display languages to the user

面向用户的系统设置

用户可以通过新的系统设置为每个应用选择首选语言。他们可以通过以下两种方式访问这些设置:

  • 通过系统设置访问

    设置 > 系统 > 语言和输入法 > 应用语言 >(选择应用)

  • 通过应用设置访问

    设置 > 应用 >(选择一款应用)> 语言

已知问题

在测试应用时,有一些已知问题需要注意。

  • 可用语言列表中可能不包含您的应用支持的语言。
  • 如果您的应用使用拆分 APK,当应用语言区域发生变化时,系统不会自动下载这些 APK。
  • 现在的界面只是一个初步版本,在后续版本中会不断更改。