Preferências de idioma por app

Em muitos casos, os usuários multilíngues definem o idioma do sistema como um idioma, como o inglês, mas querem selecionar outros idiomas para apps específicos, como holandês, chinês ou hindi. A fim de ajudar os apps a oferecer uma melhor experiência a esses usuários, o Android 13 introduz os recursos abaixo para apps que oferecem suporte a vários idiomas:

Os apps que não oferecem suporte a vários idiomas não são afetados por essas mudanças.

Implementação da API

Para apps que atualmente não usam um seletor de idioma personalizado, nenhum trabalho a mais é necessário.

Em apps que têm ou querem usar um seletor de idioma, utilize as novas APIs em vez da lógica personalizada do app para processar a configuração e usar o idioma preferido do usuário.

Implementar usando a Biblioteca de Suporte do AndroidX

Para oferecer compatibilidade com versões anteriores do Android, recomendamos o uso da Biblioteca de Suporte AndroidX ao implementar um seletor de idioma no app. Use o método setApplicationLocales(), disponível na Appcompat 1.6.0-alpha01 ou versões mais recentes.

Por exemplo, para definir o idioma da preferência de um usuário, peça a ele para selecionar uma localidade no seletor de idioma e definir esse valor no sistema:

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);

Implementar usando as APIs do framework do Android

Também é possível utilizar as APIs do framework do Android para implementar um seletor de idioma no app, com os métodos setApplicationLocales() e getApplicationLocales().

Por exemplo, para definir o idioma da preferência de um usuário, peça a ele para selecionar uma localidade no seletor de idioma e definir esse valor no sistema:

// 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

Para que o idioma preferido de um usuário apareça no seletor de idioma, o app pode extrair o valor do sistema:

// 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

Configurações do sistema para usuários

Com as novas configurações do sistema, os usuários podem selecionar um idioma preferido para cada app. Os usuários podem acessar essas configurações de duas maneiras:

  • Acessar pelas configurações do sistema

    Configurações > Sistema > Idioma e entrada > Idiomas do app > (selecionar um app)

  • Acessar pelas configurações do app

    Configurações > Apps > (selecionar um app) > Idioma

Problemas conhecidos

Há alguns problemas conhecidos a serem considerados ao testar o app.

  • É possível que os idiomas aos quais o app oferece suporte não estejam na lista de idiomas disponíveis.
  • Se o app usar APKs divididos, eles não vão ser transferidos por download automaticamente quando a localidade do app mudar.
  • A IU é uma versão preliminar que vai mudar em versões mais recentes.