Bonjour,
Sous JSF 2, j'ai besoin de récupérer des listes de locales distinctes, selon mes objectifs.
1) Ce que je souhaite obtenir en priorité, c'est la directive "Accept-Language" de mon navigateur, et cela indépendamment du fait que la page sur laquelle l'utilisateur va se rendre soutiendra toutes ces langues ou non.
En gros, je désire retrouver {"fr_FR", "en_US"} de mon browser.
2) Ensuite, je souhaite connaître la locale de la vue actuelle.
3) Enfin, j'aimerais comprendre à quoi correspond la locale de la requête en cours.
Aujourd'hui, j'utilise cette fonction pour essayer de me dresser des listes de locales:
Je l'ai faite en mode "débrouille" en étant de moins en moins sûr qu'elle fait même seulement la prémisse de ce que je veux.
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 public Locales getUserLocales() { Locales locales = new Locales(); Iterator<Locale> itLocales = FacesContext.getCurrentInstance().getExternalContext().getRequestLocales(); while(itLocales.hasNext()) locales.add(itLocales.next()); // Si la liste des locales souhaitées par l'utilisateur est vide, il faut chercher une autre source d'alimentation. if (locales.isEmpty()) { if (FacesContext.getCurrentInstance().getViewRoot().getLocale() != null) locales.add(FacesContext.getCurrentInstance().getViewRoot().getLocale()); else { if (FacesContext.getCurrentInstance().getExternalContext().getRequestLocale() != null) locales.add(FacesContext.getCurrentInstance().getExternalContext().getRequestLocale()); } } // Si aucune locale n'a pu être extraite, lever un avertissement car JSF devrait nous donner quelque-chose! if (locales.isEmpty()) rsc.warn("log.jsf_sans_locale"); //$NON-NLS-1$ return(locales); }
Particulièrement, la ligne en rouge me renvoie régulièrement un tableau vide [].
4) Quel est le rôle exact de:
FacesContext.getCurrentInstance().getExternalContext().getRequestLocales() ?
de FacesContext.getCurrentInstance().getExternalContext().getRequestLocale() par rapport à la fonction précédente?
de FacesContext.getCurrentInstance().getViewRoot().getLocale() ?
J'ai l'impression qu'aucune d'entre-elles ne me renvoie Accept-Language.
Dois-je y aller "à la main" dans le header de ma requête?
Mon objectif est d'avoir à la fin une liste de locales utilisateurs dans cet ordre:
1. Accept-Language du navigateur.
2. Locale de la vue.
3. Locale spécifique à cette requête particulière.
En vous remerciant de vos précisions,
Grunt.
Partager