12

I am currently working on language localization of Khan Academy, I have downloaded the source 8051 from Google Code . After survey information and viewing code online, the project is made using jinja2 as the templating language. I can use babel to accomplish my work.

With the following work, I can finally enable {%trans%} and {%endtrans%} tag parse-able by the template engine with following modification:

in webapp2_extra/jinja2.py:

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

in config_jinja2.py

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

However, my translated template of *.mo and *.po (from pybabel) does not correctly translate tag within value in to destined language. I am thinking the babel integration should came from webapp2_extra.i18n.py, but I do not know how to enable it.

As few posts in Google mentioned that following code might work:

from webapp2_extras import i18n 
    env.install_gettext_translations(i18n) 

However, it fails because it does not recognize {%trans%} tag. So does anyone have the experience working on the same problem or has any suggestion to jinja2 i18n problem?

Appreciate any suggestions.

4

1 回答 1

1

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

主文件

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()
于 2012-12-21T07:57:19.583 回答