彷徨えるフジワラ

年がら年中さまよってます

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。

っつーか、UTF-8 使えなかったんだっけ? > emacs 21.4