I componenti i18n sono packaged con lo Struts Framework, il primo di questi componenti, che viene gestito dall'application Controller, è una classe Message che referenzia un resource boundle contenente stringhe locale-dependent; il secondo è un custom tag JSP, <bean:message />, che viene utilizzato nel View layer per presentare le stringhe gestite dal Controller.
Il Controller
Il metodo standard quando si internazionalizza un'applicazione Struts inizia con la creazione di un semplice set di file di proprietà.
Definizione dei Boundles di Risorsa
Il resource boundle è un file che contiene le coppie chiave/valore per il linguaggio dell'applicazione. Il formato del nome per questo file è ResourceBundleName_language_COUNTRY.properties (es. ApplicationResources_en_US.properties - tutte le risorse richieste da un client negli Stati Uniti che parla la lingua Inglese utilizzeranno questo file per effettuare un retrieve specifico).
Quando si sviluppa un'applicazione i18n, è necessario definire un file di proprietà per ciascun linguaggio che l'applicazione utilizzerà.
Deployment dei Boundles di risorsa
Una volta definiti tutti i file di proprietà dell'applicazione è necessario informare Struts. Il tutto utilizzando il tag <init-parameter> di ActionServlet:
Listato 1. Deploy dell'applicazione (Guarda il codice completo)
..//
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
..//
Tutto quello che dobbiamo fare è copiare tutti i file di risorse nella directory classes e riavviare Tomcat.
La vista
Per utilizzare il resource boundles è necessario utilizzare il secondo componente i18n, cioè un custom tag JSP definito dal Framework Struts, <bean:message />, che viene utilizzato per presentare le stringhe attuali che sono state caricate dal Controller.
Deploying della Tag Library bean
Mettiamo mano al file web.xml che necessita dell'aggiunta di un <taglib>:
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
Internazionalizzazione di un'applicazione
I diversi passi per effettuare l'internalizzazione di una applicazione sono:
- Creazione del resource boundles che conterrà una coppia chiave/valore utilizzata nell'applicazione.
ApplicationResources_it_IT.properties
app.symbol=Simbolo
app.price=Prezzo CorrenteApplicationResources_en_US.properties
app.symbol=Symbol
app.price=current Price - Copia di questi file nella cartella classes dell'applicazione
- Aggiunta del sotto-elemento <init-param> di ActionServlet, chiamato ApplicationResources.
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param> - Aggiunta di un <taglib> descrivente la bean tag library nel file web.xml
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib> - Produrre la pagina JSP
<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %><html>
<head>
<title><bean:message key="app.title" /></title>
</head>
<body>
<html:form action="Lookup">
<table width="45%" border="0">
<tr>
<td><bean:message key="app.symbol" /></td>
<td><html:text property="symbol" /></td>
</tr>
<tr>
<td colspan="2" align="center"><html:submit /></td>
</tr>
</table>
</html:form>
</body>
</html>Le modifiche al file struts-config.xml sono le seguenti:
<action
path="/Lookup"
type="esempio.LookupAction"
name="lookupForm" >
<forward name="success" path="/internazionalizedQuote.jsp" />
</action>