setlocale, _wsetlocale
Il set o recuperare le impostazioni locali in fase di esecuzione.
char *setlocale(
int category,
const char *locale
);
wchar_t *_wsetlocale(
int category,
const wchar_t *locale
);
Parametri
category
Categoria influenzata dalle impostazioni locali.locale
Identificatore delle impostazioni locali.
Valore restituito
Se locale valido e category inclusi, restituisce un puntatore alla stringa associata a locale specificato e category.Se locale o category non è valido, restituisce un puntatore null e le impostazioni locali correnti del programma non vengono modificate.
Ad esempio, la chiamata
setlocale( LC_ALL, "en-US" );
impostare tutte le categorie, restituire solo la stringa
en-US
È possibile utilizzare il puntatore di stringa restituita da setlocale le chiamate successive per ripristinare la parte delle impostazioni locali del programma, presupponendo che il programma non modifica il puntatore o la stringa.Le chiamate successive a setlocale sovrascrivono la stringa, che rende i puntatori di stringa non restituiti dalle chiamate precedenti più validi.È possibile utilizzare _strdup per salvare una copia di una stringa specifica delle impostazioni locali.
Note
Utilizzare la funzione di setlocale per impostare, modificare, o interrogare alcune o tutte le informazioni sulle impostazioni locali del programma corrente specificati da locale e da category.locale si riferisce alla località (paese e lingua) per il quale è possibile personalizzare alcuni aspetti del programma.Alcune categorie dipendenti dalle impostazioni locali includono la formattazione delle date e il formato di visualizzazione dei valori monetari.Se locale impostato sulla stringa predefinita per un linguaggio con più form di supporto sul computer, si selezionano il codice restituito di setlocale per visualizzare il linguaggio è attiva.Ad esempio, utilizzando "cinese" potrebbe provocare un valore restituito di chinese-simplified o di chinese-traditional.
_wsetlocale è una versione a caratteri estesi di setlocale; l'argomento di locale e il valore restituito di _wsetlocale sono stringhe di caratteri estesi._wsetlocale e setlocale si comportano in modo identico in caso contrario.
Mapping di routine a Testo generico
TCHAR.H routine |
_UNICODE & _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tsetlocale |
setlocale |
setlocale |
_wsetlocale |
L'argomento di category specifica le parti delle impostazioni locali di un programma interessate.Le macro utilizzate per category e le parti del programma che interessano sono:
LC_ALL
Tutte le categorie, come elencate di seguito.LC_COLLATE
strcoll, _stricoll, wcscoll, _wcsicoll, strxfrm, _strncoll, _strnicoll, _wcsncoll, _wcsnicolle funzioni di wcsxfrm.LC_CTYPE
Le funzioni di caratteri gestione (eccetto isdigit, isxdigit, mbstowcse mbtowc, che non vengono influenzati).LC_MONETARY
Informazioni di formattazione Monetario- restituite dalla funzione di localeconv.LC_NUMERIC
Carattere del separatore decimale per le routine di output formattato come printf), per le routine di conversione di dati e per le informazioni non monetarie di formattazione restituite da localeconv. Oltre al carattere separatore decimale, LC_NUMERIC imposta il separatore delle migliaia e la stringa di raggruppamento del controllo restituiti da localeconv.LC_TIME
Le funzioni di wcsftime e di strftime.
Questa funzione convalida il parametro della categoria.Se il parametro di categoria non è uno dei valori forniti nella tabella precedente, il gestore non valido di parametro viene richiamato, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, la funzione imposta errno a EINVAL e restituisce NULL.
L'argomento di locale è un puntatore a una stringa che specifica le impostazioni locali.Per informazioni sul formato di un argomento di locale, vedere Nomi delle impostazioni locali, lingue e stringhe relative a paesi.Se i punti di locale su una stringa vuota, le impostazioni locali è l'ambiente nativo implementazione definito.Un valore di C specifica l'ambiente conformantesi minimo ANSI per la conversione di C.Le impostazioni locali di C si presuppone che tutti i tipi di dati di char siano di 1 byte e che il relativo valore è sempre minore di 256.
All'avvio del programma, l'equivalente dell'istruzione viene eseguita:
setlocale( LC_ALL, "C" );
L'argomento di locale può accettare un nome delle impostazioni locali, una stringa di linguaggio, una stringa di linguaggio e un codice area a un paese, una tabella codici, o una stringa di linguaggio, un codice area a un paese e una tabella codici.Il set di nomi delle impostazioni locali disponibili, di linguaggi, di codici area a un paese e di tabelle codici include tutto quelli supportati dalle finestre il NLS API eccetto le tabelle codici che richiedono più di due byte per carattere, come UTF-7 e UTF-8.Se si fornisce una tabella codici come UTF-7 o UTF-8, setlocale ha esito negativo, restituisce NULL.Il set di nomi delle impostazioni locali supportate da setlocale viene descritto in Nomi delle impostazioni locali, lingue e stringhe relative a paesi.Il set di stringhe di lingua e il paese supportate da setlocale è elencato in Stringhe di linguaggio e in Stringhe area a un paese/regione.
Un puntatore null passato come argomento di locale indica setlocale di eseguire query anziché ambiente internazionale.Se l'argomento di locale è un puntatore null, l'impostazione locale corrente del programma non viene modificata.Invece, setlocale restituisce un puntatore alla stringa associata a category delle impostazioni locali correnti del thread.Se l'argomento di category è LC_ALL, la funzione restituisce una stringa che indica l'impostazione corrente di tutte le categorie, separati da punto e virgola.Ad esempio, la sequenza di chiamate
// 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));
restituisce
LC_COLLATE=en-US;LC_CTYPE=en-US;LC_MONETARY=fr-FR;LC_NUMERIC=en-US;LC_TIME=en-US
quale è la stringa associata alla categoria di LC_ALL.
Negli esempi seguenti vengono illustrate la categoria di LC_ALL.Una delle stringhe ".OCP" e ".ACP" può essere utilizzata al posto di un numero della tabella codici per specificare l'utilizzo della tabella codici dell'impostazione predefinita OEM e la tabella codici ANSI dell'impostazione predefinita, rispettivamente.
setlocale( LC_ALL, "" );
Imposta le impostazioni locali per impostazione predefinita, ovvero la tabella codici ANSI dell'impostazione predefinita ottenuta dal sistema operativo.setlocale( LC_ALL, ".OCP" );
Imposta in modo esplicito le impostazioni locali la tabella codici corrente OEM ottenuta dal sistema operativo.setlocale( LC_ALL, ".ACP" );
Imposta le impostazioni locali la tabella codici ANSI ottenuta dal sistema operativo.setlocale( LC_ALL, "<localename>" );
Imposta le impostazioni locali al nome delle impostazioni locali indicato da <localename>.setlocale( LC_ALL, "<language>_<country>" );
Imposta le impostazioni locali del linguaggio e al paese indicata da <language> e da <country>, utilizzando la tabella codici predefinita ottenuta dal sistema operativo host.setlocale( LC_ALL, "<language>_<country>.<code_page>" );
Imposta le impostazioni locali della lingua, il paese e la tabella codici indicata da <language>, da <country>e le stringhe di <code_page>.È possibile utilizzare varie combinazioni di lingua, il paese e alla tabella codici.Ad esempio: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>" );
Imposta le impostazioni locali al linguaggio indicato da <language>, utilizzando il paese predefinito per la lingua specificata e la tabella codici ANSI dell'impostazione predefinita per tali paese come ottenuto dal sistema operativo host.Ad esempio, nelle chiamate a setlocale sono equivalenti a livello funzionale:setlocale( LC_ALL, "en-US" ); setlocale( LC_ALL, "English" ); setlocale( LC_ALL, "English_United States.1252" );
setlocale( LC_ALL, ".<code_page>" );
Imposta la tabella codici al valore indicato da <code_page>, utilizzando il paese e il linguaggio predefiniti (come definito dal sistema operativo host) per la tabella codici specificata.
La categoria deve essere LC_ALL o LC_CTYPE per eseguire una modifica di tabelle codici.Ad esempio, se il paese e la lingua predefinita del sistema operativo host sono "US" e "english", le due chiamate a setlocale sono equivalenti a livello funzionale:
setlocale( LC_ALL, ".1252" );
setlocale( LC_ALL, "English_United States.1252");
Per ulteriori informazioni vedere pragma di setlocalenel riferimento del preprocessore.
La funzione _configthreadlocale utilizzata per controllare se setlocale influiscono sulle impostazioni locali dei thread in un programma o solo le impostazioni locali del thread chiamante.
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
setlocale |
<locale.h> |
_wsetlocale |
<locale.h> o <wchar.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'introduzione.
Esempio
// 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 );
}
Equivalente .NET Framework
Classe di System::Globalization::CultureInfo
Vedere anche
Riferimenti
Nomi delle impostazioni locali, lingue e stringhe relative a paesi
_create_locale, _wcreate_locale
strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
strftime, wcsftime, _strftime_l, _wcsftime_l