Localisation Android
Ce document présente les fonctionnalités de localisation du Kit de développement logiciel (SDK) Android et explique comment y accéder avec Xamarin.
Fonctionnalités de la plateforme Android
Cette section décrit les principales fonctionnalités de localisation d’Android. Passez à la section suivante pour afficher un code et des exemples spécifiques.
Paramètres régionaux
Les utilisateurs choisissent leur langue dans la langue des paramètres > et l’entrée. Cette sélection contrôle à la fois la langue affichée et les paramètres régionaux utilisés (par exemple, pour la mise en forme de date et de nombre).
Les paramètres régionaux actuels peuvent être interrogés via le contexte Resources
actuel :
var lang = Resources.Configuration.Locale; // eg. "es_ES"
Cette valeur est un identificateur de paramètres régionaux qui contient à la fois un code de langue et un code de paramètres régionaux, séparés par un trait de soulignement. Pour référence, voici une liste des paramètres régionaux Java et des paramètres régionaux pris en charge par Android via StackOverflow.
Voici quelques exemples courants :
en_US
pour l’anglais (États-Unis)es_ES
pour espagnol (Espagne)ja_JP
pour japonais (Japon)zh_CN
pour chinois (Chine)zh_TW
pour chinois (Taïwan)pt_PT
pour portugais (Portugal)pt_BR
pour portugais (Brésil)
LOCALE_CHANGED
Android génère android.intent.action.LOCALE_CHANGED
quand l’utilisateur modifie sa sélection de langue.
Les activités peuvent choisir de gérer cela en définissant l’attribut android:configChanges
sur l’activité, comme suit :
[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
ConfigurationChanges = ConfigChanges.Locale | ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
Principes de base de l’internationalisation dans Android
La stratégie de localisation d’Android comporte les éléments clés suivants :
Dossiers de ressources contenant des chaînes localisées, des images et d’autres ressources.
GetText
méthode utilisée pour récupérer des chaînes localisées dans le code@string/id
dans les fichiers AXML, pour placer automatiquement des chaînes localisées dans des dispositions.
Dossiers de ressources
Les applications Android gèrent la plupart du contenu dans les dossiers de ressources, par exemple :
- disposition : contient des fichiers de disposition AXML.
- dessinable : contient des images et d’autres ressources dessinables.
- valeurs : contient des chaînes.
- raw : contient des fichiers de données.
La plupart des développeurs connaissent déjà l’utilisation de suffixes ppp sur le répertoire dessinable pour fournir plusieurs versions d’une image, ce qui permet à Android de choisir la version correcte pour chaque appareil. Le même mécanisme est utilisé pour fournir plusieurs traductions linguistiques en suffixe des répertoires de ressources avec des identificateurs de langue et de culture.
Remarque
Lors de la spécification d’un langage de niveau supérieur comme es
seulement deux caractères sont requis . Toutefois, lorsque vous spécifiez des paramètres régionaux complets, le format du nom du répertoire nécessite un tiret et un r minuscule pour séparer les deux parties, par exemple pt-rBR ou zh-rCN. Comparez ceci à la valeur retournée dans le code, qui a un trait de soulignement (par exemple). pt_BR
Ces deux éléments sont différents de la valeur utilisée par la classe .NETCultureInfo
, qui a un tiret uniquement (par exemple). pt-BR
Gardez ces différences à l’esprit lors de l’utilisation sur les plateformes Xamarin.
format de fichier Strings.xml
Répertoire de valeurs localisées (par exemple, values-es ou values-pt-rBR) doit contenir un fichier appelé Strings.xml qui contiendra le texte traduit pour ces paramètres régionaux.
Chaque chaîne traduit est un élément XML avec l’ID de ressource spécifié comme name
attribut et la chaîne traduite comme valeur :
<string name="app_name">TaskyL10n</string>
Vous devez vous échapper en fonction de règles XML normales, et il name
doit s’agir d’un ID de ressource Android valide (aucun espace ou tiret). Voici un exemple de fichier de chaînes par défaut (anglais) pour l’exemple :
values/Strings.xml
<resources>
<string name="app_name">TaskyL10n</string>
<string name="taskadd">Add Task</string>
<string name="taskname">Name</string>
<string name="tasknotes">Notes</string>
<string name="taskdone">Done</string>
<string name="taskcancel">Cancel</string>
</resources>
Les valeurs du répertoire espagnol contiennent un fichier portant le même nom (Strings.xml) qui contient les traductions :
values-es/Strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">TaskyLeon</string>
<string name="taskadd">agregar tarea</string>
<string name="taskname">Nombre</string>
<string name="tasknotes">Notas</string>
<string name="taskdone">Completo</string>
<string name="taskcancel">Cancelar</string>
</resources>
Avec la configuration des fichiers de chaînes, les valeurs traduites peuvent être référencées dans les dispositions et le code.
Fichiers de disposition AXML
Pour référencer des chaînes localisées dans des fichiers de disposition, utilisez la @string/id
syntaxe. Cet extrait de code XML de l’exemple montre les text
propriétés définies avec des ID de ressource localisés (certains autres attributs ont été omis) :
<TextView
android:id="@+id/NameLabel"
android:text="@string/taskname"
... />
<CheckBox
android:id="@+id/chkDone"
android:text="@string/taskdone"
... />
GetText, méthode
Pour récupérer des chaînes traduites dans le code, utilisez la GetText
méthode et transmettez l’ID de ressource :
var cancelText = Resources.GetText (Resource.String.taskcancel);
Chaînes de quantité
Les ressources de chaîne Android vous permettent également de créer des chaînes de quantité qui permettent aux traducteurs de fournir différentes traductions pour différentes quantités, telles que :
- « Il y a 1 tâche à gauche. »
- « Il y a encore 2 tâches à accomplir. »
(plutôt qu’un générique « Il y a n tâche(s) à gauche »).
Dans le Strings.xml
<plurals name="numberOfTasks">
<!--
As a developer, you should always supply "one" and "other"
strings. Your translators will know which strings are actually
needed for their language.
-->
<item quantity="one">There is %d task left.</item>
<item quantity="other">There are %d tasks still to do.</item>
</plurals>
Pour afficher la chaîne complète, utilisez la GetQuantityString
méthode, en passant l’ID de ressource et la valeur à afficher (qui est passée deux fois). Le deuxième paramètre est utilisé par Android pour déterminer la quantity
chaîne à utiliser, le troisième paramètre est la valeur réellement substituée dans la chaîne (les deux sont requises).
var translated = Resources.GetQuantityString (
Resource.Plurals.numberOfTasks, taskcount, taskcount);`
Les commutateurs valides quantity
sont les suivants :
- zero
- une
- Deux
- few
- divers
- other
Ils sont décrits plus en détail dans la documentation Android. Si une langue donnée ne nécessite pas de gestion « spéciale », ces quantity
chaînes seront ignorées (par exemple, l’anglais utilise one
uniquement et other
; la spécification d’une zero
chaîne n’aura aucun effet, elle ne sera pas utilisée).
Images
Les images localisées suivent les mêmes règles que les fichiers de chaînes : toutes les images référencées dans l’application doivent être placées dans des répertoires dessinables afin qu’il y ait un secours.
Les images spécifiques aux paramètres régionaux doivent ensuite être placées dans des dossiers dessinables qualifiés tels que les dessinables ou drawable-ja (les spécificateurs de ppp peuvent également être ajoutés).
Dans cette capture d’écran, quatre images sont enregistrées dans le répertoire dessinable , mais une seule, flag.png, a localisé des copies dans d’autres répertoires.
Autres types de ressources
Vous pouvez également fournir d’autres types de ressources alternatives spécifiques au langage, notamment les dispositions, les animations et les fichiers bruts. Cela signifie que vous pouvez fournir une disposition d’écran spécifique pour une ou plusieurs de vos langues cibles, par exemple, vous pouvez créer une disposition spécifiquement pour l’allemand qui permet des étiquettes de texte très longues.
Android 4.2 a introduit la prise en charge des langues de droite à gauche (RTL) si vous définissez le paramètre android:supportsRtl="true"
d’application . Le qualificateur "ldrtl"
de ressource peut être inclus dans un nom de répertoire pour contenir des dispositions personnalisées conçues pour l’affichage RTL.
Pour plus d’informations sur le nommage et le secours d’annuaire de ressources, reportez-vous à la documentation Android pour fournir d’autres ressources.
Nom de l’application
Le nom de l’application est facile à localiser à l’aide d’une @string/id
entrée pour l’activité MainLauncher
:
[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Locale)]
Langues de droite à gauche (RTL)
Android 4.2 et versions ultérieures fournit une prise en charge complète des dispositions RTL, décrites en détail dans le blog de support RTL natif.
Lorsque vous utilisez Android 4.2 (niveau d’API 17) et versions ultérieures, les valeurs d’alignement peuvent être spécifiées avec start
et end
non left
et right
(par exemple android:paddingStart
). Il existe également de nouvelles API telles que LayoutDirection
, TextDirection
et TextAlignment
pour aider à créer des écrans qui s’adaptent aux lecteurs RTL.
La capture d’écran suivante montre l’exemple Tasky localisé en arabe :
La capture d’écran suivante montre l’exemple Tasky localisé en hébreu :
Le texte RTL est localisé à l’aide de Strings.xml fichiers de la même façon que le texte LTR.
Test
Veillez à tester soigneusement les paramètres régionaux par défaut. Votre application se bloque si les ressources par défaut ne peuvent pas être chargées pour une raison quelconque (c’est-à-dire qu’elles sont manquantes).
Test de l’émulateur
Reportez-vous à la section Test de Google sur un émulateur Android pour obtenir des instructions sur la définition d’un émulateur sur des paramètres régionaux spécifiques à l’aide de l’interpréteur de commandes ADB.
adb shell setprop persist.sys.locale fr-CA;stop;sleep 5;start
Test d’appareil
Pour tester sur un appareil, modifiez la langue dans l’application Paramètres .
Conseil
Notez les icônes et l’emplacement des éléments de menu afin que vous puissiez rétablir la langue au paramètre d’origine.
Résumé
Cet article décrit les principes de base de la localisation d’applications Android à l’aide de la gestion des ressources intégrée. Vous pouvez en savoir plus sur les applications i18n et L10n pour iOS, Android et multiplateforme (y compris Xamarin.Forms) dans ce guide multiplateforme.