Android
Internationalisation et localisation (I18N et L10N)
Recherche…
Introduction
L'internationalisation (i18n) et la localisation (L10n) permettent d'adapter les logiciels en fonction des différences de langue, des différences régionales et du public cible.
Internationalisation: processus de planification pour la localisation future, c.-à-d. Rendre la conception du logiciel flexible dans une mesure telle qu'elle peut s'adapter et s'adapter aux futurs efforts de localisation.
Localisation: processus d'adaptation du logiciel à une région / un pays / un marché particulier (paramètres régionaux).
Remarques
Pour tester un périphérique en vue de sa localisation, le périphérique ou l'émulateur peut être redémarré dans un environnement local spécifique en utilisant adb
comme suit:
- Exécutez adb à l'aide de la commande:
adb shell
- Exécutez la commande suivante à l'invite de commande adb:
setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
[code de langue BCP-47] le code spécifique à la langue décrit ici: codes BCP47
Par exemple, pour vérifier la localisation en japonais dans l'application, utilisez la commande: setprop persist.sys.locale ja-JP;stop;sleep 5;start
Planification de la localisation: activez le support RTL dans Manifest
La prise en charge de RTL (de droite à gauche) est un élément essentiel de la planification pour i18n et L10n. Contrairement à la langue anglaise écrite de gauche à droite, de nombreuses langues comme l'arabe, le japonais, l'hébreu, etc. sont écrites de droite à gauche. Pour attirer un public plus global, il est judicieux de planifier vos mises en page de manière à ce qu’elles prennent en charge ces langages dès le début du projet, de manière à faciliter l’ajout de la localisation par la suite.
RTL support peut être activé dans une application Android en ajoutant la supportsRtl
tag dans le AndroidManifest
, comme suit:
<application
...
android:supportsRtl="true"
...>
...
</application>
Planification de la localisation: ajout du support RTL dans les mises en page
À partir du SDK 17 (Android 4.2), le support RTL a été ajouté dans les dispositions Android et constitue une partie essentielle de la localisation. À l'avenir, la notation left/right
dans les mises en page doit être remplacée par la notation de start/end
. Si, toutefois, votre projet a une valeur minSdk
inférieure à 17
, vous devez utiliser les deux notations left/right
et start/end
.
Pour les mises en page relatives, alignParentStart
et alignParentEnd
, comme ceci:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
Pour spécifier la gravité et la gravité de la disposition, une notation similaire doit être utilisée, comme ceci:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|start"
android:gravity="left|start"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|end"
android:gravity="right|end"/>
Les rembourrages et les marges doivent également être spécifiés en conséquence, comme ceci:
<include layout="@layout/notification"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginStart="12dp"
android:paddingLeft="128dp"
android:paddingStart="128dp"
android:layout_toLeftOf="@id/cancel_action"
android:layout_toStartOf="@id/cancel_action"/>
<include layout="@layout/notification2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:layout_marginEnd="12dp"
android:paddingRight="128dp"
android:paddingEnd="128dp"
android:layout_toRightOf="@id/cancel_action"
android:layout_toEndOf="@id/cancel_action"/>
Planification de la localisation: test des dispositions pour RTL
Pour tester si les mises en page créées sont compatibles RTL, procédez comme suit:
Allez dans Paramètres -> Options du développeur -> Dessin -> Force la direction de la mise en page RTL
L'activation de cette option obligerait le périphérique à utiliser les paramètres régionaux RTL et vous pouvez facilement vérifier toutes les parties de l'application pour la prise en charge RTL. Notez que vous n'avez pas besoin d'ajouter de nouveaux paramètres linguistiques / locaux jusqu'à ce stade.
Codage pour la localisation: création de chaînes et de ressources par défaut
La première étape du codage de la localisation consiste à créer des ressources par défaut. Cette étape est tellement implicite que de nombreux développeurs n'y pensent même pas. Cependant, la création de ressources par défaut est importante car si le périphérique s'exécute sur des paramètres régionaux non pris en charge, il charge toutes ses ressources à partir des dossiers par défaut. Si même une des ressources est manquante dans les dossiers par défaut, l'application se bloquerait simplement.
L'ensemble de chaînes par défaut doit être placé dans le dossier suivant à l'emplacement spécifié:
res/values/strings.xml
Ce fichier doit contenir les chaînes dans la langue que la majorité des utilisateurs de l'application sont censés parler.
En outre, les ressources par défaut de l'application doivent être placées dans les dossiers et emplacements suivants:
res/drawable/
res/layout/
Si votre application nécessite des dossiers tels que anim
ou xml
, les ressources par défaut doivent être ajoutées aux dossiers et emplacements suivants:
res/anim/
res/xml/
res/raw/
Codage pour la localisation: fournir des chaînes alternatives
Pour fournir des traductions dans d'autres langues (locales), nous devons créer un strings.xml
dans un dossier distinct en respectant la convention suivante:
res/values-<locale>/strings.xml
Un exemple pour la même chose est donné ci-dessous:
Dans cet exemple, nous avons des chaînes en anglais par défaut dans le fichier res/values/strings.xml
, des traductions en français sont fournies dans le dossier res/values-fr/strings.xml
et des traductions en japonais sont fournies dans le dossier res/values-ja/strings.xml
D'autres traductions pour d'autres paramètres régionaux peuvent également être ajoutées à l'application.
Une liste complète des codes de paramètres régionaux peut être trouvée ici: codes ISO 639
Chaînes non traduisibles:
Votre projet peut avoir certaines chaînes à ne pas traduire. Les chaînes qui sont utilisées comme clés pour SharedPreferences ou des chaînes de caractères utilisées comme symboles font partie de cette catégorie. Ces chaînes ne doivent être stockées que dans le strings.xml
par défaut strings.xml
et doivent être marquées avec un attribut translatable="false"
. par exemple
<string name="pref_widget_display_label_hot">Hot News</string>
<string name="pref_widget_display_key" translatable="false">widget_display</string>
<string name="pref_widget_display_hot" translatable="false">0</string>
Cet attribut est important car les traductions sont souvent effectuées par des professionnels bilingues. Cela permettrait à ces personnes impliquées dans la traduction d'identifier les chaînes à ne pas traduire, économisant ainsi du temps et de l'argent.
Codage pour la localisation: fournir des mises en page alternatives
La création de dispositions spécifiques à une langue est souvent inutile si vous avez spécifié la notation de start/end
correcte, comme décrit dans l'exemple précédent. Cependant, il peut arriver que les mises en page par défaut ne fonctionnent pas correctement dans certaines langues. Parfois, les mises en page de gauche à droite peuvent ne pas être traduites pour les langages RTL. Il est nécessaire de fournir les dispositions correctes dans de tels cas.
Pour fournir une optimisation complète des mises en page RTL, nous pouvons utiliser des fichiers de mise en page entièrement séparés en utilisant le ldrtl
ressource ldrtl
( ldrtl
signifie layout-direction-right-left}). Par exemple, nous pouvons enregistrer vos fichiers de mise en page par défaut dans res/layout/
et nos mises en page optimisées RTL dans res/layout-ldrtl/
.
Le qualificatif ldrtl
est idéal pour les ressources pouvant être dessinées, de sorte que vous pouvez fournir des graphiques orientés dans la direction correspondant à la direction de lecture.
Voici un excellent article décrivant la priorité des dispositions ldrtl
: ldrtl
page spécifiques à la langue