V. Exemple 04 - Internationalisation▲
Cet exemple revient sur l'internationalisation étudiée dans le premier exemple.
V-A. Le projet Netbeans▲
On y trouve :
- une vue [Page1.jsp]
- deux fichiers de messages [messages*.properties]
- pas d'actions
V-B. Configuration du projet▲
Le fichier [struts.xml] est le suivant :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<?
xml
version="1.0"
encoding="UTF-8"
?
>
<!
DOCTYPE
struts
PUBLIC
"
-//Apache
Software
Foundation//DTD
Struts
Configuration
2.0//EN
"
"
http://struts.apache.org/dtds/struts-2.0.dtd
"
>
<
struts
>
<!--
internationalisation
-->
<
constant
name
=
"
struts.custom.i18n.resources
"
value
=
"
messages
"
/
>
<!--
package
default
-->
<
package
name
=
"
default
"
namespace
=
"
/
"
extends
=
"
struts-default
"
>
<
default-action-ref
name
=
"
index
"
/
>
<
action
name
=
"
index
"
>
<
result
type
=
"
redirectAction
"
>
<
param
name
=
"
actionName
"
>
Action1<
/
param
>
<
param
name
=
"
namespace
"
>
/actions<
/
param
>
<
/
result
>
<
/
action
>
<
/
package
>
<!--
package
actions
-->
<
package
name
=
"
actions
"
namespace
=
"
/actions
"
extends
=
"
struts-default
"
>
<
action
name
=
"
Action1
"
>
<
result
name
=
"
success
"
>
/vues/Page1.jsp<
/
result
>
<
/
action
>
<
/
package
>
<
/
struts
>
- la ligne 8 définit une constante Struts, celle qui fixe le nom du fichier des messages internationalisés, ici messages. Les fichiers [messages_xx.properties] seront cherchés dans le ClassPath du projet. Pour cette raison, ils ont été placés ici à la racine de [Source Packages] [1].
- lignes 21-23 : définissent une action [Action1] sans classe associée. Une classe par défaut de Struts sera alors utilisée dont la méthode execute rend la clé success. La vue [/vues/Page1.jsp] sera alors renvoyée au client. Il est important de comprendre que cela ne revient pas au même que d'appeler directement la vue [/vues/Page1.jsp]. En effet, l'appel d'une action déclenche l'exécution des intercepteurs ce que ne fait pas l'appel direct à une vue. L'un des intercepteurs gère l'internationalisation.
V-C. Les fichiers de messages▲
messages.properties
page.texte=Ici, on met un texte fran\u00e7ais...
page.titre1=Fran\u00e7ais
page.titre2=Fran\u00e7ais
messages_en.properties
page.texte=Here, we put some english text...
page.titre1=English
page.titre2=English
Ils définissent trois clés page.texte, page.titre1, page.titre2. Le fichier [messages_en.properties] sera utilisé si la langue de la page est l'anglais (en). Le fichier [messages.properties] sera utilisé pour toutes les autres langues. C'est le fichier de messages par défaut. La langue utilisée est soit :
- celle du navigateur client dans ses préférences envoyées au serveur
- celle demandée par une requête du client avec le paramètre request_locale=xx.
V-D. La vue [Page1.jsp]▲
La vue est la suivante :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<
%
@
page
contentType
=
"
text/html
"
pageEncoding
=
"
UTF-8
"
%
>
<
%
@
taglib
prefix
=
"
s
"
uri
=
"
/struts-tags
"
%
>
<!
DOCTYPE
html
>
<
html
>
<
head
>
<
meta
http-equiv
=
"
Content-Type
"
content
=
"
text/html;
charset=UTF-8
"
>
<
title
>
<
s
:
text
name
=
"
page.titre1
"
/
>
<
/
title
>
<
/
head
>
<
body
>
<
h1
>
<
s
:
text
name
=
"
page.titre2
"
/
>
<
/
h1
>
<
s
:
text
name
=
"
page.texte
"
/
>
<
/
body
>
<
/
html
>
- ligne 7 : affiche le message de clé page.titre1
- ligne 10 : affiche le message de clé page.titre2
- ligne 11 : affiche le message de clé page.texte
V-E. Les tests▲
Exécutons le projet :
- en [1], la page s'est affichée en français. C'est le fichier [messages.properties] qui a été utilisé parce que le navigateur utilisé avait le Français comme langue préférée.
- en [3], la page s'est affichée en anglais. C'est le fichier [messages_en.properties] qui a été utilisé parce que l'Url [2] a utilisé le paramètre request_locale=en.
En [4], c'est une page en allemand (de) qui est demandée. Comme il n'existe pas de fichier [messages_de.properties], c'est le fichier par défaut [messages.properties] qui est utilisé [5].
En [6], on met l'anglais comme langue préférée du navigateur.
En [7], l'action [Action1] est demandée sans paramètres de langue. La requête vient d'un navigateur dont la langue préférée est l'anglais (en). C'est donc le fichier [messages_en.properties] qui est utilisé [8].
A partir de maintenant, les projets auront tous un fichier [messages.properties] unique qui sera utilisé pour toutes les langues. Cela nous obligera à écrire des vues qui utilisent les clés de ce fichier. Internationaliser en anglais reviendra à créer le fichier [messages_en.properties] des messages anglais. Il n'y a pas d'autre modification à faire.