Bonjour,
Je souhaite réaliser une application capable de sélectionner la locale la plus proche des souhaits de l'utilisateur. C'est à dire, dans un premier temps, la plus proche du contenu de sa directive HTTP Accept-Language.
Cette directive peut contenir plusieurs locales.
En général, tout se passe bien côté web. Un framework web, JSF 2 par exemple, prend convenablement les choses en main.
Mais cela se complique lorsque l'on s'adresse à la couche service puis persistance de son application.
Là, une seule locale est souvent transmise (quand on ne l'a pas oubliée...),
et l'on écrit souvent ce code:
ResourceBundle bundle = ResourceBundle.getBundle("service.DodoOffice", locale);
en ne retenant que le premier choix de l'utilisateur.
Les choix secondaires qu'il a pu faire, ceux que côté web on connaissait, sont passés à la trappe. Côté service et persistance, bien souvent, on ne les connait plus. Je pense que ça se vérifie dans de nombreuses applications.
Mon objectif, c'est de m'assurer que l'intégralité des souhaits de l'utilisateur est transmise à ces couches. C'est à dire qu'il faut que je transporte un tableau de locales ordonnées selon ses préférences et non pas seulement son premier choix.
Au moment de la négociation, celui où je mets en relation ses souhaits et ce que je possède de locales, je me pose une question:
1) Si l'utilisateur a fait ces choix: {fr_CA, de} (Français du Canada, Allemand}
mais que mon système possède {fr_BE, de} (Français de Belgique, Allemand}
dois-je choisir pour lui fr_BE ou de?
2) Toujours avec ces préférences utilisateur {fr_CA, de},
si mon système possède {fr, de}, lui reverrais-je fr ou de?
Quelle est la règle?
a) Est-ce que je considère la deuxième partie de la locale (la variante) comme un dialecte, et alors je dis que je peux pas renvoyer ce que l'utilisateur me demande si ce n'est pas précisément cela que j'ai, à la variante près?
=> Dans les cas 1 et 2 je renvoie alors: de.
b) Est-ce que je considère cette variante comme un dialecte, mais je dis que fr seul vaut tous dialectes et je le renvoie?
=> Dans le cas 1 je renvoie de, dans le cas 2 je renvoie fr.
c) Ou bien est-ce que je considère cette variante comme une région, et je dis qu'elle n'a pas d'importance en soi, et alors:
=> Dans les cas 1 et 2, je renvoie fr.
En vous remerciant,
Grunt.
Partager