debutant avec ResourceBundle
bonjour;
je vient de debuter avec les Ressource Bundles; bon j'ai trouver un exemplpe dans un autre site; j'ai suivi toutes les etapes mais a la fin j'ai eu des erreurs:
mon projet contient ces fichiers:
une frame simple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
package p;
import javax.swing.*;
public class MyFrame extends JFrame {
// Déclaration des différents composants
private JLabel labelHello;
private JMenuBar menuBar;
private JMenu menuLanguage;
private JMenuItem menuFr;
private JMenuItem menuEn;
private LanguageChooser languageChooser;
// Point dentrée de lapplication
public static void main(String[] args) {
MyFrame fenetre = new MyFrame();
}
public MyFrame() {
// Initialisation standard
super("Application Internationale");
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Création du LanguageChooser
languageChooser = new LanguageChooser(this);
// Création du label
labelHello = new JLabel();
getContentPane().add(labelHello);
// Création de la barre de menu
menuBar = new JMenuBar();
menuLanguage = new JMenu();
menuFr = new JMenuItem("Francais");
menuFr.setActionCommand("menuFr");
menuFr.addActionListener(languageChooser);
menuLanguage.add(menuFr);
menuEn = new JMenuItem("English");
menuEn.setActionCommand("menuEn");
menuEn.addActionListener(languageChooser);
menuLanguage.add(menuEn);
menuBar.add(menuLanguage);
setJMenuBar(menuBar);
// On initailise les valeurs des labels, menus
paintLabelWithLanguage();
// On affiche la fenêtre
setVisible(true);
}
/*
* Méthode qui initialise le texte des différents labels et menus en
* fonction de la langue
*/
protected void paintLabelWithLanguage() {
menuLanguage.setText(LanguageChooser
.getAnInternationalizeString("menuLanguage"));
labelHello.setText(LanguageChooser
.getAnInternationalizeString("labelHello"));
}
} |
la classe LanguageChooser
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
package p;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;
import java.util.ResourceBundle;
public class LanguageChooser implements ActionListener {
// Nom du fichier properties (sans les codes ISO)
private static final String LANGUAGE_FILE = "language";
private static ResourceBundle resourceBundle;
// La fenetre
private MyFrame frame;
public LanguageChooser(MyFrame aFrame) {
frame = aFrame;
resourceBundle = ResourceBundle.getBundle(LANGUAGE_FILE, Locale
.getDefault());
}
// Methode appelee lorsquon selectionne un menu
public void actionPerformed(ActionEvent arg0) {
// On a selectionne le menu anglais
if (arg0.getActionCommand().equals("menuEn")) {
// On choisi le fichier anglais
resourceBundle = ResourceBundle.getBundle(LANGUAGE_FILE, Locale.US);
}
// Sinon on choisi le francais
else if (arg0.getActionCommand().equals("menuFr")) {
// On choisi le francais
resourceBundle = ResourceBundle.getBundle(LANGUAGE_FILE, Locale.FRANCE);
}
//On modifie les labels avec la nouvelle langue
frame.paintLabelWithLanguage();
}
/*
* Methode statique qui permet de recuperer un String du fichier de langue
* en fonction de la cle passee en parametre
*/
public static String getAnInternationalizeString(String key) {
// On retourne la valeur associee a la cle
return resourceBundle.getString(key);
}
} |
et les proprietes:
Language_fr_FR.properties
Code:
1 2 3
|
menuLanguage=Language
labelHello=Hello World! |
Language_en_US.properties
Code:
1 2 3
|
menuLanguage=Language
labelHello=Hello World! |
et enfin la fameuse erreur:
Code:
1 2 3 4 5 6 7 8
|
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name language, locale fr_FR
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:837)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:806)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:577)
at p.LanguageChooser.<init>(LanguageChooser.java:20)
at p.MyFrame.<init>(MyFrame.java:26)
at p.MyFrame.main(MyFrame.java:16) |