La lingua inglese è utilizzata tanto nella coordinazione dello sviluppo di una applicazione, quanto nei messaggi che questa presenta all'utente. L'uso di una lingua comune infatti rende semplice la comunicazione tra le varie parti. D'altro canto, assumere che gli utenti finali conoscano la lingua inglese limita fortemente la diffusione dell'applicazione stessa.
L'utilità gettext del progetto GNU fornisce degli strumenti che consentono agli sviluppatori di marcare certi messaggi come traducibili, ai traduttori di tradurre tali messaggi ed agli utenti di vederli tradotti nella lingua che hanno scelto di usare.
Per internazionalizzazione (spesso indicata nei testi inglesi come “i18n” per abbreviare) si intende l'operazione per mezzo della quale un programma o un gruppo di programmi sono messi in grado di supportare diversi linguaggi.
Per localizzazione (spesso indicata nei testi inglesi come “l10n” per abbreviare), si intende l'operazione per mezzo della quale vengono forniti ad un programma tutte le informazioni necessarie per gestire i suoi ingressi ed uscite in un modo che risulti corretto in una certa lingua ed in un certo ambiente.
Per chiarire questa differenza, esaminiamo un caso reale che si sta discutendo nei giorni in cui sto scrivendo questo documento: la localizzazione dei nomi di directory standard.
Una esigenza degli sviluppatori e degli utenti di GNOME è quella di poter permettere la traduzione di particolari directory che l'utente puà avere nella propria directory home o nel file system. Una di tali directory è quella di nome Desktop posta nella home degli utenti
Il contenuto di tale directory viene "prelevato" ed usato in parte per popolare la scrivania di GNOME, ossia quell'area dello schermo che si trova sempre sullo sfondo dello schermo.
Risulta evidente l'esigenza di mantenere univoco il nome della directory: solo in questo modo è possibile garantire l'interoperabilità tra programmi definendo uno standard che reciti: “i file da porre sulla scrivania sono sempre nella directory Desktop posta nella home degli utenti”.
Per risolvere tale problema bisogna internazionalizzare i programmi, definendo ed usando delle funzioni che operino più o meno come filtri: se stai visualizzando quella directory, allora consulta l'archivio delle traduzioni e mostra a video la traduzione associata per la lingua in uso. Se la traduzione per la lingua in uso non c'è, allora vuol dire che quella localizzazione è incompleta o mancante.
Come suggerito dalla nota, il modo migliore per fornire un software tradotto è di fornire delle tabelle per ogni lingua in cui si realizzi la corrispondenza striga originale - stringa tradotta. Le varie utilità che compongono gettext permettono di gestire queste corrispondenze tramite semplici file di testo.
L'operazione di traduzione di un programma richiede da parte del traduttore la modifica del cosiddetto “file PO”.
PO significa Portable Object, per distinguere tali file dai file MO, ovvero Machine Object. Il formato di file PO è stato per la prima volta implementato dalla Sun sul sistema Solaris, basandosi su uno standard della Uniforum.
Nei file PO si concretizza l'associazione tra ciascuna stringa originale marcata come traducibile e la traduzione in una particolare lingua di destinazione. Per ogni lingua supportata dal programma esiste un file di nome CODICE_LINGUA.po che contiene tutte le stringhe marcate come traducibili e le loro traduzioni. I file che hanno come estensione .pot sono delle traduzioni “vergini”, contengono cioè solo le stringhe da tradurre ed i segnaposto per le traduzioni: tali file vanno usati quando si comincia una nuova traduzione.
I file MO sono dei file binari pensati per essere letti dai programmi. Sebbene derivino dai file PO, il formato di tali file può differire da sistema a sistema. Nei sistemi GNU i file con estensione .gmo sono file MO nel formato GNU.
Oltre ad una architettura utile agli sviluppatori per marcare le stringhe da tradurre, gettext fornisce dei programmi utili per la creazione, l'aggiornamento, la fusione e la codifica dei file PO.
L'uso di questi programmi non verrà trattato, rimandando alla già citata pagina Info di gettext ed alle pagine di manuale dei relativi programmi.
è bene tenere presente che i progetti legati a GNOME fanno uso di file sorgenti che non sono gestiti direttamente da gettext, come ad esempio i file con sintassi XML. Per ovviare a questo problema vengono forniti delle utilità, raggruppate sotto il nome di intltool, che in pratica fanno da filtro. FIXME!!!