Skip to content

5. Voorbeeld 04 – Internationalisering

Dit voorbeeld gaat terug op de internationalisering die in het eerste voorbeeld is behandeld.

5.1. Het NetBeans-project

Hierin vinden we:

  • een weergave [Page1.JSP]
  • twee berichtbestanden [messages*.properties]
  • geen acties

5.2. Projectconfiguratie

Het bestand [struts.xml] ziet er als volgt uit:


<?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>
  <!-- internationalisering -->
  <constant name="struts.custom.i18n.resources" value="messages" />
  <!-- standaardpakket -->
  <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>
  <!-- actiepakket -->
  <package name="actions" namespace="/actions" extends="struts-default">
    <action name="Action1">
      <result name="success">/vues/Page1.JSP</result>
    </action>
  </package>
</struts>
  • op regel 8 wordt een Struts-constante gedefinieerd, die de naam van het bestand met de geïnternationaliseerde berichten vastlegt, in dit geval messages. De bestanden [messages_xx.properties] worden gezocht in het project ClassPath. Daarom zijn ze hier geplaatst in de hoofdmap van [Source Packages] en [1].
  • regels 21-23: definiëren een actie [Action1] zonder bijbehorende klasse. Er wordt dan een standaardklasse van Struts gebruikt, waarvan de methode execute de sleutel success retourneert. De weergave [/vues/Page1.JSP] wordt vervolgens teruggestuurd naar de client. Het is belangrijk om te begrijpen dat dit niet hetzelfde is als het rechtstreeks aanroepen van de weergave [/vues/Page1.JSP]. Het aanroepen van een actie zorgt er namelijk voor dat de interceptors worden uitgevoerd, wat bij het direct aanroepen van een weergave niet het geval is. Een van de interceptors regelt de internationalisering.

5.3. De berichtbestanden

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

Hierin worden drie sleutels gedefinieerd: page.texte, page.titre1 en page.titre2. Het bestand [messages_en.properties] wordt gebruikt als de taal van de pagina Engels (en) is. Het bestand [messages.properties] wordt gebruikt voor alle andere talen. Dit is het standaardberichtbestand. De gebruikte taal is ofwel:

  • de taal van de browser van de klant in de instellingen die naar de server worden verzonden
  • de taal die wordt aangevraagd via een verzoek van de client met de parameter request_locale=xx.

5.4. De weergave [Page1.JSP]

De weergave ziet er als volgt uit:


<%@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>
  • regel 7: geeft het sleutelbericht page.titre1 weer
  • regel 10: geeft het sleutelbericht page.titre2 weer
  • regel 11: geeft het sleutelbericht page.texte weer

5.5. De tests

Laten we het project uitvoeren:

  • in [1] werd de pagina in het Frans weergegeven. Het bestand [messages.properties] werd gebruikt omdat de gebruikte browser Frans als voorkeurstaal had ingesteld.
  • in [3] werd de pagina in het Engels weergegeven. Het bestand [messages_en.properties] werd gebruikt omdat de parameter URL=en was ingesteld.

In [4] wordt een pagina in het Duits (de) opgevraagd. Aangezien er geen bestand [messages_de.properties] bestaat, wordt het standaardbestand [messages.properties] gebruikt [5].

In [6] wordt Engels ingesteld als voorkeurstaal van de browser.

In [7] wordt de actie [Action1] aangevraagd zonder taalparameters. Het verzoek is afkomstig van een browser waarvan de voorkeurstaal Engels (en) is. Daarom wordt het bestand [messages_en.properties] gebruikt in plaats van [8].

Vanaf nu zullen alle projecten één enkel bestand [messages.properties] hebben dat voor alle talen wordt gebruikt. Dit betekent dat we weergaven moeten schrijven die gebruikmaken van de sleutels in dit bestand. Internationaliseren naar het Engels komt neer op het aanmaken van het bestand [messages_en.properties] met de Engelse berichten. Er hoeven verder geen wijzigingen te worden aangebracht.