Présentation de la résolution des langues et des paramètres régionaux

À partir d'Android 7.0 (niveau d'API 24), Android fournit une prise en charge avancée pour les utilisateurs multilingues, qui leur permet de sélectionner plusieurs paramètres régionaux dans les paramètres. Android offre cette possibilité en augmentant considérablement le nombre de paramètres régionaux pris en charge et en modifiant la façon dont le système résout les ressources.

Ce document explique d'abord la stratégie de résolution des ressources dans les versions d'Android antérieures à 7.0 (niveau d'API 24). Il décrit ensuite la stratégie améliorée de résolution des ressources dans Android 7.0. Enfin, il explique comment exploiter le nombre élargi de paramètres régionaux pour répondre aux besoins d'un plus grand nombre d'utilisateurs multilingues.

Problèmes liés à la résolution des ressources linguistiques

Avant la version 7.0 d'Android, Android ne pouvait pas toujours faire correspondre les paramètres régionaux de l'application à ceux du système.

Par exemple, supposons que vous vous trouviez dans la situation suivante :

  • La langue par défaut de votre application est en_US (anglais américain). Des chaînes en espagnol sont également localisées dans les fichiers de ressources es_ES.
  • Un appareil est défini sur es_MX.

Lorsque votre code Java fait référence à des chaînes, le système charge les chaînes du fichier de ressources par défaut (en_US), même si les ressources en espagnol sont localisées sous es_ES. En effet, lorsque le système ne trouve pas de correspondance exacte, il continue à rechercher des ressources en supprimant le code pays des paramètres régionaux. Enfin, si aucune correspondance n'est trouvée, le système revient à la valeur par défaut, à savoir en_US.

Le système utilise également en_US par défaut si l'utilisateur choisit une langue qui n'est pas du tout prise en charge par l'application, comme le français. Par exemple :

Tableau 1 : Résolution des ressources en cas d'absence de correspondance exacte des paramètres régionaux.

Paramètres utilisateur Ressources de l'application Résolution des ressources
fr_CH par défaut (en)
de_DE
es_ES
fr_FR
it_IT
Essai de fr_CH => Échec
Essai de fr => Échec
Utilisation de la valeur par défaut (en)

Dans cet exemple, le système affiche des chaînes en anglais sans savoir si l'utilisateur peut comprendre ou non l'anglais. Ce comportement est assez courant aujourd'hui.

Améliorations apportées à la stratégie de résolution des ressources

Android 7.0 (niveau d'API 24) offre une résolution des ressources plus robuste et trouve automatiquement de meilleures alternatives. Cependant, pour accélérer la résolution et améliorer la facilité de maintenance, vous devez stocker les ressources dans le dialecte parent le plus courant. Par exemple, si vous stockiez des ressources en espagnol dans le répertoire values-es-rUS auparavant, déplacez-les dans le répertoire values-b+es+419, qui contient l'espagnol d'Amérique latine. De même, si votre répertoire contient des chaînes de ressources dans un répertoire nommé values-en-rGB, remplacez le nom du répertoire par values-b+en+001 (anglais international), car le parent le plus courant pour les chaînes en-GB est en-001. Les exemples suivants expliquent pourquoi ces pratiques améliorent les performances et la fiabilité de la résolution des ressources.

Exemples de résolution de ressources

Avec les versions d'Android ultérieures à 7.0, le cas décrit dans le Tableau 1 est résolu différemment :

Tableau 2 : Stratégie de résolution améliorée en cas d'absence de correspondance exacte des paramètres régionaux.

Paramètres utilisateur Ressources de l'application Résolution des ressources
  1. fr_CH
par défaut (en)
de_DE
es_ES
fr_FR
it_IT
Essai de fr_CH => Échec
Essai de fr => Échec
Essai du dialecte enfant de fr => fr_FR
Utilisation de fr_FR

L'utilisateur obtient alors des ressources en français et non en anglais. Cet exemple montre également pourquoi vous devez stocker les chaînes françaises dans fr au lieu de fr_FR pour Android 7.0 ou versions ultérieures. Ici, le plan d'action consiste à trouver une correspondance avec le dialecte parent le plus proche, ce qui rend la résolution plus rapide et plus prévisible.

En plus de cette logique de résolution améliorée, Android propose désormais d'autres langues utilisateur. Essayons à nouveau l'exemple ci-dessus en spécifiant l'italien comme langue supplémentaire de l'utilisateur, mais sans prise en charge du français dans l'application.

Tableau 3 : Résolution des ressources lorsque les paramètres de l'application ne correspondent qu'au deuxième paramètre régional préféré de l'utilisateur.

Paramètres utilisateur Ressources de l'application Résolution des ressources
  1. fr_CH
  2. it-_CH
par défaut (en)
de_DE
es_ES
it_IT
Essai de fr_CH => Échec
Essai de fr => Échec
Essai du dialecte enfant de fr => Échec
Essai de it_CH => Échec
Essai de it => Échec
Essai du dialecte enfant de it => it_IT
Utilisation de it_IT

L'utilisateur voit toujours une langue qu'il comprend, même si l'application n'est pas disponible en français.

Concevoir votre application pour qu'elle prenne en charge des paramètres régionaux supplémentaires

Android fournit des outils permettant de localiser plus facilement le contenu des applications et de susciter l'intérêt des utilisateurs dans leurs langues préférées. Nous vous recommandons d'adopter les techniques suivantes pour configurer votre application de sorte qu'elle puisse s'adapter aux différentes langues et conventions de mise en forme, de manière évolutive.

Spécifier les langues prises en charge par votre application

Pour vous assurer que les langues sont correctement résolues, spécifiez les langues prises en charge par votre application à l'aide de la propriété resConfigs dans le fichier build.gradle au niveau du module.

L'exemple de code suivant montre comment utiliser resConfigs pour désigner les langues prises en charge. Dans cet exemple, l'application prend en charge l'anglais et l'espagnol.

Groovy

android {
    defaultConfig {
        ...
        resConfigs "en", "es"
    }
}

Kotlin

android {
    defaultConfig {
        ...
        resConfigs("en", "es")
    }
}
En raison de la manière dont le système de compilation fusionne les ressources de votre application et de ses dépendances, vous devez spécifier les langues prises en charge de cette manière pour vous assurer que les paramètres linguistiques de l'utilisateur sont reçus correctement.

API LocaleList

À partir d'Android 7.0 (niveau d'API 24), Android expose l'API LocaleList.getDefault() qui permet aux applications d'interroger directement la liste des langues spécifiées par un utilisateur. Cette API vous permet de créer un comportement plus sophistiqué des applications et d'optimiser l'affichage du contenu. Par exemple, la recherche peut afficher des résultats dans plusieurs langues en fonction des paramètres de l'utilisateur. Les applications de navigateur évitent de proposer de traduire des pages dans une langue que l'utilisateur connaît déjà. Les applications de clavier, quant à elles, peuvent activer automatiquement toutes les dispositions de clavier appropriées.

Outils de mise en forme

Jusqu'à Android 6.0 (niveau d'API 23), Android n'acceptait qu'un ou deux paramètres régionaux pour de nombreuses langues courantes (en, es, ar, fr, ru). Comme il n'y avait que quelques variantes pour chaque langue, les applications pouvaient s'en sortir en stockant des nombres et des dates sous forme de chaînes codées en dur dans les fichiers de ressources. Cependant, avec l'élargissement de l'ensemble des paramètres régionaux pris en charge par Android, il peut exister des différences importantes de format pour les dates, les heures, les devises et informations similaires, même au sein d'un même paramètre régional. Le codage en dur de vos formats peut être source de confusion pour les utilisateurs finaux. Par conséquent, lorsque vous développez pour Android 7.0 ou versions ultérieures, assurez-vous d'utiliser des outils de mise en forme au lieu de coder en dur les nombres et les chaînes de date.

Par exemple, Android 7.0 ou version ultérieure est compatible avec 27 paramètres régionaux arabes. Ces paramètres régionaux peuvent partager la plupart des ressources, mais certains privilégient les chiffres ASCII, tandis que d'autres privilégient les chiffres natifs. Par exemple, lorsque vous souhaitez créer une phrase avec une variable à chiffres, telle que "Choisissez un code à quatre chiffres", utilisez des outils de mise en forme comme indiqué ci-dessous :

 format(locale, "Choose a %d-digit PIN", 4)