Mercurial のメッセージ日本語化〜その2
その1から一週間ぶりに作業を再開。
結局、予想通りというかなんと言うか:
internationalized messages should not contain the `\r' escape sequence
は、hgext/chrun.py がモロに "\r" を使っていたのが原因の模様。なんだ、つまらん。
しかし、その先も幾多の面倒事が。
.po ファイルの build_mo が失敗
とりあえず手っ取り早く動作確認できそうなのは無いかとメッセージファイルを見渡すと、"pulling from %s\n" とか言うのが見つかった。これなら "hg pull" で即試せるので、"%s から取り込み中\n" とか適当に書き込んで保存。
Windows 上で見た際に、他のファイルが UTF-8 で保存されていたことは覚えていたので、保存は UTF-8 で。
しかし、実行して見ると例外浮揚。
: : File "/usr/lib/python2.4/gettext.py", line 465, in translation t = _translations.setdefault(key, class_(open(mofile, 'rb'))) File "/usr/lib/python2.4/gettext.py", line 177, in __init__ self._parse(fp) File "/usr/lib/python2.4/gettext.py", line 324, in _parse tmsg = unicode(tmsg, self._charset) LookupError: unknown encoding: CHARSET
あちこち原因を探すも、そもそも "CHARSET" を含むソースがない。
実行環境の LOCALE 設定がアレなのか?と頭を捻ったり、zh.po(中国語訳ファイル)とかを眺めること暫し。あ、そうか。
"Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n"
デフォルトで生成される .po ファイル冒頭の上記の部分を埋めるの忘れてた。
zh.po にならいつつ、上記を書き換えたところ、とりあえず LANGUAGE=ja 指定時の出力はソレっぽくなった。
作業環境の日本語対応不足
ソレっぽくはなったのだが、どうも出力される文字コードが変だ。
HGENCODING 環境変数を弄っても、問答無用で iso-2022-jp で出力される。
国際化処理で何か手当てが必要なのかと mercurial/i18n.py を見るも、mercurial/util.py での HGENCODING の取り扱いに倣っているだけで、とりわけ別対応が必要にも見えない。
あれ?良く見ると、この環境の Emacs は buffer-file-coding-system を UTF-8 にできる(モード行も変わる)けど、書き込む都度モード行が iso-2022-jp に戻るぞ? Windows 環境に持ってきて Meadow で開くと、やっぱり iso-2022-jp だ。
UTF-8 で書いたファイルを転送して再度ビルドしたら、あっけなく解消。ちゃんと HGENCODING に応じた出力に。
結局、作業環境の Emacs の問題 orz。