LOCALE(7)

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

書式
#include <locale.h>

説明
locale は言語や文化ルールの集合である。これらはメッセージ出力に 使用する言語、異った文字集合、大文字/小文字の変換などをカーバーしている。 他の文化へ移植できるようにするためにプログラムは locale を使用して その文化に従った動作をするようにしなければならない。

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

宣言されている関数には、現在の locale を設定する setlocale() と数値のフォーマット方法についての情報を取得する localeconv() がある。

プログラムごとに必要とする地域情報の種別が異っているかもしれないので、 マクロとして宣言されていて、 setlocale() 関数の最初の引き数に 望んでいる locale の一つを設定することが可能である:

LC_COLLATE
    これは地域的なアルファベットの文字列を比較するのに使用する strcoll() 関数と strxfrm() 関数の動作を変更する。例えばドイツ語のエスツェット(鋭い s)は "ss" として扱われる。

LC_CTYPE
    これは isupper() や toupper() のような文字の判定や操作をする関数や、多バイト文字扱う mblen() や wctomb() のような関数の動作を変更する。

LC_MONETARY
    localeconv() によって返される情報を変更する。 これには小数点やコンマの位置など、数字のフォーマット方法に関する 詳細が含まれている。この情報は strfmon() 関数の内部で使用される、

LC_MESSAGES
    メッセージ表示に使用する言語を変更する。そして肯定や否定をどのように 回答するかを変更する。 GNU C ライブラリは、これらの情報を簡単に使用 するために rpmatch() 関数を含んでいる。

LC_NUMERIC
    は printf() と scanf() 関数群で、locale の設定を使うように指示された場合に 使用される情報を変更する。この情報は localeconv() 関数で取得することもできる。

LC_TIME
    地域的な方法で現在時刻を表示する strftime() 関数の動作を変更する。例えばアメリカ式の 12時間時計のかわりに、 ヨーロッパ式の 24時間時計を使用する。

LC_ALL
    上記の全て。

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

1.  環境変数 LC_ALL が設定されている場合には LC_ALL の値が使用される。

2.  もし上記の種別のどれかの名前を同じ環境変数が設定されている場合には その種別にはその値が使用される。

3.  環境変数 LANG が設定されている場合には LANG の値が使用される。

地域的な数値フォーマットのための情報は localeconv() 関数によって返される struct lconv によって得ることができる、これは以下のように宣言されている:
struct lconv
{
  /* (通貨以外の) 数値情報  */
  char *decimal_point;		/* 小数点の文字  */
  char *thousands_sep;		/* 千単位の区切り文字  */
  /* それぞれの要素は区切りごとの数字の数である。
     より多きな数字はより左を意味する。
     要素の値が CHAR_MAX の場合はグループの終りを意味する。
     要素の値が 0 の場合は残りの全てに前の要素と
     同じ値を使用することを意味する。 */
  char *grouping;
  /* 通貨情報 */
  /* 最初の三つの文字は ISO 4217 の通貨記号である。
     四番目の文字は区切り文字。五番目は ' ' */
  char *int_curr_symbol;
  char *currency_symbol;		/* 地域の通貨記号 */
  char *mon_decimal_point;	/* 小数点の文字 */
  char *mon_thousands_sep;	/* 千単位の区切り文字 */
  char *mon_grouping;		/* 上記の `grouping' 要素と同様 */
  char *positive_sign;		/* 正の値の符号  */
  char *negative_sign;		/* 負の値の符号  */
  char int_frac_digits;		/* Int'l fractional digits.  */
  char frac_digits;			/* Local fractional digits.  */
  /* 正の値の前に通貨記号を置く場合は 1, 後ろに置く場合は 0 */
  char p_cs_precedes;
  /* 正の値と通貨記号の間にスペースを入れる場合は 1 */
  char p_sep_by_space;
  /* 負の値の前に通貨記号を置く場合は 1, 後ろに置く場合は 0 */
  char n_cs_precedes;
  /* 負の値と通貨記号の間にスペースを入れる場合は 1 */
  char n_sep_by_space;
  /* 正と負の符号の位置:
     0 値と通貨記号を括弧で囲む
     1 符号は値と通貨記号の前に置く
     2 符号は値と通貨記号の後に置く
     3 符号は通貨記号の直後に置く
     4 符号は通貨記号の直前に置く    */
  char p_sign_posn;
  char n_sign_posn;
};

準拠
POSIX.1

関連項目
setlocale(3), localeconv(3), locale(1), localedef(1) , rpmatch(3), strfmon(3), strcoll(3), strxfrm(3), strftime(3)