API de localisation

À partir de la version 3.5.0 du Wrapper, la base de code a été internationalisée et est capable de s'exécuter de manière localisée. La méthode d'internationalisation et de localisation du Wrapper peut également être utilisée pour localiser vos applications Java avec relativement peu d'effort de codage.

Les étapes de base pour implémenter une localisation basée sur le Wrapper sont :

Vous pouvez localiser votre application dans n'importe quelle langue prise en charge par votre distribution et avec n'importe quel OS : japonais, espagnol, allemand, français, russe, chinois, coréen, italien, portugais, néerlandais, danois, hongrois, hindi, grec, arabe, roumain, ukrainien, turc, malais. (Si une langue que vous souhaitez est manquante, n'hésitez pas à nous contacter et nous l'ajouterons dans la prochaine version.)

1. Ajouter une instance WrapperResources

Pour utiliser les méthodes de localisation du Wrapper, vous devez ajouter une instance WrapperResources. La méthode la plus recommandée consiste à placer une variable statique contenant l'instance WrapperResources dans une classe unique de votre projet et à créer une méthode « getter » statique. Ainsi, les classes de votre projet peuvent accéder à WrapperResource et localiser les messages. Dans la méthode getter, vous pouvez créer la classe WrapperResource en appelant WrapperManager.loadWrapperResources(java.lang.String, java.lang.String).

instance WrapperResource statique et méthode getter
private static WrapperResources m_res;

public static WrapperResources getRes()
{
    if ( m_res == null )
    {
            // Synchronize and then recheck to avoid this method always synchronizing.
            synchronized( Unique.class )
            {
                if ( m_res == null )
                {
                    m_res = WrapperManager.loadWrapperResources( "myapp",
                        WrapperSystemPropertyUtil.getStringProperty( "wrapper.lang.folder", "../lang" ) );
                }
            }
    }
    return m_res;
}

Le premier paramètre de WrapperManager.loadWrapperResources() est le domaine, c'est-à-dire le nom à partir duquel le Wrapper tentera de charger le fichier de ressources. Par exemple, avec le getter ci-dessus, le Wrapper tentera de charger le fichier myapp_XX.mo (XX est l'abréviation de la langue) à partir de l'emplacement spécifié dans la propriété wrapper.lang.folder. Si cette propriété n'est pas définie, il tentera de charger depuis « ../lang ».

2. Marquer les messages pour la localisation

Marquer tous les messages que vous souhaitez localiser est probablement la partie la plus chronophage de la mise en place de la localisation. Vous devez parcourir votre projet et encapsuler vos messages avec la méthode getString().

exemple simple de getString
System.out.println( Unique.getRes().getString( "A test message." ) );

Si vous devez insérer des variables dans votre sortie, veuillez utiliser la méthode getString(java.lang.String, java.lang.Object[]). Toutes les variables sont placées dans le tableau Object. Par commodité, WrapperResources fournit également quelques méthodes wrapper pour jusqu'à 5 Objects.

exemple de getString avec 2 variables
int number = 2;
String msg = "test";
System.out.println( Unique.getRes().getString( "A {0} message with {1} variables.", msg, number ) );

Le premier paramètre de la méthode getString() peut également définir divers formats. Pour plus d'informations à ce sujet, veuillez consulter la « documentation java.text.MessageFormat ».

NOTE

Veuillez noter que les versions de Java inférieures à 1.6 ne peuvent pas convertir les types primitifs (int, boolean, float, etc.) en Objects. Dans ce cas, veuillez envisager d'utiliser la classe wrapper correspondante (java.lang.Integer, java.lang.Boolean, java.lang.Float, etc.)

3. Créer et préparer les fichiers mo

L'organisation du processus de localisation du Wrapper est similaire à GNU gettext. Par conséquent, le moyen le plus simple consiste à créer le modèle de ressources de messages avec xgettext.

Utiliser xgettext pour créer le modèle de ressources de messages :
xgettext -d myapp -o ./lang/myapp.pot [project source files]

Cela créera un fichier pot. Veuillez noter que, pour les fichiers Java, xgettext recherche le mot-clé « getString("..") ». Si vous souhaitez ajouter un autre mot-clé, veuillez l'ajouter avec le paramètre « -k [keyword] ». Les fichiers de ressources pour n'importe quelle langue sont basés sur ce modèle. Pour créer un fichier de ressources pour une langue donnée, exécutez la commande ci-dessous.

Utiliser xgettext pour créer la ressource de messages :
msginit --locale=ja --input=./lang/myapp.pot --output=./lang/myapp_ja.po

Cela produira un fichier po modifiable que vous pourrez traduire. Vous pouvez utiliser soit un éditeur de texte brut, soit un éditeur (par ex. « poedit », ou « GNOME Translation Editor », etc.) pour les fichiers po.

Une fois la traduction terminée, veuillez compiler le fichier po (à l'aide d'un éditeur po ou de msgfmt), ce qui produira le fichier mo binaire. Si ce n'est pas déjà fait, placez le fichier mo avec les autres fichiers mo du Wrapper. Votre application a été localisée !

La configuration de la localisation de votre application est terminée ! Pour plus d'informations sur la façon d'exécuter votre application, veuillez consulter les propriétés wrapper.lang.