IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

internationalisation aplication desktop


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut internationalisation aplication desktop
    Hello,

    J'aimerais donner le choix à l'utilisateur de choisir la langue à travers un jMenuItem, mais je n'y arrive pas , quelqu'un saurait t'il m'aider ?

    Voici comment je m'y prend : une fois le jMenuItem correspondant à la langue sélectionné j'ai rajouté une ligne de code qui recharge le bundle mais en changeant la locale, mais cela ne modifie malheureusement pas l'interface, ...

    J'ai quelques questions à ce sujet :

    1) Ici déjà je me demande s'il n'y à pas une fonction qui permet juste de changer la "locale" plutôt que de tout recharger ?
    2) Ensuite je ne vois pas comment faire pour que tout les composants de mon interface se réinitialisent et prennent en compte la nouvelle "locale". Y a t'il une sorte de fonction "reset" en swing qui réinitialiserait tout les champs Text de mes composants à la valeur donnée à la création ?
    3) Dois je détruire la fenêtre de mon application pour la recréér ensuite (ce qui serait dérangeant car l'utilisateur perdrait tout les champs qu'il à déjà rempli, et j'imagine que l'on verrait un scintillement du à la fermeture et rouverture de la fenêtre) ?

    Donc en résumé je ne sais pas comment faire les choses proprement,... L'outil que j'utilise pour créér l'interface est VE.

    Un grand merci d'avance pour votre aide
    Michel

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    pour le point 2) je pense avoir trouvé quelque chose, apparament la fonction revalidate() devrait tout redessiner, mais malheureusement je pense qu'elle va prendre la valeur texte prise à l'initialisation mais pas réapeller getString() pour prendre la bonne langue,....

  3. #3
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    utiliser un bean session et dans ce bean mettez une propriete et tu peut l'acceder de ton application pour savoir la langue a chaque moment voulue
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par anisj1m Voir le message
    utiliser un bean session et dans ce bean mettez une propriete et tu peut l'acceder de ton application pour savoir la langue a chaque moment voulue
    Je ne suis pas sur de bien comprendre ce que vous proposez. En fait je ne veux pas connaitre la langue de l'application à un moment donné, je la connais vu que je laisse l'utilisateur la choisir par les menus, ce que j'essaye de faire c'est modifier l'interface en fonction de la langue dès qu'il à fait son choix.

  5. #5
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    oui je t'ai bien compris des le debut; alors je te propose de faire un bean et lorsque l'utilisateur choisira une langue tu affecte l'attribut de ce bean a cette valeur et pour les autre pages consulter cette valeur et selon sa valeur ta page sera dans la langue voulu
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  6. #6
    Membre régulier Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Points : 107
    Points
    107
    Par défaut
    Bonjour,
    Normalement quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RessourceBundle maRessource =new RessourceBundle(laLocale);
    String leNom = maRessource.getString("le nom du bouton");
    JButton monBouton = new JButton(leNom);
    monBouton conserve une référence vers l'objet String leNom (a moins qu'il ne fasse une copie de la valeur mais ce serait un comportement étrange vu que ce n'est pas un type natif mais bien un objet). A priori ce même objet String est aussi référencé dans maRessource.
    Si tu changes maRessource par un nouveau RessourceBundle avec une autre locale, tu ne touches pas l'objet leNom. donc il n'y a aucune raison que l'affichage change, même avec revalidate().
    de même si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //apres appel pour changer
    maRessource =new RessourceBundle(maNouvellelaLocale);
    leNom = maRessource.getString("le nom du bouton");
    tu vas changer l'objet qui est désigné par leNom dans cette partie du code, mais monBouton conservera toujours une référence vers l'ancien objet.
    Il n'y a donc à mon avis que deux possibilités :
    - modifier leNom (et non pas réassigné comme juste au dessus).
    - faire un setText() sur monBouton.
    Ce qui implique que tu conserves explicitement une références vers tous les objets que tu as crées et qui sont encore en activité pour faire un setText() sur chacun d'entre eux. par contre tu n'as pas intérêt à trop centralisé car sinon tu vas conserver des références sur des objets qui ne sont plus utilisés ailleurs.
    Je verrais bien un truc comme ça pour chacune de tes classes comportant un texte internationalisé :
    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
     
    public class maClass {
    private JButton b1, b2, b3;
    private JLabel l1,l2,l3;
    private RessourceBundle maRessource;
    ...
    public maClass(Locale l){
            maRessource = new RessourceBundle(l);
            b1= new JButton (maRessource.getString("nom de b1");
            b2= new JButton (maRessource.getString("nom de b2");
           .....
    }
     
    public void UpdateLangue(Locale l){
           maRessource = new RessourceBundle(l);
            b1.setText(maRessource.getString("nom de b1");
            b2.setText (maRessource.getString("nom de b2");
           .....
    }
     
    }
    déjà tu limites le référencement des "petits" objets à l'intérieur d'un "gros" objet. Il ne te reste plus que à référencer les gros objets, mais la il faudra faire attention quand il se fermeront à les retirer. Sinon bonjour l'encombrement...
    Et ensuite quand tu récupères le choix du JMenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void setLangue(Locale l){
          for (int i=0;i<tableauDObjetInternationalise.length;i++){
                tableauDObjetInternationalise[i].updateLangue(l);
         }
         repaint();
    }
    Tu as peut etre interet à définir une interface InternationalisableALaVolee avec la méthode UpdateLangue, ainsi tu pourras stocker un peu tout et n'importe quoi dans ton tableauDObjetinternationalise. une Liste sera peut etre plus ad-hoc qu'un tableau....
    La limite de ce truc c'est qu'il y a peut etre des objets dont tu pourras difficilement changer le texte... L'avantage c'est que tu peux aussi t'occuper de changer un NumberFormat.

    Bon code,
    kerinel

  7. #7
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    je ne pense pas que c'est ce qu'il recherche alors je te propose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <tr:selectOneChoice label="choisir langue" value="#{Langue.lang}">
    ici affectation du property du bean.

    ensuite: pour l'utilisation tu feras:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <f:view locale="#{Langue.lang}">
                    <f:loadBundle basename="anis.tuto.rb.MessageResources" var="msg"/>
     
                            <h:outputText value="#{msg.welcome}" />
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    Hello,

    En fait j'espérais qu'il existe un moyen que tout sois automatique mais je rêvais un peu lol , en tout cas maintenant j'ai une solution ! Je pense que je vais suivre Kerinel car la solution d'anisj1m (dites moi si je me trompe) me semble ne marcher que pour les applications internet et je développe une application desktop en Swing.

    merci à tout les deux .

  9. #9
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    oui c'est cela; concernant ma solution elle marche pour les application web(j'ai cru que tu developper un application web) pas de probleme tu peut utiliser la solution de kerinel elle semble satisfaisant pour votre demande (Swing)
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [STRUTS] INTERNATIONALISATION ==>> EXEMPLE
    Par zarbydigital dans le forum Struts 1
    Réponses: 10
    Dernier message: 23/03/2004, 15h55
  2. Aplication de filtre
    Par charly dans le forum OpenGL
    Réponses: 8
    Dernier message: 03/02/2004, 05h57
  3. [TP]Configuration du fichier Desktop
    Par Giovanny Temgoua dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 22/12/2003, 09h31
  4. [Unicode] Internationalisation d'une application
    Par Thierry Laborde dans le forum Langage
    Réponses: 4
    Dernier message: 21/10/2003, 21h15
  5. [CR] internationalisation d'un report
    Par osoudee dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 24/06/2002, 17h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo