名前 | 形式 | 機能説明 | 戻り値 | エラー | ファイル | 属性 | 関連項目 | 注意事項
#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 システムの動作を指定します。プログラムの起動時には、以下が実行されます。これは環境 C で記述されたロケールに各カテゴリを初期化することを意味します。
setlocale(LC_ALL, "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() への後続の呼び出しによって、上書きされる可能性があります。
定義されているエラーはありません。
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
---|---|
MT レベル | 例外付き MT-safe |
CSI | 対応済み |
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)
マルチスレッドアプリケーションでロケールを変更するには、ロケールに依存するルーチンを使う前に setlocale() を呼び出してください。現在のロケールを知る目的で setlocale() を使用することはこの範囲においては可能で、マルチスレッドアプリケーションのどこででも使うことができます。
種々の ロケールカテゴリが混ざり合っている場合、それらに互換性があるかどうかを確認するのは ユーザーの責任です。たとえば、LC_CTYPE=C および LC_TIME=ja (ja とは Japanese のこと) を設定することはできません。日本時間は C ロケールの ASCII コードセットで表示できないからです。
setlocale() の国際化機能は、libc の動的リンクバージョンが、アプリケーションとリンクしている場合にのみサポートされます。libc の静的リンクバージョンが、アプリケーションとリンクしている場合は、setlocale() は C ロケールと POSIX ロケールだけを扱うことができます。