Nuiton I18n Hello World

Ce premier tutorial a pour objectif de vous montrer comment se servir de la librairie Nuiton I18n de la manière la plus simple qui soit. Nous allons créer une classe Main qui affiche le texte Hello World, puis nous allons traduire ce texte en plusieures langues.

La classe java correspondante ressemble à ça :

import static org.nuiton.i18n.I18n.t;
import static org.nuiton.i18n.I18n.n;

class HelloWorld {

    public static void main (String[] args){
        System.out.println(_("Hello World"));
        System.out.println(n_("Goodbye World"));
    }
}

Si on compile et qu'on lance cette classe (attention a bien mettre les jar de nuiton-i18n, commons-logging et commons-beanutils dans le classpath ou ça ne fonctionnera pas), on obtiendra le résultat suivant :

Hello World
Goodbye World

Cherchons maintenant à traduire ces chaînes de charactères. Nous allons créer un fichier de ressources nommé helloWorld_fr_FR.properties que nous mettrons dans un dossier i18n et qui contient les chaînes traduites dans la langue souhaitée. Par exemple ici en français (Attention, tous les caractères spéciaux et espaces doivent être échappés par  ).

Hello\ World = Bonjour le monde
Goodbye\ World = Au revoir le monde

On recompile et teste la classe (mettre le répertoire contenant i18n dans le classpath ou Nuiton I18n ne récupèrera pas le fichier de propriété). On s'aperçoit que rien n'a changé, mais cela est tout à fait normal, le système n'a pas été initialisé. Nous allons donc modifier notre classe en rajoutant la ligne

org.nuiton.i18n.I18n.init(null, Locale.FRANCE);

avant le premier appel à la librairie Nuiton I18n. Cela a pour effet de dire à Nuiton I18n quelle langue utiliser (en l'occurence le français). Comme nous mettons l'initializer à null, il utilise celui par défaut. Il recherche donc dans le classpath tous les fichiers i18n/????fr_FR et les charge.

Pour tester il suffit de recompiler et de relancer l'application, vous devriez obtenir :

2 avr. 2010 16:13:29 org.nuiton.i18n.init.I18nInitializer resolvBundles
INFO: 1 bundle(s) found, in 1 file(s).
2 avr. 2010 16:13:29 org.nuiton.i18n.I18nStore init
INFO: 1 bundle(s) found, [1 file(s)].
2 avr. 2010 16:13:29 org.nuiton.i18n.I18nStore addLanguage
INFO: I18nLanguage <locale: fr_FR, nbStences:2>, nbEntries: 1, nbSentences: 2.
Bonjour le monde
Goodbye World

Cela peut parraitre étrange mais c'est tout à fait normal. Les premières lignes vous renseignent de l'évolution de l'initialisation. Ce sont des logs qui proviennent de Nuiton I18n. On peut y voir le nombre de Bundles trouvés. Dans notre cas 1. Et au moment du choix de langue, la locale chargée et le nombre de chaînes trouvées. Dans notre cas : 2. Ensuite apparait notre application traduite. Oui, mais la dernière ligne n'est pas traduite me direz-vous. Et bien si vous reprenez la classe que nous avons écrite, la chaîne Goodbye World est passée en paramètre de la méthode n_() et non de la méthode _(). La méthode n_() indique une chaîne qui est traduite à d'autres endroits de l'application mais qui ne doit pas être traduite ici. Elle est donc remplacée par la chaîne non traduite.

Félicitation, vous venez de traduire votre première application avec Nuiton I18n

Sources du tutoriel

Les sources de ce tutoriel sont téléchargeables ici (zip) ou ici (tar.gz). Elles sont packagées avec les librairies nécessaires à la compilation et l'exécution de cet exemple.