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 Paramètres > Langue et 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 Resourcesactuel :

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_USpour 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.

Screenshot of Resources/drawable and Resources/values folders for multiple cultural identifiers

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>

Screenshot of multiple values folders, each containing a Strings.xml file

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 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 laquantity 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 un seul, flag.png, a localisé des copies dans d’autres répertoires.

Screenshot of multiple drawable folders, each containing one or more localized .png files

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, TextDirectionet 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 :

Screenshot of Tasky app in Arabic

La capture d’écran suivante montre l’exemple Tasky localisé en hébreu :

Screenshot of Tasky app in Hebrew

Le texte RTL est localisé à l’aide de fichiers Strings.xml 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.