名前 | 形式 | 機能説明 | 戻り値 | エラー | ファイル | 属性 | 関連項目 | 注意事項
#include <locale.h>char *setlocale(int category, const char *locale);
setlocale() 関数は、category および locale の各引数によって、指定されたプログラムのロケールの適切な部分を選択します。category 引数には、次の値が指定できます。LC_CTYPE、LC_NUMERIC、LC_TIME、LC_COLLATE、LC_MONETARY、LC_MESSAGES、および LC_ALL です。これらの名前は <locale.h> ヘッダーに定義されています。変数 LC_ALL はプログラムのロケールカテゴリ全体を指定します。
変数 LC_CTYPE は、isdigit(3C) や tolower(3C) などの文字処理関数、および mbtowc(3C) や wctomb(3C)などの複数バイト文字関数の動作に 影響を与えます。
変数 LC_NUMERIC は、書式付き入出力関数と文字列変換関数用の浮動小数点形式の数字や数多くある区切り文字を左右します。
変数 LC_TIME は、 ascftime(3C)、cftime(3C)、getdate(3C)、strftime(3C) および strptime(3C) によって渡される日付と時間の書式を左右します。
LC_COLLATE は、strcoll(3C) と strxfrm(3C) のような照合関数によって生じるソート順を左右します。
変数 LC_MONETARY は、localeconv(3C) によって返される通貨用書式の情報を左右します。
変数 LC_MESSAGESは、dgettext(3C)、gettext(3C) および gettxt(3C) のようなメッセージ関数の動作を左右します。
locale の値 C は今までの UNIX システムの動作を指定します。プログラムの起動時には、
setlocale(LC_ALL, "C")
が実行されます。環境 C で記述されたロケールに各カテゴリを初期化することを意味します。
locale の値、“ ” は、ロケールを環境変数から取り込まなければならないことを指定します。各種カテゴリについて環境変数を検査する順序を以下に示します。
カテゴリ | 第 1 の環境変数 | 第 2 の環境変数 | 第 3 の環境変数 |
---|---|---|---|
LC_CTYPE: | LC_ALL | LC_CTYPE: | LANG |
LC_COLLATE: | LC_ALL | LC_COLLATE: | LANG |
LC_TIME: | LC_ALL | LC_TIME | LANG |
LC_NUMERIC: | LC_ALL | LC_NUMERIC: | LANG |
LC_MONETARY: | LC_ALL | LC_MONETARY: | LANG |
LC_MESSAGES | LC_ALL | LC_MESSAGES | LANG |
locale に文字列に対するポインタが指定されていると、setlocale() は、指定したカテゴリのロケールを locale に設定しようとします。setlocale() が成功すると locale が返されます。setlocale() が失敗すると、NULL ポインタが返され、プログラムのロケールは変更されません。
LC_ALL カテゴリについては、その動作は少し異なります。locale に文字列に対するポインタが指定され、category に LC_ALL が指定されている場合、setlocale() はすべてのカテゴリのロケールを locale に設定しようとします。locale は単一のロケールで構成された単純なロケールである場合と、複合のロケールで構成された複合ロケールである場合があります。ロケール変更を試みたあと、すべてのカテゴリに対するロケールが同じである場合、setlocale() は共通なロケール名へのポインタを返します。カテゴリ中にロケールが混合して存在する場合、setlocale() は、それぞれのロケール名を合成したものを返します。
正常終了の場合、setlocale() は、新しいロケールに 指定したカテゴリに関連する文字列を返します。正常終了でない場合、setlocale() は NULL ポインタを返します。プログラムのロケールは変更されません。
locale が NULL ポインタであると、setlocale() は、プログラムの現在のロケールの category に関連する文字列のポインタを返します。プログラムのロケールは変更されません。
setlocale() が返す文字列は、プログラムのロケール部分を復元する、文字列や関連 category 付きの後続の呼び出しなどです。返される文字列は、プログラムによって修正してはいけません。ただし、setlocale() への後続の呼び出しによって上書きされる可能性があります。
定義されたエラーはありません。
locale(1), ctype(3C), getdate(3C) gettext(3C), gettxt(3C), isdigit(3C), localeconv(3C), mbtowc(3C), strcoll(3C), strftime(3C), strptime(3C) strxfrm(3C) tolower(3C), wctomb(3C), libc(3LIB), attributes(5), environ(5), locale(5), standards(5)
マルチスレッドアプリケーションにおいて、あるスレッドがロケールに依存するルーチンを使用しているときに、ほかのスレッドがロケールを変更する (つまり、NULL 以外のロケール引数を指定して setlocale() を呼び出す) ことは危険です。マルチスレッドアプリケーションでロケールを変更するには、ロケールに依存するルーチンを使う前に setlocale() を呼び出してください。現在のロケールを知る目的で setlocale() を使用することは他のスレッドがロケールを変更していない限り可能で、マルチスレッドアプリケーションのどこででも使うことができます。
種々の ロケールカテゴリが混ざり合っている場合、それらに互換性があるかどうかを確認するのは ユーザーの責任です。たとえば、LC_CTYPE=C および LC_TIME=ja ( ja とは Japanese のこと) を設定することはできません。日本の時間表示は C ロケールの ASCII コードセットで表示できないからです。