
Come accennato nel precedente articolo Ed ecco a voi... Zikula 1.2! [4], nella versione 1.2 di Zikula è stato introdotto un nuovo sistema multilingua basato su gettext. Ma quali sono esattamente le implicazioni di questo cambiamento? Quali vantaggi (o svantaggi) porta ai traduttori e agli utenti?
Con questo articolo cerchiamo di analizzare in maniera approfondita i difetti del vecchio sistema multilingua e come l'adozione di gettext li risolve, trattando brevemente anche l'argomento compatibilità.
Tutte le versioni di Zikula precedenti la 1.2 utilizzano un sistema basato sulla funzione php define [5]. Zikula ha ereditato questo sistema da PostNuke, che a sua volta lo aveva ereditato da PHP-Nuke. Il funzionamento di questo sistema è abbastanza semplice. L'autore di un modulo crea un file chiamato eng/module.php (eng sta per english) e definisce una serie di costanti PHP con la seguente sintassi:
define( '_WELCOME', 'Welcome' );
Successivamente nel codice e nei template del modulo scrive _WELCOME al posto di Welcome. Al momento di visualizzare il contenuto della pagina l'interprete PHP sostituirà tutte le occorrenze di _WELCOME con Welcome.
Per tradurre il modulo in italiano sarà sufficiente creare il file ita/module.php inserendo la traduzione:
define( '_WELCOME', 'Benvenuto' );
e quando l'utente richiederà la pagina in italiano l'interprete PHP sostituirà _WELCOME con Benvenuto.
Tutto facile no? Non proprio. Questo sistema ha infatti due grossi difetti, che negli anni ne hanno minato la reputazione e che hanno infine spinto gli sviluppatori a cercare una nuova soluzione. Analiziamo brevemente questi due difetti:
E' evidente come questi due problemi rappresentino un limite concreto alla flessibilità del sistema, scontentando al tempo stesso sia i traduttori che gli utenti.
Come molti di voi avranno intuito leggendo il nome gettext, la soluzione ai problemi precedentemente esposti non è stata cercata nel design di un nuovo sistema, bensì nell'adozione di alcune librerie e tool molto famosi nel mondo dell'open source. gettext [6] è infatti un utility GNU volta all'internazionalizzazione del software (spesso chiamata i18n, perchè nella parola internationalization ci sono 18 lettere tra la i e la n). Tra le altre cose gettext è alla base della traduzione del sistema operativo GNU/Linux e di innumerevoli applicativi.
Non mi dilungherò parlando nello specifico di come funziona gettext in quanto è oltre gli obiettivi di questo articolo (ed essendo un sistema molto diffuso si possono trovare in internet diverse risorse che trattano l'argomento), vediamo tuttavia come gettext risolve i due problemi che affliggono il sistema basato sui define:
Purtroppo nel breve periodo questo nuovo sistema ha un costo non indifferente. E' infatti necessario ritradurre/riadattare tutte le traduzioni disponibili. Tuttavia i vantaggi offerti da gettext nel lungo periodo giustificano ampiamente questo sforzo, parola di traduttore!
Aggiornamento: durante la stesura dell'articolo ho dimenticato di menzionare che il nuovo sistema da un vantaggio anche allo sviluppatore. Con il vecchio metodo il programmatore si trovava a dover lavorare su più file contemporaneamente, in quanto per ogni nuova frase parola doveva prima creare la costante e poi utilizzarla nel codice. Ora invece il testo viene scritto direttamente nel codice così: __("Welcome") e una volta terminato il modulo è possibile utilizzare questo tool online [7] per "estrarre" la traduzione dal codice. Questo dettaglio automatizza la creazione dei file di traduzione, facendo perdere meno tempo al programmatore e lasciandolo libero di concentrarsi sul codice.
La versione 1.2 di Zikula supporta entrambi i sistemi, quindi moduli "vecchio sistema" e moduli "nuovo sistema" possono coesistere senza alcun problema. E così sara in tutte le eventuali versioni 1.2.x. Tuttavia il sistema basato sui define ha le ore contate e sarà probabilmente eliminato completamente a partire da Zikula 1.3, che essendo previsto per febbraio 2010 dovrebbe garantire tempo a sufficienza per la conversione (per altro abbastanza semplice e veloce) dei moduli vecchio stile. Ma Zikula 1.3 è un'altra storia ricca di novità, e vi sarà un altro articolo in cui parlarne.
Lo staff di Zikula.
Solo gli utenti loggati possono inviare commenti. registrati/log in [8]
Ho aggiornato l'articolo, avevo dimenticato un ulteriore vantaggio di gettext