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 ディレクトリが作られるようです。
あとのコマンドはこれから先使うようですが、まだまだわからないのでそのうち。