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 :

Problème avec l'internationalisation, langue non modifiée!


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut Problème avec l'internationalisation, langue non modifiée!
    Bonjour à tous.

    J'ai un problème assez ennuyeux dans mon application.
    Je dois avoir la possibilité, en passant par un paramètre "lang" dans mon url de changer la langue à appliquer dans l'application.

    Je m'occupe de faire ce changement dans un Listener, executé juste après un SessionTimedOutListener qui ne modifie en rien la locale.

    En fait j'ai essayé dans mon second Listener toute une série de méthode comme celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                Locale locale = new Locale((String) extCtx.getRequestParameterMap().get("lang"));
                extCtx.getSessionMap().put("locale", locale);
     
                //First set the viewroot, with the language received from the client.
                ViewHandler viewHandler = facesCtx.getApplication().getViewHandler();
                UIViewRoot viewRoot = viewHandler.createView(facesCtx, "/pages/welcome.jsp");
                viewRoot.setLocale(locale);
                facesCtx.setViewRoot(viewRoot);
    Et mon ViewHandler personnalisé:

    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
    public class MyViewHandler extends JspViewHandlerImpl {
     
    	/**
             * {@inheritDoc}
             */
    	@SuppressWarnings("unchecked")
    	@Override
    	public Locale calculateLocale(FacesContext context) {		
    		Map<String, Object> session =  context.getExternalContext().getSessionMap();
    		Locale l = (Locale) session.get("locale");
    		return l != null ? l : super.calculateLocale(context);
    	}
     
     
    }
    En débug, je vois que la Locale est correcte partout... seulement ma page ne s'affiche que dans la langue par défaut du browser!

    Pourquoi mes vues ne font-elles pas appel au bon bundle? Ou plutôt, comment font-elles alors?

    Merci d'avance pour votre réponse!

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu as ajouté les supported locale dans le faces-config?
    et pourquoi redéfinir le view handler? il doit y'avoir plus simple,

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 146
    Par défaut
    Bonjour,
    j'ai eu le même problème :
    j'ai dans faces-config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <locale-config>
            <default-locale>en</default-locale>
            <supported-locale>fr</supported-locale>
            <supported-locale>en</supported-locale>
         </locale-config>
    même avec cette configuration la langue n'est pas modifiée ,la langue utilisé est toujours fr
    j'ai ajouté une fonction qui permet de changer la valeur du locale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FacesContext context = javax.faces.context.FacesContext.getCurrentInstance();
             context.getViewRoot().setLocale(new java.util.Locale("en","GB"));
    dé que je change ou je rafraichi la page le locale par défaut revient à la valeur initiale fr
    dans la page JSF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <f:loadBundle basename="siteJSF.Bundle" var="msg"/>
    je n'ai pas encore trouvé la solution

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    tu as ajouté les supported locale dans le faces-config?
    et pourquoi redéfinir le view handler? il doit y'avoir plus simple,
    Tout est bien défini dans mon faces-config:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		<locale-config>
    			<default-locale>nl</default-locale>
    			<supported-locale>nl</supported-locale>
    			<supported-locale>fr</supported-locale>
    		</locale-config>
    Et malheureusement je ne connais pas la raison pour laquelle le view handler a été redéfini: je sais qu'il y a une bonne raison à cela mais le collègue qui s'en était occupé n'est pas là actuellement ^^

    En fait j'ai le même problème que wajdopovitch mentionne...

    J'ai lu sur plusieurs forums que lorsque l'on modifie la locale settée dans la ViewRoot, elle n'est modifiée que sur la page en cours et ce n'est pas ce que je recherche puisqu'elle doit l'être dans la session.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 146
    Par défaut
    d'après mes connaissances il n y a que 2 solutions:
    1-soit tu défini la langue par défaut pour toute l'application dans le faces-config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <locale-config>
            <default-locale>.....</default-locale>
    </locale-config>
    2-pour chaque page, il faut ajouté <f:view locale="XX">
    et bien sûr la propriété XX tu peut la déclaré en session

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    Bon, j'ai pu avancer un peu dans la résolution du problème mais c'est encore loin d'être terminé.

    Malheureusement wajdopovitch, ta solution me demanderait pas mal de modification dans plus d'une centaine de pages JSP ce qui ne fait pas trop mon affaire...

    Alors dans mon listener, si je fais quelque chose comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
               Locale locale = new Locale((String) extCtx.getRequestParameterMap().get("lang"));
                extCtx.getSessionMap().put("locale", locale);
     
                //First set the viewroot, with the language received from the client.
     
                ViewHandler viewHandler = facesCtx.getApplication().getViewHandler();
                UIViewRoot viewRoot = viewHandler.createView(facesCtx, "/pages/welcome.jsp");
                facesCtx.setViewRoot(viewRoot);
    FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    Cela va fonctionner, j'aurai bien la page dans la langue désirée...
    Toutefois, une chose que je n'ai pas mentionné, c'est qu'après ce bout de code, j'effectue un forward:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                        facesCtx.getApplication()
                            .getNavigationHandler().handleNavigation(facesCtx, null, destination);
    Ce forward n'est pas appelé car le code ne s'exécute plus après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    Je me suis donc dis que je placerai cette ligne après le handleNavigation. J'ai vérifié, elle est bien exécutée mais la langue n'est là pas correcte!

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    J'ai pu résoudre le problème.

    En déplaçant le code dans la méthode "after" et non pas "before" de mon listener, tout fonctionne

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 31/01/2007, 22h03
  2. Problème avec la méthode Buidmenu non trouvée
    Par franckjava dans le forum NetBeans
    Réponses: 2
    Dernier message: 17/01/2007, 00h45
  3. Réponses: 1
    Dernier message: 28/06/2006, 13h31
  4. Problème avec Me.RecordSource : valeur non conforme
    Par Tchupacabra dans le forum Access
    Réponses: 6
    Dernier message: 02/12/2005, 17h01
  5. Problème avec affichage d'une table modifiée
    Par auriolbeach dans le forum Access
    Réponses: 6
    Dernier message: 31/10/2005, 15h45

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