Ici comme pour les services et les ressources vous pourrez réaliser les exercices de différentes manières:
-
en architecture modulaire ou non (commencer par l’option "non modulaire")
-
avec un déploiement sur fichier ou en jar.
Exercices
Internationalisation simple
Réalisation d’une internationalisation simple.
Création dans le répertoire config
de fichiers de traduction (fichiers ".properties" avec clef_message = traduction
).
On aura:
-
un fichier de référence (par exemple
messages.properties
) -
des fichiers par langue ou par combinaison langue/pays. Les noms doivent être de la forme nomfichier_langue_pays.properties (donc par exemple
messages_fr_FR.properties
)
Les messages à traduire sont dans le lanceur de l’application graphique (titre de la fenêtre, invite de saisie pour l’utilisateur).
On utilisera la méthode getBundle
de resourceBundle
et on lui passera une hiérarchie package.clef_bundle
(par exemple : com.garage.vehicules.config.messages
).
Puis pour un bundle on utilisera la méthode getString(clef)
pour obtenir la traduction.
Pour tester les différentes traductions changer la langue de l’utilisateur
dans les options de la machine virtuelle
(-Duser.language=
code langue -Duser.country=
code pays).
Propositions de solutions :
-
le fichier de traduction de référence (nota: ce fichier peut avoir un statut de déploiement spécial -voir le chapitre sur les jars-)
Reprendre l’exercice en utilisant un service standard d’internationalisation.
Exemples
Internationalisation simple
package com.garaje.testservice;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ResourceBundle;
import org.labs.ihm.QuestionReponse;
import org.labs.ihm.Repondeur;
public class LanceurCatalogue2 {
public static void main(String[] args) throws Exception {
ResourceBundle bundle = ResourceBundle.getBundle(
"com.garaje.testservice.config.messages");
String messVehiculeCatalogue = bundle.getString("vehicleCatalog");
String messInvite = bundle.getString("pleaseType");
final Frame fen = new Frame(messVehiculeCatalogue);
Repondeur repondeur = new RepondeurCatalogueVehicule() ;
fen.add(new QuestionReponse(messInvite, repondeur));
fen.pack() ;
fen.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
fen.dispose() ;
}
});
fen.setVisible(true);
}
}
vehicleCatalog = Vehicle Catalog
pleaseType = Please Type part of Vehicle Name
vehicleCatalog = Catalogue de Vehicules
pleaseType = merci de saisir tout ou partie de la marque