Sdílet prostřednictvím


setlocale _wsetlocale

Nastavení nebo načtení národního prostředí run-time.

char *setlocale(
   int category,
   const char *locale 
);
wchar_t *_wsetlocale(
   int category,
   const wchar_t *locale 
);

Parametry

  • category
    Kategorie, které jsou ovlivněny národního prostředí.

  • locale
    Specifikátoru národního prostředí.

Vrácená hodnota

Je-li platný locale a category jsou uvedeny, vrací ukazatel na řetězec přidružený k zadanému locale a category.Pokud locale nebo category je neplatný, vrátí se nezmění ukazatel s hodnotou null a aktuální nastavení národního prostředí programu.

Například volání

setlocale( LC_ALL, "en-US" );

Nastaví všechny kategorie vrací pouze řetězec

en-US

Můžete použít ukazatel na řetězec vrácený setlocale v následných výzev k obnovení část informací o národním prostředí programu, za předpokladu, že váš program nemění řetězce nebo ukazatele.Dále volá na setlocale přepsat řetězec, který umožňuje ukazatele řetězec vrácený voláním starší platné.Můžete použít _strdup Chcete-li uložit kopii řetězce specifické národní prostředí.

Poznámky

Použití setlocale funkci, kterou chcete nastavit, změnit nebo dotazy určené aktuální informace o programu národního prostředí locale a category.localeodkazuje na místo (země/oblast a jazyk), pro kterou můžete přizpůsobit některé aspekty vašeho programu.Některé kategorie závislé na národním prostředí obsahují formátování data nebo zobrazovací formát pro peněžní hodnoty.Nastavíte-li locale na výchozí řetězec pro jazyk s více formulářů, které jsou podporovány ve vašem počítači, měli byste zkontrolovat setlocale návratový kód pro jazyk, který je v platnosti.Například použití "čínština" by mohl způsobit vrácená hodnota chinese-simplified nebo chinese-traditional.

_wsetlocaleje verzí širokého znaku setlocale; locale argument a vrací hodnotu _wsetlocale jsou řetězci širokého znaku._wsetlocalea setlocale jinak chovat identicky.

Mapování rutiny obecného textu

TCHAR.Byla zahájena rutina h

_UNICODE & _MBCS není definováno

_MBCS, definice

_UNICODE definována

_tsetlocale

setlocale

setlocale

_wsetlocale

category Argument určuje části informací o národním prostředí programu, které jsou ovlivněny.Makra pro category a části programu, které ovlivňují jsou následující:

  • LC_ALL
    Všechny kategorie, jak je uvedeno níže.

  • LC_COLLATE
    The strcoll, _stricoll, wcscoll, _wcsicoll, strxfrm, _strncoll, _strnicoll, _wcsncoll, _wcsnicoll, and wcsxfrm functions.

  • LC_CTYPE
    Funkce zpracování znaků (s výjimkou isdigit, isxdigit, mbstowcs, a mbtowc, které jsou ovlivněny).

  • LC_MONETARY
    Formátování měnovou informace vrácené localeconv funkce.

  • LC_NUMERIC
    Desetinnou znak pro rutiny formátovaný výstup (jako je například printf), pro převod dat rutin a nefinanční formátovací informace vrácené localeconv. Kromě znak desetinné čárky LC_NUMERIC sady tisíců oddělovač a sdružení řídit také řetězec vrácený localeconv.

  • LC_TIME
    strftime a wcsftime funkce.

Tato funkce ověřuje parametr category.Je-li parametr kategorie je jedna z hodnot uvedených v tabulce, je vyvolána obslužná rutina neplatný parametr, jak je popsáno v Ověření parametrů.Pokud je povoleno spuštění pokračovat, nastaví funkce errno na EINVAL a vrátí NULL.

locale Argument je ukazatel na řetězec, který určuje národní prostředí.Informace o formátu locale argument, viz Řetězce s názvy národních prostředí, jazyků a zemí/oblastí.Pokud locale odkazuje na prázdný řetězec, národní prostředí je definován implementace nativního prostředí.Hodnota C Určuje minimální prostředí vyhovující standardu ANSI C překlad.C Národního prostředí předpokládá, že všechny char 1 bajt jsou datové typy a jejich hodnota je vždy menší než 256.

Při spuštění programu se spustí ekvivalentní následující příkaz:

setlocale( LC_ALL, "C" );

locale Argument přijímá název národního prostředí, řetězec jazyka, řetězec jazyka a kód země/oblasti, znaková stránka nebo řetězec jazyka, kód země a znakové stránky.Sada k dispozici místní názvy, jazyky, kódy země a znakové stránky zahrnuje všechny jsou podporovány NLS API systému Windows s výjimkou znakových stránek, které vyžadují více než dva bajty na znak, například UTF-7 a UTF-8.Pokud zadáte kód stránky jako UTF-7 nebo UTF-8, setlocale se nezdaří, vrací hodnotu NULL.Nastavení národního prostředí názvy podporovaných setlocale jsou popsány v Řetězce s názvy národních prostředí, jazyků a zemí/oblastí.Nastavení jazyka a země či oblasti řetězce, které jsou podporovány setlocale jsou uvedeny v Jazyk řetězce a Země/oblast řetězce.

Ukazatel s hodnotou null je předán jako locale argument určuje setlocale dotazu, spíše než nastavit mezinárodního prostředí.Pokud locale argument je nulový ukazatel, nezmění se aktuální nastavení národního prostředí programu.Místo toho setlocale vrací ukazatel na řetězec přidružený k category národního prostředí aktuálního vlákna.Pokud category argument je LC_ALL, vrátí funkce řetězec označující aktuální nastavení všech kategorií, které jsou odděleny středníky.Například posloupnost volání

// 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));

Vrátí

LC_COLLATE=en-US;LC_CTYPE=en-US;LC_MONETARY=fr-FR;LC_NUMERIC=en-US;LC_TIME=en-US

což je řetězec přidružený LC_ALL kategorie.

Následující příklady se týkají LC_ALL kategorie.Buď řetězce ".OCP "a".AKT"lze použít místo čísla stránky kód zadat použití znaková stránka OEM výchozí nastavení uživatele a uživatele výchozí znaková stránka ANSI, respektive.

  • setlocale( LC_ALL, "" );
    Nastaví národní prostředí na výchozí hodnoty, které je uživatel výchozí znaková stránka ANSI získané z operačního systému.

  • setlocale( LC_ALL, ".OCP" );
    Explicitně nastaví národní prostředí na aktuální znakovou stránku OEM získané z operačního systému.

  • setlocale( LC_ALL, ".ACP" );
    Nastaví národní prostředí na znakovou stránku ANSI, získané z operačního systému.

  • setlocale( LC_ALL, "<localename>" );
    Nastaví národní prostředí na název národního prostředí, které jsou označeny <localename>.

  • setlocale( LC_ALL, "<language>_<country>" );
    Nastaví národní prostředí jazyka a země či oblasti, které jsou označeny <language> a <country>, pomocí výchozí kódové stránce získané z operačního systému hostitele.

  • setlocale( LC_ALL, "<language>_<country>.<code_page>" );
    Nastaví národní prostředí jazyka, země a znakové stránky označen <language>, <country>, a <code_page> řetězce.Můžete použít různé kombinace jazyka, země a znakové stránky.Příklad:

    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>" );
    Nastaví národní prostředí pro jazyk označený <language>, pomocí výchozí země/oblasti pro jazyk zadaný a uživatele výchozí znaková stránka ANSI pro danou zemi/oblast jako získané z operačního systému hostitele.Například následující volání setlocale jsou funkčně ekvivalentní:

    setlocale( LC_ALL, "en-US" );
    setlocale( LC_ALL, "English" );
    setlocale( LC_ALL, "English_United States.1252" );
    
  • setlocale( LC_ALL, ".<code_page>" );
    Nastaví znakovou stránku hodnota určená v <code_page>, pomocí výchozí zemi nebo oblast a jazyk (podle definice hostitelský operační systém) pro zadanou znakovou stránku.

Kategorie musí být buď LC_ALL nebo LC_CTYPE Chcete-li provést změnu znakové stránky.Například pokud na výchozí zemi nebo oblast a jazyk operačního systému hostitele "USA" a "Angličtina", následující dvě volání setlocale jsou funkčně ekvivalentní:

setlocale( LC_ALL, ".1252" );

setlocale( LC_ALL, "English_United States.1252");

Další informace naleznete setlocale pragma v Preprocesor odkaz.

Funkce _configthreadlocale se používá pro kontrolu, zda setlocale ovlivňuje národní prostředí ze všech vláken v programu nebo pouze národní prostředí do volajícího vlákna.

Požadavky

Byla zahájena rutina

Požadované záhlaví

setlocale

<locale.h>

_wsetlocale

<locale.h> nebo <wchar.h>

Další informace o kompatibilitě, viz Compatibility v úvodu.

Příklad

// 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 );
}
  
  
  
  

Ekvivalent v rozhraní .NET Framework

Třída System::Globalization::CultureInfo

Viz také

Referenční dokumentace

Řetězce s názvy národních prostředí, jazyků a zemí/oblastí

_configthreadlocale

_create_locale, _wcreate_locale

Národní prostředí

localeconv

_mbclen, mblen, _mblen_l

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

mbstowcs _mbstowcs_l

mbtowc _mbtowc_l

_setmbcp

Funkce strcoll

Funkce STRFTIME, wcsftime, _strftime_l, _wcsftime_l

strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l

wcstombs _wcstombs_l

wctomb _wctomb_l