5. Beispiel 04 – Internationalisierung
Dieses Beispiel greift die im ersten Beispiel behandelte Internationalisierung wieder auf.
5.1. Das NetBeans-Projekt


Es umfasst:
- 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>
<!-- internationalization -->
<constant name="struts.custom.i18n.resources" value="messages" />
<!-- default package -->
<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>
<!-- equity package -->
<package name="actions" namespace="/actions" extends="struts-default">
<action name="Action1">
<result name="success">/vues/Page1.jsp</result>
</action>
</package>
</struts>
- Zeile 8 definiert eine Struts-Konstante, die den Namen der internationalisierten Meldungsdatei angibt, in diesem Fall `messages`. Die `[messages_xx.properties]`-Dateien werden im ClassPath des Projekts gesucht. Aus diesem Grund wurden sie hier im Stammverzeichnis der [Source Packages] [1] abgelegt.
- Zeilen 21–23: Definieren eine Aktion [Action1] ohne zugehörige Klasse. Es wird dann eine Standard-Struts-Klasse verwendet, deren execute-Methode den Schlüssel „success“ zurückgibt. Die Ansicht [/views/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 [/views/Page1.jsp]. Tatsächlich löst der Aufruf einer Aktion die Ausführung von Interceptors aus, was bei einem direkten Aufruf einer Ansicht nicht der Fall ist. Einer der Interceptors kümmert sich um die Internationalisierung.
5.3. Die Nachrichtendateien
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.text, page.title1 und page.title2. 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, wie sie in den an den Server gesendeten Einstellungen angegeben ist
- die Sprache, die in einer Client-Anfrage mit dem Parameter request_locale=xx angefordert wurde.
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 Meldung für den Schlüssel page.title1 an
- Zeile 10: Zeigt die Meldung mit dem Schlüssel „page.title2“ an
- Zeile 11: Zeigt die Meldung mit dem Schlüssel page.text an
5.5. Testen
Führen wir das Projekt aus:
![]() |
- In [1] wurde die Seite auf Französisch angezeigt. Die Datei [messages.properties] wurde verwendet, da im Browser Französisch als bevorzugte Sprache eingestellt war.
- In [3] wurde die Seite auf Englisch angezeigt. Die Datei [messages_en.properties] wurde verwendet, da die URL [2] den Parameter request_locale=en verwendete.
![]() |
In [4] wird eine Seite auf Deutsch (de) angefordert. Da es keine Datei [messages_de.properties] gibt, 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] verwendet [8].
Von nun an werden alle Projekte über eine einzige [messages.properties]-Datei verfügen, die für alle Sprachen verwendet wird. Dies erfordert, dass wir Ansichten schreiben, die die Schlüssel aus dieser Datei verwenden. Die Internationalisierung ins Englische umfasst lediglich die Erstellung der Datei [messages_en.properties] für englische Meldungen. Es sind keine weiteren Änderungen erforderlich.


