拡張ロケール環境変数
LC_NAME
とかLC_ADDRESS
、LC_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つ。これって、実際のアプリケーションで使われてる環境変数なんだろうか? なんかドキュメント見ても全く書いてないんだけど……。
つまりは廃止されてる標準だから、使うなってことかな?