#include <locale.h> char *setlocale(int category, const char *locale);
locale が NULL でなければ、プログラムのカレントロケールは引数に従って変更される。 引数 category はプログラムのカレントロケールのどの部分を変更するかを決める。
カテゴリー | 制御対象 |
LC_ALL | 全てのロケール |
LC_ADDRESS |
住所と地理関連の
要素のフォーマット (*) |
LC_COLLATE | 文字の照合順序 |
LC_CTYPE | 文字の分類 |
LC_IDENTIFICATION | ロケールの説明メタデータ (*) |
LC_MEASUREMENT |
単位系に関する設定
(メートル法か US 由来の単位系) (*) |
LC_MESSAGES | 地域化可能な自然言語メッセージ |
LC_MONETARY | 金額の表示方法 |
LC_NAME | 人へのあいさつの言葉 |
LC_NUMERIC | 金額以外の数値の表示方法 |
LC_PAPER | 標準の紙のサイズに関する設定 (*) |
LC_TELEPHONE | 電話サービスで使用されるフォーマット (*) |
LC_TIME | 日付と時刻の表示方法 |
上の表でアスタリスクが付い ているたカテゴリーは GNU 拡張である。 ロケールのカテゴリーの詳細な情報は locale(7) を参照。
引数 locale は category に設定する文字列へのポインターである。 この文字列はよく知られた定数である "C" や "da_DK" などでも良いし (以下を参照)、他のときに setlocale() を呼び出した際に返された、内部用の文字列でも良い。
locale が空文字列 "" の場合、ロケールの各部分の設定には環境変数が参照される。 その詳細は実装依存である。 glibc の場合、まず最初に (どんな category に対しても) 環境変数 LC_ALL が検査される。 次にカテゴリー (category) と同じ名前の環境変数 (上記の表を参照) が検査され、最後に環境変数 LANG が検査される。 最初に見つかった環境変数を使用する。 その値がロケール指定として正しくなければ、ロケールは変更されず、 setlocale() は NULL を返す。
The locale "C" or "POSIX" is a portable locale; it exists on all conforming systems.
A locale name is typically of the form language[_territory][.codeset][@modifier], where language is an ISO 639 language code, territory is an ISO 3166 country code, and codeset is a character set or encoding identifier like ISO-8859-1 or UTF-8. For a list of all supported locales, try "locale -a" (see locale(1)).
locale が NULL ならば、現在のロケールを問い合わせるのみで変更はしない。
main プログラムの起動時には、 互換性のある "C" ロケールがデフォルトで選択される。 プログラムをすべてのロケールに対して互換にしたければ、 プログラムの初期化の後に
setlocale(LC_ALL, "");
を呼び出し、ロケール依存の情報には localeconv(3) の返り値を用い、 MB_CUR_MAX > 1 の場合には文字列の操作には多バイト文字、ワイド文字関数を使用し、 文字列の比較には strcoll(3), wcscoll(3) や strxfrm(3), wcsxfrm(3) を用いる。
インターフェース | 属性 | 値 |
setlocale() | Thread safety | MT-Unsafe const:locale env |
The C standards specify only the categories LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, and LC_TIME. POSIX.1 adds LC_MESSAGES. The remaining categories are GNU extensions.