5. Esempio 04 – Internazionalizzazione
Questo esempio riprende il tema dell’internazionalizzazione trattato nel primo esempio.
5.1. Il progetto NetBeans
![]() | ![]() |
In esso si trovano:
- una vista [Page1.JSP]
- due file di messaggi [messages*.properties]
- nessuna azione
5.2. Configurazione del progetto
Il file [struts.xml] è il seguente:
<?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>
<!-- internazionalizzazione -->
<constant name="struts.custom.i18n.resources" value="messages" />
<!-- pacchetto predefinito -->
<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>
<!-- pacchetto delle azioni -->
<package name="actions" namespace="/actions" extends="struts-default">
<action name="Action1">
<result name="success">/vues/Page1.JSP</result>
</action>
</package>
</struts>
- la riga 8 definisce una costante Struts, quella che stabilisce il nome del file dei messaggi internazionalizzati, in questo caso messages. I file [messages_xx.properties] verranno cercati nel file ClassPath del progetto. Per questo motivo, sono stati collocati qui, nella directory principale di [Source Packages] e [1].
- righe 21-23: definiscono un'azione [Action1] senza una classe associata. Verrà quindi utilizzata una classe predefinita di Struts, il cui metodo execute restituisce la chiave success. La vista [/vues/Page1.JSP] verrà quindi restituita al client. È importante comprendere che ciò non equivale a richiamare direttamente la vista [/vues/Page1.JSP]. Infatti, la chiamata di un'azione attiva l'esecuzione degli intercettatori, cosa che non avviene con la chiamata diretta a una vista. Uno degli intercettatori gestisce l'internazionalizzazione.
5.3. I file dei messaggi
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
Essi definiscono tre chiavi: page.texte, page.titre1, page.titre2. Il file [messages_en.properties] verrà utilizzato se la lingua della pagina è l'inglese (en). Il file [messages.properties] verrà utilizzato per tutte le altre lingue. Si tratta del file dei messaggi predefinito. La lingua utilizzata è:
- quella del browser del cliente, indicata nelle preferenze inviate al server
- quella richiesta da una richiesta del client con il parametro request_locale=xx.
5.4. La vista [Page1.JSP]
La vista è la seguente:
<%@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>
- riga 7: visualizza il messaggio della chiave page.titre1
- riga 10: visualizza il messaggio della chiave page.titre2
- riga 11: visualizza il messaggio relativo alla chiave page.texte
5.5. I test
Eseguiamo il progetto:
![]() |
- con [1], la pagina è stata visualizzata in francese. È stato utilizzato il file [messages.properties] perché il browser utilizzato aveva il francese come lingua preferita.
- con [3], la pagina è stata visualizzata in inglese. È stato utilizzato il file [messages_en.properties] perché il file URL [2] ha utilizzato il parametro request_locale=en.
![]() |
In [4] viene richiesta una pagina in tedesco (de). Poiché non esiste il file [messages_de.properties], viene utilizzato il file predefinito [messages.properties] [5].
In [6], si imposta l’inglese come lingua preferita del browser.
![]() |
In [7], l'azione [Action1] viene richiesta senza parametri di lingua. La richiesta proviene da un browser la cui lingua preferita è l'inglese (en). Viene quindi utilizzato il file [messages_en.properties] [8].
D'ora in poi, tutti i progetti avranno un unico file [messages.properties] che verrà utilizzato per tutte le lingue. Ciò ci obbligherà a scrivere viste che utilizzino le chiavi di questo file. L'internazionalizzazione in inglese consisterà nel creare il file [messages_en.properties] contenente i messaggi in inglese. Non sono necessarie altre modifiche.




