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