FreeBSD QandA 2200

FreeBSD QandA

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


間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。