読者です 読者をやめる 読者になる 読者になる

Babelを使ってみる

Python

Babelとは

Babelはedgewallによって開発されているI18N, L10Nのためのライブラリです。

Babel
http://babel.edgewall.org/


Pythonでは標準ライブラリとしてGNU gettextが組み込まれており、カタログをビルドするためのスクリプト(msgfmt.pyとか)も標準でありますが、これだけでは不便です。
例えば、Webアプリケーションを開発していると、テンプレート内の文字列を国際化したいというようなニーズがどうしても出てくるでしょう。Babelはこうした局面で使用することを目的として開発されているライブラリ・ツールのようです。


Djangoを使っていると、make-messages.py, compile-messages.pyで上記のような要求が満たされてしまうので、Babelのようなライブラリは全く必要がないと思います。
しかし、「俺フレームワーク」の開発者ならば、是非チェックしておくライブラリというべきでしょう。(edgewallのライブラリというだけで、一見の価値があります。)

インストール

インストールにあたってSubversionから最新のコードを取得したのですが、インストールは、setup.pyで一発・・・のはずが、うまく行かずちょっとハマりました。
setup.pyでインストールをする前に、CLDRのzipをダウンロードして(07-07-08の時点ではCLDR-1.4.1)ダウンロードして、あらかじめ、Babelのscripts/import_cldr.pyを実行しなくてはなりません。

CLDRのダウンロードページ
http://unicode.org/cldr/repository_access.html


例えば、ダウンロードしたcore.zipを/tmpに展開した場合は次のようにします。

$ cd scripts
$ python import_cldr.py /tmp
... (CLDRからlocaledataが生成される)
$ cd ..
$ sudo python setup.py install


Subversionからではなく、easy_installでインストールした場合は自動的にlocaledataもインストールされるのでしょうか?試していないから分かりません。

最初の一歩

インストールが完了したので、Babelのドキュメントを参考に、シェルから動作を確認してみます。

>>> from babel import Locale
>>> locale = Locale('en')
<Locale "en">
>>> locale = Locale('en')
>>> print locale.territories['JP']
Japan
>>> locale = Locale('ja')
>>> print locale.territories['JP']
日本


ここまでの所は期待通りのようです。本命はメッセージ・カタログの扱いや、コマンドラインのツールのような気がしますが、おいおい試していくことにします。


また、MakoにもBabel用のプラグインがあるので、こちらにも注目です。(僕はmako.ext.babelpluginからBabelの存在を知りました。)