Condividi tramite


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(&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 );
}
  
  
  
  

Equivalente .NET Framework

Classe di System::Globalization::CultureInfo

Vedere anche

Riferimenti

Nomi delle impostazioni locali, lingue e stringhe relative a paesi

_configthreadlocale

_create_locale, _wcreate_locale

Impostazioni locali

localeconv

_mbclen, mblen, _mblen_l

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

mbstowcs, _mbstowcs_l

mbtowc, _mbtowc_l

_setmbcp

funzioni di strcoll

strftime, wcsftime, _strftime_l, _wcsftime_l

strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l