IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[Localisation] "We are the 26 février 2011, it's 11:13:06 o'clock." <-- Raté!


Sujet :

Collection et Stream Java

  1. #1
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 608
    Par défaut [Localisation] "We are the 26 février 2011, it's 11:13:06 o'clock." <-- Raté!
    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.


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

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

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Vous oubliez de passer la locale à utiliser à Message format -> Il utilise celle de la plateforme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    return new MessageFormat(rsc.getString("txt_annonce_date"),req.getLocale)
        .format(new Object[]{d, d},
                new StringBuffer,
                null)
        .toString();
    Aussi, inutile de répéter le "d", il suffit, dans vtre bundle, d'utiliser plueieurs fois la première entrée:

    We are the {0,date} at {0,time}


  3. #3
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 608
    Par défaut
    À force d'utiliser MessageFormat.format(...) en statique, je n'avais pas vu cela!
    Ça marche parfaitement et cela m'économise des sueurs!

    Merci!

    ==> Retirer le bonnet de père noël sur la photo, et mettre une casquette, si possible:
    <==

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/10/2010, 10h01
  2. Réponses: 0
    Dernier message: 25/10/2010, 15h31
  3. Réponses: 0
    Dernier message: 29/09/2009, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo