1. インストール
$ pip install Flask-Bableです。インストールの仕方って必要?
2. コマンドを使ってメッセージの抽出とか翻訳とか
次の設定ファイルを作ります。pythonのファイルとjinjaのhtmlテンプレートから翻訳するためのメッセージを抜き出すための設定です。
[python: **.py] [jinja2: **/templates/**.html] extensions=jinja2.ext.autoescape,jinja2.ext.with_これをbabel.cfgとして保存します。次にこの設定ファイルをつかって、翻訳すべきメッセージをmessages.potファイルに抜き出します。
$ pybabel extract -F babel.cfg -o messages.pot .これはテンプレートなので、ここから各言語ごとにpoファイルをつくります。gettextの国のお話なのでその辺は割愛。最初は初期化します。
$ pybabel init -i messages.pot -d translations -l jaこれは、初期化するものなので、テンプレートを更新したら次のコマンドでpoをアップデートします。
$ pybabel update -i messages.pot -d translationsで、translations/ja/LC_MESSAGESにmessages.poがいるので、この人を翻訳してから、上の方にコメントアウトしてあるLazyの行を削除して、コンパイルします。
$ pybabel compile -d translationsこれでmoができます。
3. pythonのコードの変更
話は前後しますが、pythonのコードでgettextを使えるようにしないといけません。まずはbabelをセットアップします。
from flaskext.babel import Babel, gettext
app = Flask(__name__)
app.config.from_pyfile('mybabel.cfg')
babel = Babel(app)
セットアップが終わったので、コードの中で翻訳が必要なところをgettextのメソッドを経由するようにします。
gettext(u"Hello, world!")
さて、言語設定はブラウザから言語を優先する場合は、次のコードを書いてあげます。
@babel.localeselector def get_locale(): return request.accept_languages.best_match(['ja', 'ja_JP', 'en'])
これを書かないと、英語しか表示してくれませんでした。セッションの情報が使えるので、セッションからユーザが指定した言語で表示することもできます。それから、jaだけでうまくいくと思っていたのに、IEはja_JPじゃないと日本語なってくれませんでしたIEの言語設定でjaだけのものを追加してあげれば大丈夫なんだけど。
pythonのコードはおしまい
4. jinjaのhtmlテンプレートの変更
jinjaのテンプレートは翻訳が必要な場所を次のように書きます。すでにおまじないをかけているので、何も考えなくてもgettextが使えます。
{{ gettext('Hello, world from jijna html template.') }}全部、おしまい。
0 コメント:
コメントを投稿