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 :

Probleme d'Internationalisation avec JSF


Sujet :

JSF Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Par défaut Probleme d'Internationalisation avec JSF
    bonjour,

    Je débute en jsf et en ce moment je teste le changement de langue normalement simplifié par jsf. Le souci c'est que j'arrive bien à changer de langue sur une page mais quand je passe aux suivantes le mode par defaut revient, y a-t-il un attribut spécifique pour lui dire de le conserver pour toute la durée de la session utilisateur ?
    Le FacesContext n'a qu'une portée requete?

    Voilà ce que j'ai fait pour le moment :
    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
     
    dans la jsp :
    <h:commandLink action="#{languageSwitcher.switchOnEn}" immediate="true">
      <h:graphicImage value="img/en.jpg" width="30px" height="20px" style="border:0px"/>
    </h:commandLink>
    ...
     
    dans la class qui fait le changement :
    public String switchOnEn() {
      FacesContext context = FacesContext.getCurrentInstance();
      context.getViewRoot().setLocale(Locale.ENGLISH);
      return null;
    }
    ...
     
    dans le config.xml:
    <managed-bean>
      <managed-bean-name>languageSwitcher</managed-bean-name>
      <managed-bean-class>test.LanguageSwitcher</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>(request?)
    </managed-bean>
    si quelqu'un peut m'aider ...
    merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    Ce n'est pas le facesContext qui à une portée request mais le ViewRoot.

    En gros le viewRoot c'est la page que tu vois. a chaque fois que tu change de page un nouveau viewRoot est créé donc tu perd ta locale.

    N'ayant pas essayer de changer la langue dans mon appli, je ne peux pas t'aider plus...

    si tu trouve la réponse n'hesite pas à la poster

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Par défaut
    ok merci, je vais continuer mes recherches

    Sinon j'ai vu une solution qui consistait à utiliser un bean de porté session pour conserver l'attribut langue et de l'utiliser pour charger le locale dans le view.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <f:view locale="#{langue.locale}">
    <f:loadBundle ....
    ...
    mais jsf génére une erreur (sans explications constructive) sur la ligne du f:view je ne sais pas pourquoi...

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    essaye quelque chose du 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
     
     
    	/**
             * 
             * Method changeLocale
             * 
             * Change Locale (language) in JSF environnement (web browser)
             * 
             * @param newLocaleString
             *            Locale to set (as String like "FR", "DE", etc...)
             * 
             */
    	public static void changeLocale(String newLocaleString) {
    		Locale newLocal = new Locale(newLocaleString);
    		changeLocale(newLocal);
    	}
     
    	/**
             * 
             * Method changeLocale
             * 
             * Change Locale (language) in JSF environnement (web browser)
             * 
             * @param newLocale
             *            Locale to set
             * 
             */
    	public static void changeLocale(Locale newLocale) {
    		UIViewRoot view = FacesContext.getCurrentInstance().getViewRoot();
    		view.setLocale(newLocale);
    	}

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Par défaut
    Ca revient à ce que j'ai fait au début, modifier le Locale du getViewRoot ne modifie que la page courante

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    hummm. je pense que tu pourrais setter ta locale dans la phase de render response de JSF. en créant un listener sur cette phase, tu récupére ta locale dans un bean de session et tu la set.

    Cependant cette méthode me parait un peu "lourde" pour ce que tu veux faire...

  7. #7
    Membre éprouvé
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Voici mon code qui fonctionne :

    dans faces-config.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <application>
      <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
      <message-bundle>be.dzafer.bundle.MessageResource</message-bundle>
      <locale-config>
       <default-locale>en</default-locale>
       <supported-locale>fr_BE</supported-locale>
       <supported-locale>nl_BE</supported-locale>
      </locale-config>
     </application>
    dans les pages jsf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:loadBundle basename="be.dzafer.bundle.MessageResource" var="msg" />
    dans le code du bean ou autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public void onChooseLocale(ActionEvent event) {
            String current = event.getComponent().getId();
            FacesContext context = FacesContext.getCurrentInstance();
             context.getViewRoot().setLocale(locales.get(current));
     }
    dans la page jsf choix de la langue

    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
    			  <h:form>
    			    <h:commandLink id="f" action="chooseLocale"
           				actionListener="#{loginCtrl.onChooseLocale}">
        				<h:outputText value="FR" />
        			</h:commandLink>
        			<h:outputText value=" "/>
        			<h:commandLink id="e" action="chooseLocale"
           				actionListener="#{loginCtrl.onChooseLocale}">
        				<h:outputText value="EN" />
        			</h:commandLink>
        			<h:outputText value=" "/>
        			<h:commandLink id="n" action="chooseLocale"
           				actionListener="#{loginCtrl.onChooseLocale}">
        				<h:outputText value="NL" />
        			</h:commandLink>
        		  </h:form>

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut Conserver la Locale dans toute l'application
    Voici la déclaration de mon template j'ai mis ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core" 
          locale="#{DSLocaleBean.locale}">
    Où surtout la locale est interressante " locale="#{DSLocaleBean.locale}"".
    Ceci permet de recharger la locale que l'on a setté.

    Mon Bean:

    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
     
    @ManagedBean(name = "DSLocaleBean")
    @SessionScoped
    public class DSLocaleBean
    {
     
        private Locale locale = Locale.FRENCH;
     
        public String changeToEnglish()
        {
            this.locale = Locale.ENGLISH;
            FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
            return FacesContext.getCurrentInstance().getExternalContext().getRequestPathInfo();
        }
    // avec les accesseurs sur ma locale bien sur...
     
    }

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    Où surtout la locale est interressante " locale="#{DSLocaleBean.locale}"".
    Ceci permet de recharger la locale que l'on a setté.
    Salut,

    est-ce que tu pourrais m'expliquer ce point ?
    ou me donner un lien vers une doc ?

    merci.

Discussions similaires

  1. probleme integration cewolf avec JSF
    Par riadhhwajdii dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 13/08/2009, 14h17
  2. probleme integration cewolf avec JSF
    Par riadhhwajdii dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 13/08/2009, 14h13
  3. probleme de CharDirector avec JSF
    Par rabebIF5 dans le forum JSF
    Réponses: 0
    Dernier message: 16/06/2009, 15h38
  4. Probleme de navigation avec JSF
    Par Evenmor dans le forum JSF
    Réponses: 7
    Dernier message: 16/01/2009, 17h14
  5. Probleme du Onload avec JSF
    Par maya35 dans le forum JSF
    Réponses: 4
    Dernier message: 17/03/2008, 14h21

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