Wedgefish nasce in partenza per essere un sistema multilingua: non è necessaria l'aggiunta di alcun modulo per abilitare tale funzionalità, poiché essa è già stata inclusa nel nucleo del sistema.
Qualunque sito originariamente progettato per una sola lingua può quindi essere trasformato con facilità in un sito poliglotta, senza doverne riprogettare la struttura né riscrivere alcuna riga di codice.
Quando si parla di localizzazione, è importante distinguere tra contenuti, classi, files statici e oggetti di sistema, poiché essi vengono trattati in maniera differente. In una prossima versione di Wedgefish, sarà possibile rivedere tutte le traduzioni, indipendentemente dal tipo, in un'unica schermata, per consentire a traduttori professionisti di svolgere il loro lavoro rapidamente senza dover entrare su più interfacce di amministrazione differenti.
Localizzazione dei contenuti
Il database ad oggetti (WODBMS), integrato nella piattaforma Wedgefish consente di definire, per ogni classe, delle proprietà di tipo localizzabile.
Questi campi possono contenere testo semplice (tipo T) o contenuto HTML (tipo H) e possono essere tradotti in tutte le lingue che sono state abilitate sul sito, mantenendo tutte le traduzioni nell'ambito dello stesso oggetto.
Quando viene effettuata un'interrogazione al WODBMS, i valori delle proprietà localizzabili verranno automaticamente restituiti nella lingua selezionata dall'utente oppure in quella del browser.
Se si desidera recuperare una versione in una lingua particolare, a prescindere da quella selezionata, è sempre possibile specificarla esplicitamente nell'elenco dei campi da restituire; è anche possibile avere indici multipli per ciascuna lingua, se lo desidera, per una maggiore flessibilità (ad esempio "title2_en" indicherà il secondo titolo di un oggetto nella lingua inglese, "content_it" restituirà sempre la traduzione italiana del contenuto HTML).
Se per alcune proprietà non esiste una traduzione nella lingua selezionata, invece di restituire un contenuto vuoto, il WODBMS provvederà a restituire automaticamente la prima traduzione trovata in un'altra delle lingue disponibili, scegliendo quella con maggior priorità nell'elenco delle lingue del sito.
Per chiarire meglio tale meccanismo, prendiamo il seguente esempio.
Un sito ha come lingue impostate (nell'ordine) inglese, italiano e francese. La maggior parte delle pagine sono state scritte solo in italiano, alcune sono state tradotte in francese ma molte altre sono state tradotte in inglese.
Quando viene richiesta una pagina in francese, i campi non ancora tradotti in tale lingua verranno visualizzati in inglese, se esiste una traduzione in tale lingua, altrimenti in italiano.
Grazie all'Editor Universale, tradurre un oggetto in più lingue diventa un compito molto semplice. Un selettore a discesa consente di selezionare la lingua nella quale si desidera inserire o modificare i testi, ed è quindi possibile, dalla stessa schermata, modificare tutte le traduzioni dei campi di testo di qualunque oggetto.
Non è quindi necessario creare un oggetto separato per ogni lingua: tutte le traduzioni possono essere mantenute nello stesso oggetto, rendendone più semplice l'amministrazione, ed è in questo modo possibile stabilire direttamente relazioni tra oggetti multilingua, invece di dover definire relazioni tra ogni oggetto in ciascuna lingua.
Localizzazione delle classi
Ciascun sito web può definire le sue classi, che descrivono le proprietà che ogni oggetto di quel tipo potrà avere.
Le classi devono avere un nome, in lingua inglese, che le identifichi in maniera univoca. Tale nome verrà utilizzato anche nel codice dei controllers per svolgere interrogazioni sugli oggetti del loro tipo, e non dovrebbe quindi essere di norma modificato.
I nomi delle classi possono essere visualizzati automaticamente nella lingua selezionata o in quella del browser su interfacce di amministrazione quali l'Editor Universale.
Ciascuna classe contiene inoltre una serie di proprietà, suddivise in gruppi, i cui nomi possono essere a loro volta localizzati.
Tali testi possono essere tradotti direttamente dall'Editor delle Classi(1) analogamente a quanto è possibile fare con i contenuti. All'atto di esportare le classi in un file XML, tutte le traduzioni nelle varie lingue verranno automaticamente incluse(1).
Localizzazione dei files
Nota: Quanto riportato di seguito è stato solo parzialmente implementato nella versione 0.8.1 di Wedgefish. L'insieme degli strumenti che consentiranno una facile localizzazione dei files verrà reso disponibile in una prossima versione.
Grazie al suo preprocessore di codice integrato e al suo compilatore di templates, tutti i testi presenti in ogni file di codice sorgente, modulo, view o controller possono essere visualizzati automaticamente nella lingua selezionata dall'utente o in quella del browser, senza necessità di dover scrivere una sola riga di codice affinché questo avvenga.
È sufficiente avere cura di scrivere sempre i testi in lingua inglese(2), e racchiuderli tra i delimitatori [[ e ]]. Tale tecnica consente, rispetto alle tradizionali funzioni _() e gettext(), di localizzare anche files statici come sorgenti HTML, CSS e JavaScript, senza doverli trasformare in script PHP.
Al momento di eseguire per la prima volta lo script o visualizzare la view compilata, e ad ogni modifica delle stesse, verrà generata e memorizzata nella cache una versione riscritta del file, nella quale i testi sono stati automaticamente sostituiti con la traduzione nella lingua selezionata. Per ogni lingua, verrà creato un file differente nella cache, migliorando notevolmente in questo modo le prestazioni, poiché le traduzioni non dovranno esser lette da un file o da un database ad ogni esecuzione del codice.
Ad esempio scrivendo [[Save]] in un file, la stringa "Save" verrà considerata come un testo localizzabile.
Per ciascuna lingua, verrà quindi generato automaticamente un file .po, avente come nome la sigla di due caratteri della lingua e contenente tutte le traduzioni del sito, del template o del modulo in questione.
Il file verrà memorizzato nella cartella principale del sito, del template o del modulo, e potrà essere agevolmente tradotto utilizzando strumenti desktop Open Source quali poEdit, oppure con un normale editor di testo.
In alternativa è anche possibile modificare direttamente le traduzioni nelle varie lingue da un'interfaccia web, che visualizza sulla colonna sinistra l'originale in lingua inglese, sulla colonna destra la traduzione nella lingua selezionata, raggruppando tutte le traduzioni del file selezionato in un'unica schermata, anziché mostrarle una ad una, consentendo quindi di risparmiare tempo in caso debbano essere immesse molte traduzioni.
Tutte le modifiche apportate via web alle traduzioni verranno automaticamente riportate sul file .po, senza bisogno di esportare nuovamente i files manualmente. Allo stesso modo, ogni modifica apportata manualmente ad un file .po causerà la ricompilazione automatica di tutti i files che lo utilizzano.
La traduzione di una singola parola o frase (sequenza di caratteri) nell'ambito di un modulo, template o sito deve essere univoca. Non è quindi possibile tradurre la stessa parola (come "Save") in più modi diversi nello stesso modulo, template o sito, ma è comunque possibile avere più traduzioni diverse in moduli, template o siti differenti.
Se è necessario tradurre in maniera differente lo stesso termine nello stesso ambito, è possibile aggiungere un numero o altro carattere all'originale in inglese utilizzato nel file (come ad esempio "Save (2)") ed impostare una traduzione in inglese per lo stesso come "Save" (creando un file "en.po", oppure utilizzando l'interfaccia grafica di traduzione).
Localizzazione degli oggetti di sistema
Esiste una categoria di traduzioni che non rientrano nelle due precedenti tipologie, ed è quella che racchiude particolari oggetti di sistema che non possono essere né classificati come contenuto né rappresentati come files:
- i nomi delle lingue
- i tipi di variabili
Tali oggetti vengono tradotti in files .po separati, contenuti nelle cartelle "system/po/languages" e "system/po/variable_types". Ogni cartella contiene un file per ogni lingua(1).
Questi files non vengono importati automaticamente ad ogni modifica, per motivi di prestazioni, e devono essere quindi essere caricati utilizzando una funzione di amministrazione dedicata(1).
Supporto alla traduzione automatizzata
Per facilitare l'utente nel compito di tradurre files, classi e contenuti, consentendogli di risparmiare tempo, verrà incluso, in una prossima versione, un sistema che suggerirà possibili traduzioni per i testi in inglese direttamente nell'interfaccia di traduzione.
L'implementazione di tale funzionalità si baserà sull'utilizzo di varie risorse:
- la tabella dei contenuti multilingua, grazie alla quale sarà possibile ricercare automaticamente se un determinato contenuto è già stato tradotto dall'inglese nello stesso sito (o in un altro sito, solo se tale funzionalità è stata abilitata, per motivi di sicurezza)
- un "dizionario" di termini, che verrà mantenuto dal sistema ed arricchito man mano delle traduzioni contenute nei files .po e di quelle immesse con l'interfaccia web di traduzione
- vari servizi di traduzione online (qualora tale funzionalità sia stata abilitata)
Tali risorse verranno utilizzate contemporaneamente, nell'ordine elencato, qualunque sia il tipo di contenuto da tradurre.
(1) tale caratteristica deve ancora essere implementata
(2) verrà presa in considerazione in futuro la possibilità di poter impostare anche una lingua differente dall'inglese per le stringhe contenute nei files di determinati siti, templates o moduli e per le classi, per venire incontro a particolari esigenze, sebbene questo possa generare problemi su sistemi sui quali non è stata impostata tale configurazione



