可汗学院的语言本土化

Dav*_*hiu 11 python django internationalization jinja2 babel

我目前正致力于可汗学院的语言本地化,我已经从Google Code下载了源代码8051 .在调查信息和在线查看代码之后,该项目使用jinja2作为模板语言.我可以用babel来完成我的工作.

通过以下工作,我最终可以通过以下修改启用{%trans%}{%endtrans%}标记模板引擎的可解析性:

在webapp2_extra/jinja2.py中:

from django.utils import translation
    env.install_gettext_translations(translation)
Run Code Online (Sandbox Code Playgroud)

在config_jinja2.py中

-- put following line
"extensions": ['jinja2.ext.i18n']
Run Code Online (Sandbox Code Playgroud)

但是,我*.mo*.po (来自pybabel)的翻译模板没有正确地将值内的标签转换为目标语言.我认为babel集成应该来自webapp2_extra.i18n.py,但我不知道如何启用它.

Google中的帖子很少提及以下代码可能有效:

from webapp2_extras import i18n 
    env.install_gettext_translations(i18n) 
Run Code Online (Sandbox Code Playgroud)

但是,它失败了,因为它无法识别{%trans%}标签.那么有没有人有相同问题的经验或对jinja2 i18n问题有任何建议?

感谢任何建议.

小智 1

这是一个适合我的模块(翻译{% trans %}jinja2 模板内的标记)。

主要.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()
Run Code Online (Sandbox Code Playgroud)