5. Esempio 04 – Internazionalizzazione
Questo esempio riprende il tema dell'internazionalizzazione trattato nel primo esempio.
5.1. Il progetto NetBeans


Include:
- 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>
<!-- 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>
- La riga 8 definisce una costante Struts che specifica il nome del file dei messaggi internazionalizzati, in questo caso `messages`. I file `[messages_xx.properties]` verranno cercati nel ClassPath del progetto. Per questo motivo, sono stati collocati qui, nella radice dei [pacchetti sorgente] [1].
- Righe 21–23: definiscono un'azione [Action1] senza una classe associata. Verrà quindi utilizzata una classe Struts predefinita, il cui metodo execute restituisce la chiave "success". La vista [/views/Page1.jsp] verrà quindi restituita al client. È importante comprendere che ciò non equivale a richiamare direttamente la vista [/views/Page1.jsp]. Infatti, il richiamo di un'azione attiva l'esecuzione degli intercettatori, cosa che una chiamata diretta a una vista non fa. 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.text, page.title1 e page.title2. 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. Questo è il file dei messaggi predefinito. La lingua utilizzata è:
- la lingua del browser del cliente, come specificato nelle preferenze inviate al server
- quella richiesta da una richiesta 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 per la chiave page.title1
- riga 10: visualizza il messaggio con la chiave page.title2
- riga 11: visualizza il messaggio con la chiave page.text
5.5. Test
Eseguiamo il progetto:
![]() |
- In [1], la pagina è stata visualizzata in francese. È stato utilizzato il file [messages.properties] perché il browser aveva impostato il francese come lingua preferita.
- In [3], la pagina è stata visualizzata in inglese. È stato utilizzato il file [messages_en.properties] perché l'URL [2] utilizzava il parametro request_locale=en.
![]() |
In [4] viene richiesta una pagina in tedesco (de). Poiché non esiste un file [messages_de.properties], viene utilizzato il file predefinito [messages.properties] [5].
In [6], l'inglese è impostato come lingua preferita del browser.
![]() |
In [7], viene richiesta l'azione [Action1] senza parametri di lingua. La richiesta proviene da un browser la cui lingua preferita è l'inglese (en). Pertanto, viene 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ò richiederà la scrittura di viste che utilizzino le chiavi di questo file. L'internazionalizzazione in inglese comporterà semplicemente la creazione del file [messages_en.properties] per i messaggi in inglese. Non sono necessarie altre modifiche.


