setlocale、_wsetlocale
セットは、は実行時ロケールを取得します。
char *setlocale(
int category,
const char *locale
);
wchar_t *_wsetlocale(
int category,
const wchar_t *locale
);
パラメーター
category
ロケールに影響するカテゴリ。locale
ロケールの指定子。
戻り値
有効な locale と category の数値、文字列へのポインターを指定 locale と categoryに関連付けられた返します。locale か category が無効な場合、null ポインターを返し、プログラムの現在のロケール設定は変更されません。
たとえば、は
setlocale( LC_ALL, "en-US" );
文字列だけを返すすべてのカテゴリを設定します
en-US
以降、プログラムがポインター型または文字列を変更すると仮定するプログラムのロケール情報のその部分を復元するには setlocale によって返される文字列のポインターを使用できます。setlocale への以降の呼び出しは前の呼び出しで、返される文字列のポインターを有効にしない文字列を上書きします。特定のロケールの文字列のコピーを保存するには _strdup を使用できます。
解説
locale と categoryで指定された現在のプログラムのロケール情報の一部またはすべてを設定したり、変更したり、クエリに setlocale 関数を使用します。locale は、プログラムの特定の側面をカスタマイズする場所を示します (国または地域と言語)。ロケールに依存するカテゴリとしては、日付の形式や通貨値の表示形式などがあります。どの言語が有効か、コンピューターでサポートされている複数のフォームでの言語の既定の文字列を設定 localesetlocale のリターン コードをチェックします。たとえば、"中国語を使用して" chinese-simplified または chinese-traditionalの戻り値になります。
_wsetlocale は setlocaleのワイド文字バージョンです; _wsetlocale の locale の引数と戻り値はワイド文字列です。それ以外では、_wsetlocale と setlocale の動作は同じです。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tsetlocale |
setlocale |
setlocale |
_wsetlocale |
category の引数は、影響を受けるプログラムのロケール情報の一部を指定します。category に使用するマクロと次のように、の影響を受けるプログラムの一部:
LC_ALL
次に示すすべてのカテゴリです。LC_COLLATE
strcoll、_stricoll、wcscoll、_wcsicoll、strxfrm、_strncoll、_strnicoll、_wcsncoll、_wcsnicollと wcsxfrm 関数。LC_CTYPE
文字の操作関数 (そのまま) isdigit、isxdigit、mbstowcsと mbtowcを除く)。LC_MONETARY
localeconv 関数が返す通貨形式情報。LC_NUMERIC
書式設定 printf出力ルーチン (など)、データ変換ルーチン、および非 localeconvが返す通貨形式情報の 10 使用する小数点文字。10 進数ポイントの文字に加え、LC_NUMERIC は、localeconvによって返される桁区切り記号およびグループの文字列を設定します。LC_TIME
strftime と wcsftime 関数。
この関数は、カテゴリのパラメーターを検証します。カテゴリのパラメーターは、上の表で指定された値の 1 種類である無効なパラメーター ハンドラーが パラメーターの検証に説明されているように、開始されます。実行の継続が許可された場合、関数は EINVAL に errno を設定し、NULLを返します。
locale の引数は、ロケールを指定する文字列へのポインターです。locale の引数のファイル形式の詳細については、ロケール名、言語、および国/地域識別文字列を参照してください。空の文字列に locale の点は、ロケール実装定義されたネイティブ環境の場合は。C の値は C の移動のための ANSI の最小に準拠した環境を指定します。C のロケールは char すべてのデータ型が 1 バイトであり、値が 256 未満常にと想定しています。
プログラムの起動時に、次のステートメントの比較が実行されます:
setlocale( LC_ALL, "C" );
locale の引数はロケール名、言語の文字列、文字列の言語と国/地域コード、コード ページ、または文字列の言語、国/地域コード ページ受け取ることができます。使用できるロケール名、言語、国/地域コード ページのセットはすべて UTF-7、UTF-8 などの文字ごとに 2 バイトを超えるデータを要求するコード ページを除く Windows の NLS API でサポートされる要素を含みます。UTF-7、UTF-8 などのコード ページを指定すると、setlocale は失敗し、NULL を返します。setlocale でサポート ロケール名、言語、および国/地域識別文字列でロケール名のセットは説明します。setlocale でサポートされる 言語識別文字列 と 国/地域識別文字列では、言語と国/地域の文字列は示します。
locale の引数として渡された null ポインターで setlocale をではなく国際的な環境を設定するために使用します。locale の引数が null ポインターの場合、プログラムの現在のロケール設定は変更されません。代わりに、setlocale は、スレッドの現在のロケールの category に関連付けられた文字列へのポインターを返します。category の引数が LC_ALLの場合、関数はカテゴリの現在の設定を示す文字列をセミコロンで区切って返します。たとえば、呼び出しのシーケンス
// Set all categories and return "en-US"
setlocale(LC_ALL, "en-US");
// Set only the LC_MONETARY category and return "fr-FR"
setlocale(LC_MONETARY, "fr-FR");
printf("%s\n", setlocale(LC_ALL, NULL));
戻り値
LC_COLLATE=en-US;LC_CTYPE=en-US;LC_MONETARY=fr-FR;LC_NUMERIC=en-US;LC_TIME=en-US
LC_ALL カテゴリに関連付けられた文字列はである。
次の例では LC_ALL のカテゴリに関連しています。文字列 .OCP "" および "" .ACP のどちらかがコード ページ数の代わりにユーザー既定の Windows コード ページ、およびユーザー既定の ANSI コード ページの使用を指定するには、それぞれ使用できます。
setlocale( LC_ALL, "" );
オペレーティング システムから派生したユーザー既定の ANSI コード ページである既定のロケールを設定します。setlocale( LC_ALL, ".OCP" );
明示的にオペレーティング システムから派生した OEM 現在のコード ページにロケールを設定します。setlocale( LC_ALL, ".ACP" );
オペレーティング システムから派生した ANSI コード ページにロケールを設定します。setlocale( LC_ALL, "<localename>" );
<localename>に示すロケール名とロケールを設定します。setlocale( LC_ALL, "<language>_<country>" );
ホスト オペレーティング システムから派生した既定のコード ページを使用して <language> と <country>によって、という名前の言語と国/地域にロケールを設定します。setlocale( LC_ALL, "<language>_<country>.<code_page>" );
<language>、<country>と <code_page> の文字列によって指定言語、国/地域、コード ページにロケールを設定します。言語、国または地域とコード ページのさまざまな組み合わせを使用できます。次に例を示します。setlocale( LC_ALL, "French_Canada.1252" ); // Set code page to French Canada ANSI default setlocale( LC_ALL, "French_Canada.ACP" ); // Set code page to French Canada OEM default setlocale( LC_ALL, "French_Canada.OCP" );
setlocale( LC_ALL, "<language>" );
ホスト オペレーティング システムから派生したように、国または地域のユーザーとは、既定の ANSI コード ページを指定する言語の既定の国や地域を使用して <language>によって、という名前の言語ロケールに設定します。たとえば、次の setlocale への呼び出しは機能的に同じです:setlocale( LC_ALL, "en-US" ); setlocale( LC_ALL, "English" ); setlocale( LC_ALL, "English_United States.1252" );
setlocale( LC_ALL, ".<code_page>" );
指定されたコード ページの既定の国または地域と言語を使用して <code_page>によって、という名前の値にコード ページ (ホスト オペレーティング システムで定義されている) を設定します。
カテゴリは、コード ページを変更 LC_ALL または LC_CTYPE である必要があります。setlocale にたとえば、ホスト オペレーティング システムの既定の国または地域と言語が "US" と "英語の場合"、次の 2 種類の呼び出しは、機能的には同じです:
setlocale( LC_ALL, ".1252" );
setlocale( LC_ALL, "English_United States.1252");
詳細については、プリプロセッサの参照の setlocale のプラグマ を参照してください。
setlocale がプログラムのすべてのスレッドのロケールまたは呼び出し元のスレッドのロケールだけに影響するかどうかを制御するには、関数 _configthreadlocale が使用されます。
必要条件
ルーチン |
必須ヘッダー |
---|---|
setlocale |
<locale.h> |
_wsetlocale |
<locale.h> か <wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_setlocale.cpp
//
// This program demonstrates the use of setlocale when
// using two independent threads.
//
#include <locale.h>
#include <process.h>
#include <windows.h>
#include <stdio.h>
#include <time.h>
#define BUFF_SIZE 100
// Retrieve the date and time in the current
// locale's format.
int get_time(unsigned char* str)
{
__time64_t ltime;
struct tm thetime;
// Retieve the time
_time64(<ime);
_gmtime64_s(&thetime, <ime);
// Format the current time structure into a string
// using %#x is the long date representation,
// appropriate to the current locale
if (!strftime((char *)str, BUFF_SIZE, "%#x",
(const struct tm *)&thetime))
{
printf("strftime failed!\n");
return -1;
}
return 0;
}
// This thread sets its locale to German
// and prints the time.
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
unsigned char str[BUFF_SIZE];
// Set the thread local
printf("The thread locale is now set to %s.\n",
setlocale(LC_ALL, "de-DE"));
// Retrieve the time string from the helper function
if (get_time(str) == 0)
{
printf("The time in de-DE locale is: '%s'\n", str);
}
_endthreadex( 0 );
return 0;
}
// The main thread spawns a second thread (above) and then
// sets the locale to English and prints the time.
int main()
{
HANDLE hThread;
unsigned threadID;
unsigned char str[BUFF_SIZE];
// Configure per-thread locale to cause all subsequently created
// threads to have their own locale.
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
// Retrieve the time string from the helper function
printf("The thread locale is now set to %s.\n",
setlocale(LC_ALL, "en-US"));
// Create the second thread.
hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc,
NULL, 0, &threadID );
if (get_time(str) == 0)
{
// Retrieve the time string from the helper function
printf("The time in en-US locale is: '%s'\n\n", str);
}
// Wait for the created thread to finish.
WaitForSingleObject( hThread, INFINITE );
// Destroy the thread object.
CloseHandle( hThread );
}
同等の .NET Framework 関数
System::Globalization::CultureInfo のクラス
参照
関連項目
_create_locale、_wcreate_locale
strlen、strlen_l、wcslen、wcslen_l、_mbslen、_mbslen_l、_mbstrlen、_mbstrlen_l
strftime、wcsftime、_strftime_l、_wcsftime_l