La funzione `gettext` è stata progettata per permettere la traduzione dell’intero Sistema Operativo GNU/Linux. Proprio per questa ragione è compatibile al 100% con un gran numero di linguaggi di programmazione e di scripting: C, C++, C#, Bash, Python, GNU clsip, Emacs Lisp, GNU Smalltalk, Java, GNU awk, Pascal, WxWidgets, YCP, Tcl, PHP, Pike, ed altri ancora.

Per prima cosa vediamo come si utilizza `gettext` all’interno del codice sorgente. Le modalità di esecuzione variano a seconda del linguaggio di programmazione adottato per il proprio progetto, ma la sintassi è pressoché sempre la stessa, almeno per i linguaggi di programmazione più diffusi: la funzione racchiude semplicemente la stringa del messaggio da tradurre. Va notato che quasi sempre si ricorre alla forma abbreviata, che corrisponde semplicemente ad un underscore. In questo modo, il seguente codice in C:

printf(gettext("My name is %s\n"), mio_nome);

diventa:

printf(_("My name is %s\n"), mio_nome);

In seguito, il comando xgettext filtrerà il codice alla ricerca della funzione gettext appena inserita, per creare il file modello .pot sulla base delle stringhe estratte dai sorgenti. Un esempio di file .pot per un codice contenete le righe precedenti è il seguente:

#: include/myname.php:36
msgid "My name is %s\n"
msgstr ""

Per avviare la traduzione si ricorre al programma `msginit`. Passando il file .po a `msginit` è possibile infatti generare un nuovo file contenente lo scheletro del nuovo .po nella lingua di destinazione. Ad esempio, per tradurre in italiano il file en_EN.po è sufficiente lanciare il seguente comando:

msginit –locale=it_IT –input=en_EN.po

Il programma creerà il file it_IT.po, il cui contenuto sarà simile al seguente:

#: include/myname.php:36
msgid "My name is %s\n"
msgstr "My name is %s\n"

A questo punto il traduttore non deve fare altro che tradurre la stringa che segue msgstr. La traduzione può essere effettuata con un qualsiasi editor direttamente da linea di comando, oppure ricorrendo a programmi specifici come poEdit. Il risultato sarà simile a quanto segue:

#: include/myname.php:36
msgid "My name is %s\n"
msgstr "Mi chiamo %s\n"

Una volta terminata la traduzione, i file .po deve essere compilato nel file binario .mo tramite il comando `msgfmt`:

msgfmt it_IT.po

Condividi:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace