bonjour,
je veut créer une application Multilingue dan netbeans ,
je voudrais savoir comment je peut faire un code on cliquant sur un bouton la langue de l'application se transformer par exemple du français en anglais
merci
bonjour,
je veut créer une application Multilingue dan netbeans ,
je voudrais savoir comment je peut faire un code on cliquant sur un bouton la langue de l'application se transformer par exemple du français en anglais
merci
Bonjour,
Tu pourrais t'inspirer de cet exemple.
Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".
je voudrais un code java simple qui permet de passe d"un bundle . proprities a un bundle _es_Us.. proprities on cliquant sur un
Pour y arriver, tu aurais besoin d'un hyperlien / bouton (décoré ou pas par l'image d'un petit drapeau américain).
L'action sur celui-ci va appeler une méthode qui définit la langue "en" et le pays "US", puis crée une currentLocale = new Locale(language, country);, puis trouve le fichier Bundle correspondant et l'utilise pour afficher des chaînes de caractères en anglais.
Bon courage!
Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".
s'il vous plait vous pouvez plus m'expliquer
merci
Qu'est-ce que tu as déjà fait? Où est-ce que ça coince?
Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".
j'ai fait 2 fichiers .proprities
dans le fiche.java j"insérer votre code mais j"ai une erreur
Quelle erreur? Merci de poster le code de fiche.java et la partie du fichier .log concernant l'erreur.
Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".
Voici la page Bundle.properties :
Classe n :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 n.jButton1.text=entrer n.jLabel1.text=bonjour la 2eme page Bundle_es_US.proprities n.jButton1.text=ok n.jLabel1.text=goog morning la page find.java : /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 package pkg1; import java.util.Locale; /** * * @author NADIA */ public class n extends javax.swing.JFrame { /** * Creates new form n */ public n() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jLabel1 = new javax.swing.JLabel(); jButton1 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("pkg1/Bundle"); // NOI18N jLabel1.setText(bundle.getString("n.jLabel1.text")); // NOI18N jButton1.setText(bundle.getString("n.jButton1.text")); // NOI18N jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(31, 31, 31) .addComponent(jLabel1)) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jButton1))) .addContainerGap(327, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addGap(18, 18, 18) .addComponent(jButton1) .addContainerGap(234, Short.MAX_VALUE)) ); pack(); }// </editor-fold> private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: currentLocale = new Locale(Bundle_en_US, country); } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see <a href="http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html" target="_blank">http://download.oracle.com/javase/tu...feel/plaf.html</a> */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(n.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(n.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(n.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(n.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new n().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; // End of variables declaration }
Aie, en plus c'est une application Swing!
Déjà que ça remonte à longtemps mes quelques notions et en plus je n'ai jamais été trop douée pour les applis desktop, désolée...
Tout ce que j'ai réussi faire c'est une bête méthode qui change "en dur" la langue en "en_US" (et pas en "es_US", suis encore moins douée en espagnol qu'en Swing) que voici:
Si tu ne dois pas changer la langue 32 fois pendant l'exécution de l'application, ça va marcher comme ça. Sinon tu va devoir mettre plusieurs boutons inscriptionnés chacun avec le nom de la langue et faire une méthode de ce genre pour ButtonFR, ButtonEN, ButtonDE qui va te changer le Bundle en Français, Alglais, Allemand. C'est sûr et certain qu'il y a moyen de faire plus propre (par exemple faire une méthode qui change les textes des labels et boutons et l'appeler dans ActionPerformed mais ça dépend si tu dois changer la langue plusieurs fois).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("pkg1/Bundle_en_US");// pense à changer soit le nom du fichier Bundle, soit le code jLabel1.setText(bundle.getString("n.jLabel1.text")); // NOI18N jButton1.setText(bundle.getString("n.jButton1.text")); // NOI18N }
Alors voilà...
Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".
Bien que ce soit effectivement le principe: repasser sur chaque composant, chaque item à la main pour faire un setText dessus, la manière de charger le bundle n'est pas bonne.
il faut faireparce que si on fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("pkg1.Bundle",Locale.ENGLISH);// jLabel1.setText(bundle.getString("n.jLabel1.text")); // NOI18N jButton1.setText(bundle.getString("n.jButton1.text")); // NOI18N
il va chercher dans l'ordre
Code : Sélectionner tout - Visualiser dans une fenêtre à part getBundle("pkg1/Bundle_en_US")
pkg1/Bundle_en_US_fr_FR.properties
pkg1/Bundle_en_US_fr.properties
pkg1/Bundle_en_US.properties
et n'ira jamais chercher dans
pkg1/Bundle_en.properties
pkg1/Bundle.properties
ce qui n'est pas voulu
Un grand merci pour ces précisions!
Mais pourquoi aller chercher des fichiers Bundle qui n'existent pas (Bundle_en_US_fr_FR.properties et Bundle_en_US_fr.properties)?
Vous voulez dire que la recherche a pour but de trouver la valeur d'une Locale la plus proche de la "currentLocale" du système et que ça commence obligatoirement par le pays et la langue du pays où le système tourne?
Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".
Ben oui, c'est marqué tel quel dans la doc de Ressource Bundle. Du coup, à moins que tu aie des régionalismes à prendre en compte, on se contente de créer des fichier _fr _en etc sans ajouter le pays.
D'ailleurs, si tu fait uniquement un bundle_fr_FR et un bundle.properties (default), moi, pauvre belge, je ne tomberais jamais sur le fr_FR puisque chez moi c'est fr_BE
L'ordre de recherche pour chaque clé est
- baseName + "_" + language1 + "_" + country1 + "_" + variant1
- baseName + "_" + language1 + "_" + country1
- baseName + "_" + language1
- baseName + "_" + language2 + "_" + country2 + "_" + variant2
- baseName + "_" + language2 + "_" + country2
- baseName + "_" + language2
- baseName
avec 1 la locale demandée et 2 la locale retournée par Locale.getDefault()
Un très grand pour vos explication et pour la doc!
Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".
Tu charge le nouveau bundle avec la nouvelle langue, comme déjà dit, en passant à getBundle les deux paramètre: le nom générique du bundle et la locale a utiliser. Puis tu passe sur tous les composant (label, menuitem, etc) de ton application et tu change leur text en chargeant la clé depuis le nouveau ressource bundle chargé juste avant. Cf le dernier code que j'ai posté pour passer à Anglais.
Désolé, mais il n'y a pas de système automatique, puisque les composants swing n'ont aucune notion de ressource bundle. Tu peux aussi trouver sur le net des librairies de composants graphique où c'est automatique, je pense. Mais faut chercher.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("pkg1.Bundle",Locale.ENGLISH);// jLabel1.setText(bundle.getString("n.jLabel1.text")); // NOI18N jButton1.setText(bundle.getString("n.jButton1.text")); // NOI18N
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager