#include <locale.h> char *setlocale(int category, const char *locale);
locale が NULL でなければ、プログラムのカレントロケールは引き数に従って変更される。 引き数 category はプログラムのカレントロケールのどの部分を変更するかを決める。
引き数 locale は category に設定する文字列へのポインタである。 この文字列はよく知られた定数である "C" や "da_DK" などでも良いし (以下を参照)、他のときに setlocale() を呼び出した際に返された、内部用の文字列でも良い。
locale が "" の場合、ロケールの各部分の設定には環境変数が参照される。 その詳細は実装依存である。 glibc の場合、まず最初に (どんな category に対しても) 環境変数 LC_ALL が検査される。 次にカテゴリ (category) と同じ名前の環境変数 (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) が検査され、最後に環境変数 LANG が検査される。 最初に見つかった環境変数を使用する。 その値がロケール指定として正しくなければ、ロケールは変更されず、 setlocale() は NULL を返す。
"C" ロケールや "POSIX" ロケールは互換性のあるロケールである。 この LC_CTYPE の部分は 7 ビット ASCII 文字集合に相当している。
ロケール名の書式は、通常 language[_territory][.codeset][@modifier] というものである。 ここで language は ISO 639 の言語コードである。 territory は ISO 3166 の国名コードである。 codeset は ISO-8859-1 や UTF-8 のような文字集合や文字符号化識別子である。 サポートされているロケールの一覧を得るには、 "locale -a" を実行してみよ (locale(1) 参照のこと)。
locale が NULL ならば、現在のロケールを問い合わせるのみで変更はしない。
main プログラムの起動時には、 互換性のある "C" ロケールがデフォルトで選択される。 プログラムをすべてのロケールに対して互換にしたければ、 プログラムの初期化の後に
setlocale(LC_ALL, "");
を呼び出し、ロケール依存の情報には
localeconv(3)
の返り値を用い、
MB_CUR_MAX > 1
の場合には文字列の操作には多バイト文字、ワイド文字関数を使用し、
文字列の比較には
strcoll(3),
wcscoll(3)
や
strxfrm(3),
wcsxfrm(3)
を用いる。