Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1501 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  i18n dans une appli web [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

i18n dans une appli web [RESOLU]

n°245769
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 15-11-2002 à 10:57:34  profilanswer
 

Salut,
 
J'essaie de m'initier à l'internationalisation (i18n) afin que mon application web prenne en compte la "langue" de l'utilisateur connecté.
 
J'ai un problème en particulier avec les dates, c'est une vraie galère et je me demandais si quelqu'un avait une méthode propre pour gérer tous les cas de manière générique.
 
Exemple:
 
J'affiche à un utilisateur son historique des absences dans l'année. S'il est français, je veux que les dates soient formattées en JJ/MM/SSAA et s'il est anglais, en MM/JJ/SSAA.
 
Problème:  
 
Je dois utiliser un objet Locale que j'ai déterminé à la connexion de l'utilisateur et stocké dans sa session HTTP. Pour formatter les dates, je vois rien d'autre que d'utiliser un objet DateFormat en appelant DateFormat.getDateInstance(int style, Locale aLocale). Seulement, aucun style par défaut (SHORT, FULL? etc...) ne convient car il n'intègre pas le siècle quand j'appelle monDateFormat.format(maDate);
 
monDateFormat.format(maDate) + Locale.FRANCE -> JJ/MM/AA
monDateFormat.format(maDate) + Locale.UK -> MM/JJ/AA
 
Je pourrais modifier la pattern de mon DateFormat en remplaçant dans la chaîne "dd/MM/yy", "yy" par "yyyy" mais c'est carrément pas propre (selon moi) et je devrais le faire pour chaque locale susceptible d'être utilisée.
 
Je vois autre chose, ce serait de construire un objet SimpleDateFormat en passant dans le constructeur le pattern à utiliser pour formatter ma date mais dans ce cas-là, la Locale ne sert plus à rien puisque j'indique "en dur" un format !
 
Une idée ?
 
 :hello:


Message édité par machinbidule1974 le 15-11-2002 à 11:52:07
mood
Publicité
Posté le 15-11-2002 à 10:57:34  profilanswer
 

n°245774
darklord
You're welcome
Posté le 15-11-2002 à 11:01:56  profilanswer
 

essaie
 

Code :
  1. df = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
  2. System.out.println(df.format(new Date());


 
où locale est ton objet Locale


---------------
Just because you feel good does not make you right
n°245777
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 15-11-2002 à 11:04:44  profilanswer
 

OK, je teste ... et je reviens  :)

n°245783
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 15-11-2002 à 11:12:48  profilanswer
 

Ben ça m'affiche "15 nov. 02" mais ce que je voudrais, c'est avoir la date au format 15/11/2002.  :??:

n°245786
darklord
You're welcome
Posté le 15-11-2002 à 11:19:55  profilanswer
 

MachinBidule1974 a écrit a écrit :

Ben ça m'affiche "15 nov. 02" mais ce que je voudrais, c'est avoir la date au format 15/11/2002.  :??:  




 
ce que t'affiche le code c'est le format officiel, relatif à l'objet locale que tu lui passes ... Si tu veux un truc A TOI et par pays bin tu dois créer ton pattern à la main pour chaque pays.
 
A+


---------------
Just because you feel good does not make you right
n°245788
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 15-11-2002 à 11:22:45  profilanswer
 

Bon ben c'est bien ce que je me disais, va falloir que je bidouille les pattern. Quelle chianlie ! Moi qui pensais que Java pouvait gérer tous les cas de figure de manière élégante, je viens de perdre mon innocence  :cry:
 
Merci quand même  :)


Message édité par machinbidule1974 le 15-11-2002 à 11:23:33
n°245791
darklord
You're welcome
Posté le 15-11-2002 à 11:27:39  profilanswer
 

MachinBidule1974 a écrit a écrit :

Bon ben c'est bien ce que je me disais, va falloir que je bidouille les pattern. Quelle chianlie ! Moi qui pensais que Java pouvait gérer tous les cas de figure de manière élégante, je viens de perdre mon innocence  :cry:
 
Merci quand même  :)  




 
non mais attends faut qd meme rester réaliste. L'objet locale a une définition qui est standardisée. Si toi maintenant tu veux modifier les standards et que tu te plains que Java ne sais pas deviner ce que tu veux c'estd un peu fort je trouve ...
 
Et puis dire : "Tel locale a tel format parce que je le veux" ou "Cree un format pour tel locale", je ne vois aucune différence personnellement  :sarcastic: D'une manière ou d'une autre tu dois définir le pattern que tu veux puisque celui qui est standard ne te plait pas ...
 
non?


Message édité par darklord le 15-11-2002 à 11:28:23

---------------
Just because you feel good does not make you right
n°245800
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 15-11-2002 à 11:37:23  profilanswer
 

DarkLord a écrit a écrit :

 
 
non mais attends faut qd meme rester réaliste. L'objet locale a une définition qui est standardisée. Si toi maintenant tu veux modifier les standards et que tu te plains que Java ne sais pas deviner ce que tu veux c'estd un peu fort je trouve ...
 
Et puis dire : "Tel locale a tel format parce que je le veux" ou "Cree un format pour tel locale", je ne vois aucune différence personnellement  :sarcastic: D'une manière ou d'une autre tu dois définir le pattern que tu veux puisque celui qui est standard ne te plait pas ...
 
non?




 
OK, la définition d'une Locale est standard mais ça n'est pas paramétrable proprement, c'est surtout ça mon reproche. J'aurai aimé avoir une sorte de méthode includeCentury(boolean) à appeler sur la Locale pour indiquer que la date doit être formattée avec le siècle par exemple.
 
Parceque là, je vais devoir faire un getPattern(), remplacer le "yy" par "yyyy" sur ce pattern et refaire un setPattern(). Je sais pas si je suis trop perfectionniste mais ça me semble crade  :??:

n°245805
darklord
You're welcome
Posté le 15-11-2002 à 11:46:54  profilanswer
 

bin tout dépend du nombre locale que tu es censé supporté mais si tu as la liste qui est définie + ce que tu veux tu peux faire un objet singleton qui mappe une locale avec une instance de SimpleDateFormat
 
et lorsque tu dois formater une date, tu récupères le bon objet SimpleDateFormat. Ca c'est propre et extensible via un fichier de config (genre
 
<country id="FR">
  <date-pattern language="fr">dd/MM/YYYY</date-pattern>
  <date-pattern language="en">MM/dd/YYYY</date-pattern>
</country>
 
etc ...


---------------
Just because you feel good does not make you right
n°245807
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 15-11-2002 à 11:50:37  profilanswer
 

Oui, en effet. Tout cela me semble très bien  :jap:

mood
Publicité
Posté le 15-11-2002 à 11:50:37  profilanswer
 

n°245849
duchzeworl​d
Posté le 15-11-2002 à 13:00:35  profilanswer
 

Tu peux aussi utiliser une clé particulière dans un ResourceBundle à laquelle tu associes le pattern de date qui te convient. Comme ça, tu peux utiliser les méthodes basées sur les Locale pour récupérer ce qui te convient.

n°245864
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 15-11-2002 à 13:33:12  profilanswer
 

duchzeworld a écrit a écrit :

Tu peux aussi utiliser une clé particulière dans un ResourceBundle à laquelle tu associes le pattern de date qui te convient. Comme ça, tu peux utiliser les méthodes basées sur les Locale pour récupérer ce qui te convient.




 
Ah ouais c'est malin ça aussi. Merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  i18n dans une appli web [RESOLU]

 

Sujets relatifs
[installeur d'appli] aide![Java] Ecriture/Lecture fichier.[RESOLU]
problème d'URL (résolu)Pbs avec pointeurs ! [RESOLU ]
Liste Chainée en java | Gérer le resize [Resolu]Où sont les fonctions trigo ? [résolu]
acceder a un mysql sous linux a partir d'une appli java sous windows[JAVA] erreur d'exécution: variables d'environnement?[résolu]
[JAVA] erreur de compilation que je capte pas ... [resolu][C] comment attribuer un nombre à un int ... [résolu]
Plus de sujets relatifs à : i18n dans une appli web [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR