Il modulo gettext fornisce un'ulteriore classe derivata da NullTranslations: GNUTranslations. Questa classe sovrascrive il metodo _parse() per abilitare la lettura dei file GNU gettext con formato .mo, sia in formato big-endian che little-endian. Inoltre forza sia gli ids che le stringhe dei messaggi a Unicode.
GNUTranslations analizza i meta-dati opzionali esterni al
catalogo delle traduzioni. Questa è una convenzione con GNU
gettext per includere i meta-dati come traduzioni di stringhe
vuote. Questo meta-dato è quello dello standard definito da
RFC 822, coppie chiave: valore
, e dovrebbe contenere la
chiave Progetto-Id-Versione
. Se viene individuata la chiave
Content-Type
, allora la proprietà del charset
viene
utilizzata per inizializzare la variabile istanza ``protetta''
_charset, preimpostandola a None
se non viene trovata.
Se la codifica dell'insieme dei caratteri viene specificata, allora
tutti gli ids e le stringhe messaggio vengono convertiti in Unicode
secondo questa codifica. Il metodo ugettext() restituisce
sempre uno Unicode, mentre il metodo gettext() restituisce una
stringa codificata a 8 bit.
Vengono accettati solo caratteri US-ASCII per gli argomenti degli id
messaggio di entrambi i metodi, per le stringhe Unicode o le stringhe
a 8-bit. Notate che la versione Unicode dei metodi (per esempio,
ugettext() e ungettext()) sono le interfacce
raccomandate per usare programmi Python internazionalizzati.
L'intero insieme di coppie chiave/valore viene posizionato in un dizionario ed impostato come variabile ``protetta'' dell'istanza _info.
Se il magic number del file .mo non è valido, o se altri problemi si verificano intervenuti durante la lettura del file, l'instanziazione della classe GNUTranslations può sollevare l'eccezione IOError.
I seguenti metodi vengono sovrascritti dall'implementazione della classe base:
message) |
message) |
singular, plural, n) |
Se l'id del messaggio non viene trovato nel catalogo ed è stato specificato un fallback, la richiesta viene trasmessa al metodo fallback di ngettext(). Altrimenti, quando n è 1 viene restituito singular, in tutti gli altri casi viene restituito plural.
Nuovo nella versione 2.3.
singular, plural, n) |
Se l'id del messaggio non viene trovato nel catalogo ed è stato specificato un fallback, la richiesta viene trasmessa al metodo fallback di ungettext(). Altrimenti, quando n è 1 viene restituito singular, in tutti gli altri casi viene restituito plural.
Ecco un esempio:
n = len(os.listdir('.')) cat = GNUTranslations(somefile) message = cat.ungettext( 'There is %(num)d file in this directory', 'There are %(num)d files in this directory', n) % {'n': n}
Nuovo nella versione 2.3.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.