Successivo: I18N per programmatore, Precedente: I18N e L10N, Su: Internazionalizzazione [Contenuti][Indice]
gettext
gawk
usa il comando GNU gettext
per rendere disponibili
le proprie funzionalità di internazionalizzazione.
L’attenzione del comando GNU gettext
è rivolta principalmente
ai messaggi: stringhe di caratteri stampate da un programma, sia
direttamente sia usando la formattazione prevista dalle istruzioni
printf
o sprintf()
.93
Quando si usa il comando GNU gettext
, ogni applicazione ha il
proprio dominio di testo. Questo è un nome unico come,
p.es., ‘kpilot’ o ‘gawk’,
che identifica l’applicazione.
Un’applicazione completa può avere più componenti: programmi scritti
in C o C++, come pure script di sh
o di awk
.
Tutti i componenti usano lo stesso dominio di testo.
Per andare sul concreto, si supponga di scrivere un’applicazione
chiamata guide
. L’internazionalizzazione per quest’applicazione
può essere implementata seguendo nell’ordine i passi qui delineati:
guide
e prende nota di ogni stringa che potrebbe aver bisogno
di traduzione.
Per esempio, "`-F': option required"
è una stringa che sicuramente
necessita di una traduzione.
Una tabella che contenga stringhe che sono nomi di opzioni non
necessita di traduzione.
(P.es., l’opzione di gawk
--profile
dovrebbe restare immutata, a prescindere dalla lingua locale).
"guide"
) alla libreria gettext
,
chiamando la funzione textdomain()
.
guide
è compilato e installato, i file binari contenenti le
traduzioni sono installati in una directory standard.
gettext
di usare un file .gmo in una directory diversa da quella standard,
usando la funzione bindtextdomain()
.
awk
guide
cerca ogni
stringa da tradurre facendo una chiamata a gettext()
. La stringa
ricevuta in ritorno è la stringa tradotta, se è stata trovata, o la stringa
originale, se una traduzione non è disponibile.
In C (o C++), la marcatura della stringa la ricerca dinamica
della traduzione si fanno inserendo ogni stringa da tradurre in una chiamata
a gettext()
:
printf("%s", gettext("Don't Panic!\n"));
Gli strumenti software che estraggono messaggi dal codice sorgente
individuano tutte le stringhe racchiuse nelle chiamate a gettext()
.
Gli sviluppatori del comando GNU gettext
, riconoscendo che
continuare a immettere ‘gettext(…)’ è sia faticoso che poco
elegante da vedere, usano la macro ‘_’ (un trattino basso) per
facilitare la cosa:
/* Nel file di intestazione standard: */ #define _(str) gettext(str) /* Nel testo del programma: */ printf("%s", _("Don't Panic!\n"));
Questo permette di ridurre la digitazione extra a solo tre caratteri per ogni stringa da tradurre e inoltre migliora di molto la leggibità.
Ci sono categorie di localizzazione per tipi diversi di informazioni
legate a una particolare localizzazione.
Le categorie di localizzazione note a gettext
sono:
LC_MESSAGES
Testo dei messaggi. Questa è la categoria di default usata all’interno di
gettext
, ma è possibile specificarne esplicitamente una differente,
se necessario. (Questo non è quasi mai necessario.)
LC_COLLATE
Informazioni sull’ordinamento alfabetico (cioè, come caratteri diversi e/o gruppi di carattere sono ordinati in un dato linguaggio).
LC_CTYPE
Informazioni sui singoli caratteri (alfabetico, numerico, maiuscolo
o minuscolo, etc.), come pure sulla codifica dei caratteri.
Quest’informazione è utilizzata per stabilire le classi di caratteri come
definite nello standard POSIX, nelle espressioni regolari,
come p. es. /[[:alnum:]]/
(vedi la sezione Usare espressioni tra parentesi quadre).
LC_MONETARY
Le informazioni di tipo monetario, quali il simbolo della moneta, e se il simbolo va prima o dopo il valore numerico.
LC_NUMERIC
Informazioni di tipo numerico, quali il carattere da usare per separare le cifre decimali e quello per separare le migliaia.94
LC_TIME
Informazioni relative alle date e alle ore, come l’uso di ore nel formato a 12 ore oppure a 24 ore, il mese stampato prima o dopo il giorno in una data, le abbreviazioni dei mesi nella lingua locale, e così via.
LC_ALL
Tutte le categorie viste sopra. (Non molto utile nel contesto del comando
gettext
.)
NOTA: Come descritto in Il luogo fa la differenza, le variabili d’ambiente che hanno lo stesso nome delle categorie di localizzazione (
LC_CTYPE
,LC_ALL
, etc.) influenzano il comportamento digawk
(e quello di altri programmi di utilità).Solitamente, queste variabili influenzano anche il modo con cui la libreria
gettext
trova le traduzioni. Tuttavia, la variabile d’ambienteLANGUAGE
prevale sulle variabili della famigliaLC_xxx
. Molti sistemi GNU/Linux possono aver definito questa variabile senza esplicitamente notificarlo all’utente, e questo potrebbe far sì chegawk
non riesca a trovare le traduzioni corrette. Se si incontra questa situazione, occorre controllare se la variabile d’ambienteLANGUAGE
è definita, e, in questo caso, va usato il comandounset
per rimuoverla.
Per il test di traduzioni dei messaggi inviati da gawk
stesso, si può
impostare la variabile d’ambiente GAWK_LOCALE_DIR
. Si veda la
documentazione per la funzione C bindtextdomain()
, e si veda anche
Le variabili d’ambiente..
Per alcuni sistemi operativi,
la relativa versione di gawk
non supporta il comando GNU gettext
.
Per questo motivo, queste funzionalità non sono disponibili nel caso
si stia lavorando con uno di questi sistemi operativi. Siamo spiacenti.
Gli americani usano una virgola ogni tre cifre decimali, e un punto per separare la parte decimale di un numero, mentre molti europei (fra cui gli italiani) fanno esattamente l’opposto: 1,234.56 invece che 1.234,56.
Successivo: I18N per programmatore, Precedente: I18N e L10N, Su: Internazionalizzazione [Contenuti][Indice]