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(<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 );
}
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í
_create_locale, _wcreate_locale
strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
Funkce STRFTIME, wcsftime, _strftime_l, _wcsftime_l