萬由無事覚書

不知物故萬由無事覚書仕候也。

拡張ロケール環境変数

LC_NAMEとかLC_ADDRESSLC_IDENTIFICATIONなどのことをちょっと調べてみた。

LC_IDENTIFICATIONなどの拡張されたロケール関係環境変数は、ISO/IEC TR 14652:2004 「文化依存要素の定義書式」が基になっているらしい。glibc 2.2あたりで追加されたらしいね。

ところが、これは、2008年に廃止されている。情報処理学会の情報規格調査会が出してる報告書を参照のこと。

規格書本体 (PDF形式) にある日本からのコメントには、「POSIX環境以外で使えんの?」「デフォルト値を決めると、それが世界標準とみなされかねないのは嫌」「表現力不足じゃね?」とかあったりする。このあたりの経緯は、いろいろありそうでよくわからんね。

なんでこんなものを調べたんだ?

出力されるメッセージは日本語がいい (英語はニガテだ)。当然、その他のロケール依存処理もちゃんと日本/日本語にしたい。

でも、そうするとmanまで日本語で表示されてしまう。

言うまでもなく、日本語のmanはとても便利だ (英語ニガテだと特にね)。しかし時として内容が古かったりする場合がある。なので、最初からオリジナルのmanを表示させておくと都合がいい。

export LANG=ja_JP.UTF-8
export LC_MESSAGES=ja_JP.UTF-8

alias jman="LANG=ja_JP.UTF-8 LC_MESSAGES=ja_JP.UTF-8 man"
alias man="LANG=C LC_MESSAGES=C man"

のようにしている。つまりmanの実行時だけ強制的にCロケールにするわけだね。

で、どんなLC_*環境変数があったかなー? と思ってlocale(1)を実行すると、こんなのが出てきた。


LC_CTYPE="ja_JP.UTF-8"

LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"

?

LC_IDENTIFICATIONとかって、SUSとかで定義されてたっけ? ってのが動機だ。

そして残った疑問がもう1つ。これって、実際のアプリケーションで使われてる環境変数なんだろうか? なんかドキュメント見ても全く書いてないんだけど……。

つまりは廃止されてる標準だから、使うなってことかな?