Dopo aver visto, nei giorni passati, un'introduzione ad Apache Struts 2, in questo articolo impareremo a realizzare un'applicazione multilingua utilizzando il framework. Quasi tutti i browser inviano nelle richieste HTTP anche un header, che indica in quale lingua l'utente vorrebbe visualizzare le pagine. Di solito è un'impostazione configurabile nelle proprietà del browser. Sfruttando questa funzionalità, è possibile caricare automaticamente il sito nella lingua desiderata.
Prima di tutto occorre definire le lingue che il nostro sito gestirà. Per ciascuna lingua, occorre creare un file di properties che contiene l'elenco di tutte le label utilizzate nel sito. Nell'esempio creiamo i seguenti file:
- Messaggi.properties: che conterrà tutte le label in lingua italiana, la lingua di default del nostro sito;
- Messaggi_fr.properties: che conterrà tutte le label in lingua francese;
- Messaggi_en.properties: che conterrà tutte le label in lingua inglese.
Messaggi.properties
titolo=Italiano
testo=Questa pagina e scritta in italiano!
Messaggi_fr.properties
titolo=Français
testo=Cette page est écrite en français!
Messaggi_en.properties
titolo=English
testo=This page is written in English language!
Per semplicità, i nostri file di properties conterranno esclusivamente le due voci titolo e testo che verranno richiamate nella nostra JSP.
I file il cui nome termina per _fr ed _en sono i file che verranno richiamati, rispettivamente, quando nella richiesta HTTP viene richiamata la lingua francese, o la lingua inglese. Il file Messaggi.properties, invece, viene richiamato quando nella richiesta HTTP è richiesta una lingua differente da quelle specificate (inglese o francese).
I file di properties vanno posizionati nella cartella dei sorgenti, e di conseguenza nella cartella WEB-INF/classes della nostra applicazione Web.
Struts 2 mette a disposizione un tag specifico per stampare in una pagina JSP un messaggio nella lingua richiesta.
Mediante il tag <s:i18n name="Messaggi">
viene automaticamente caricato il resource bundle specifico per la lingua corrente. Il tag riceve in input il nome dello specifico file di properties da caricare. Nulla vieta, infatti, di avere diversi file di properties, che potrebbe essere utile, ad esempio, in un progetto di grandi dimensioni.
Per stampare un testo in una pagina, è possibile utilizzare il tag <s:text>
che ha come attributo il nome che corrisponde alla property definita nei file di properties.
Per stampare il titolo ed il testo che abbiamo definito nei nostri file delle lingue, ad esempio, è necessario utilizzare il seguente codice:
<s:i18n name="Messaggi">
<h2><s:text name="titolo" /></h2>
<div><s:text name="testo" /></div>
</s:i18n>
Per testare l'applicazione è possibile impostare la lingua di default nel browser. In Firefox 3, ad esempio, per impostare la lingua di default è necessario accedere alla finestra delle impostazioni (Strumenti-Opzioni), scegliere il tab Contenuti, e selezionare la voce Lingue. Il Browser, vi permette di impostare le lingue in ordine di priorità. Provate a mettere come lingua di default il francese oppure quella inglese. In questo modo è possibile controllare che nei tre casi il sito apparirà localizzato nella lingua richiesta.