Tutoriel de librairie utilisant Nuiton I18n (utilisation de Maven)

Pourquoi un tutoriel différent pour une librairie et pour une application finale ?

Lorsque l'on crée une application finale, au moment du build, on crée un bundle regroupant les chaînes de l'application et de ses dépendances afin d'optimiser le chargement de l'application (on peut ainsi économiser jusqu'à plusieurs secondes au démarrage). Lorsque l'on crée une librairie, aucun bundle n'est réalisé, l'utilisation et la configuration de la librairie est donc plus simple.

Le tutoriel

Dans ce tutoriel nous allons créer une librairie avec une classe unique qui va juste afficher un message. C'est ce message qui sera traduit.

Créons le projet Maven et configurons le plugin Nuiton I18n

Créons un projet Maven standard. Dans le pom.xml, nous allons configurer le plugin Maven Nuiton I18n.

<plugin>
    <groupId>org.nuiton.i18n</groupId>
    <artifactId>i18n-maven-plugin</artifactId>
    <version>${projet.version}</version>
    <executions>
        <execution>
            <goals>
                <goal>parserJava</goal>
                <goal>gen</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Dans la configuration du plugin, nous spécifions les goals à effectuer. Le goal parserJava extrait toutes les chaînes de charactère à traduire du code java. Le goal gen récupère le fichier de ressources contenant les chaînes déjà traduites et y ajoute les chaînes extraites par le goal parserJava qui ne sont pas déjà présentes. Vous pouvez ensuite traduire les chaînes.

Afin que le plugin fonctionne, il ne faut pas oublier d'ajouter la librairie Nuiton I18n dans les dépendances.

<dependency>
    <groupId>org.nuiton.i18n</groupId>
    <artifactId>nuiton-i18n-api</artifactId>
    <version>${projet.version}</version>
    <scope>compile</scope>
</dependency>

Comme nous réalisons un import static, il faut configurer le plugin maven de compilation

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
        <showDeprecation>true</showDeprecation>
        <showWarnings>true</showWarnings>
    </configuration>
</plugin>

Et pour récupérer le plugin et la librairie Nuiton I18n, il ne faut pas oublier d'ajouter les dépots nuiton.

<repositories>

    <!-- depot des releases nuiton -->

    <repository>
        <id>nuiton.release</id>
        <name>NuitonReleaseRepository</name>
        <url>http://maven.nuiton.org/release</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
            <checksumPolicy>warn</checksumPolicy>
        </releases>
    </repository>

    <!-- depot des snapshots nuiton -->

    <repository>
        <id>nuiton.snapshot</id>
        <name>NuitonSnapshotRepository</name>
        <url>http://maven.nuiton.org/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
            <checksumPolicy>fail</checksumPolicy>
        </snapshots>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>

</repositories>

<pluginRepositories>

    <!-- depot des releases nuiton -->

    <pluginRepository>

        <id>nuiton.release</id>
        <name>NuitonReleaseRepository</name>
        <url>http://maven.nuiton.org/release</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
            <checksumPolicy>warn</checksumPolicy>
        </releases>
    </pluginRepository>

    <!-- depot des snapshots nuiton -->

    <pluginRepository>
        <id>nuiton.snapshot</id>
        <name>NuitonSnapshotRepository</name>
        <url>http://maven.nuiton.org/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
            <checksumPolicy>fail</checksumPolicy>
        </snapshots>
        <releases>
            <enabled>false</enabled>
        </releases>
    </pluginRepository>

</pluginRepositories>

Créons notre librairie

Notre librairie, pour faire simple, ne contiendra qu'une classe et une méthode statique

package org.myOrganisation.myLibrary;

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

public class myLibrary {

    static public void myMethod(){
        System.out.println(_("My message to translate"));
    }
}

Premier build

Lorsque vous buildez votre librairie pour la première fois avec la commande mvn compile, vous devez obtenir la création de deux nouveaux fichiers de ressource contenant chacun la chaîne à traduire sans traduction.

Vous pouvez traduire la chaîne de charactère dans les deux langues, vous aurez alors la traduction disponibles dans vos prochains builds.

Second build

Si vous buildez de nouveau la librairie, puis l'intégrez dans une application finale utilisant Nuiton I18n, le message sera affiché traduit.

Sources du tutoriel