2009-12-22 12 views
12

Me gustaría proporcionar mi sitio web Python GAE en el idioma del usuario, utilizando solo las herramientas disponibles directamente en App Engine. Para eso, me gustaría usar los archivos gettext de GNU (archivos .po y .mo).Cómo crear una aplicación de Google App Engine internacionalizada

alguien ha combinado con éxito Python Google App Engine y gettext archivos? Si es así, ¿podría proporcionar los pasos que usó?

Había comenzado a discussion in GAE's Google group, pero no he podido extraer de él cómo me gustaría hacerlo: no quiero agregar dependencias externas, como Babel (sugerido en la discusión). Quiero utilizar el simple motor de aplicación de Google, por lo que no hay actualización manual de Django o este tipo de cosas.

Al principio, comenzaré a usar el idioma enviado por el navegador, por lo que no es necesario forzarlo manualmente mediante cookies, etc. Sin embargo, podría agregar una función de cambio de idioma más adelante, una vez que funcione la internacionalización básica.

Como nota de fondo para darle más detalles sobre lo que estoy tratando de hacer, me gustaría internacionalizar Issue Tracker Tracker, una aplicación de código abierto que he alojado en Launchpad. Planeo usar la plataforma de traducción de Launchpad (explicando por qué me gustaría usar los archivos .mo). Puede echar un vistazo al código fuente en su rama Bazar (lo sentimos, no hay enlace debido al límite de prevención de spam de stackoverflow para usuarios nuevos ...)

¡Gracias por ayudarme a avanzar en este proyecto!

Respuesta

4

Puede utilizar la herramienta de internacionalización Django, como se explica here.

También dicen que no hay una manera fácil de hacer esto.

espero que le ayuda :)

+2

Gracias por el enlace, ya había intentado usar esto en mi intento anterior, pero no pude hacerlo funcionar. Lo volví a intentar anoche, y aunque me las arreglé para deshacerme de cualquier excepción, todavía no hay nada traducido ... Continuaré intentando que funcione, porque aparentemente debe funcionar, ya que hay una aplicación de ejemplo !Te mantendré informado si tengo éxito. – Emilien

+1

¡Finalmente he podido internacionalizar mi aplicación! Traté de seguir las explicaciones en el enlace que enviaste, pero algo no funcionaba, así que leí el ejemplo del código que está vinculado desde el artículo, y copiar/pegar desde el código real, ¡funcionó! Gracias de nuevo por el enlace! En caso de que alguien esté interesado, puedes echar un vistazo a los cambios reales que hice en mi aplicación: http://bazaar.launchpad.net/~itt-devs/issuetrackertracker/main/revision/130 – Emilien

+0

Esto no es realmente una solución a menos que estás usando Django. – rbanffy

6

Como mis necesidades eran simples, he usado un simple truco en lugar de gettext (no disponible). Creé un archivo con traducciones de cadenas, translate.py. Aproximadamente la siguiente manera:

en={} 
ru={} 

en['default_site_title']=u"Site title in English" 
ru['default_site_title']=u"Название сайта по-русски" 

Luego, en el código principal que define una función que devuelve un diccionario con traducciones a la lengua más adecuado de la lista (el primero en tener una traducción se utiliza o Inglés):

import translate 

def get_messages(languages=[]): 
    msgs=translate.en 
    for lang in languages: 
     if hasattr(translate,lang): 
      msgs=getattr(translate,lang) 
      break 
    return msgs 

Uso:

msgs = get_messages(["it","ru","en"]) 
hi = msgs['hello_message'] % 'yourname' 

también define una función auxiliar que extrae una lista de los idiomas de Accept-Language cabecera.

No es la solución más flexible, pero no tiene dependencias externas y funciona para mí (en un proyecto de juguete). Creo que translate.py puede generarse automáticamente a partir de archivos gettext.

En caso de que desee ver más, mi fuente real es here.

+0

Gracias por su explicación detallada. Había pensado en usar este tipo de enfoque, pero realmente me gustaría poder aprovechar el poder de todos los traductores que están activos en Launchpad, así que necesitaría usar gettext estándar. Utilizaría este tipo de solución solo como último recurso, ¡pero gracias! – Emilien

+0

Creo que sería bueno escribir un 'compilador' de archivos gettext a dicho código python. – sastanin

+2

Incorrecto: App Engine puede acceder a archivos "normales", siempre que se hayan cargado con la aplicación. ¿De qué otra forma cargaría plantillas? –