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:
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:
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!
:fleche: 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!