setlocale,_wsetlocale
locale.h:インデックス への移動
ヘッダーファイル
locale.h
カテゴリ
その他のルーチン
プロトタイプ
char *setlocale(int category, const char *locale);
wchar_t * _wsetlocale( int category, const wchar_t *locale);
説明
setlocale を使用して,ロケールを選択または問い合わせます。
C++Builder は,Win95/98/2000 オペレーティングシステムでサポートされているすべてのロケールをサポートします。詳細は,システムのマニュアルを参照してください。
category 引数で指定できる値は,次のとおりです。
LC_ALL |
後続のすべてのカテゴリに影響します。 |
LC_COLLATE |
strcoll と strxfrm に影響します。 |
LC_CTYPE |
1 バイト文字操作関数に影響します。mbstowcs 関数と mbtowc 関数には影響しません。 |
LC_MONETARY |
localeconv 関数による金額の書式設定に影響します。 |
LC_NUMERIC |
金額以外のデータの書式設定の小数点に影響します。これには,printf 系の関数と,localeconv から返される情報が含まれます。 |
LC_TIME |
strftime に影響します。 |
locale 引数は,ロケールの名前または指定されたロケールカテゴリへのポインタです。ヌルポインタを渡すと,有効な現在のロケールが返されます。ヌル文字列を指すポインタを渡すと,環境変数を参照して設定対象のロケールを決定するように setlocale に要求できます。ロケール名は,大文字と小文字が区別されません。
setlocale がロケール要求を実行できない場合,有効な既存のロケールは変更されず,ヌルポインタが返されます。
locale 引数がヌルポインタの場合は,カテゴリのロケール文字列が返されます。category が LC_ALL の場合は,完全なロケール文字列が返されます。完全なロケール文字列は,現在のロケール内のすべてのカテゴリの名前をセミコロンで区切って連結して構成されます。この文字列は,setlocale を呼び出す場合に任意の LC_xxx 値とともに locale パラメータとして使用できます。これにより,完全なロケール文字列で指定されているすべてのロケールカテゴリを再設定して,ロケールの状態を保存および復元できます。完全なロケール文字列を 1 つのカテゴリ(LC_TIME など)とともに使用すると,そのカテゴリだけがロケール文字列から復元されます。
locale パラメータとして空の文字列("")を使用すると,実装定義のロケールが使用されます。これは,ANSI C 指定の動作です。
アプリケーションで動的にロード可能なロケールを利用するには,各モジュールで _ _USELOCALES_ _ を定義します。_ _USELOCALES_ _ が定義されていない場合,ロケールに依存するすべての関数とマクロは,デフォルトの C ロケールでのみ動作します。
locale パラメータの引数としてヌルポインタを使用した場合,setlocale は,有効な現在のロケールを指定する文字列を返します。category パラメータで 1 つのカテゴリ(LC_COLLATE など)を指定した場合,指されている文字列は,カテゴリの名前になります。category パラメータとして LC_ALL を使用した場合,指されている文字列は,有効な各カテゴリの名前を示す完全なロケール文字列になります。
. . . localenameptr = setlocale( LC_COLLATE, NULL ); if (localenameptr) printf( "%s\n", localenameptr ); . . .
この出力は,モジュール名の 1 つと,指定したコードページになります。たとえば,出力は「LC_COLLATE = English_United States.437」のようになります。
. . . localenameptr = setlocale( LC_ALL, NULL ); if (localenameptr) printf( "%s\n", localenameptr ); . . .
この出力例は,次のようになります。
LC_COLLATE=English_United States.437; LC_TIME=English_United States.437; LC_CTYPE=English_United States.437;
この完全な文字列の各カテゴリは,セミコロンで区切られます。この文字列をアプリケーションでコピーして保存し,後で再び使用して,同じロケールカテゴリを復元できます。区切られた名前は,locale.h で定義されているロケールカテゴリ定数にそれぞれ対応します。したがって,最初の名前は LC_COLLATE カテゴリ,2 番めの名前は LC_CTYPE カテゴリなどになります。locale.h ヘッダーファイルで指定されているほかのカテゴリは,将来の実装のために予約されています。
すべてのデフォルトカテゴリを特定のフランスロケールに設定するには,次のように指定します。
setlocale( LC_ALL, "French_France.850" );
現在使用されているコードページを確認するには,次のように指定します。
localenameptr = setlocale( LC_ALL, NULL );
戻り値
選択に成功した場合,setlocale は,新しいロケールの選択されたカテゴリ(またはすべてのカテゴリ)に関連付けられた文字列へのポインタを返します。
Unicode が定義されている場合,_wsetlocale は wchar_t 文字列を返します。
失敗した場合は,ヌルポインタが返され,ロケールは変更されません。ほかに考えられる戻り値は,上で説明されています。
例
#include <locale.h> #include <stdio.h> int main(void) { char *old_locale; /* Borland C++ でサポートされているロケールは「C」だけです。*/ old_locale = setlocale(LC_ALL,"C"); printf("Old locale was %s\n",old_locale); return 0; }
移植性
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
setlocale |
+ |
+ |
+ |
+ |
_wsetlocale |
+ |