Internationalisation

 

Introduction

On peut mettre du texte directement dans le code JAVA, mais si votre application doit pouvoir fonctionner dans la langue de différents pays, il sera difficile de maintenir votre application ! C'est d'ailleurs pour cette raison qu'Eclipse soulignera systématiquement en jaune une chaîne de caractères.

Nous avons déjà rencontré une solution qui est employée pour afficher du texte dans nos différents écrans (HelloWorld est le premier). Il s'agit d'utiliser un fichier XML (strings.xml) qui se situe sous res/values.

Pour rappel, ce fichier est entre autre composé d'une clef et d'un texte qui sera affiché par exemple comme label d'un radio bouton, d'un texte view, ...

Par défaut, jusqu'ici, nous n'utilisions qu'un fichier strings.xml. Mais ce fichier peut ne pas être seul. En fait, pour avoir une application utilisable dans la langue de différents pays, il suffit de créer un fichier strings.xml dans la langue de ses pays. Il suffira d'utiliser la même clef dans chacun de ses fichiers strings.xml et de traduire le texte correspondant dans les différentes langues.

Ces fichiers strings.xml seront localisés dans des répertoires différents, correspondant tout simplement au pays.

C'est ainsi que vous pourrez trouver un strings.xml sous res/values-fr pour la france, res/values-en pour l'angleterre ou res/values-es pour l'espagne, ...

Lorsque votre application sera lancée, elle récupèrera la langue actuellement en cours sur votre appareil, celle que vous avez défini sous paramètres (réglages pour sony) / langue et clavier. Puis elle recherchera la ressource correspondant à la langue en cours. Si elle ne la trouve pas, elle utilisera la ressource par défaut (ici res/value/strings.xml qui pourra être en anglais, français, ..., bref ce que vous voulez, mais comme il s'agit de la resource par défaut, il est préférable d'utiliser une langue connue par une majorité de personne !).

 

Les autres répertoires sous res

Les explications données précédement concernent les strings, mais ce n'est pas tout, une image peut contenir du texte, une phrase être dans la langue d'un pays... Il sera donc nécessaire d'avoir là aussi plusieurs fichiers.

En fait, tous les répertoires sous res peuvent avoir leur équivalent associé à une langue.

 

Répertoires res/xxx obligatoires

Par défaut, le système charge res/values/strings.xml. Ce fichier est donc obligatoire !

Mais ce n'est pas le seul, comme dit précédement, si une ressource n'existe pas dans langue en cours, l'application prendra celle par défaut donc, certaines ressources deviennent obligatoire dans une application:

res/drawable/ qui est nécessairement présent pour ne serait ce que pour l'icone de votre application (d'autres drawable peuvent exister si vous voulez définir la même image dans différentes résolutions)
res/layout/ là aussi nécessaire pour votre layout ! (qui pourra aussi être subdivisé en d'autre layout répondant mieux à la résolution de l'appareil lors de l'exécution de votre application)

Ensuite, les répertoires res/... sans déclaration de pays deviennent obligatoires lorsqu'il existe au moins un répertoire équivalent dans une langue.
res/anim/ nécessaire si vous avez défini au moins un res/anim-<pays>
res/xml/ nécessaire si vous avez défini au moins un res/xml-<pays>
res/raw/ nécessaire si vous avez défini au moins un res/raw-<pays>