5. Przykład 04 – Internacjonalizacja
Ten przykład nawiązuje do kwestii internacjonalizacji omówionej w pierwszym przykładzie.
5.1. Projekt NetBeans
![]() | ![]() |
Znajduje się w nim:
- widok [Page1.JSP]
- dwa pliki komunikatów [messages*.properties]
- brak działań
5.2. Konfiguracja projektu
Plik [struts.xml] ma następującą treść:
<?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>
<!-- internacjonalizacja -->
<constant name="struts.custom.i18n.resources" value="messages" />
<!-- pakiet domyślny -->
<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>
<!-- pakiet akcji -->
<package name="actions" namespace="/actions" extends="struts-default">
<action name="Action1">
<result name="success">/vues/Page1.JSP</result>
</action>
</package>
</struts>
- w wierszu 8 zdefiniowano stałą Struts, która określa nazwę pliku z komunikatami w wersji międzynarodowej, w tym przypadku messages. Pliki [messages_xx.properties] będą wyszukiwane w pliku ClassPath projektu. Z tego powodu zostały one umieszczone tutaj, w katalogu głównym [Source Packages] [1].
- wiersze 21–23: definiują akcję [Action1] bez powiązanej klasy. Zostanie wówczas użyta domyślna klasa Struts, której metoda execute zwraca klucz success. Widok [/vues/Page1.JSP] zostanie następnie zwrócony do klienta. Należy pamiętać, że nie jest to to samo, co bezpośrednie wywołanie widoku [/vues/Page1.JSP]. Wywołanie akcji uruchamia bowiem interceptory, czego nie powoduje bezpośrednie wywołanie widoku. Jeden z interceptorów obsługuje internacjonalizację.
5.3. Pliki komunikatów
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
Określają one trzy klucze: page.texte, page.titre1, page.titre2. Plik [messages_en.properties] zostanie użyty, jeśli językiem strony jest angielski (en). Plik [messages.properties] będzie używany dla wszystkich pozostałych języków. Jest to domyślny plik komunikatów. Używany język to:
- język przeglądarki klienta określony w jej ustawieniach przesłanych do serwera
- język żądany w zapytaniu klienta z parametrem request_locale=xx.
5.4. Widok [Page1.JSP]
Widok wygląda następująco:
<%@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>
- wiersz 7: wyświetla komunikat klucza page.titre1
- wiersz 10: wyświetla komunikat o kluczu page.titre2
- wiersz 11: wyświetla komunikat o kluczu page.texte
5.5. Testy
Uruchommy projekt:
![]() |
- w pliku [1] strona wyświetliła się w języku francuskim. Zastosowano plik [messages.properties], ponieważ w używanej przeglądarce jako język preferowany ustawiono francuski.
- w pliku [3] strona wyświetliła się w języku angielskim. Zastosowano plik [messages_en.properties], ponieważ w pliku URL i [2] zastosowano parametr request_locale=en.
![]() |
W przypadku pliku [4] żądana jest strona w języku niemieckim (de). Ponieważ nie istnieje plik [messages_de.properties], używany jest plik domyślny [messages.properties] [5].
W pliku [6] jako preferowany język przeglądarki ustawiono angielski.
![]() |
W pliku [7] akcja [Action1] jest wywoływana bez parametrów językowych. Żądanie pochodzi z przeglądarki, której preferowanym językiem jest angielski (en). W związku z tym wykorzystywany jest plik [messages_en.properties] zamiast [8].
Od tej pory wszystkie projekty będą miały jeden plik [messages.properties], który będzie używany dla wszystkich języków. Będzie to wymagało od nas napisania widoków wykorzystujących klucze z tego pliku. Internacjonalizacja na język angielski będzie polegała na utworzeniu pliku [messages_en.properties] zawierającego komunikaty w języku angielskim. Nie ma potrzeby wprowadzania żadnych innych zmian.




