2012-08-02 265 views
11

我目前致力于可汗学院的语言本地化,我已从Google Code下载源8051。在线调查信息和查看代码后,该项目使用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(FR的模板om pybabel)没有正确地将标记内的标记翻译成指定语言。我认为babel集成应该来自webapp2_extra.i18n.py,但我不知道如何启用它。

在谷歌

尽可能少的帖子提到,下面的代码可能的工作:

from webapp2_extras import i18n 
    env.install_gettext_translations(i18n) 

但是,因为它不承认{%trans%}标签失败。 那么没有人有相同的问题工作经验或有任何建议jinja2国际化问题?

欣赏任何建议。

+0

你重新编译的.mo和PO。文件与gettext实用程序?无论如何,他们有一个类似于Django的翻译系统,所以你不妨检查Django的文档 – Lorenzo 2012-10-21 23:14:33

+0

你在可汗学院工作吗? – 2012-12-10 03:09:46

+0

不,我只是一名志愿者,可汗学院翻译成中文。试图找出更聪明的方式而不是修改HTML。 – 2012-12-11 05:59:01

回答

1

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

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()