précédent | suivant | table des matières

Internationalisation/Localisation

Sommaire
  1. Définitions
  2. Locale
  3. Séparation code/données
  4. Formatage
Démonstration

1 Définitions.

L'internationalisation d'un logiciel consiste à construire le logiciel avec une architecture qui permet d'adapter facilement  le logiciel à différentes langues ou pays. Il faut identifier dans le logiciel tout ce qui dépend d'un pays, ou d'un culture particulière :

La localisation d'un logiciel est l'opération qui consiste à ajouter au logiciel les ressources nécessaires à son adaptation à une langue et un pays donné. Le site de SUN

2 Locale.

La classe Locale permet d'identifier ou de modifier,  le pays et la langue utilisée par l'ordinateur sur lequel s'exécute l'application.

Constructeurs :

Locale(String langue) 
Construit une Locale pour une langue.
Locale(String langue, String pays)
Construit une Locale pour une langue et un pays.
Locale(String langue, String pays, String variant) 
Construit une Locale pour une langue, un pays et un variant.

Attributs de classe : la classe Locale contient les attributs suivants :

Locale FRANCE = new Locale("fr","FR",""); 
Locale GERMANY = new Locale("de","DE","");
Locale ITALY = new Locale("it","IT","");
Locale JAPAN = new Locale("ja","JP","");
Locale KOREA = new Locale("ko","KR","");
Locale CHINA = new Locale("zh","CN","");
Locale PRC = new Locale("zh","CN","");
Locale SIMPLIFIED_CHINESE = new Locale("zh","CN","");
Locale TRADITIONAL_CHINESE = new Locale("zh","TW","");
Locale TAIWAN = new Locale("zh","TW","");
Locale UK = new Locale("en","GB","");
Locale US = new Locale("en","US","");
Locale CANADA = new Locale("en","CA","");
Locale CANADA_FRENCH = new Locale("fr","CA","");
Locale ENGLISH = new Locale("en","","");
Locale FRENCH = new Locale("fr","","");
Locale GERMAN = new Locale("de","","");
Locale ITALIAN = new Locale("it","","");
Locale JAPANESE = new Locale("ja","","");
Locale KOREAN = new Locale("ko","","");
Locale CHINESE = newLocale("zh","","");

Méthodes de classe :

Locale[] getAvailableLocales()
Permet d'obtenir la liste des Locale disponibles.
Locale getDefault()
Permet d'obtenir la Locale par défaut.
void setDefault(Locale l)
Modifie la Locale par défaut.
String[] getISOCountries()
Retourne la liste des codes  ISO 3166  des pays :  FR, CA, UK ...
String[] getISOLanguages()
Retourne la liste des codes  ISO 639  des langues :  fr, en, zh ...

Méthodes d'instance :

String getCountry()
Retourne le code pays. "FR"
String getDisplayCountry()
String getDisplayCountry(Locale l)
Retourne le pays de la locale dans la langue de la locale, ou de la locale l."France"
String getDisplayLanguage()
String getDisplayLanguage(Locale l) 
Retourne la langue de la locale par défaut ou de la locale dans la langue de la locale, ou de la locale l.
Locale.getDefault().getDisplayLanguage()                     "français"
Locale.getDefault().getDisplayLanguage(Locale.UK)   "French"
String getDisplayName(
String getDisplayName(Locale l)
La langue et le pays entre parenthèses.
String getDisplayVariant()
String getDisplayVariant(Locale l)
Retourne le variant, de la locale par défaut ou de la locale l
String getISO3Country() 
Retourne le code du pays sur 3 lettres
String getISO3Language() 
Retourne le code de la langue sur 3 lettres.
String getLanguage() 
Retourne le code langue. "fr"
String getVariant() 
Retourne le variant.

3 séparation code/données spécifiques à la Locale.

Une des phases essentielles de l'internationalisation d'une application est de séparer le code du programme des données spécifiques à la localisation du programme. 

La classe RessourceBundle permet d'utiliser des paquets de ressources. Un paquet de ressources est un ensembles de fichiers dont les noms sont construits de la façon suivante : nomDeBase{_langue{_pays}}.properties. Chaque fichier est ainsi associé à une locale, qui peut exister ou non. Un fichier est constitué d'un couple (clé, valeur).

Exemple :

Programme Fichier messages.properties
ResourceBundle bundle = 
   ResourceBundle.getBundle("messages",
        Locale.getDefault());
...
this.setTitle(bundle.getString("titre"));
titre=Bonjour
...
Fichier messages_en.properties
titre=Hello
...

Ajouter une localisation  dans le pays YY et la langue xx consiste à ajouter un fichier messages_xx_YY.properties.

Supposons que la locale par défaut soit constituée du langage ll, du pays PP et du variant var.

La méthode getBundle( String nom) calcule un ResourceBundle constitué des fichiers de la liste : 


nom_ll_PP_var.properties
nom_ll_PP.properties
nom_ll.properties
nom.properties

La méthode  getString(String clé) de la classe ResourceBundle retourne la chaîne de caractères associée à la clé dans le resourceBundle : la recherche se fait dans les fichiers dans l'ordre donné précédemment. Si la clé ou les fichiers ne sont pas trouvés, une exception  MissingResourceException est levée.

4 Format des dates, nombres, monnaies.

Voir ici.

Exemple :

Date d = new Date();
DateFormat df  = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault());
DateFormat dfCourt = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
NumberFormat nf   = NumberFormat.getCurrencyInstance();
ResourceBundle bundle = ResourceBundle.getBundle(...);

df.format(d);       // une date format long 
dfCourt.format(d);  // une date format court
nf.format(1234.56); // monnaie

haut de la page