Skip to content

5. Beispiel 04 – Internationalisierung

Dieses Beispiel greift die im ersten Beispiel behandelte Internationalisierung wieder auf.

5.1. Das NetBeans-Projekt

Image

Image

Darin finden sich:

  • eine Ansicht [Page1.jsp]
  • zwei Meldungsdateien [messages*.properties]
  • keine Aktionen

5.2. Projektkonfiguration

Die Datei „[struts.xml]“ sieht wie folgt aus:


<?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>
  <!-- Internationalisierung -->
  <constant name="struts.custom.i18n.resources" value="messages" />
  <!-- Standard-Paket -->
  <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>
  <!-- Aktionspaket -->
  <package name="actions" namespace="/actions" extends="struts-default">
    <action name="Action1">
      <result name="success">/vues/Page1.jsp</result>
    </action>
  </package>
</struts>
  • In Zeile 8 wird eine Struts-Konstante definiert, die den Namen der Datei mit den internationalisierten Meldungen festlegt, in diesem Fall messages. Die Dateien „[messages_xx.properties]“ werden im Projekt „ClassPath“ gesucht. Aus diesem Grund wurden sie hier im Stammverzeichnis von „[Source Packages]“ und „[1]“ abgelegt.
  • Zeilen 21–23: Definieren eine Aktion [Action1] ohne zugehörige Klasse. In diesem Fall wird eine Standardklasse von Struts verwendet, deren Methode execute den Schlüssel success zurückgibt. Die Ansicht [/vues/Page1.jsp] wird dann an den Client zurückgegeben. Es ist wichtig zu verstehen, dass dies nicht dasselbe ist wie der direkte Aufruf der Ansicht [/vues/Page1.jsp]. Der Aufruf einer Aktion löst nämlich die Ausführung der Interceptoren aus, was beim direkten Aufruf einer Ansicht nicht der Fall ist. Einer der Interceptoren ist für die Internationalisierung zuständig.

5.3. Die Meldungsdateien

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

Sie definieren drei Schlüssel: page.texte, page.titre1 und page.titre2. Die Datei [messages_en.properties] wird verwendet, wenn die Sprache der Seite Englisch (en) ist. Die Datei [messages.properties] wird für alle anderen Sprachen verwendet. Dies ist die Standard-Meldungsdatei. Die verwendete Sprache ist entweder:

  • die Sprache des Client-Browsers, die in dessen an den Server gesendeten Einstellungen angegeben ist
  • die Sprache, die in einer Anfrage des Clients mit dem Parameter request_locale=xx angefordert wird.

5.4. Die Ansicht [Page1.jsp]

Die Ansicht sieht wie folgt aus:


<%@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>
  • Zeile 7: Zeigt die Schlüsselmeldung page.titre1 an
  • Zeile 10: Zeigt die Schlüsselmeldung page.titre2 an
  • Zeile 11: Zeigt die Schlüsselmeldung page.texte an

5.5. Die Tests

Führen wir das Projekt aus:

  • Bei [1] wurde die Seite auf Französisch angezeigt. Es wurde die Datei [messages.properties] verwendet, da der verwendete Browser Französisch als bevorzugte Sprache eingestellt hatte.
  • Bei [3] wurde die Seite auf Englisch angezeigt. Es wurde die Datei [messages_en.properties] verwendet, da die URL [2] den Parameter request_locale=en enthielt.

Bei [4] wird eine Seite auf Deutsch (de) angefordert. Da die Datei [messages_de.properties] nicht existiert, wird die Standarddatei [messages.properties] verwendet: [5].

In [6] wird Englisch als bevorzugte Sprache des Browsers festgelegt.

In [7] wird die Aktion [Action1] ohne Sprachparameter angefordert. Die Anfrage stammt von einem Browser, dessen bevorzugte Sprache Englisch (en) ist. Daher wird die Datei [messages_en.properties] anstelle von [8] verwendet.

Von nun an werden alle Projekte eine einzige Datei „[messages.properties]“ haben, die für alle Sprachen verwendet wird. Dies erfordert, dass wir Ansichten schreiben, die die Schlüssel dieser Datei verwenden. Die Internationalisierung ins Englische läuft nun darauf hinaus, die Datei „[messages_en.properties]“ mit den englischen Meldungen zu erstellen. Es sind keine weiteren Änderungen erforderlich.