Dopo aver visto, nei giorni passati, un'introduzione a JSF, in questo articolo impareremo a realizzare un'applicazione multilingua utilizzando il framework. Riutilizziamo l'esempio precedente aggiungendo il supporto alla multilingua.
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_it.properties: conterrà tutte le label in lingua italiana, la lingua di default del nostro sito;
- Messaggi_fr.properties: conterrà tutte le label in lingua francese;
- Messaggi_en.properties: conrrà tutte le label in lingua inglese.
Listato 1. messages_it.properties
titolo=Italiano
testo=Questa pagina e scritta in italiano!
nome=Nome
benvenuto=Benvenuto
accedi=Accedi
Listato 2. messagges_fr.properties
titolo=Français
testo=Cette page est écrite en français!
nome=nome
benvenuto=bienvenue
accedi=Entrèe
esci=Sortir
Listato 3. messages_en.properties
titolo=English
testo=This page is written in English language!
nomeame
benvenuto=Welcome
accedi=Login
esci=Exit
Per semplicità, i nostri file di properties conterranno esclusivamente le due voci titolo e testo che verranno richiamate nella nostra JSP.
Per configurare l'applicazione occorre aggiungere il seguente codice al file faces-config.xml.
Listato 4. Codice da aggiungere per configurare l'applicazione
<application>
<message-bundle>it.html.jsf.messages</message-bundle>
<locale-config>
<default-locale>it</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>fr</supported-locale>
</locale-config>
</application>
I file di properties vanno posizionati nella cartella dei sorgenti, e di conseguenza nella cartella WEB-INF/classes della nostra applicazione Web. Nel nostro caso inseriamo i tre file nel package it.html.jsf. Notiamo come la lingua di default è quella italiana, quelle disponibili sono inglese (en) e francese (fr). Qualora viene richiesta una lingua differente da quelle definite, verrà richiamata quella di default.
Per richiamare il file della lingua all'interno di una JSP occorre prima di tutto caricare il bundle all'interno della vista mediante il tag loadBundle che ha due attributi, basename che stabilisce il nome del file di properties senza la sigla della lingua, e var che stabilisce il nome del bundle mediante il quale è possibile stampare un messaggio all'interno della pagina.
Mediante il tag <f:loadBundle basename="it.html.jsf.messages." var="msg"/>
viene automaticamente caricato il resource bundle specifico per la lingua corrente. Il tag riceve in input il nome generico del file di properties da caricare senza la sigla della lingua (basename) ed il nome della variabile mediante la quale è possibile stampare un messaggio all'interno della pagina.
Per stampare un testo in una pagina, è possibile utilizzare il tag <h:outputText>
che ha come attributo value il nome che corrisponde alla property definita nei file di properties. Il nome della properties va scritto con la seguente sintassi:
#{msg.property}
Per stampare i messaggi, è quindi necessario utilizzare il seguente codice:
Listato 5. Codice per stampare i messaggi
<h:outputText value="#{msg.nome}"/>
<h:outputText value="#{msg.benvenuto}"/>
La nostra index.jsp sarà la seguente:
Listato 6. Pagina index.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<f:view>
<f:loadBundle basename="it.html.jsf.messages" var="msg"/>
<head>
<title><h:outputText value="#{msg.titolo}"/></title>
</head>
<body>
<h:form>
<h:outputText value="#{msg.nome}" />
<h:inputText value="#{utente.nome}" />
<h:commandButton value="#{msg.accedi}" action="benvenuto" />
<h:commandButton value="#{msg.esci}" action="uscita" />
</h:form>
</body>
</f:view>
</html>
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.