LC_MESSAGES

manpages-ja をコミットするに当たって w3mman で日本語の manページを表示させるとエスケープ文字が化けるという問題に遭遇し、右往左往する。これに関係しているのは LC_ALL, LC_MESSAGES, LANGという3つの環境変数らしい。最終的に LC_MESSAGES が ja_JP.eucJPだったら日本語の man が出るのだが、このときなぜか LANG=ja_JP.eucJPだとエスケープ文字が化けるのだ。

IRC で hattya さんの助けを得て探っていると、どうも LANG=Cだと LC_MESSAGES=ja_JP.eucJP でしっかり文字化けせずに表示させることができるらしい。ちなみに LANG=ja_JP.eucJP とすると、明示的に LC_MESSAGES の値を設定しなくても LC_MESSAGESには LANG と同じ値が入っていると仮定される(嫌なら明示的に指定)。

ここで問題なのは LANG で、ほとんどの日本語ユーザは恐らく日本語 man を読んだりメニューを日本語にしたりするのにLANG=ja_JP.eucJP だけで済ますだろうから、w3mman もこれを最大限尊重しようと苦心。

その過程で LC_MESSAGES=${LC_MESSAGES:-${LC_ALL:-${LANG}}} というふうにネストできることを知る。ほほう。

上記のように make に $ を含んだ文字列を渡すとき、\ でエスケープだと思ったのだが、これを入れても $が消えてしまうのでシェルに食われているのかと思って \\\\のようにもしたのだが、実のところ Makefileに行くので $$ というように2回重ねる必要があった。なんということ。

一応片付いたと思われる。