gettextで日本語化の検討(4)

Linux上で日本語化したアプリを、Windowsに持っていったときに起動すると、UnicodeDecodeErrorになってしまい、日本語版が起動できない問題を検討する。
UnicodeDecodeErrorというのは面倒なので、Windowsで起動する英語表示のアプリを、Windowsで.moファイルを作成して日本語化する。

ソースコードの中でwx.Localeとかの設定

http://d.hatena.ne.jp/Megumi221/20101222#1292979870のようにソースを書くと、実行時に下のダイアログが現れる。

gettextを使うための設定を行うメソッドsetting.set_translationを呼ぶタイミングが悪いらしい。app = wx.PySimpleApp()の後に呼び出すように修正すると、このエラーは解消される。

poファイルの作成

Windows上のxgettextコマンドで、Linuxのときと同様にmessages.poファイルを作成する。コマンドプロンプトですべての作業を行う。

> which xgettext
/usr/bin/xgettext
> xgettext *py

WindowsCygwinを入れているので、(たぶん)xgettextがコマンドとして使える状態になっている。

moファイルの作成

Windows上のmsgfmtコマンドで、Linuxのときと同様にprogress.moファイルを作成する。

> which msgfmt
/usr/bin/msgfmt
> msgfmt -o progress.mo messages.po
messages.po:21:9: invalid multibyte sequence
messages.po:21:11: invalid multibyte sequence
messages.po:21:12: invalid multibyte sequence
messages.po:21:13: invalid multibyte sequence
messages.po:21:15: invalid multibyte sequence
messages.po:21:17: invalid multibyte sequence
messages.po:21:19: invalid multibyte sequence
messages.po:21:20: invalid multibyte sequence
messages.po:21:21: invalid multibyte sequence
messages.po:25:9: invalid multibyte sequence
messages.po:25:11: invalid multibyte sequence
messages.po:25:14: invalid multibyte sequence
messages.po:25:15: invalid multibyte sequence
msgfmt: found 13 fatal errors

やってみると、こんなエラーになり、moファイルが作成されない。そこで、http://svn.deluge-torrent.org/trunk/msgfmt.pyから、msgfmt.pyをいただく(ファイルとして保存する)。これで実行するとうまくいく。progress.moファイルが作られた。

> python msgfmt.py -o progress.mo messages.po

実行

できたprogress.moファイルを、\locale\ja\LC_MESSAGESフォルダに置く。動いた。動いたけれどもこれで本当に正しいのか、いくつか疑わしい点が...。