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

Servlets/JSP Java Discussion :

[JSP] Changement de langue


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut [JSP] Changement de langue
    Bonjour,

    Je veux faire le truc classique: quand on clique sur un lien/image on change de langue. Je dois gérer juste l'anglais et le français.
    Je me suis inspiré de ce qui vait été fait sur le forum mais ça ne marche pas.

    Voici ce que j'ait fait :

    deux fichiers situés dans WEB-INF/classes/ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    message_fr.properties
    message_en.properties
    Dans le web.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <context-param>
       <param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
       <param-value>fr</param-value>
    </context-param>
    Dans struts-config.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <action path="/changelang" type="fr.ft.essai.langue.chgtLangue">
         <forward name="succes" path="/inter.do" />
    </action>
    Mon classe action :
    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
    public class chgtLangue extends Action {
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws IOException,ServletException
    	{
    		HttpSession session = request.getSession(true);
    		Locale locale = (Locale)session.getAttribute(org.apache.struts.Globals.LOCALE_KEY);
    		//if(locale.toString()=="en")
    		//{
    			session.setAttribute(org.apache.struts.Globals.LOCALE_KEY, new java.util.Locale("en","")); 
    		/*}
    		else
    		{
    			session.setAttribute(org.apache.struts.Globals.LOCALE_KEY, new java.util.Locale("en")); 
    		}*/
     
    		return mapping.findForward("succes");
    	}
    }
    Inter.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <%@ taglib uri="/WEB-INF/fmt.tld" prefix="fmt" %>
     
    <html>
    <body>
     <p>Inter</p>
     <fmt:bundle basename="message">
     	<fmt:message key="nom"/>
     </fmt:bundle>
    <a href="/essai/changelang.do">chgt langue</a>
    </body>
    </html>
    C'est toujours le message français qui s'affiche.

    Merci de votre aide

  2. #2
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Est ce que tu as jeté un coup d'oeil sur le site de struts dans la rubrique :
    Internationalization?

  3. #3
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut
    Je viens de lire mais ça n'a pas l'air de répondre à ma question

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Il me semble que tu t'es embrouillé les pinceaux entre Struts et la JSTL...

    Le context-apram javax.servlet.jsp.jstl.fmt.fallbackLocale de ton web.xml défini la Locale par défaut des tag <fmt:> de la JSTL, et tu utilises bien ces tags dans ta JSP...

    Par contre, dans ton action tu mets à jours l'attribut org.apache.struts.Globals.LOCALE_KEY qui correspond à la Locale de Struts (utilisé par les tags <bean:message/> de Struts).

    Il faut donc que tu utilises l'attribut de la JSTL :
    http://adiguba.developpez.com/tutori...jstl/#L3.1.1.1

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.setAttribute(javax.servlet.jsp.jstl.core.Config.FMT_LOCALE, new java.util.Locale("en",""));
    a++

  5. #5
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut
    Merci pour l'explication. Je ne comprenais aps tout ce que je faisais.

    ça ne marche toujours pas. Je reste sur la traduction française.

    quand j'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.jsp.jstl.core.Config.FMT_LOCALE.toString()
    ça me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.jsp.jstl.fmt.locale

  6. #6
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut
    Plus personne pour m'aider ??

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par sg-40
    Plus personne pour m'aider ??
    bah tu t'es trompé dans le fichier en français :

    il s'ecrit simplement :

    par contre pour l'anglais :

    tu les places dans ton classpath.

    et tu declares toto.properties dans ton struts-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <message-resources parameter="toto"/>
    voilà

  8. #8
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut
    Merci de tes conseils

    J'ai changé pour utiliser l'internationalisation via struts:

    Dans mon fichier struts-config.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    <action path="/changelang" type="fr.ft.essai.langue.chgtLangue">
    			<forward name="succes" path="/inter.do" />
    		</action>
    ...
    <message-resources parameter="message"/>
    Dans ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class chgtLangue extends Action {
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws IOException,ServletException
    	{
                          // récupération des paramètres passés dans l'url
    	      String language = request.getParameter("lang");
     
    	      // définition de la locale
    	      setLocale(request, new Locale( language,"") );
     
    	      return mapping.findForward("succes");
    	}
    }
    Dans ma jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <%@ taglib uri="/WEB-INF/fmt.tld" prefix="fmt" %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
     
    <html:html locale="true">
     
     
    <body>
     <p>Inter</p>
    <p>
     <bean:message key="nom" />
     <p>
    <a href="/essai/changelang.do?lang=en">chgt langue</a>
    </body>
    </html:html >
    Là je n'ai plus rien qui s'affiche pour le nom

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    il faut que tu importes la librairie struts-bean.tld

  10. #10
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut
    C'est bon ça marche. Boulet come suis j'avais pas inclu la librairie pour les tag bean.

    Merci à tout ceux qui m'ont aidé.

    Je mets tout ce que j'ai fait, si ça peut en aider d'autres un jour.
    Pour rappel l'internationnalisation que je fais utilise struts.

    Dans le fichier struts-config.xml, on configure le nom du fichier ressource par défaut en ajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <message-resources parameter="message"/>
    Dans chaque page (avec petite image) :
    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
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
    <%@ page import="java.util.Locale" %>
    <%
            Locale loc =(Locale)session.getAttribute(org.apache.struts.Globals.LOCALE_KEY);
            String langue;
            if(loc.getLanguage() == "en")
            {
                    langue="fr";
            }
            else
            {
                    langue="en";
            }       
    %>
    <html>
     
     
    <body>
    ...
       <bean:message key="maclé"/>
    ...
    <%
    out.println("<a href=\"/essai/changelang.do?lang="+langue+"\"><img src=\"images/"+langue+"_flag.gif\" border=\"0\"></a>");
    %>
    </body>
    </html>
    Dans mon exemple changelang.do est traité par la classe action chgtLangue :
    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 chgtLangue extends Action {
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws IOException,ServletException
    	{
                          // récupération des paramètres passés dans l'url
    	      String language = request.getParameter("lang");
    	      HttpSession session = request.getSession(true);
     
    	      // définition de la locale
    		  Locale locale = new Locale( language,"") ;
    		  session.setAttribute(org.apache.struts.Globals.LOCALE_KEY,locale);
     
    		  String ref = (String)request.getHeader("Referer");
    	      ActionForward forward = null;
     
    	      // redirection vers une page définie par défaut
    	      if( ref==null )
    	      {
    	         forward = (mapping.findForward("succes"));
    	      }
    	      // redirection vers la page où on était
    	      else 
    	      {
    	         forward = new RedirectingActionForward();
    	         forward.setPath( ref );
    	      }
     
    		  return forward ;
     
     
    	}
    }

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

Discussions similaires

  1. [Smartphone][Eten m600]Changement de langue
    Par Pollux dans le forum Périphériques
    Réponses: 1
    Dernier message: 18/01/2006, 08h32
  2. Changement de langue FR or US
    Par Funraill.net dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 20h57
  3. changement de langue
    Par Malk-Om dans le forum Windows XP
    Réponses: 4
    Dernier message: 05/10/2005, 09h24
  4. Réponses: 2
    Dernier message: 03/03/2004, 10h44
  5. Changement de langue dynamique (D6 et outils de traduction)
    Par agon dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2002, 16h15

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