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