2012-08-02 3 views
11

現在、Khan Academyの言語ローカリゼーションに取り組んでいます。ソース8051をGoogle Codeからダウンロードしました。調査情報とオンラインでコードを表示した後、プロジェクトはjinja2をテンプレート言語として使用して作成されます。私は仕事を達成するためにバベルを使うことができます。以下の作業をKhan Academyの言語ローカリゼーション

、私は最終的に有効にすることができ{%trans%}と、次の変更を加えたテンプレートエンジンによって{%endtrans%}タグ解析可能:webapp2_extraで

/jinja2.py:config_jinja2.pyで

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

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

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

として、いくつかの記事は、次のコードが動作するかもしれないと述べた:それは{%trans%}タグを認識しないので、

from webapp2_extras import i18n 
    env.install_gettext_translations(i18n) 

しかし、それは失敗します。 誰かが同じ問題に取り組んでいる経験があるか、jinja2 i18nの問題に対して何か提案がありますか?

ご意見をお寄せください。

+0

main.pyはあなたな.moとPOを再コンパイルされています。 gettextユーティリティのファイル?とにかくDjangoに似たシステムがあるので、Djangoのドキュメントを確認してください。 – Lorenzo

+0

あなたはKhan Academyで働いていますか? –

+0

いいえ、私はカン・アカデミーを中国語に翻訳するだけのボランティアです。 HTMLを修正するよりももっとスマートな方法を見つけようとしています。 –

答えて

1

私のために働く(jinja2テンプレートの中で{% trans %}マークアップを翻訳する)モジュールです。

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() 
関連する問題