À 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 ressourceses_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 :
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 :
Paramètres utilisateur | Ressources de l'application | Résolution des ressources |
---|---|---|
|
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.
Paramètres utilisateur | Ressources de l'application | Résolution des ressources |
---|---|---|
|
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") } }
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)