Skip to content

5. Exemple 04 – Internationalisation

Cet exemple revient sur l'internationalisation étudiée dans le premier exemple.

5.1. Le projet Netbeans

On y trouve :

  • une vue [Page1.JSP]
  • deux fichiers de messages [messages*.properties]
  • pas d'actions

5.2. Configuration du projet

Le fichier [struts.xml] est le suivant :


<?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.

5.3. 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.

5.4. La vue [Page1.JSP]

La vue est la suivante :


<%@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

5.5. 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.