> Le probl�me de la m�thode getLocalizedMessage c'est qu'elle ne
> prend pas de Locale en argument, donc d'apr�s ce que je comprends,
> elle retourne pour moi le message convertit dans la Locale par
> d�faut du serveur...

Elle n'est pas aussi intelligente :
Subclasses may override this method in order to produce a locale-specific
message

> ...Or, sur une appli web on peut avoir plusieurs
> clients avec chacun leur Locale.

En faite voila le code :
    public String getLocalizedMessage() {
        return getMessage();
    }

C'est une proposition d'impl�mentation.
Je te conseille donc d'�crire ta classe d'exception qui surcharge
getLocalizedMessage.
Dans cette surcharge tu r�cup�res la localisation courante de ta Web
Application gr�ce
� un param�tre de contexte : 

<context-param> 
   <param-name>localisation</param-name>        
   <param-value>fr_fr</param-value>     
</context-param>

Si tu veux �tre encore plus ouvert, tu d�finis une interface de r�solution
de localisation que tu impl�mente � ta guise.
Par exemple Locale.getDefault() par d�faut et new
Locale(getServletContext().getAttribute("localisation")) dans le cas
discut�.

> De plus, je voulais pouvoir avoir plusieurs messages associ�s �
> IllegalValue, certains avec des param�tres, d'autres sans et dans
> ceux qui ont des param�tres, certains de ces param�tres sont 
> �galement � traduire.

Je r�soudrais en ayant soit plusieurs constructeur, soit des sous classes si
tu obtiens plusieurs  constructeur avec la m�me signature.

> Pour r�soudre mon probl�me j'ai donc ajout� � mon exception
> un tableau d'objet qui contient les param�tres du message.

Je ne vois pas bien comment tu vas trouver la bonne traduction dans ton
ResourceBundle avec un tableau en param�tre.
Personnellement je pr�f�re plusieurs constructeurs et/ou des sous classes.


--------------------------------------------------------------------
Erik Mazoyer, Chef de projet
HyperOffice
6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
T�l. 01 41 96 96 76
Fax 01 41 96 96 77
M�l  [EMAIL PROTECTED] 

-----Message d'origine-----
De: Sebastien Cesbron [mailto:[EMAIL PROTECTED]]
Date: lundi 10 juin 2002 11:31
�: [EMAIL PROTECTED]
Objet: Re: [MTX-SPAM-WARN] Gestion des exceptions et i18n


Salut,

Le probl�me de la m�thode getLocalizedMessage c'est qu'elle ne prend pas de 
Locale en argument, donc d'apr�s ce que je comprends, elle retourne pour moi

le message convertit dans la Locale par d�faut du serveur. Or, sur une appli

web on peut avoir plusieurs clients avec chacun leur Locale.
Je pensais donc plut�t cr�er mes exceptions en passant les param�tres au 
constructeur (throw new illegalValue(9, 4, 7)) comme le conseille Eric mais 
ensuite je dois avoir une m�thode qui ressemblerait plus � 
getLocalizedMessage(Locale) pour pouvoir choisir pour quelle Locale je veux 
avoir le message.
De plus, je voulais pouvoir avoir plusieurs messages associ�s �
IllegalValue, 
certains avec des param�tres, d'autres sans et dans ceux qui ont des 
param�tres, certains de ces param�tres sont �galement � traduire.

Par exemple je pourrais avoir le message "Valeur invalide : {0}. Le nombre 
doit �tre compris entre {1} et {2}." et le message "Valeur invalide pour le 
champ "{0}" : {1}. Le nombre doit �tre compris entre {2} et {3}." avec comme

param�tre 0 la valeur "user.name" (valeur � traduire suivant la Locale).

Pour r�soudre mon probl�me j'ai donc ajout� � mon exception un tableau 
d'objet qui contient les param�tres du message.

Merci pour vos r�ponses

Seb


Le Jeudi 6 Juin 2002 13:52, vous avez �crit :
> Normalement les exceptions sont cens�es pouvoir retourner le message de la
> localisation en cours.
>
> public String getLocalizedMessage()
>
> Creates a localized description of this Throwable. Subclasses may override
> this method in order to produce a locale-specific message. For subclasses
> that do not override this method, the default implementation returns the
> same result as getMessage().
>
>
> Il "suffit" donc � ton exception de savoir interroger son ResourceBundle
> (tu peux impl�menter des caches si tu veux r�pondre plus vite).
>
> Je pense que l'exception est donc la mieux plac�e pour g�rer la
traduction.
> Par exemple, une exception li� � un nombre devant �tre plac� entre deux
> bornes,
> s'�crira :
>
> Invalid value : 9. The number must be greater than 4 and lesser than 7.
> Valeur invalide : 9. Le nombre doit �tre compris entre 4 et 7.
>
> Le lancement de l'exception pourrait �tre :
> throw new IllegalValue(9, 4, 7)
>
> Je compl�terais le ResourceBundle  avec un java.text.MessageFormat
>
> fichier_en
>       Invalid value : {0}. The number must be greater than {1} and lesser
> than {2}.
> fichier_fr
>       Valeur invalide : {0}. Le nombre doit �tre compris entre {1} et {2}.
>
> Tu pourras g�rer comme tu le d�sire tes constructeur avec des messages
> diff�rent suivant le contenu de ton exception.
>
> Si tu dois ajouter une exception, aucune modification n'est apport�e � la
> visualisation.
>
> --------------------------------------------------------------------
> Erik Mazoyer, Chef de projet
> HyperOffice
> 6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
> T�l. 01 41 96 96 76
> Fax 01 41 96 96 77
> M�l  [EMAIL PROTECTED]
>
> -----Message d'origine-----
> De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Date: jeudi 6 juin 2002 15:26
> �: [EMAIL PROTECTED]
> Objet: Re: [MTX-SPAM-WARN] Gestion des exceptions et i18n
>
> At 08:42 2002-06-06 +0000, you wrote:
> >Personnellement, je ne voulais pas mettre l'i18n au niveau des exceptions
>
> et
>
> >j'ai pour cela plusieurs raisons :
> >
> >- Etant donn� que j'ai une interface web, c'est au niveau de la requ�te
> > que je r�cup�re la Locale. Si je veux i18ner  directement la classe
> >ExceptionFonctionnelle il faut alors que je passe en param�tre � toutes
> > mes m�thodes m�tier la Locale utilis�e ce qui me para�t lourd.
> >- Je consid�re que le traitement des r�gles de gestion m�tier est
>
> ind�pendant
>
> >de cette Locale et donc c'est pour cela que je voulais traiter l'i18n
> >uniquement au niveau de ma couche de pr�sentation.
>
> Ce n'est pas vrai. Tu n'as seulement qu'� passer la Locale � ta classe qui
> g�n�re les exceptions. De cette fa�on, quand tu "throw" une exception dans
> une de tes m�thodes, cette derni�re n'a pas � passer la Locale en
> param�tre. Ton argument sur la lourdeur ne tient donc pas.
>
> L'id�e c'est que lorsque tu "throw" une exception toi-m�me, tu indiques
> qu'une condition particuli�re n'est pas remplie et donc que le programme
ne
> peut se poursuivre. Tu ajoute donc une message dans le constructeur de
> cette exception qui indique que telle condition particuli�re a �t�
> rencontr�e. Or ce message est un champ dans la classe des exceptions qui
> provient de la lecture de ton fichier .PROPERTIES. Donc la traduction est
> g�r�e � un autre niveau.
>
> Maintenant, que ce message ajout� soit en fran�ais, en anglais, en
italien,
> ... ne change absolument rien au fonctionnement, car c'est la job de ton
> ResourceBundle de toujours pointer sur le fichier .PROPERTIES contenant
les
> textes dans la langue de ta Locale.
>
> Finalement, ton JSP v�rifie si une exception se trouve dans la requ�te et
> si c'est le cas, il affiche de fa�on triviale le message d'erreur
> rencontr�.
>
> Sylvain
>
> >Pour l'instant je m'en sors en ajoutant une liste d'Objets (mes
arguments)
>
> �
>
> >mon exception. Lorsque je traduis, s'il l'un de ces objets est une string
>
> je
>
> >le traduis (la traduction d'une cha�ne inconnue retourne cette cha�ne).
Je
>
> ne
>
> >trouve pas cela formidable mais pour l'instant je n'ai pas trouv� mieux.
> >
> >Seb
> >
> >Le Mercredi 5 Juin 2002 17:42, vous avez �crit :
> > > Voici comment tu pourrais le faire (j'assume que lorsque tu parles de
> > > gestion des exceptions, tu veux dire la gestion des exceptions que tu
> > > g�n�res toi-m�me)
> > >
> > > - Pour chaque message d'erreur pertinent � ton application, tu cr�e
une
> > > nouvelle clef dans un fichier .PROPERTIES
> > > - Tu as autant de fichier .PROPERTIES que tu supportes de language.
> > > - Ta classe ExceptionFonctionnelle doit comprendre un champ de type
> > > ResourceBundle, que tu initialises avec la source de ton fichier
> > > .PROPERTIES. example: private static ResourceBundle resFile =
> > > ResourceBundle.getBundle(com.ta_compagnie.context_path.nom_fichier);
> > >
> > > - Ta classe ExceptionFonctionnelle doit comprendre un champ pour
chaque
> > > message d'erreur diff�rent. Ce champ doit lire la clef correspondante
>
> dans
>
> > > ton fichier .PROPERTIES
> > > example: public final static String MAUVAIS_UNAME =
> > > resFile.getString("exception.uname.mauvais");
> > >
> > > -A chaque fois que tu "throw" une exception, celle-ci sera
>
> automatiquement
>
> > > traduite si tu fournis un message d'erreur correspondant � un des
>
> messages
>
> > > d'erreur compris dans ta classe ExceptionFonctionnelle dans le
>
> constructeur
>
> > > de la nouvelle exception (ouf !)
> > > Example: if (machin!=56)
> > >                 throw new
> > > ExceptionFonctionnelle(ExceptionFonctionnelle.MAUVAIS_UNAME);
> > >
> > > -A chaque fois que l'utilisateur change de langue, une m�thode dans
> > > ExceptionFonctionnelle doit relire les clefs de ton fichier
.PROPERTIES
>
> en
>
> > > fonction de la langue choisie.
> > >
> > >
> > > De cette fa�on, tu traites les exceptions uniform�ment. Si tu veux
>
> ajouter
>
> > > des param�tres � traduire, tu ajoutes des champs dans ta classe
> > > ExceptionFonctionnelle et aussi les clefs correspondantes dans ton
>
> fichier
>
> > > .PROPERTIES. Et oui, c'est juste de designer ton application pour que
> > > la partie m�tier se charge de la gestion des exception et que la
partie
> > > pr�sentation ne fait que l'afficher, car c'est conforme au paradigme
>
> MVC.
>
> > > Sylvain
> > >
> > > At 15:13 2002-06-05 +0000, you wrote:
> > > > > 1-Quand tu dis "j'avais une ExceptionFonctionnelle je r�cup�rais
le
> > > > > message associ� dans ma partie pr�sentation que je traduisais",
> > > > > veux-tu dire que tu traduis le message associ� � l'exception en
> > > > > fonction du choix de langue de l'utilisateur ?
> > > >
> > > >Oui, je traduis le message en fonction de la langue de l'utilisateur.
> > > >
> > > > > 2-Lorsque tu parles de la partie m�tier et de la partie
>
> pr�sentation,
>
> > > > > est-ce que tu veux dire que la partie m�tier est constitu�e de
>
> classes
>
> > > > > Java et que la partie pr�sentation est constitu�e de JSP ou bien
>
> d'un
>
> > > > > interface graphique genre Swing ?
> > > >
> > > >Ma partie m�tier correspond � des classes java et ma partie
>
> pr�sentation
>
> > > > est un framework model2 maison constitu� de jsp, servlet et classes
>
> java
>
>
>__________________________________________________________________________
> >
> > > >____ ifrance.com, l'email gratuit le plus complet de l'Internet !
> > > >vos emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
> > > >http://www.ifrance.com/_reloc/email.emailif
> > >
> > > --------------------------------
> > > Sylvain Cliche
> > > 822-6000 Ext. 7765
> > > [EMAIL PROTECTED]
> >
>
>__________________________________________________________________________
> >_
>
> ___
>
> >ifrance.com, l'email gratuit le plus complet de l'Internet !
> >vos emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
> >http://www.ifrance.com/_reloc/email.emailif
>
> --------------------------------
> Sylvain Cliche
> 822-6000 Ext. 7765
> [EMAIL PROTECTED]
 
____________________________________________________________________________
__
ifrance.com, l'email gratuit le plus complet de l'Internet !
vos emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
http://www.ifrance.com/_reloc/email.emailif

Répondre à