12

現在、Khan Academy の言語ローカライズに取り組んでおり、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']

ただし、 (pybabel からの) *.moandの翻訳されたテンプレートは、*.po 値内のタグを目的の言語に正しく翻訳しません。私は、babel 統合が webapp2_extra.i18n.py から来るべきだと考えていますが、それを有効にする方法がわかりません。

Google のほとんどの投稿では、次のコードが機能する可能性があると述べています。

from webapp2_extras import i18n 
    env.install_gettext_translations(i18n) 

{%trans%}ただし、タグを認識しないため失敗します。同じ問題に取り組んだ経験のある人はいますか、それとも jinja2 i18n の問題に対する提案はありますか?

提案をお待ちしております。

4

1 に答える 1

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