gettextを使ったモジュールをsetuptoolsでインストールできるようにする。

gettextを使うとメッセージカタログが必要になる。インストーラーとしてdistutilのみを考えるなら

      data_files=[
          ('share/locale/ja_JP/LC_MESSAGES',['src/locale/ja_JP/PyDumpFS.mo'])
          ],

といった形で書いておけば指定した場所においてくれるが、setuptoolsを使うとき特にeggファイルにするときはこれでは所定の場所に展開されずカタログがないときの動作になる。

eggファイルにリソースを配置してそこから読み出すには、"package_data"に配置するリソースを記述して"pkg_resources.resource_filename"で実行時に必要なリソースのファイル名を取得して使えばいいようだ。

"package_data"には別のところに配置するためのオプションがないので、まずディレクトリ構成をいじり、"locale/*/LC_MESSAGES"のしたにメッセージカタログがくるようにする。さらにモジュール名がないとリソースにアクセスできないようなので、もしモジュールがないならモジュールとそれを呼び出すスクリプトに分ける。
その上で以下のようにしてgettextを利用する。

import gettext
import pkg_resources
try:
    gt_dir=pkg_resources.resource_filename(モジュール名,メッセージカタログのあるディレクトリ名)
    t=gettext.translation(メッセージカタログのドメイン名,gt_dir)
    _=t.ugettext
except StandardError:
    _=lambda str: str

上記のコードでは文字列をユニコードで返すがそうして欲しくないなら"ugettext"を"lgettext"にする。

PyDumpFSでのこの作業は
http://www.masahase.mydns.jp/hg/PydumpFS/
から取得したリポジトリ

hg diff -r 1.0.6 -r 1.0.7

とすれば見れる。