#include <locale.h>
ロケール (locale) は言語や文化ルールの集合である。 これには、メッセージ出力に使用する言語、 様々な文字集合、 表記に関する慣習などが含まれる。 プログラムをいろいろな文化に移植可能とするには、 プログラムが自分のロケールを判定し、 それに応じた適切な動作ができる必要がある。
ヘッダーファイル <locale.h> には、 このための便利なデータ型、 関数、 マクロなどの宣言がある。
このヘッダーファイルで宣言されている関数には、 現在のロケールを設定する setlocale(3) と、数値のフォーマット方法についての情報を取得する localeconv(3) がある。
ロケール情報は、 プログラムが必要とすると思われるいくつかのカテゴリーに分かれており、 それらはマクロとして宣言されている。 これらのマクロを setlocale(3) 関数の最初の引き数に用いると、 各カテゴリーを望むロケールに設定できる。
setlocale(3) の二番目の引き数が空文字列 "" の場合、 デフォルトのロケールは以下の手順で決定する:
地域的な数値フォーマットの情報は
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-2008 では、 ロケール API への多くの拡張が標準化されている。 これは GNU C ライブラリのバージョン 2.3 で初めて登場した実装に基づいている。 これらの拡張は、 従来のロケール API がマルチスレッドアプリケーションや複数のロケールを扱う必要があるアプリケーションとうまく組み合わせて使うことができない問題を解決するために設計された。
この拡張は、 ロケールオブジェクトの作成、操作のための新しい関数 (newlocale(3), freelocale(3), duplocale(3), uselocale(3)) とサフィックス "_l" が付いた新しいライブラリ関数 (toupper_l(3) など) で構成される。 新しいライブラリ関数は、 従来のロケール依存の API (toupper(3) など) を関数実行時に適用するロケールオブジェクトの指定ができるように拡張したものである。
以下の環境変数が newlocale(3) と setlocale(3) で使用される。 したがって、 特権を持たないロケールを参照するすべてのプログラムに影響がある。
POSIX.1-2001.
locale(1), localedef(1), catopen(3), gettext(3), localeconv(3), mbstowcs(3), newlocale(3), ngettext(3), nl_langinfo(3), rpmatch(3), setlocale(3), strcoll(3), strfmon(3), strftime(3), strxfrm(3), uselocale(3), wcstombs(3), locale(5), charsets(7), unicode(7), utf-8(7)
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。