====== 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**])\\ {{:gwusermanual:interface:interface:gwm_dictionary_keys.png?nolink&200|}}
***gwm_dictionary_lang** (colonna delle lingue [**dic_lang**])\\ {{:gwusermanual:interface:interface:gwm_dictionary_lang.png?nolink&200|}}
***gwm_dictionary_values** (colonna delle chiavi [**dic_key**], delle lingue [**dic_lang**] e dei valori [**dic_value**])\\ {{:gwusermanual:interface:interface:gwm_dictionary_values.png?nolink&600|}}
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();
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
{{:gwusermanual:interface:interface:report.png|}}
Jaspersoft Studio
{{:gwusermanual:interface:interface:paramet.png|}}
**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.
{{:gwusermanual:interface:interface:etichetta.png|}}
==== 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.