In questi giorni sono stato impegnato in questa attivita’ :
Internazionalizzare (i18n) un portale in cui veniva utilizzato Struts.
Molte pagine sono mostrate utilizzando la libreria Display tag.
Questa libreria permette di mostrare i dati di un elenco distribuiti su piu’ pagine.
Conoscevo questa libreria (poi l’abbiamo dovuta lasciare in quanto introduceva un tempo di latenza troppo alto per l’elaborazione dei dati) e sapevo che permetteva la internazionalizzazione: Distinzione di diversi messaggi a seconda della localizzazione dell’utente in sessione.
Il mio scopo era visualizzare diversi messaggi se l’utente era Italiano o Inglese.
Visto che ci ho scapocciato una cifra di scrivo la soluzione:
Nella action per la definizione della lingua,LOCALE ACTION, va impostata una variabile di sessione in funzione della tabella sotto riportata:
class name | behaviour |
---|---|
org.displaytag.localization.I18nJstlAdapter | Mimic JSTL, looking for a locale specified in session with the Config.FMT_LOCALE key. |
org.displaytag.localization.I18nStrutsAdapter | Struts adapter, will look for the locale specified by Globals.LOCALE_KEY |
org.displaytag.localization.I18nWebworkAdapter | Webwork2 adapter, will look for the locale specified by the fist LocaleProvider action in the stack |
org.displaytag.localization.I18nSpringAdapter | Spring adapter, will use RequestContextUtils.getLocale() for locale resolution (which will in turn delegate to the Spring locale resolver) |
Nello specifico nel mio codice ho inserito (nella mia LocaleAction):
session.setAttribute(“Globals.LOCALE_KEY”,new Locale(linguaggio) ); // Ricordate uso Struts
Successivamente ho introdotto, nell’area di configurazione del displaytag, due file: uno per l’italiano e l’altro per l’inglese
displaytag_it.properties
displaytag_en.properties
Nei 2 file di properties (quello italiano e quello inglese)vanno impostate due properties in questa maniera:
# locale provider (Jstl provider by default)
locale.provider=org.displaytag.localization.I18nStrutsAdapter
# locale.resolver (nothing by default, simply use locale from request)
locale.resolver=org.displaytag.localization.I18nStrutsAdapter
Riavviato il server: FUNZIONA TUTTO
In sintesi:
1 – creare due file di properties (es. displaytag_en.properties e displaytag_it.properties) Ovviamente in lingue differenti per i vari valori
2 – Impostare le properties locale.resolver e locale.provider all’interno in funzione del framework utilizzato
3 – Impostare la variabile in sessione in funzione del framework utilizzato
4 – Riavviate il server
Per maggiori dettagli vi invito a leggere la documentazione del displaytag:
I18n – Internationalization
ci stavo letteralmente smadonnando da 2 giorni, lascio nel mio codice un commento con link a questa pagina: SEI UN GRANDE!!!!
Son contento, Ricorda ogni tanto di cliccare qualche sponsor 😀
ps. per il commento che hai messo nel codice, in futuro potrai dire che la colpa e’ mia 😀
per completezza:
per i titoli delle colonne, bisogna usare solo il tag titleKey (rimuovendo title altrimenti lo sovrascrive) in display:column che a sua volta usa il MessageResources_??.properties di struts nella locale corretta.
e se e’ necessario un export “decente” in XLS, bisogna importare il poi-3.2.jar ed inserire nel displaytag.properties:
export.excel.class=org.displaytag.export.excel.ExcelHssfView
gli altri funzionano male o esportano solo la pagina (ignorando palesemente l’export.amount=list)
that’s all, folks!
…
click 😉