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

Struts 1 Java Discussion :

Problème multilinguisme - internationalisation


Sujet :

Struts 1 Java

  1. #21
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ythim Voir le message
    Reste a voir la question de l'attribut sur la session... Pensez vous que c'est une bonne solution ???
    A priori la méthode setLocale(HttpServletRequest, Locale) devrait suffire
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #22
    Membre confirmé Avatar de ythim
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Je suis allé voir l'API de Struts mais le fait que ma classe LabelsBundle n'etend pas d'Action, il m'est impossible de faire appel à getLocale pour récupérer la Locale que j'aurais affecté avec setLocale.

    Par conséquent je pensé qu'ajouter l'attribut :org.apache.struts.Globals.LOCALE_KEY à ma session était peut être une solution plus adéquate.

    Désolé pour toutes ces question

  3. #23
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Voici un exemple pour créer un bouton avec un texte et une image (lié à Struts-Layout), tu devrais faire quelque chose dans le genre...
    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
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    package pack.taglib;
    
    import javax.servlet.jsp.tagext.TagSupport;
    import clemessy.struts.tools.PropertiesReader;
    import fr.improve.struts.taglib.layout.util.BasicFormUtils;
    
    public class BoutonTag extends TagSupport
    {
        private static final long serialVersionUID = -3139074133972471309L;
        private String imageUrl = null;
        private String label = null;
        private String action = null;
        private String mode = null;
        private String title = null;
        private String align = null;
        
        public String getTitle()
        {
            return title == null ? "" : title.trim();
        }
    
        public void setTitle(String title)
        {
            this.title = title;
        }
    
        public String getAction()
        {
            return action == null ? "" : action.trim();
        }
        
        public void setAction(String action)
        {
            this.action = action;
        }
        
        public String getImageUrl()
        {
            return imageUrl;
        }
        
        public void setImageUrl(String imageUrl)
        {
            this.imageUrl = imageUrl;
        }
        
        public String getLabel()
        {
            return label;
        }
        
        public void setLabel(String label)
        {
            this.label = label;
        }
    
        public String getMode()
        {
            return mode;
        }
    
        public void setMode(String mode)
        {
            this.mode = mode;
        }
    
        public String getAlign()
        {
            return align == null ? "right" : align;
        }
    
        public void setAlign(String align)
        {
            this.align = align;
        }
    
        public int doEndTag()
        {
            StringBuffer sb = new StringBuffer(128);
    
            try
            {
                boolean ok = false;
                
                // Traitement de la condition sur mode
                // ===================================
                if ( getMode() != null && getMode().trim().length() > 0 )
                {
                    BasicFormUtils bf = new BasicFormUtils();
                    int mode = bf.getFormDisplayMode(pageContext);
                    if ( getMode().toUpperCase().indexOf("CREATE")  != -1 && mode == BasicFormUtils.CREATE_MODE ) ok = true;
                    if ( getMode().toUpperCase().indexOf("EDIT")    != -1 && mode == BasicFormUtils.EDIT_MODE ) ok = true;
                    if ( getMode().toUpperCase().indexOf("INSPECT") != -1 && mode == BasicFormUtils.INSPECT_MODE ) ok = true;
                }
                else ok = true;
                
                // On traite le tag
                // ================
                if ( ok )
                {
                     sb.append("<table class=\"bouton\" style=\"float:").append(getAlign()).append("\" cellpadding=\"0\" cellspacing=\"2\"><tr");
                     if ( getAction().length() > 0 ) sb.append(" onclick=\"executeAction('").append(getAction()).append("')\"");
    
                     if ( getTitle().length() > 0 ) sb.append(" title=\"");
                    if ( pageContext.getRequest().getLocale() != null ) sb.append( PropertiesReader.getParameter_String("ApplicationResources", pageContext.getRequest().getLocale(), getTitle(), getTitle()));
                    else sb.append( PropertiesReader.getParameter_String("ApplicationResources", getTitle(), getTitle()));
                     sb.append("\"");
                     
                     sb.append(">");
                    
                     if ( getImageUrl() != null && getImageUrl().trim().length() > 0 ) sb.append("<td style=\"padding-left:5px;\"><img align=\"middle\" border=\"0\" src=\"").append(getImageUrl()).append("\"/></td>");
                    sb.append("<td align=\"left\">");
                    
                    if ( pageContext.getRequest().getLocale() != null ) sb.append( PropertiesReader.getParameter_String("ApplicationResources", pageContext.getRequest().getLocale(), getLabel(), getLabel()));
                    else sb.append( PropertiesReader.getParameter_String("ApplicationResources", getLabel(), getLabel()));
                    
                    sb.append("</td>");
                    sb.append("</tr></table>");
    
                    pageContext.getOut().write(sb.toString());
                }
            }
            catch (Exception e)
            {
    //            System.out.println("Erreur dans BoutonTag " + e.toString());
            }
            
            return EVAL_PAGE;
        }
    }
    et un extrait de PropertiesReader
    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
     
    public class PropertiesReader 
    {
        /**
         * Récupération du ResourceBundle
         */
        public static ResourceBundle getBundle(String name, Locale locale)
        {
            if ( locale != null ) return ResourceBundle.getBundle(name, locale);
            return ResourceBundle.getBundle(name);
        }
     
        /**
         * Extraction d'un paramètre au format String
         */
        public static String getParameter_String(String bundle, String property, String defaultValue)
        {
            return getParameter_String(bundle, null, property, defaultValue);
        }
     
        public static String getParameter_String(String bundle, Locale locale, String property, String defaultValue)
        {
            try
            {
                String value = getBundle(bundle, locale).getString(property);
                if ( value == null ) return defaultValue;
                return value;
            }
            catch (Throwable t) {}
            return defaultValue;
        }
    ...
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #24
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Le getLocale faudrait le faire dans ton tagLib et passer cette locale à ta méthode getLabel.

    Le setLocale, tu peux le faire dans une action Struts en fonction des paramètres de ton application.

    Tu vois le truc ?

  5. #25
    Membre confirmé Avatar de ythim
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Je vois bien ce que tu veux dire...
    Mais il me semble que meme dans mes taglibs je n'ai pas accès directement à la méthode getLocale de la classe Action (de struts)

    Le moyen que j'ai trouvé actuellement c'est de passer dans la session ma locale en fonction du User depuis une Action Struts comme tu me l'a indiqué.
    Ensuite de passer ma session à ma classe LabelsBundle.java

    Ou dedans je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Locale)session.getAttribute(org.apache.struts.Globals.LOCALE_KEY);
    Après si tu me dis que je peux directement récupéré ma Locale depuis mon taglib c'est vrai que ce sera peut etre plus propre ... mais je vois pas trop comment faire !

  6. #26
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    A partir de ton tagLib, tu récupères la session dans laquelle est stockée ta locale.
    Tu récupères ta locale, et tu la transmets à ta méthode
    getLabel.

  7. #27
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ythim Voir le message
    Mais il me semble que meme dans mes taglibs je n'ai pas accès directement à la méthode getLocale de la classe Action (de struts)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    
    pageContext.getRequest().getLocale()
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #28
    Membre confirmé Avatar de ythim
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Oki mais pour récupérer ma Locale depuis ma session il faut bien que je passe par le getAttribut("...");

    Car aucune methode n'est défini du style session.getLocale();

    Apres il est vrai que c'est beaucoup plus propre de passé uniquement la Locale a ma methode getLabel.

  9. #29
    Membre confirmé Avatar de ythim
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Je vien de lire le dernier post, merci à tous les 2 je pense que j'ai enfin tout compris...

    Je galére un peu, on mettra ca sur le coup du début de semaine...

    Je vais tester tout ca alors merci encore !

  10. #30
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Sinon, n'hésite pas à suivre l'exemple, ça fonctionne...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #31
    Membre confirmé Avatar de ythim
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Je doit me gourrer mais il semblerai que le setLocale(request,locale); et le request.getLocale(); ne corresponde pas forcement.

    Dans mon action au login d'un User je fais un:
    setLocale(Locale.FRANCE); (si c'est un user francais).
    setLocale(Locale.UK); (si c'est un user anglais).

    dans mon taglib je passe ma Locale a ma méthode getLabel de cette facon:
    this.text = LabelsBundle.getLabel(text,pageContext.getRequest().getLocale());

    Or ce que me retourne pageContext.getRequest().getLocale(); ne correspond pas à ce que j'ai mi avec setLocale(); j'ai vérifier avec un system.out.println

    De plus l'API Struts indique qu'il affecte la variable Locale à la current session, il me semble que je soit obliger de passer par la session au travers de la variable org.apache.struts.Globals.LOCALE_KEY et pas uniquement avec le request

  12. #32
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Je suis d'accord avec toi, Struts place la locale dans la session, donc il faut la récupérer dans la session; logique

  13. #33
    Membre confirmé Avatar de ythim
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Je rajoute une petite info...
    La méthode setLocale(request,locale) de la classe Action Struts affecte en fait la valeur locale à l'attribut de session org.apache.struts.Globals.LOCALE_KEY

    Donc du coté Action je fais un setLocale(request,Locale.FRANCE); et dans ma classe de taglib, je fais un (Locale)pageContext.getSession.getAttribute(org.apache.struts.Globals.LOCALE_KEY);
    Et je passe le tout à ma methode getLabel.

    Voili voilou...

  14. #34
    Membre confirmé Avatar de ythim
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Par défaut
    Petit ajout:
    Tout semble marcher comme il faut, je récupére bien ma Locale à partir de ma session et l'environnement multi-lingue semble bien cohabité.

    Merci encore à fr1man et OButterlin de vos précieuse aide.

    @++.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème d'internationalisation d'une application
    Par jbrasselet dans le forum ASP.NET
    Réponses: 5
    Dernier message: 28/06/2011, 14h58
  2. [Xaml][3.0] Problème d'internationalisation
    Par GroXx dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 09/10/2009, 16h33
  3. Réponses: 2
    Dernier message: 01/10/2009, 16h33
  4. Problème d'internationalisation sous Django
    Par LaaLaa dans le forum Django
    Réponses: 0
    Dernier message: 24/03/2009, 19h46
  5. Problème d'internationalisation par défaut
    Par walach dans le forum SpagoBI
    Réponses: 1
    Dernier message: 20/04/2008, 19h56

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