Skip to content

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.