2012-08-02 9 views
11

Obecnie pracuję nad lokalizacją językową Khan Academy, pobrałem źródło 8051 z Google Code. Po uzyskaniu informacji o ankiecie i wyświetleniu kodu online, projekt jest realizowany za pomocą jinja2 jako języka szablonowego. Mogę użyć Babel, aby wykonać moją pracę.Lokalizacja językowa Khan Academy

Z poniższej pracy, mogę wreszcie umożliwić {%trans%} i {%endtrans%} tag parse-stanie przez silnik szablon z następującą modyfikacją:

w webapp2_extra/jinja2.py:

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

w config_jinja2.py

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

jednak moja tłumaczone szablon *.mo i *.po (fr om pybabel) nieprawidłowo tłumaczy znacznik w wartości do docelowego języka. Myślę, że integracja babel powinna pochodzić z webapp2_extra.i18n.py, ale nie wiem, jak ją włączyć.

Jak kilka postów w Google zaznaczyć, że poniższy kod może działać:

from webapp2_extras import i18n 
    env.install_gettext_translations(i18n) 

Jednak to nie dlatego, że nie rozpoznaje {%trans%} tag. Czy ktoś ma doświadczenie w pracy nad tym samym problemem lub ma jakieś sugestie dotyczące problemu jinja2 i18n?

Doceń wszelkie sugestie.

+0

Czy jesteś rekompilacji .mo i PO. pliki za pomocą narzędzi gettext? Wygląda jednak na to, że mają system podobny do Django do tłumaczenia, więc równie dobrze możesz sprawdzić dokumentację Django. – Lorenzo

+0

Czy pracujesz w Khan Academy? –

+0

Nie, jestem wolontariuszem, który tłumaczy Khan Academy na język chiński. Stara się wymyślić bardziej inteligentny sposób, zamiast modyfikować HTML. –

Odpowiedz

1

Oto moduł, który działa dla mnie (tłumaczy {% trans %} znaczników wewnątrz szablonu 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()