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 :

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