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]

Répondre à