import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.DateFormat; import java.text.MessageFormat; import java.text.NumberFormat; import java.util.Date; import java.util.Locale; import java.util.ResourceBundle; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JTextField; public class Preference2 extends JFrame implements MyPreferences { private JPanel contentPane; private JLabel paysLabel = new JLabel(); private JLabel dateLabel = new JLabel(); private JLabel tempsLabel = new JLabel(); private JLabel montantLabel = new JLabel(); private JTextField paysText = new JTextField(); private JTextField dateText = new JTextField(); private JTextField tempsText = new JTextField(); private JTextField montantText = new JTextField(); /* Menu des langues */ private JMenuBar menuBar = new JMenuBar(); private JMenu menuLangue = new JMenu(); private JCheckBoxMenuItem menuFrancais = new JCheckBoxMenuItem(); private JCheckBoxMenuItem menuEnglais = new JCheckBoxMenuItem(); private ResourceBundle bundle; // on modifie la signature du constructeur pour qu’on puisse change les // langues dynamiquement public Preference2() { // on instancie un objet de localisation "locale" on se basant sur les // preferences. Locale locale = new Locale(Prefs.get(KEYLANGUE, VALLANGUE), Prefs.get( KEYCOUNTRY, VALCOUNTRY)); bundle = ResourceBundle.getBundle("Preference", locale); contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(new GridLayout(4, 2)); /* Agencement du menu */ menuLangue.add(menuEnglais); menuLangue.add(menuFrancais); menuBar.add(menuLangue); setJMenuBar(menuBar); contentPane.add(paysLabel, null); contentPane.add(paysText, null); contentPane.add(dateLabel, null); contentPane.add(dateText, null); contentPane.add(tempsLabel, null); contentPane.add(tempsText, null); contentPane.add(montantLabel, null); contentPane.add(montantText, null); /* Evenements du menu */ menuFrancais.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Locale locale = new Locale("fr", "FR"); bundle = ResourceBundle.getBundle("Preference", locale); InitText(locale); menuEnglais.setSelected(false); menuFrancais.setSelected(true); Prefs.put(KEYLANGUE, "fr"); Prefs.put(KEYCOUNTRY, "FR"); } }); menuEnglais.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Locale locale = new Locale("en", "US"); bundle = ResourceBundle.getBundle("Preference", locale); InitText(locale); menuFrancais.setSelected(false); menuEnglais.setSelected(true); Prefs.put(KEYLANGUE, "en"); Prefs.put(KEYCOUNTRY, "US"); } }); InitText(locale); // Mise à jour de la selction du menu if (locale.getCountry().equals(VALCOUNTRY)) { menuFrancais.setSelected(true); menuEnglais.setSelected(false); } else { menuFrancais.setSelected(false); menuEnglais.setSelected(true); } setDefaultCloseOperation(EXIT_ON_CLOSE); setResizable(false); setSize(293, 123); setVisible(true); } // Mise à jour du text private void InitText(Locale locale) { // on initialise les variable d’internationalisation setTitle(bundle.getString("PTitle")); paysLabel.setText(bundle.getString("PPays")); dateLabel.setText(bundle.getString("PDate")); tempsLabel.setText(bundle.getString("PTemps")); montantLabel.setText(bundle.getString("PMontant")); // Menu menuLangue.setText(Messages.getString("PLangue")); menuFrancais.setText(Messages.getString("PFrancais")); menuEnglais.setText(Messages.getString("PAnglais")); // on ajout des éléments relatives à la langues et le pays pour // mieux voir le résultat. DateFormat uneDate = DateFormat .getDateInstance(DateFormat.LONG, locale); DateFormat unTime = DateFormat.getTimeInstance(DateFormat.MEDIUM, locale); Object[] numero = new Object[] { NumberFormat.getCurrencyInstance( locale).format(1234.56) }; String montant = MessageFormat.format(bundle.getString("Addition"), numero); paysText.setText(locale.getISO3Country()); dateText.setText(uneDate.format(new Date())); tempsText.setText(unTime.format(new Date())); montantText.setText(montant); } public static void main(String args[]) { new Preference2(); } }