> 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.
Je pensais que tu localisais au niveau de l'application, en fait tu
localises au niveau de l'utilisateur.
Dans ce cas, tes exceptions ont besoin de connaitre le contexte utilisateur
pour travailler.
Je pense qu'il est plus interressant de leur fournir un context utilisateur
qu'un contexte Locale uniquement. Ta conception sera plus ouverte, pour
trouver par exemple le nom de l'utilisateur.
Maintenant, il est possible de connaitre la localisation sans la transmettre
:
1) r�c�ption d'une requ�te HTTP
2) cr�ation d'un Thread T pour traiter la requ�te par une servlet
3) la servlet extrait le contexte utilisateur CU (Locale compris)
4) la servlet indique au UserManager que le Thread T g�re CU (une simple
Hastable pour le stockage)
5) Traitement
5.a) Une exception est lev�e
6) La servlet re�oit l'exception et demande le message localis�
6.a) L'exception demande � UserManager le contexte utilisateur.
UserManager le d�termine � partir du Thread et renvoie CU
6.b) le message localis� est renvoy�
7) Affichage et traitement d'erreur
> Le moyen que je mets en oeuvre est bas� sur les classes ResourceBundle
> ET MessageFormat...trouv� autre chose qui me convienne.
Excuses moi, mais je n'ai pas bien compris en d�tail ton explication.
Peux tu fournir un exemple simple :-)
Cordialement,
--------------------------------------------------------------------
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 13:19
�: [EMAIL PROTECTED]
Objet: Re: [MTX-SPAM-WARN] Gestion des exceptions et i18n
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