Bonjour,
De tous les problèmes que je connais, ce sont ceux de localisation qui me font perdre le plus de cheveux.
J'ai un serveur d'application et web sur ma machine de développement dont la langue par défaut est fr.
Les fichiers de propriétés de mon application ont dans leur bundle de base l'anglais par défaut. C'est la langue que je veux mettre à disposition en dernier ressort.
Pour un fichier de propriétés p, j'ai par exemple:
Le serveur web doit appeler occasionnellement un programme externe java E, et il lui transmet la langue préférée d'un utilisateur (internaute). Il est fréquent que le programme externe ait moins de choix de langues à sa disposition.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 p_fr.properties p_en.properties p_vi.properties p.properties (= copie de p_en.properties)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 e_fr.properties e_en.properties e.properties (= copie de e_en.properties)
Et voici la catastrophe.
Un utilisateur arrive, et dit: moi, je suis vi.
Le site web "répond":
Considérant p_fr.properties, p_en.properties, p_vi.properties et p.properties,
Oui, vi je connais.
1) Je prends tout ce que je peux de p_vi.properties,
2) mais ce que je trouverais pas dedans, j'irai le chercher dans p_[Locale.getDefault()].properties = p_fr.properties, puisque c'est la locale par défaut de la machine de développement.
3) Et si tout cela rate, j'irai farfouiller dans p.properties.
Puis, il appelle le programme externe E, par un:
java -Duser.language=vi E
E répond:
Considérant e_fr.properties, e_en.properties et e.properties:
Non, vi je ne connais pas.
1) Je vais chercher dans e_[Locale.getDefault()].properties = e_vi.properties (oui, car user.language=vi!) qui n'existe pas.
2) Donc, je me rabats sur le bundle par défaut, e.properties.
Donc, me voilà face à un schisme.
Le serveur web va faire: vi, fr, default = en.
Le programme externe E va faire: vi, default = en.
J'ai deux solutions:
Celle que je pense que je vais devoir employer: je ne passe pas ma langue au programme E par user.language, afin qu'il garde la même langue par défaut que celle de la machine de développement.
Mais foncièrement, je ne l'aime pas: mon serveur de production, lui, est à l'étranger. Et je n'ai pas envie que la langue natale de mon hébergeur colore sa représentation des choses.
Je préfèrerais pouvoir débrayer le ResourceBundle p, en lui disant: quand tu ne trouve pas la resource dans la langue précisément voulue, ne tente pas la locale par défaut, mais directement le bundle de base: p.properties.
Est-ce possible?
En vous remerciant,
Grunt.
Partager