2012-08-02 12 views
11

Actualmente estoy trabajando en la localización de idioma de Khan Academy, he descargado la fuente 8051 de Google Code. Después de la información de la encuesta y el código de visualización en línea, el proyecto se hace usando jinja2 como lenguaje de plantillas. Puedo usar babel para realizar mi trabajo.Localización de idioma de Khan Academy

Con el siguiente trabajo, por fin puedo permitir {%trans%} y {%endtrans%} etiqueta de análisis sintáctico-poder por el motor de plantillas con las siguientes modificaciones:

en webapp2_extra/jinja2.py:

from django.utils import translation 
    env.install_gettext_translations(translation) 

en config_jinja2.py

-- put following line 
"extensions": ['jinja2.ext.i18n'] 

Sin embargo, mi plantilla traducida de *.mo y *.po (fr om pybabel) no traduce correctamente la etiqueta dentro del valor en el lenguaje destinado. Estoy pensando que la integración de babel debería venir de webapp2_extra.i18n.py, pero no sé cómo habilitarlo.

Como pocos puestos en Google mencionaron que podría funcionar siguiente código:

from webapp2_extras import i18n 
    env.install_gettext_translations(i18n) 

Sin embargo, se produce un error porque no reconoce la etiqueta {%trans%}. ¿Alguien tiene la experiencia trabajando en el mismo problema o tiene alguna sugerencia para el problema jinja2 i18n?

Valora cualquier sugerencia.

+0

¿Estás recompilar el .mo y po. archivos con las utilidades gettext? Suena de todos modos que tienen un sistema similar a Django para las traducciones, así que es mejor que compruebes la documentación de Django – Lorenzo

+0

¿Trabajas en Khan Academy? –

+0

No, soy solo un voluntario para traducir Khan Academy al chino. Tratando de encontrar una forma más inteligente en lugar de modificar HTML. –

Respuesta

1

Aquí hay un módulo que funciona para mí (traduce el marcado {% trans %} dentro de una plantilla jinja2).

main.py

import webapp2 
from webapp2_extras import i18n 
from jinja2 import FileSystemLoader, Environment 

env = Environment(loader=FileSystemLoader('/path/to/my/templates'), 
     extensions=['jinja2.ext.i18n']) 
env.install_gettext_translations(i18n) 

class HelloWorld(webapp2.RequestHandler): 

    def _find_locale(self): 
     #needs customization 
     lang = self.request.accept_language.best_match(('en-us', 'fr')) 
     if ('fr' in lang): 
      return 'fr_FR' 
     return 'en_US' 

    def get(self): 
     i18n.get_i18n().set_locale(self._find_locale()) 
     template = env.get_template('hello.html') 
     self.response.write(template.render()) 

config = {'webapp2_extras.i18n': {'translations_path': './i18n'}} 

app = webapp2.WSGIApplication([ 
    ('/', HelloWorld), 
], config=config, debug=True) 

def main(): 
    from paste import httpserver 
    httpserver.serve(app, host='127.0.0.1', port='8080') 

if __name__ == '__main__': 
    main() 
Cuestiones relacionadas