i18n dans une appli web [RESOLU]

i18n dans une appli web [RESOLU] - Java - Programmation

Marsh Posté le 15-11-2002 à 10:57:34    

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
Reply

Marsh Posté le 15-11-2002 à 10:57:34   

Reply

Marsh Posté le 15-11-2002 à 11:01:56    

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
Reply

Marsh Posté le 15-11-2002 à 11:04:44    

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

Reply

Marsh Posté le 15-11-2002 à 11:12:48    

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

Reply

Marsh Posté le 15-11-2002 à 11:19:55    

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
Reply

Marsh Posté le 15-11-2002 à 11:22:45    

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
Reply

Marsh Posté le 15-11-2002 à 11:27:39    

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
Reply

Marsh Posté le 15-11-2002 à 11:37:23    

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  :??:

Reply

Marsh Posté le 15-11-2002 à 11:46:54    

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
Reply

Marsh Posté le 15-11-2002 à 11:50:37    

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

Reply

Marsh Posté le 15-11-2002 à 11:50:37   

Reply

Marsh Posté le 15-11-2002 à 13:00:35    

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.

Reply

Marsh Posté le 15-11-2002 à 13:33:12    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed