Dizionario
NOTA: il dizionario è presente dalla versione 4.3.1
Il dizionario è uno strumento che permette di tradurre tutte le etichette configurate nel client, e quindi di localizzare l’applicazione che viene costruita con il framework.
Nello specifico vengono tradotte:
- AZIONI (etichetta e descrizione)
- ATTRIBUTI (etichetta e descrizione)
- CLASSI (etichetta e descrizione)
- LAYOUT CONTAINER (title)
- LAYER (etichetta e descrizione)
- PROGETTI
- MENUBARITEM (etichetta)
- ACCORDIONPANEITEM (etichetta)
- LEAFITEM (etichetta)
- REPORT (descrizione)
- PARAMETRI (valore)
- AMBITI (descrizione)
Inoltre il dizionario prevede la traduzione delle ‘label’ definite in alcuni widget come:
- COMBOBOX
- DBCOMBOBOX
- DBIMAGECOMBOBOX
- DOMAIN
- LABEL
La traduzione avviene mediante la definizione dei contenuti di tre tabelle:
- gwm_dictionary_keys (colonna delle chiavi [dic_key])
- gwm_dictionary_lang (colonna delle lingue [dic_lang])
- gwm_dictionary_values (colonna delle chiavi [dic_key], delle lingue [dic_lang] e dei valori [dic_value])
Per ciascuna chiave, che si riferisce a una etichetta definita nell’applicazione, dovranno essere definiti i rispettivi valori in tutte le lingue con cui si vuole localizzare l’applicazione
Modifiche Impostazioni Microsoft SQL Server Management
IN CASO DI TABELLE GIÀ ESISTENTI EFFETTUARE QUESTE MODIFICHE
Per poter rendere la colonna dic_key delle tabelle gwm_dictionary_values e gwm_dictionary_keys case sensitive è necessario controllare che in Strumenti > Opzioni > Finestre di progettazione > Progettazione tabelle e Progettazione database non sia presente la spunta su Impedisci il salvataggio delle modifiche per cui è necessario ricreare la tabella.
MODIFICHE COLONNE
Una volta eseguita la procedura precedente modificare il parametro Regole di confronto della colonna dic_key delle due tabelle gwm_dictionary_values e gwm_dictionary_keys.
Cliccare con il tasto destro in una tabella e selezionare Progetta.
Selezionare la colonna dic_key e nella sezione Proprietà colonna in basso modificare il parametro Regole di confronto spuntando l'opzione Distingui maiuscole/minuscole.
Eseguire per entrambe le tabelle come sopra indicato
Traduzione Messaggi Azioni
Per tradurre i messaggi delle azioni è necessario richiamare la funzione:
- actionMessagesTranslate(label, callback) per la traduzione di un solo messaggio;
- actionMessagesMapTranslate(labelMap, callback) per la traduzione di più messaggi.
TRADUZIONE DI UN SOLO MESSAGGIO:
//etichetta da tradurre var label = 'casa'; //chiamata della funzione di traduzione actionMessagesTranslate(label, function(response){ //recupero della traduzione var labelTranslated = response; //codice dopo la traduzione });
TRADUZIONE DI PIU’ MESSAGGI:
//etichette da tradurre var label1 = 'casa'; var label2 = 'mare'; //creazione mappa con le etichette var labelMap = { /*nome*/ /*contenuto*/ label1 : label1, label2 : label2 }; //chiamata della funzione di traduzione actionMessagesMapTranslate(labelMap, function(response){ //recupero della traduzione var label1Translated = response.label1; var label2Translated = response.label2; //codice dopo la traduzione });
In questo caso va creata una mappa da passare alla funzione con tutte le label da tradurre; come chiave va usato il nome della label e come valore il suo contenuto.
In entrambi i casi tutto il codice che segue la traduzione del messaggio dovrà essere inserito nella funzione di callback (//codice dopo la traduzione).
Tradurre i Messaggi nei Groovy
Per poter tradurre i messaggi nei groovy occorre importare la libreria: import org.springframework.context.i18n.LocaleContextHolder;
All'interno del metodo groovy è necessario recuperare la lingua da utilizzare, ovvero definire una variabile come segue: def locale = LocaleContextHolder.getLocale();
I metodi da utilizzare per tradurre un messaggio sono due:
dictionaryService.groovyMessagesTranslate(messaggio_da_tradurre, locale);
Questo metodo deve essere utilizzato nel caso in cui il messaggio da tradurre sia una stringa classica, ovvero senza variabili al suo interno
dictionaryService.groovyMessagesTranslateWithHM(messaggio_da_tradurre, mappa, locale);
Questo metodo deve essere utilizzato quando la stringa da tradurre contiene anche delle variabili al suo interno. Ogni variabile che viene inserita nel messaggio deve essere racchiusa tra ${}. La mappa da passare al metodo deve contenere come tutte le variabili presenti nel messaggio (la chiave nella mappa è il nome variabile) e il loro corrispondente valore.
Entrambi i metodi restituiscono il messaggio tradotto secondo la lingua recuperata tramite “locale”
La Stringa da passare ai due metodi corrisponde alla chiave del messaggio importato da Admin nel dizionario.
ESEMPI:
dictionaryService.groovyMessagesTranslate
import org.springframework.context.i18n.LocaleContextHolder; //recupera la lingua def locale = LocaleContextHolder.getLocale(); def message = "casa"; //chiamata della funzione di traduzione e salvataggio del risultato nella variabile String messageTranslated = dictionaryService.groovyMessagesTranslate(message,locale);
dictionaryService.groovyMessagesTranslateWithHM
import org.springframework.context.i18n.LocaleContextHolder; //recupera la lingua def locale = LocaleContextHolder.getLocale(); def message = "Questo è l'account di ${userName}"; //creazione della mappa di variabili contenute nel messaggio def variableMap = new HashMap<String,Object>(); variableMap.userName = "ABA"; //chiamata della funzione di traduzione e salvataggio del risultato nella variabile String translatedMessage = dictionaryService.groovyMessagesTranslateWithHM(message, variableMap, locale);
Traduzione Report
La traduzione dei valori nelle report avviene mediante la traduzione del
“Valore Espressione Default” (iReport) / “Espressione valore predefinito” (Jaspersoft Studio) del parametro da tradurre.
L’informazione si trova nelle Proprietà del Parametro.
iReport
Jaspersoft Studio
NOTE: la traduzione avverrà per i parametri che hanno la classe uguale a “java.lang.String” e il campo “valore espressione default” non vuoto.
Caso d’Uso
Per creare una report localizzata è necessario seguire i seguenti passaggi:
- Definire le etichette da tradurre nei parametri, creando un nuovo parametro per ogni etichetta. Il nome del parametro non influisce con la traduzione, è consigliato utilizzare nel nome la parola “label”;
- Nella finestra Proprietà del parametro impostare come Classe / Classe Parametro il tipo java.lang.String;
- Inserire in Valore Espressione Default / Espressione valore predefinito il contenuto che verrà tradotto. Il Valore Espressione Default non dovrà esse vuoto, altrimenti non verrà effettuata la traduzione;
- Verificare che nelle tabelle gwm_dictionary_keys e gwm_dictionary_values siano presenti le chiavi delle etichette da tradurre.
Descrizione Dettagliata sul Funzionamento
La traduzione delle report avviene sovrascrivendo il valore di default del parametro con la relativa traduzione, nel metodo “createDefaultParameters” della classe GwReportService.
Prima della traduzione vengono effettuati dei controlli per verificare che il parametro non sia system defined (!parameter.isSystemDefined()) e che la classe sia una stringa (parameter.getValueClassName().equals(“java.lang.String”)).
Inoltre viene controllato se il valore del parametro contiene delle virgolette e nel caso in cui esse siano presenti vengono rimosse.