Successivo: Gawk internazionalizzato, Precedente: I18N per traduttore, Su: Internazionalizzazione [Contenuti][Indice]
Vediamo ora un esempio dettagliato di come internazionalizzare e localizzare
un semplice programma awk
, usando come nostro programma sorgente
originale il file guide.awk:
BEGIN { TEXTDOMAIN = "guide" bindtextdomain(".") # per la fase di test print _"Don't Panic" print _"The Answer Is", 42 print "Pardon me, Zaphod who?" }
Eseguire ‘gawk --gen-pot’ per creare il file .pot:
$ gawk --gen-pot -f guide.awk > guide.pot
Questo produce:
#: guide.awk:4 msgid "Don't Panic" msgstr "" #: guide.awk:5 msgid "The Answer Is" msgstr ""
Questo modello di portable object va salvato e riutilizzato per ogni
lingua in cui l’applicazione viene tradotta. La stringa msgid
è
seguita dalla stringa originale da tradurre, e la stringa msgstr
conterrà la traduzione.
NOTA: Le stringhe non aventi come prefisso un trattino basso non sono inserite nel file guide.pot.
Successivamente, i messaggi devono essere tradotti. Questa è una traduzione in un ipotetico dialetto dell’inglese, chiamato “Mellow”:99
$ cp guide.pot guide-mellow.po Aggiungere traduzioni al file guide-mellow.po …
Ecco le traduzioni:
#: guide.awk:4 msgid "Don't Panic" msgstr "Hey man, relax!" #: guide.awk:5 msgid "The Answer Is" msgstr "Like, the scoop is"
Il passo successivo è di creare la directory che contenga il file binario
con le traduzioni dei messaggi (file .mo [message object]) e
creare in quella directory il file guide.mo.
Si presume che il file in questione debba essere usato nella localizzazione
en_US.UTF-8
, perché si deve usare un nome di localizzazione che sia
noto alle routine del comando C gettext
.
La disposizione delle directory qui utilizzata è standard per il comando
GNU gettext
sui sistemi GNU/Linux. Altre versioni di
gettext
possono usare una disposizione differente:
$ mkdir en_US.UTF-8 en_US.UTF-8/LC_MESSAGES
Il programma di utilità msgfmt
effettua la conversione dal file
leggibile, in formato testo, .po nel file, in formato binario,
.mo.
Per default, msgfmt
crea un file di nome messages.
A questo file dev’essere assegnato un nome appropriato, e va messo nella
directory predisposta (usando l’opzione -o) in modo che
gawk
sia in grado di trovarlo:
$ msgfmt guide-mellow.po -o en_US.UTF-8/LC_MESSAGES/guide.mo
Infine, eseguiamo il programma per provare se funziona:
$ gawk -f guide.awk -| Hey man, relax! -| Like, the scoop is 42 -| Pardon me, Zaphod who?
Se le tre funzioni che rimpiazzano dcgettext()
, dcngettext()
,
e bindtextdomain()
(vedi Portabilità nell'I18N)
sono contenute in un file di nome libintl.awk,
è possibile eseguire guide.awk senza modificarlo, nel modo seguente:
$ gawk --posix -f guide.awk -f libintl.awk -| Don't Panic -| The Answer Is 42 -| Pardon me, Zaphod who?
Successivo: Gawk internazionalizzato, Precedente: I18N per traduttore, Su: Internazionalizzazione [Contenuti][Indice]