Je crois que l'on ne se comprend pas bien. J'avais bien compris qu'il fallait
surcharger la m�thode pour fournir sa propre impl�mentation mais
personnellement je ne consid�res pas que la Locale est un param�tre du
contexte. La Locale est fournie par la requ�te http. Or, si je veux que ma
partie m�tier soit ind�pendante de la partie pr�sentation, mes exceptions ne
peuvent avoir connaissance de la requ�te http. Personnellement je ne vois pas
de moyen simple de fournir la Locale aux exceptions.
Le moyen que je mets en oeuvre est bas� sur les classes ResourceBundle ET
MessageFormat. Je r�cup�res mon message aupr�s de mon ResourceBundle puis je
passe ce message et mon tableau d'Objet � l'instance de MessageFormat.
Le principe c'est donc d'avoir au niveau de mon constructeur de mes
exceptions un deuxi�me argument en plus du message qui est le tableau des
param�tres du message.
Je fais un "throw new MonException(monMessage, mesParams)"
Ensuite pour l'utiliser je fais un :
traducteur.getMessage(request.getLocale, monEx.getMessage(),
monEx.getParams())
avec traducteur qui est une instance d'une classe � moi qui effectue la
traduction en se basant sur ResourceBundle et MessageFormat.
Le probl�me qui se pose alors concerne des param�tres qui eux m�mes doivent
�tre traduits avant d'�tre ins�r� dans le message.
Le moyen que j'ai trouv� pour l'instant mais qui ne me pla�t qu'� moiti�
c'est de faire un "params[i] = traducteur.getMessage(params[i])" dans le cas
o� params[i] est une String et d'avoir la m�thode getMessage qui me retourne
la cl� pass�e en param�tre quand elle ne trouve pas de traduction. Ainsi je
traduits tous mes param�tres de type cha�ne m�me ceux qui n'ont pas � �tre
traduits. Le probl�me, c'est si un param�tre qui n'a pas � �tre traduit � le
m�me nom qu'une cl� de traduction !! C'est pour cela que je voulais savoir
s'il existait d'autres m�thodes de traduction, mais pour l'instant je n'ai
pas trouv� autre chose qui me convienne.
Seb
Le Lundi 10 Juin 2002 07:53, vous avez �crit :
> > 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
______________________________________________________________________________
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