Internationaliser son application Android

international-spirit

Introduction

Beaucoup d’entre vous vont être confronté lors du développement d’une application Android, à rendre celle-ci international. Qui dit internationalisation dit gestion de plusieurs langues.

Vous avez de la chance c’est une tâche assez simple en Android.

Are you ready ?

En route pour la traduction

Avant de commencer la traduction, nous allons faire un petit rappel de la façon dont-on déclare des textes en Android.

Le fichier string.xml

Le fichier string.xml est l’endroit où l’on déclare les textes en Android. C’est bien de savoir dans quel fichier on le déclare, mais il est où ce fichier ?

Le fichier se trouve dans le répertoire res > values. Alors vous l’avez trouvé ?
Capture d’écran 2015-02-27 à 17.50.14 Regardons maintenant ce que contient le fichier.

<resources>

 <string name="app_name">Internationalisation</string>
 <string name="hello_world">Hello world!</string>
 <string name="action_settings">Settings</string>

</resources>

Décomposons une ligne du fichier pour en comprendre son fonctionnement.

Elle contient l’attribut “name” . Cet attribut va être la clé permettant d’utiliser le texte dans notre layout ou dans le code java. Et vous avez surement compris que l’on déclare le texte entre les deux balises <string></string>.

Pour résumer, le fichier strings.xml fonctionne avec des couples clés/valeurs.

Et là vous vous dîtes, c’est bien on déclare un texte mais on ne va pas faire une clé pour chaque langue ?

Non , Mr Google a été plus intelligent que ça.

Les extensions de dossier

Si vous avez suivi les tutoriels (partie 1 et partie 2) ou si vous avez des connaissances de base en Android, vous connaissez les extensions pour gérer le support multi-écran.

Android est reparti du même principe pour la gestion du support multi-langue.

Concrètement, le dossier values contenant le fichier strings.xml va servir de langue de base. Pour rajouter une langue par exemple, si le fichier values>string.xml contient de l’anglais et que l’on veut rajouter la traduction française, nous allons créer un dossier values-fr contenant un fichier string.xml.

Rien de plus simple clic-droit sur res et New> Android ressource directory et comme nom values-fr.

Pour créer le fichier strings.xml, soit vous copiez coller celui de base soit vous créez un nouveau fichier de ressource.
Pour la création d’un nouveau fichier de ressource, il suffit seulement de faire un clic droit sur le dossier values-fr et New>Values resource file.

Et là une seule question doit vous trotter dans la tête, mais que contient ce deuxième fichier string.xml ?

Ce deuxième fichier va contenir les mêmes clés que le premier fichier mais avec la traduction comme valeur. Un petit exemple ? Nous avions la clé “hello_world” avec la valeur “Hello world !” dans le fichier strings.xml de base.

Nous allons donc créer dans values-fr>strings.xml, une ressource avec la clé “hello_world” et la valeur “Bonjour tous le monde !” ce qui donne :

<string name="hello_world">Bonjour tous le monde !</string>

Un exemple d’utilisation

Maintenant que nous avons créé nos fichiers de langues, il me reste plus qu’à vous expliquer leur utilisation.

Rien de plus simple, ouvrons le fichier activity_main.xml qui contient un TextView avec la clé @string/hello_world.

<TextView
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Il ne manque plus qu’une question à répondre, comment le système Android sait quelle valeur affichée avec la clé ? Il affiche “Hello world !” ou “Bonjour tous le monde” ?

En fait le système Android va afficher le texte en fonction de la langue du téléphone. Rien à gérer du côté de notre application, plutôt pratique non ?. Et si la personne a une langue non renseignée par une de nos extensions ? Dans ce cas le système Android affichera le fichier strings.xml de base (celui inclus dans le répertoire sans extension)

 

fr_androiddefault_android

Voilà c’est la fin du tutoriel, vous pouvez dés à présent créer une application qui pourra être diffusé à l’international.

Retrouvez le code source de l’application à l’adresse suivante :
https://github.com/florent37/TutosAndroidFrance/tree/master/Internationalisation

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *