[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