Языковая локализация Академии Хан

В настоящее время я работаю над локализацией языка Академии Хан, я загрузил источник 8051 из Google Code. После просмотра информации и просмотра кода онлайн проект выполняется с использованием jinja2 в качестве языка шаблонов. Я могу использовать babel для выполнения моей работы.

Со следующей работой я могу, наконец, включить тег {%trans%} и {%endtrans%}, который может быть обработан механизмом шаблона со следующей модификацией:

в webapp2_extra/jinja2.py:

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

в config_jinja2.py

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

Однако мой переведенный шаблон *.mo и *.po (из pybabel) неправильно переводит тэг в значение value в заданный язык. Я думаю, что интеграция с Babel должна происходить из webapp2_extra.i18n.py, но я не знаю, как ее включить.

Поскольку в нескольких сообщениях в Google упоминалось, что следующий код может работать:

from webapp2_extras import i18n 
    env.install_gettext_translations(i18n) 

Однако он терпит неудачу, потому что он не распознает тег {%trans%}. Так у кого-нибудь есть опыт работы над той же проблемой или есть какие-либо предложения для проблемы jinja2 i18n?

Оцените любые предложения.

Ответ 1

Вот модуль, который работает для меня (переводит {% trans %} разметку внутри шаблона 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()