[Python] Localizzazione in python
Gollum1
gollum1.smeagol1 a gmail.com
Mar 14 Maggio 2013 17:27:42 CEST
Eccolo qua... direte...
ebbene sì, mi sto interessando alla localizzazione, in giro per la
rete ho trovato questo pezzo di codice che nel suo programma
originario funziona:
def InitI18n():
"""Initialize th I18N stuff: load modules, set environments etc..."""
import locale
if not 'LANG' in os.environ:
import sys
if sys.platform == "darwin":
# On Macintosh you have to get preferred language from OS
import subprocess
pp = subprocess.Popen( [ 'defaults', 'read', '-g', 'AppleLocale' ],
stdout = subprocess.PIPE )
os.environ[ 'LANG' ] = pp.communicate()[ 0 ].strip()
else:
# On other OS get defaults
loc, cp = locale.getdefaultlocale()
os.environ[ 'LANG' ] = loc
if cp:
os.environ[ 'LANG' ] += "." + cp
# Set the default locale for LC_CTYPE
locale.setlocale( locale.LC_CTYPE, '' )
# Initialize gettext engine to look for localised messages in 'locale'
# subdirectory of current working directory
import gettext
gettext.install( APP_NAME, 'locale' )
l'ho messo in un modulo che faccio richiamare dal mio programma,
questo ha comportato che come prima modifica ho dovuto cambiare
l'intestazione della def per potergli passare il parametro APP_NAME,
che naturalmente non è nello scope di questo modulo.
ora il modulo viene correttamente caricato, e se io faccio:
print _("prova")
mi stampa correttamente prova, mentre prima mi dava errore su _(
da quello che ho capito leggendo questa pagina:
http://docs.python.org/release/2.6.6/library/gettext.html?highlight=gettext.install#gettext.install
il name space a questo punto è globale (ed in effetti viene eseguito
il "_(" dal chiamante, che altrimenti darebbe errore).
Quello che non riesco a capire da questo pezzo di codice... dove
cavolo devo mettere il file .mo perché sia correttamente caricato e mi
vada a sostituire le stringhe?
la struttura direcotry/files del programma da cui l'ho copiato era del genere:
programma/
programma.py
locale/it/LC_MESSAGES/programma.mo
nel mo caso:
programma/
programma.py
libs/libs_che_fornisce_InitI18n().py
ma non riesco a capire a che livello devo mettere
locale/it/LC_MESSAGES/programma.mo
ho provato a mettere in programma/ e in programma/libs/ ma in entrambi
i casi ottengo
print _("prova")
che stampa "prova" invece di stampare "test" come è indicato nel programma.mo
spero di non essere stato troppo criptico.
Byez
--
Gollum1
Tesssssoro, dov'é il mio tessssoro...
Maggiori informazioni sulla lista
Python