LoginSignup
24
20

More than 5 years have passed since last update.

flask-babelを使って多言語化サイトを作ってみる

Last updated at Posted at 2015-07-20

flask-babelを使って他言語化サイトと作ったので、作り方をドキュメント化

こちらのサイトを、参考にしたが、5年ほど前に書かれていて、現状と合わなくなっているものもあるので、少し修正した。

サンプルのコードはこちらのgithubにあげている。
https://github.com/shibacow/flask_babel_sample
(実際これだけでこのブログの意図は達成できているかも)。
上のレポジトリをクローンして、FlaskとFlask-Babelを入れれば動くと思う。

インストール

flask-babelはflaskでi18nを実現するためのライブラリだ。flask-babelのサイトはこちら

インストールはpipを使って次のようにする

pip install Flask-Babel 

もとにしたサイトのままで行ける。

言語の自動判別の準備

@babel.localeselector
def get_locale():
    return request.accept_languages.best_match(['ko','zh','ja', 'ja_JP', 'en'])

で自動判別が出来る。

翻訳元のhtmlの準備

の様に、

<p>
  message: {{ gettext('Hello world!') }}
</p>

のようにgettextで囲んだ文章を用意する。message: {{ _('Hello world!') }}の様に_()を使用してもよい。こちらの'Hello world!'が差し替わる文言の対象になる。

翻訳

あとは、こちらの記事にあるように、babel.cfgを用意して、

$ pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot .
$ pybabel init -i messages.pot -d translations -l ja

で translations以下にjaフォルダが出来る。

同じような感じで、

$ pybabel init -i messages.pot -d translations -l en
$ pybabel init -i messages.pot -d translations -l zh
$ pybabel init -i messages.pot -d translations -l ko

などを作る。ko,zhなどの言語ロケール名は、ISO-639-1というコードで決まっているようだ(https://ja.wikipedia.org/wiki/ISO_639-1%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7)

そうすると、

が出来る。messages.poを開いて、msgidの下にあるmsgstrに翻訳した文言を入れる。msgidは入っているが、msgstrは入っていないので自分で翻訳した文言を埋める。

全て言語を翻訳した後、

$ pybabel compile -d translations

でコンパイルする。/messages.poの中にfuzzyという文言が含まれていると(翻訳途中だと見なされて)コンパイルされないので、messages.poからfuzzyという言葉を削除しておく。

コンパイルが終わると、messages.moが出来る。

バイナリファイルのようだ。

翻訳結果の確認

この状態で python srv.pyを実行すれば、元来Hello Worldが入っている部分が、ブラウザーの言語選択によって、

中国語

とか

日本語

の様に翻訳した言語に差し替わる。

24
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
20