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(&ltime);
    _gmtime64_s(&thetime, &ltime);

    // 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 のクラス

参照

関連項目

ロケール名、言語、および国/地域識別文字列

_configthreadlocale

_create_locale、_wcreate_locale

ロケール

localeconv

_mbclen、mblen、_mblen_l

strlen、strlen_l、wcslen、wcslen_l、_mbslen、_mbslen_l、_mbstrlen、_mbstrlen_l

mbstowcs、_mbstowcs_l

mbtowc、_mbtowc_l

_setmbcp

strcoll 系関数

strftime、wcsftime、_strftime_l、_wcsftime_l

strxfrm、wcsxfrm、_strxfrm_l、_wcsxfrm_l

wcstombs、_wcstombs_l

wctomb、_wctomb_l