Bonjour,
Mon application web utilise une locale transmise par les requêtes qu'elle reçoit, dès que c'est possible. Et j'exécute ce fragment de code pour afficher la date et l'heure que nos sommes.
J'exécute l'ensemble sur un Windows en Français, la locale par défaut du site web est en Français et l'anglais mis en langue additionnelle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // <mon_bundle>_fr: // txt_annonce_date=Nous sommes le {0,date,long}, il est {1,time,medium}. // // <mon_bundle>_en: // txt_annonce_date=We are the {0,date,long}, it''s {1,time,medium} o''clock. ResourceBundle rsc = ResourceBundle.getBundle("<mon bundle>", req.getLocale()); Date d = new Date(); return(MessageFormat.format(rsc.getString("txt_annonce_date"), d, d));
Si le message qui apparait quand je suis sur un navigateur en français est bien celui que je veux,
"Nous sommes le 26 février 2011, il est 11:12:33."
Ce n'est pas le cas lorsque j'emploie un navigateur que je place en locale préférée "Anglais":
"We are the 26 février 2011, it's 11:13:06 o'clock."
Pourtant, il me semble n'avoir rien fait de mal... et je peux bien observer qu'il a pris la chaine "txt_annonce_date" dans le bon fichier de propriétés puisque le message débute en anglais. Mais ses paramètres date et heure, eux, sont résolus en français.
Comme s'il me fallait préciser au niveau du MessageFormat.format lui-même dans quelle locale il doit le résoudre?
EDIT: En ce moment, j'ai trouvé une solution de contournement:
Mais c'est tout de même laborieux. Car il m'a fallu par la suite, pour être complet, mettre en propriétés supplémentaires:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // Avec cette fois-ci: // txt_annonce_date=We are the {0}, it''s {1} o''clock. String dateFormat = DateFormat.getDateInstance(DateFormat.LONG, d); String date = dateFormat.format(d); String timeFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM, d); String time = timeFormat.format(d); return(MessageFormat.format(rsc.getString("txt_annonce_date"), date, time));
fmt_date_annonce_date=long
fmt_time_annonce_date=medium
afin que le choix du style de date ou d'heure ne soit pas codé en dur dans le programme, et puisse être choisi langue par langue.
Existe t-il de meilleurs moyens de résoudre mon problème?
En vous remerciant,
Grunt.
Partager