6.27.2.2 La classe GNUTranslations

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:

gettext( message)
Cerca l'id del messaggio message nel catalogo e restituisce la corrispondente stringa messaggio, come stringa a 8 bit codificata con il carattere di codifica del messaggio, se noto. Se non c'è nessuna voce nel catalogo per l'id di message ed è stato impostato un fallback, la ricerca viene trasmessa al metodo fallback di gettext(). Altrimenti viene restituito l'id di message.

ugettext( message)
Cerca l'id di message nel catalogo e restituisce la corrispondente stringa messaggio, come stringa Unicode. Se non c'è nessuna voce nel catalogo per l'id di message, ed è stato impostato un fallback, la ricerca viene trasmessa al metodo fallback di ugettext(). Altrimenti viene restituito l'id di message.

ngettext( singular, plural, n)
Effettua una ricerca in forma plurale dell'id di un messaggio. Il singular viene usato come id del messaggio per determinare quale forma plurale usare. La stringa messaggio restituita è una stringa codificata a 8-bit con la codifica del catalogo, se conosciuta.

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.

ungettext( singular, plural, n)
Effettua una ricerca nella forma plurale di un id di messaggio. singular viene usato come id del messaggio a scopo di ricerca nel catalogo, mentre n viene usato per determinare quale forma plurale usare. Il messaggio restituito è una stringa Unicode.

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.