Skip to content

5. Esempio 04 – Internazionalizzazione

Questo esempio riprende il tema dell'internazionalizzazione trattato nel primo esempio.

5.1. Il progetto NetBeans

Image

Image

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.