ページ

2010年9月17日

Flask-Babelのメモ

python界のWebフレームワークと言えばDjangoばかりがもてはやされていますが、僕はFlaskが好きで使っています。いろんなものがgeventベースで動いているので、Djangoは重すぎるのです。さて、国際化についてはTracを作っているところが作っているBabelがありますが、それをFlaskから使いやすくしたものがFlask-Babelです。Flask-Babel関係のメモです。

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.') }}

全部、おしまい。


1 件のコメント:

dat ha さんのコメント...

dongtam
mu private
tim phong tro
http://nhatroso.com/
nhac san cuc manh
tổng đài tư vấn luật
http://dichvu.tuvanphapluattructuyen.com/
văn phòng luật
tổng đài tư vấn luật
dịch vụ thành lập công ty
http://we-cooking.com/
chém gió
trung tâm ngoại ngữrằng mình đã an toàn, sau đó nàng đưa ánh mắt nhìn đám người phía trước, phát giác ra rằng họ không có thiện ý thì khẽ chau mày mà nói:

- Hỏa Sư thú, chúng ta đi thôi.

Hỏa Sư thú cũng sớm cảm nhận đám người xung quanh không có hảo ý, nghe thấy lời nói của chủ nhân xong nó cũng nhanh chóng chuẩn bị mà rời khỏi.

- Cô nương rất xinh đẹp.

Đúng lúc nàng và Hỏa Sư thú muốn rời khỏi thì một thân ảnh đã đột ngột vọt tới trước mặt, chính là Lục ma của Hắc Ám Thần Điện.

- Ta không biết ngươi, ngươi tìm ta có chuyện gì?

Liễu Thanh Thanh khẽ chau mày, hắn cũng nhìn ra lão phụ áo xanh kia thực lực hơn mình rất nhiều, toàn thân tràn ngập khí tứhông quen biết ngươi, ngươi có chuyện gì sao?