Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: ovichan en 15 Agosto 2013, 04:34 am



Título: [Python] Aplicacion multilenguaje
Publicado por: ovichan en 15 Agosto 2013, 04:34 am
Hola a todos, pues nada estoy intentando hacer una aplicacion GUI para un programa de codificacion de audio. El caso es que me ha llamado siempre la atención, desde que llevo varios años traduciendo el programa mkvmerge, el poder usar GNU. Estoy poco a poco intentando hacer pruebas para poder traducir la interfaz y por ahora dar las opciones de dos lenguajes, English y Español.

El codigo que llevo es este:

Código
  1. #-------------------------------------------------------------------------------
  2. # Name:        EACUI
  3. # Purpose:     Audio encoding with EAC3TO
  4. #
  5. # Author:      Overdrive80
  6. #
  7. # Created:     13/08/2013
  8. # Copyright:   (c) Overdrive80 2013
  9. # Licence:     <your licence>
  10. #-------------------------------------------------------------------------------
  11. import os, sys
  12. import win32api
  13. import platform
  14. import gettext
  15. import locale
  16. import sys
  17.  
  18. #Configure gettext Define the '_()' function
  19. def set_gettext():
  20.    APP_NAME = "EACUI"
  21.    LOCALE_DIR = ('C:\Locale\es\LC_MESSAGES')
  22.  
  23.    t = gettext.translation(APP_NAME, LOCALE_DIR,fallback=True)
  24.    _ = t.gettext
  25.  
  26. def main():
  27.    #Inicializacion de Gettext
  28.    set_gettext()
  29.  
  30.    '''Create a list of asociated programs'''
  31.    lista_programas=['eac3to']
  32.    '''Check arquitecture'''
  33.    def is_x64():
  34.        arquitectura=platform.architecture()
  35.        if arquitectura[0] == '64bit':
  36.            #print "Tu sistema es de 64 bits."
  37.            return True
  38.        else:
  39.            #print "Tu sistema es de 32 bits."
  40.            return True
  41.    '''Seek path by default of installating'''
  42.    def find(ruta, program):
  43.        for root,dirs,files in os.walk(ruta):
  44.            for name in files:
  45.                if program+'.exe'==name:
  46.                    path=os.path.join(root, name)
  47.                    return path
  48.  
  49.    PATH_DEFAULT='C:\\'
  50.    for programa in lista_programas:
  51.        path=find(PATH_DEFAULT, programa)
  52.        if path != None:
  53.            ruta_bus=os.path.split(path)
  54.            print (_('File found %s, in the path %s.')) % programa, ruta_bus[0]
  55.            print (_('Would you like to set this path as access by default to program %s?')) % programa
  56.        else:
  57.            print (_("Not file found %s.")) % programa
  58.            print (_('Would you like set handle program´s path?'))
  59.  
  60. main()
  61.  
  62.  

El archivo "es.mo" es este: https://dl.dropboxusercontent.com/u/19135067/es.mo

El problema radica cuando intento ejecutar el script de manera que coja el "es.mo", me da este error:

(http://s6.postimg.org/93ed4tchp/Sin_t_tulo.jpg) (http://postimg.org/image/93ed4tchp/)

Es algo curioso pq he podido generar correctacmente el archivo "es.pot" con:

Código
  1. @echo off
  2. Title .Py to .Pot files
  3. set path=path;C:\Python33\
  4. set /p label="Inserte la etiqueta del idioma (p.e.: es): "
  5. python "C:\Python33\tools\i18n\pygettext.py" -d %label% -o %label%.pot %1
  6. pause&exit

Estoy usando la version 3.2 de python pq la 2, al parecer no tiene implementando gettext.

Espero que me podais echar un cable. Saludos.

EDITO: He conseguido fijar ese problema declarando debajo de la importacion de modulos: "_ =None". Sin embargo, ahora me encuentro este problema:

(http://s6.postimg.org/6ncjqyuf1/Sin_t_tulo.jpg) (http://postimg.org/image/6ncjqyuf1/)

Hubiera escrito el codigo de otra manera pero me daba fallo al generar el archivo pot, porque gettext no admite expresiones debe ser un formato string.

EDITO2: Solucionado, al menos se ejecuta. Al parecer, todo el fallo ha sido por meter en una funcion el codigo de gettext, cuando debe ir fuera del bloque main. Lo que está tachado y que hice no sirve.