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
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