Q. locale (ロケール・ロカール) の設定をしたいのですが、環境変数が LANG やら LC_ALL やらたくさんあって、どれを使ってよいのかわかりません。 A. ロケールには以下の 6つのカテゴリがあり、以下のような分類になっています (詳しくは setlocale(3) を参照して下さい)。 LC_COLLATE 文字列のソート順を設定する LC_CTYPE 扱う文字の種類 (エンコーディング) を設定する LC_MESSAGES メッセージなどの言語を設定する LC_MONETARY 通貨単位や金額表記を設定する LC_NUMERIC 数値の表記について設定する LC_TIME 日付と時刻のフォーマットを設定する この 6つの環境変数を適切に設定すればよいのですが、数が多くて面倒です。 そこで上記のカテゴリをまとめて設定するものとして、環境変数 LC_ALL と 環境変数 LANG があります。 - LC_ALL は最も強く、他の LC_* を上書きします。 - LANG は最も弱く、他の LC_* によって上書きされます。 よって、どの環境変数を何にセットするかでプログラムの挙動は変わります。 LC_CTIME を参照する date(1) コマンドの例を以下に示します。 % env - date Mon Mar 25 02:56:33 JST 2002 ↑何もロケールを何も設定しないと C ロケールが使われる % env LANG=C date Mon Mar 25 02:56:45 JST 2002 ↑C ロケールは英語表記となる % env LANG=C LC_TIME=ja_JP.eucJP date 2002年 3月25日 月曜日 02時56分58秒 JST (EUC-JP で出力される) ↑LANG は LC_TIME により上書きされる % env LC_ALL=ja_JP.SJIS LANG=C LC_TIME=ja_JP.eucJP date 2002年 3月25日 月曜日 02時56分58秒 JST (Shift_JIS で出力される) ↑LC_TIME は LANG より強く、さらに LC_ALL の方が強い また、上記 6カテゴリとは別に環境変数 LANGUAGE というものもあります。 これは GNU gettext だけが使用する独自の環境変数ですので、GNU gettext を利用していないアプリケーションならば環境変数 LANGUAGE は無関係です。 LANGUAGE は LC_MESSAGES と同じく、メッセージの言語を設定するための ものですが、 LANGUAGE=ja_JP.eucJP;ko_KR.eucKR;US-ASCII などと優先順位を付けて複数の言語を記述できます (ja_JP.eucJP があれば それを使う。なければ ko_KR.eucKR。それもなければ US-ASCII)。
グループ名: locale