Est-ce que c'est possible?
Est-ce que c'est possible?
attention c'est message resource avec un seul 's'. J'ai déjà fait la même erreur qui m'a fait perdre une apres midi !
Tu peux récupérer la locale dans une Action Struts comme ceci :
Tu peux aussi la modifier comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Locale locale=this.getLocale(request) ;
Pour accèder aux messages dans une Action :
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.setLocale(request,Locale.ENGLISH) ;
Et pour récupérer le message avec une autre locale que celle par défaut :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MessageResources messageResources=this.getResources(request) ; String libelle = messageResources.getMessage("cleDuMessage") ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part String libelle = messageResources.getMessage("Locale.ENGLISH","cleDuMessage") ;
En fait le souci c'est que j'utilise une iframe :
event.jsp :
eventMenuPopup.jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <div id="divIframe"> <iframe id="iframe" src="jsp/eventMenuPopup.jsp" ></iframe > </div>
Bon, je sais que normalement ApplicationRessources s'écrit ApplicationResources, mais en fait comme j'ai déjà tout paramétré dans les fichiers pour que ca merche....pas de problème (de toutes facon j'aurais aussi bien pu appeler mon fichier toto pourvu que j'ai bien paramétré ca aurait marché....)....
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 <div id="menu"> <dl> <% String idE = request.getParameter("idE"); Locale locale = (Locale) session.getAttribute(org.apache.struts.action.Action.LOCALE_KEY); ResourceBundle resourceBundle = ResourceBundle.getBundle("ApplicationRessources", locale); if(idE!=null && !idE.equals("")){ session.setAttribute("idElement",idE); ApiIdexAnne api=ApiIdexAnne.getInstance(); api.addConsultedElementToTheList(idE, session.getId()); ArrayList commandes = api.getCommandEnabledOnElement(idE); for(int i=0; i<commandes.size();i++){ TupleCommandParam tcmd = (TupleCommandParam)commandes.get(i); if(tcmd.getParametersFacultatives()!=null && ((ArrayList)tcmd.getParametersFacultatives()).size()!=0){ out.println("<dt onclick=\"commandWithParam('"+tcmd.getIdCommand()+"')\">"+resourceBundle.getString(tcmd.getKeyLabelCommand())+"</dt>"); } else{ out.println("<dt onclick=\"commandWithParam('"+tcmd.getIdCommand()+"')\">"+resourceBundle.getString(tcmd.getKeyLabelCommand())+"</dt>"); } } } %> </dl> <dl> <% String toAcq = (String)request.getParameter("ToAcq"); if(toAcq!=null && toAcq.equals("1")){ out.println("<dt onclick=\"skipAlarm()\">"+resourceBundle.getString("cmd.skipalarm")+"</dt>"); } %> </dl> </div>
Bref, là il me met l'eurreur suivante :
etc.....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 java.util.MissingResourceException: Can't find bundle for base name ApplicationRessources, locale fr at java.util.ResourceBundle.throwMissingResourceException(Unknown Source) at java.util.ResourceBundle.getBundleImpl(Unknown Source) at java.util.ResourceBundle.getBundle(Unknown Source) at org.apache.jsp.jsp.eventMenuPopup_jsp._jspService(eventMenuPopup_jsp.java:97) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
Mes fichiers resources sont les suivants :
ApplicationRessources_en.properties
ApplicationRessources.properties
... et pour ce qui est de l'internationnalisation ca marche bien : navigateur en langue anglaise => messages de ApplicationRessources_en.properties, et pour les autres langues il prend bien les messages dans ApplicationRessources.properties....
Normalement en locale fr il devrait prendre le ApplicationRessources.properties vu qu'il n'existe pas de fichier ApplicationRessources_fr.properties....
Mais il ne le trouve pas.....visiblement.....
Je ne connais pas ta version de Struts, mais es-tu sûre de ça ?
qui a été deprecated et remplacé en 1.1 je crois par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part org.apache.struts.action.Action.LOCALE_KEY
Code : Sélectionner tout - Visualiser dans une fenêtre à part org.apache.struts.Globals.LOCALE_KEY
As-tu testé en remplaçant ton code :
par le mien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Locale locale = (Locale) session.getAttribute(org.apache.struts.action.Action.LOCALE_KEY); ResourceBundle resourceBundle = ResourceBundle.getBundle("ApplicationRessources", locale); ... resourceBundle.getString("cmd.skipalarm") ...
ça évite de coder en dur le nom du fichier des messages et en plus, tu récupères automatiquement la locale par défaut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Locale locale=this.getLocale(request) ; MessageResources messageResources=this.getResources(request) ; ... messageResources.getMessage(locale,"cmd.skipalarm") ...
Petite remarque : je trouve dommage d'avoir du code Java dans les jsp quand on utilise Struts.
En fait j'ai essayé d'utiliser des bean:message de la manière suivante :Mais ca marche pas les truc aves des out.print, apparemment on ne peux pas utiliser les bean:message....
Code : Sélectionner tout - Visualiser dans une fenêtre à part out.println("<dt onclick=\"commandWithParam('"+tcmd.getIdCommand()+"')\"><bean:message key=\""+tcmd.getKeyLabelCommand()+"\"/></dt>");
Mais j'ai donc fait de la manière suivante :
Là ca marche!!!!!
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 <div id="menu"> <dl> <% String idE = request.getParameter("idE"); //Locale locale = (Locale) session.getAttribute(org.apache.struts.action.Action.LOCALE_KEY); //ResourceBundle resourceBundle = ResourceBundle.getBundle("ApplicationRessources", locale); if(idE!=null && !idE.equals("")){ session.setAttribute("idElement",idE); ApiIdexAnne api=ApiIdexAnne.getInstance(); api.addConsultedElementToTheList(idE, session.getId()); ArrayList commandes = api.getCommandEnabledOnElement(idE); for(int i=0; i<commandes.size();i++){ TupleCommandParam tcmd = (TupleCommandParam)commandes.get(i); if(tcmd.getParametersFacultatives()!=null && ((ArrayList)tcmd.getParametersFacultatives()).size()!=0){ out.println("<dt onclick=\"commandWithParam('"+tcmd.getIdCommand()+"')\">"); %> <bean:message key="<%=tcmd.getKeyLabelCommand()%>"/> <% out.println("</dt>"); } else{ out.println("<dt onclick=\"commandWithParam('"+tcmd.getIdCommand()+"')\">"); %> <bean:message key="<%=tcmd.getKeyLabelCommand()%>"/> <% out.println("</dt>"); } } } %> </dl> <dl> <% String toAcq = (String)request.getParameter("ToAcq"); if(toAcq!=null && toAcq.equals("1")){ out.println("<dt onclick=\"skipAlarm()\">"); %> <bean:message key="cmd.skipalarm"/> <% out.println("</dt>"); } %> </dl> </div>
En fait il faut sortir du code java pour mettre les bean:message.....![]()
Bien sûr.Envoyé par AnneB
Et même les balises <dt> plutôt que de les mettre dans des out.println.![]()
en effetest deprecated....
Code : Sélectionner tout - Visualiser dans une fenêtre à part org.apache.struts.action.Action.LOCALE_KEY
Mais c'est bon, j'ai pu me débrouiller autrement!!!
Je n'ai pas testé ton code c_nvy car je suis partie sur l'idée d'utiliser les bean:message (en fait j'avais déjà essayé sans succès mais j'ai décidé de m'acharner encore un peu...)
Merci à tous pour votre aide...
Partager