zope.i18n の設定をするまで

なんか色々ハマったのでメモ。

やりたいこと

今作っている Web アプリで zope.pagetemplate を使おうとしているわけです。
で、時代はインターナショナルという事で i18n とか考えたい、と思うわけです。

zope.pagetemplate なので zope.i18n を使うわけなのですが、ここらへんが結構めんどくさいしドキュメントないしで泣けるのでメモっておくわけです。

基本的に http://collective-docs.takanory.net/i18n/localization.html を見ながらセットアップするといいよ。
あと How to internationalize your application も参考になるはず。

configure.zcml を書く

configure.zcml を書きます (ここではパッケージ直下)

pkg
 +- __init__.py
 +- configure.zcml

みたいな感じ。

で中身は

<!--*- mode:xml -*-->
<configure xmlns="http://namespaces.zope.org/zope"
           xmlns:i18n="http://namespaces.zope.org/i18n">
  <include package="zope.i18n" file="configure.zcml" />
  <include package="zope.i18n" file="meta.zcml" />
  <i18n:registerTranslations directory="locales" />
</configure>

こんなの。

i18n:registerTranslations の directory で指定した場所に pot とかが作られます。
gettext のキーワードとコンテンツとかですね。

で、パスはこの zcml からの相対で渡せるので、そのまま locales とすると zcml があるディレクトリに locales が掘られます。

buildout

buildout.cfg にこんなのを追加します。

[buildout]
parts = ... i18n

[i18n]
recipe = z3c.recipe.i18n:i18n
zcml = ${buildout:directory}/${buildout:pkgname}/configure.zcml
domain = trolle
output = ${buildout:directory}/${buildout:pkgname}/locales

そしておもむろに

$ bin/buildout

します。

すると bin の下にいくつかファイルができます。

$ ls bin/i18n*
bin/i18ncompile  bin/i18nextract  bin/i18nmergeall  bin/i18nstats

ここで bin/i18nextract を実行すると locales ディレクトリが作られるようです。

あとのコマンドはこれから先使うようですが、まだまだわからないのでそのうち。

Travis-CI を使ってみた

Travis-CI というサービスがあります。
継続的インテグレーションってやつです。
よくわかりません。
多分 Jenkins みたいなやつです。

とりあえず github に push したら指定したスクリプトを走らせてくれて、結果を通知してくれるサービスだと思っておきます。
で、これを使います。

環境

今回開発で使っている環境は以下の通り

  • Python2.7
    • Tornado 2.4
    • SQLAlchemy
    • zope.pageteplate
    • Pygments
  • MySQL

とかとか。
まあ普通ですね。

で、こいつのテストを Travis-CI で走らせます。

Travis-CI にログイン

Travis-CI のサイトに行って githubOpenID 認証をしたら終了なので特に書くことはありません。

で、 CI したいリポジトリの設定をポチっと切り替えるだけです。

.travis.yml を書く

リポジトリ直下に .travis.yml というファイルを作ります。
今回は以下の通り。

language: python
python:
  - "2.7"

before_script:
        - wget http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py
        - python bootstrap.py -d
        - bin/buildout
script: ./test.sh

セットアップは全部 buildout 任せなのでまあこんなもんでしょうか。

Python の細かい設定の話は ドキュメント 見てください。
PyPy も使えるらしいっすよ素晴らしい!

MySQL は root@localhost でパスワード無しアクセスできるらしいです。
ドキュメント に書いてありました。
皆さん読みましょう。

この python: のところを書き換えるとバージョンも色々試せるみたいですよ。
複数バージョンでのテストも楽チン。

使ってみて

とりあえず楽で便利な Travis-CI なのですが、ちょっと気になるところも。

ビルドが再実行できない

PyPI が落ちていて buildout でコケてるとかそんなときでも再実行するという選択は取れない模様。
それが若干残念。

成果物とか作れない

Jenkins だとビルドした結果の成果物として色々とっておけたりするけれど、 Travis-CI だとそれもない。
なので Coverage を HTML 出力してもどうしようもない。

まとめ

若干残念とはいえ便利なので使いましょう。

あと、 BuildHive も気になってる。