locale

Autres langues

Langue: ja

Autres versions - même langue

Version: 1993-04-24 (fedora - 25/11/07)

Autres sections - même nom

Section: 7 (Divers)

名前

locale - 多言語サポートの解説

書式

 #include <locale.h>
 

説明

ロケール (locale) は言語や文化ルールの集合である。 これらは、メッセージ出力に使用する言語・いろいろな文字集合・ 表記に関する慣習といったような面をカバーしている。 プログラムをいろいろな文化に移植可能とするには、 そのプログラムは自分のロケールを決めて、 それに応じた適切な動作ができなければならない。

ヘッダーファイル <locale.h> には、この目的に便利なデータ型・関数・マクロなどの宣言がある。

このヘッダーファイルで宣言されている関数には、 現在のロケールを設定する setlocale(3) と、数値のフォーマット方法についての情報を取得する localeconv(3) がある。

プログラムの必要に応じて、ローカル情報はいろいろなカテゴリに分かれており、 それらはマクロとして宣言されている。 これらのマクロを setlocale(3) 関数の最初の引き数に用いると、 これらのどれかを望むロケールに設定できる。

LC_COLLATE
これは地域的なアルファベット文字列の比較に使用する strcoll(3) 関数と strxfrm(3) 関数の動作を変更する。例えばドイツ語のエスツェット (鋭い s) は、ソートの際 "ss" として扱われる。
LC_CTYPE
これは isupper(3) や toupper(3) のような文字の判定・操作をする関数や、多バイト文字を扱う mblen(3) や wctomb(3) のような関数の動作を変更する。
LC_MONETARY
localeconv(3) によって返される情報を変更する。 これには小数点や区切りコンマの位置など、 数字の表示方法に関する詳細が含まれている。この情報は strfmon(3) 関数が内部で使用する。
LC_MESSAGES
メッセージ表示に使用する言語を変更する。 また肯定的・否定的な回答をどのように表示するかを変更する。 これらの情報を簡単に使用するために、 GNU C ライブラリには gettext(3), ngettext(3), rpmatch(3) 関数が含まれている。 GNU gettext ファミリーに属する関数は、環境変数 LANGUAGE にも従う。
LC_NUMERIC
printf(3) 関数および scanf(3) 関数のファミリーでロケール設定を使うよう指示された場合に 用いる情報を変更する。この情報は localeconv(3) 関数で取得することもできる。
LC_TIME
strftime(3) 関数の動作を変更し、 地域で利用されている方法で現在時刻を表示する。 例えば、ヨーロッパの多くでは 24時間式の時計を使うが、 アメリカでは 12時間式の時計を使う。
LC_ALL
上記の全て。

setlocale(3) の二番目の引き数が空文字列 "" の場合、 デフォルトのロケールは以下の手順で決定する:

1.
環境変数 LC_ALL が設定されている場合には LC_ALL の値が使用される。
2.
上記のカテゴリのどれかと同じ名前の環境変数が設定されている場合には、 そのカテゴリにはその値が使用される。
3.
環境変数 LANG が設定されている場合には LANG の値が使用される。

地域的な数値フォーマットの情報は localeconv(3) 関数によって返される struct lconv で得ることができ、これは以下のように宣言されている:

 
 struct lconv {
 
   /* (通貨以外の) 数値情報 */
 
   char *decimal_point;     /* 小数点の文字 */
   char *thousands_sep;     /* 小数点の左側の数字のグループの
                               区切り文字 */
   char *grouping; /* それぞれの要素は各グループの数字の個数である。
                      インデックス値が大きいほど、左側のグループを表す。
                      要素の値が CHAR_MAX の場合は、最後のグループで
                      あることを意味する。要素の値が 0 の場合は、
                      その要素より左側の全ての要素に前の要素と同じ値を
                      使用することを意味する。 */
 
   /* 残りのフィールドは通貨情報用である */
 
   char *int_curr_symbol;   /* 最初の三つの文字は ISO 4217 の通貨記号。
                               四番目の文字は区切り文字。
                               五番目は ' '。 */
   char *currency_symbol;   /* 地域の通貨記号 */
   char *mon_decimal_point; /* 小数点の文字 */
   char *mon_thousands_sep; /* 上記の `thousands_sep' と同様 */
   char *mon_grouping;      /* 上記の `grouping' と同様 */
   char *positive_sign;     /* 正の値の符号 */
   char *negative_sign;     /* 負の値の符号 */
   char  int_frac_digits;   /* 国際的な小数部の数字 */
   char  frac_digits;       /* 地域の小数部の数字 */
   char  p_cs_precedes;     /* 正の値の前に通貨記号を置く場合は 1,
                               後ろに置く場合は 0 */
   char  p_sep_by_space;    /* 正の値と通貨記号の間にスペースを
                               入れる場合は 1 */
   char  n_cs_precedes;     /* 負の値の前に通貨記号を置く場合は 1,
                               後ろに置く場合は 0 */
   char  n_sep_by_space;    /* 負の値と通貨記号の間にスペースを
                               入れる場合は 1 */
   /* 正と負の符号の位置:
      0 値と通貨記号を括弧で囲む
      1 符号は値と通貨記号の前に置く
      2 符号は値と通貨記号の後に置く
      3 符号は通貨記号の直後に置く
      4 符号は通貨記号の直前に置く    */
   char  p_sign_posn;
   char  n_sign_posn;
 };
 

準拠

POSIX.1-2001

GNU gettext 関数ファミリーは LI18NUX2000 で規定されている。

関連項目

locale(1), localedef(1), gettext(3), localeconv(3), ngettext(3), nl_langinfo(3), rpmatch(3), setlocale(3), strcoll(3), strfmon(3), strftime(3), strxfrm(3)