6.27.3 Internazionalizzazione dei vostri moduli e programmi

L'internalizzazione (I18N) si riferisce all'operazione con la quale si realizza un programma che supporti molteplici linguaggi. La localizzazione (L10N) fa riferimento all'adattamento del vostro programma, una volta che è stato internazionalizzato, per il linguaggio e per le abitudini culturali locali. Per fornire i messaggi multilingue per i vostri programmi in Python, dovrete seguire i seguenti passi:

  1. preparate il vostro programma o modulo con i contrassegni sulle stringhe da tradurre
  2. eseguite un insieme di programmi sui vostri file contrassegnati per generare i cataloghi grezzi dei messaggi
  3. create specifiche traduzioni nei linguaggi dei messaggi dei cataloghi
  4. Usate il modulo gettext in modo che le stringhe dei messaggi vengano tradotte correttamente

Per preparare il vostro codice per I18N, avete bisogno di cercare tutte le stringhe nei vostri files. Ogni stringa che necessita di essere tradotta dovrebbe essere contrassegnata in una cornice _('...') -- cioè una chiamata alla funzione _(). Per esempio:

filename = 'mylog.txt'
message = _('writing a log message')
fp = open(filename, 'w')
fp.write(message)
fp.close()

In questo esempio, la stringa 'writing a log message' viene marcata come candidata alla traduzione, mentre le stringhe 'mylog.txt' e 'w' non lo sono.

La distribuzione Python viene fornita di due strumenti che vi aiutano a generare i cataloghi dei messaggi una volta che avrete preparato il vostro codice sorgente. Queste potrebbero essere disponibili o meno in una distribuzione binaria, ma possono essere trovate nella distribuzione sorgente, nella directory Tools/i18n.

Il programma pygettext6.4scansiona tutto il vostro codice sorgente Python, cercando le stringhe che voi avrete precedentemente contrassegnato come traducibili. È simile al programma GNU gettext tranne per il fatto che comprende tutte le complessità del codice sorgente Python, ma non sa niente del codice sorgente C o C++. Non avrete bisogno di GNU gettext finché non vi troverete a dover tradurre codice C (come i moduli estensione in C).

pygettext genera file testuali di catalogo dei messaggi .pot in stile Uniforum, essenzialmente file umanamente comprensibili, che contengono ogni stringa contrassegnata nel codice sorgente, con un marcatore per le stringhe di traduzione. pygettext è uno script a riga di comando che supporta un'interfaccia a riga di comando simile a xgettext; per i dettagli sul suo uso, eseguite:

pygettext.py --help

Copie di questi files .pot vengono gestite dai diversi traduttori, che scrivono versioni specifiche per la loro lingua. Loro rimandano indietro la versione specifica come un file .po. Usando il programma msgfmt.py6.5 (nella directory Tools/i18n), prendete i file .po dal vostro traduttore e generate dei file di catalogo binari in formato .mo, leggibili dalla macchina. I file .mo sono quelli che il modulo gettext usa attualmente per il processo di traduzione in run-time.

A seconda se state internazionalizzando una vostra intera applicazione o un singolo modulo, potete usare il modulo gettext nel vostro codice.



Footnotes

...pygettext6.4
François Pinard ha scritto un programma chiamato xpot che fa un lavoro simile. È disponibile come parte del suo pacchetto po-utils presso http://www.iro.umontreal.ca/contrib/po-utils/HTML/.
...msgfmt.py6.5
msgfmt.py è un binario compatibile con GNU msgfmt, eccetto per il fatto che fornisce una più semplice implementazione, interamente Python. Con questo e con pygettext.py, generalmente non dovreste avere bisogno di installare il pacchetto GNU gettext per internazionalizzare le vostre applicazioni Python.



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.