[Python] Aplicacion multilenguaje

Iniciado por ovichan, 15 Agosto 2013, 04:34 AM

0 Miembros y 1 Visitante están viendo este tema.

ovichan

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 (python) [Seleccionar]
#-------------------------------------------------------------------------------
# Name:        EACUI
# Purpose:     Audio encoding with EAC3TO
#
# Author:      Overdrive80
#
# Created:     13/08/2013
# Copyright:   (c) Overdrive80 2013
# Licence:     <your licence>
#-------------------------------------------------------------------------------
import os, sys
import win32api
import platform
import gettext
import locale
import sys

#Configure gettext Define the '_()' function
def set_gettext():
   APP_NAME = "EACUI"
   LOCALE_DIR = ('C:\Locale\es\LC_MESSAGES')

   t = gettext.translation(APP_NAME, LOCALE_DIR,fallback=True)
   _ = t.gettext

def main():
   #Inicializacion de Gettext
   set_gettext()

   '''Create a list of asociated programs'''
   lista_programas=['eac3to']
   '''Check arquitecture'''
   def is_x64():
       arquitectura=platform.architecture()
       if arquitectura[0] == '64bit':
           #print "Tu sistema es de 64 bits."
           return True
       else:
           #print "Tu sistema es de 32 bits."
           return True
   '''Seek path by default of installating'''
   def find(ruta, program):
       for root,dirs,files in os.walk(ruta):
           for name in files:
               if program+'.exe'==name:
                   path=os.path.join(root, name)
                   return path

   PATH_DEFAULT='C:\\'
   for programa in lista_programas:
       path=find(PATH_DEFAULT, programa)
       if path != None:
           ruta_bus=os.path.split(path)
           print (_('File found %s, in the path %s.')) % programa, ruta_bus[0]
           print (_('Would you like to set this path as access by default to program %s?')) % programa
       else:
           print (_("Not file found %s.")) % programa
           print (_('Would you like set handle program´s path?'))

main()



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:



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

Código (dos) [Seleccionar]
@echo off
Title .Py to .Pot files
set path=path;C:\Python33\
set /p label="Inserte la etiqueta del idioma (p.e.: es): "
python "C:\Python33\tools\i18n\pygettext.py" -d %label% -o %label%.pot %1
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:



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.