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 Preference extends JFrame { 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 Preference(Locale locale) { // on ajoute un objet de définition de localisation "locale" 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); } }); 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); } }); // Initialisation des propriétés InitText(locale); setDefaultCloseOperation(EXIT_ON_CLOSE); setResizable(false); setSize(293, 123); setVisible(true); } // Méthode pour initialiser les propriétés 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 Preference(Locale.getDefault()); } }