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:

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);
   }
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.
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.