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

JSF Java Discussion :

Internationalisation: la langue du site ne change pas


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Par défaut Internationalisation: la langue du site ne change pas
    Bonjour,

    Après avoir suivi un guide trouvé sur internet (FrançoisXavier SENNESAL), je suis arrivé à faire le site suivant:

    Page xhtml:
    Code html : 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
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:p="http://primefaces.org/ui">
     
    <ui:composition>
    	<f:view>
    		<div align="right">
    			<table><tr>
    			<td><h:link value="#{txtl.sortir}" outcome="logout.jsp" /></td>
    			<td><h:link id="pt_BR"  actionListener="#{beanInternationalisation.choixLangue}"  >
    					<h:graphicImage value="images/brasilFlag.jpg" width="25" height="15" />
    				</h:link></td>
    			<td><h:link id="en_US" actionListener="#{beanInternationalisation.choixLangue}"  >
    					<h:graphicImage value="images/usaFlag.jpg" width="25" height="15" />
    				</h:link></td>
    			</tr></table>
    		</div>
    		<h:graphicImage value="images/logo.JPG" /><br />
    	</f:view>
    </ui:composition>
     
    </html>
    Faces-config:
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <faces-config
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
        version="2.0">
     
        <application>
        	<resource-bundle>
    	          <base-name>resources.text</base-name>
    	          <var>txtl</var>
    	    </resource-bundle>
     
    	    <locale-config>
    	    	<default-locale>pt_BR</default-locale>
    	        <supported-locale>en_US</supported-locale>
    	    </locale-config>
    	</application>
     
    </faces-config>
    ManagedBean:
    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
    package app;
     
    import java.util.Locale;
     
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    import javax.faces.context.FacesContext;
    import javax.faces.event.ActionEvent;
     
    @ManagedBean
    @SessionScoped
    public class BeanInternationalisation {
     
    	public void choixLangue(ActionEvent actionEvent){
    		Locale locale;
    		String idComposant=actionEvent.getComponent().getId();
     
    		int index=idComposant.indexOf("_");
    		if (index>0){
    			String langue=idComposant.substring(0,index);
    			String pays=idComposant.substring(index+1);
    			locale=new Locale(langue,pays);
    		}else{
    			locale=new Locale(idComposant);
    		}
    		FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    	}
     
    }
    J'ai aussi défini les fichiers text_en_US et text_pt_BR qui sont dans le dossier src/resources de mon application. Le site marche bien, lors que je charge la page j'ai le libele du site en pt_BR qu'est affiché, mais lorsque je clique sur le drapeau en_US, il n'y a rien qu'arrive, le site continue en pt_BR...

    J'ai l'image du site en pièce jointe, le libele #{txtl.sortir} doit changer entre LogoutPT et LogoutUS

    Est-ce que quelqu'un pourrait m'aider svp?
    Merci d'avance,
    Marc
    Images attachées Images attachées  

  2. #2
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut
    bonjour
    Tu devrais d'abord changer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <base-name>resources.text</base-name>
    car on ne met pas resources donc tu peux mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <base-name>text</base-name>
    ou alors je te conseilles de creer un dossier par exemple langue dans ce dossier resources et y mettres tes fichiers text_en_US.properties

    tu auras donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <base-name>langue.text</base-name>
    Ensuite tu devrais serialiser ton Bean Session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class BeanInternationalisation implements Serializable

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Par défaut
    Bonjour et merci de ta réponse bruneltouopi,

    En fait mon "resources" est une package dans le dossier src, je pense qu'il est équivalent à ta proposition "langues".

    Sinon ce soir je vais essayer le serializeble, tu penses qui c'est ça qu’empêche le site de changer de langue?

    Pour info, j'ai essayé une autre méthode (qui malheureusement ne marche pas non plus...):
    J'ai changé la balise f:view:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:view locale="#{beanInternationalisation.langueChoisi}">

    et dans mon bean j'ai mis:
    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
    private String langueChoisi="pt_BR";
     
    public String getLangueChoisi(){
        return langueChoisi;
    }
     
    public String setLangueChoisi(String langue){
        this.langueChoisi=langue;
    }
     
    public void changeBR(){
        this.langueChoisi="pt_BR"
    }
     
    public void changeUS(){
        this.langueChoisi="en_US"
    }
    où chaque bouton appelle la méthode correspondante, mais le site ne change pas non plus de langue, il reste avec ma première définition ("pt_BR" dans ce cas). Si je change private String langueChoisi="pt_BR"; pour private String langueChoisi="en_US"; le site apparait bien en "en_US", mais mes drapeaux continuent à ne pas marcher.

    Pour tester mes fichiers .property j'ai essayé aussi de mettre private String langueChoisi="es_AR"; (qui n'existe pas), et l'application me dit qu'elle ne trouve pas le fichier (c'est qu'est correct)...

    En tout cas merci encore une fois pour ton aide...

  4. #4
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut
    En fait mon "resources" est une package dans le dossier src, je pense qu'il est équivalent à ta proposition "langues".
    Non ce n'est pas vrai.
    Ton repertoire resources est doit est ici /src/main/resources
    c'est donc à partir de là que tu mets ton repertoire llangue.
    Tu auras donc /src/main/resources/langue

    ensuite tu peux avoir directement ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public String changeUS(){
     FacesContext context = FacesContext.getCurrentInstance();
            context.getViewRoot().setLocale(Locale.US);
            context.getApplication().setDefaultLocale(context.getViewRoot().getLocale());
     
            return null;
    }
    cela devrais marcher

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si ça change de langue quand il change la valeur hardcodée, c'est que jsf charge bien le ficheir de langue (peu importe sa position).


    Pour le premier exemple, affiche dans la console (System.out) l'id que tu récupère, m'est d'avis qu'il n'est pas ce que tu pense et qu'il ressemble plus à view1:form1:pt_BR qu'à pt_BR tout seul


    Pour le second exemple, vérifie que beanInternationalisation est bien session scope.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si ça change de langue quand il change la valeur hardcodée, c'est que jsf charge bien le ficheir de langue (peu importe sa position).
    C'est exactement ça qui j'ai voulu tester avec mon exemple, en mettant "es_AR" (qui n'existe pas) et aussi en essayant en dur


    Citation Envoyé par tchize_ Voir le message
    Pour le premier exemple, affiche dans la console (System.out) l'id que tu récupère, m'est d'avis qu'il n'est pas ce que tu pense et qu'il ressemble plus à view1:form1:pt_BR qu'à pt_BR tout seul


    Pour le second exemple, vérifie que beanInternationalisation est bien session scope.
    Pour le premier exemple, j'avais en fait mis un libellé dans la page:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    #{beanInternationalisation.langueChoisi}
    qu'affichait bien la valeur codé dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String langueChoisi="pt_BR";
    Mais qui ne changeait pas non plus après avoir cliqué sur les drapeaux...

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si ça change de langue quand il change la valeur hardcodée, c'est que jsf charge bien le ficheir de langue (peu importe sa position).


    Pour le premier exemple, affiche dans la console (System.out) l'id que tu récupère, m'est d'avis qu'il n'est pas ce que tu pense et qu'il ressemble plus à view1:form1:pt_BR qu'à pt_BR tout seul


    Pour le second exemple, vérifie que beanInternationalisation est bien session scope.
    En fait avec le h:link je crois qu'il y a quelque chose qui ne marche pas, j'ai essayé de faire une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JOptionPane.showMessageDialog(null, locale);
    et l'OptionPane n'apparait pas...

  8. #8
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut
    tu pourrais aussi utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <p:commandLink  action="#{connexionController.changeUS()}" title="English" ajax="false">
              <h:graphicImage value="images/usaFlag.jpg" width="25" height="15" />
            </p:commandLink>

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Par défaut
    Citation Envoyé par bruneltouopi Voir le message
    tu pourrais aussi utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <p:commandLink  action="#{connexionController.changeUS()}" title="English" ajax="false">
              <h:graphicImage value="images/usaFlag.jpg" width="25" height="15" />
            </p:commandLink>

    Je crois qui t'as trouvé la solution, je vais essayer ce soir (j'ai pas l'application maintenant...)

    Comme j'avais expliqué à tchize_, même mon libellé test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #{beanInternationalisation.langueChoisi}
    restait inchangé, j'avais l'impression que les drapeaux ne marchaient pas pour une raison quelconque... En regardant ton code, je pense qui c'est peut-être
    qui je n'ai pas mis (je sais qu'il est à "true" par défaut et j'ai aucun ajax dans cette page...)

    En tout cas merci tous les deux, en arrivant chez moi je vais essayer tout ça et je poste ici pour dire quelque chose...

  10. #10
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut
    tu pourrais aussi utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <p:commandLink  action="#{connexionController.changeUS()}" title="English" ajax="false">
              <h:graphicImage value="images/usaFlag.jpg" width="25" height="15" />
            </p:commandLink>

  11. #11
    Membre très actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Par défaut
    Bon, j'ai essayé la solution:
    Code html : 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
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:p="http://primefaces.org/ui">
     
    <ui:composition>
    	<f:view>
    		<div align="right">
    			<table><tr>
    			<td><h:link value="#{txtl.sortir}" outcome="logout.jsp" /></td>
    			<td><p:commandLink id="pt_BR"  action="#{beanInternationalisation.choixLanguePT}" ajax="false" >
    					<h:graphicImage value="images/brasilFlag.jpg" width="25" height="15" />
    				</p:commandLink></td>
    			<td><p:commandLink id="en_US" action="#{beanInternationalisation.choixLangueEN}" ajax="false" >
    					<h:graphicImage value="images/usaFlag.jpg" width="25" height="15" />
    				</p:commandLink></td>
    			</tr></table>
    		</div>
    		<h:graphicImage value="images/logo.JPG" /><br />
     
    	</f:view>
    </ui:composition>
     
    </html>

    avec
    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
    import java.io.Serializable;
    import java.util.Locale;
     
     
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    import javax.faces.context.FacesContext;
     
     
    @ManagedBean
    @SessionScoped
    public class BeanInternationalisation implements Serializable {
     
     
    	/**
             * 
             */
    	private static final long serialVersionUID = -4617898662333230798L;
     
    	public String choixLangueEN(){
    		Locale locale;
    		locale=new Locale("en_US");
    		FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    		return null;
    	}
     
    	public String choixLanguePT(){
    		Locale locale;
    		locale=new Locale("pt_BR");
    		FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    		return null;
    	}
    }
    Mais j'ai l'erreur Commandlink "pt_BR" must be inside a form component... Après si je change pour h:link, la page elle charge mais les liens ne marchent pas...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/06/2006, 14h35
  2. Internationalisation : quelles langues choisir ?
    Par cjacquel dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 09/05/2006, 16h28
  3. [WinCE/PDA] Pourquoi touche TAB ne change pas le focus ?
    Par zitoun dans le forum Windows Mobile
    Réponses: 7
    Dernier message: 24/04/2006, 09h26
  4. [POO] La valeur de l'attribut ne change pas...
    Par slydemusli dans le forum Langage
    Réponses: 3
    Dernier message: 26/03/2006, 12h10
  5. Frames : adresse ne change pas
    Par polo-j dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/02/2005, 16h56

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