Freigeben über


setlocale, _wsetlocale

Satz oder rufen das Ablaufgebietsschema ab.

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

Parameter

  • category
    Kategorie wirkt sich auf Gebietsschema.

  • locale
    Gebietsschemaspezifizierer.

Rückgabewert

Wenn gültiges locale und category angegeben werden, gibt, die ein Zeiger auf die Zeichenfolge mit angegebenen locale und category zugeordnet sind.Wenn locale oder category ungültig ist, gibt einen NULL-Zeiger zurück und die aktuellen Gebietsschemaeinstellungen des Programms werden nicht geändert.

Beispielsweise der Aufruf

setlocale( LC_ALL, "en-US" );

legt alle Kategorien fest und gibt nur die Zeichenfolge zurück

en-US

Sie können den Zeichenfolgenzeiger verwenden, der von setlocale in nachfolgenden Aufrufen zurückgegeben wird, um diesen Teil der Gebietsschemainformationen des Programms wiederherstellen und davon ausgehen, dass das Programm nicht den Zeiger oder die Zeichenfolge geändert.In späteren Aufrufe setlocale überschreiben die Zeichenfolge, die die Zeichenfolgenzeiger macht, die nicht mehr von früheren Aufrufe gültig zurückgegeben werden.Sie können _strdup verwenden, um eine Kopie einer bestimmten Gebietsschemazeichenfolge zu speichern.

Hinweise

Verwenden Sie die setlocale-Funktion, um einige oder alle Gebietsschemainformationen des aktuellen Programms festzulegen, zu ändern oder abzufragen, die von locale und category angegeben werden.locale bezieht sich auf die Stelle an (Land/Region und Sprache) für die Sie bestimmte Aspekte des Programms anpassen können.Vom Gebietsschema abhängig sind u. a. Datumsformat und Währungsformat.Wenn Sie die locale in die Zeichenfolge für eine Sprache mit mehreren Formularen, die auf den Computer unterstützt werden, den Sie setlocale Rückgabecode überprüft, um festzustellen, welche Sprache gültig ist.Bei Verwendung von "Chinesisch" konnte einen Rückgabewert von chinese-simplified oder von chinese-traditional führen.

_wsetlocale ist eine Breitzeichen-Version von setlocale; locale das Argument und der Rückgabewert von _wsetlocale sind Breitzeichen-Zeichenfolgen._wsetlocale und setlocale verhalten sich andernfalls identisch.

Zuordnung generische Textroutinen

TCHAR.H-Routine

_UNICODE & _MBCS nicht definiert.

_MBCS definiert

_UNICODE definiert

_tsetlocale

setlocale

setlocale

_wsetlocale

Das category-Argument gibt die Teile von Gebietsschemainformationen eines Programms an, die beeinflusst werden.Die Makros verwendet für category und die Teile des Programms, das sie sind beeinflussen, wie folgt:

  • LC_ALL
    Alle Kategorien, wie unten aufgeführt.

  • LC_COLLATE
    strcoll, _stricoll, wcscoll, _wcsicoll, strxfrm, _strncoll, _strnicoll, _wcsncoll, _wcsnicoll und wcsxfrm-Funktionen.

  • LC_CTYPE
    Die ZeichenBehandlungsfunktionen (außer isdigit, isxdigit, mbstowcs und mbtowc, die nicht betroffen sind).

  • LC_MONETARY
    Währungs-Formatierungsinformationen zurückgegeben durch die localeconv-Funktion.

  • LC_NUMERIC
    Dezimaltrennzeichenzeichen für die formatierten Ausgabeprogramme (z printf), für die Datenkonvertierungsroutinen und für die nicht-monetären Formatierungsinformationen durch localeconv zurückgegeben. Zusätzlich zum Dezimaltrennzeichenzeichen legt LC_NUMERIC auch das Tausendertrennzeichen und die Gruppierungs- Steuerzeichenfolge fest, die von localeconv zurückgegeben werden.

  • LC_TIME
    Die strftime und wcsftime-Funktionen.

Diese Funktion überprüft den Kategorienparameter.Wenn der Kategorienparameter keiner der Werte handelt, die in der obigen Tabelle angegeben werden, wird der ungültige Parameterhandler aufgerufen, wie in Parametervalidierung beschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, legt die Funktion errno zu EINVAL fest und gibt NULL zurück.

Das locale-Argument ist ein Zeiger auf eine Zeichenfolge, die das Gebietsschema angibt.Informationen zum Format des locale-Arguments, finden Sie unter Zeichenfolgen in lokalen Namen, Sprach- und Länder-/Regionseinstellungen.Wenn locale zu einer leeren Zeichenfolge zeigt, ist das Gebietsschema die Implementierung-definierte systemeigene Umgebung.Ein Wert von C gibt die minimale anpassende Umgebung ANSIs für C-Übersetzung an.Das C Gebietsschema wird davon ausgegangen, dass alle char Datentypen 1 Byte sind und dass ihr Wert immer kleiner als 256 ist.

Am Programmstart wird die Entsprechung der folgenden Anweisung ausgeführt:

setlocale( LC_ALL, "C" );

Das Argument kann einen locale Gebietsschemanamen annehmen, eine Sprachenzeichenfolge, eine Sprachenzeichenfolge und ein Land/Regions-Code, eine Codepage oder eine Sprachenzeichenfolge, ein Land/Regions-Code und eine Codepage.Der Satz verfügbarer Gebietsschemanamen, von Sprachen, von Land/Regions-Codes und von Codepages umfasst alle, die durch die Windows-NLSAPI außer Codepages unterstützt werden, die mehr als zwei Bytes pro Zeichen, wie UTF-7 und UTF-8 erfordern.Wenn Sie eine Codepage wie UTF-7 oder UTF-8 bereitstellen, schlägt setlocale aus und gibt NULL zurück.Die den Gebietsschemanamen, die von setlocale unterstützt werden, werden in Zeichenfolgen in lokalen Namen, Sprach- und Länder-/Regionseinstellungen beschrieben.Der Satz von der Sprache und Land/Region reiht unterstütztes durch setlocale aufgeführt werden in Sprachzeichenfolgen und in Land/Regions-Zeichenfolgen auf.

Ein NULL-Zeiger, der als - locale-Argument übergeben wird, wird setlocale mit, um abzufragen anstatt legen Sie die internationale Umgebung.Wenn das locale-Argument ein NULL-Zeiger ist, wird die aktuelle Gebietsschemaeinstellung des Programms nicht geändert.Stattdessen gibt setlocale einen Zeiger auf die Zeichenfolge zurück, die mit category des aktuellen Gebietsschemas des Threads zugeordnet wird.Wenn das Argument categoryLC_ALL ist, gibt die Funktion eine Zeichenfolge zurück, die die aktuelle Einstellung der einzelnen Kategorien angibt, getrennt durch Semikolons.Beispielsweise die Reihenfolge der Aufrufe

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

hat den Rückgabewert

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

mit der Zeichenfolge ist, die mit der LC_ALL Kategorie zugeordnet ist.

Die folgenden Beispiele beziehen sich auf die LC_ALL Kategorie.Einige der Zeichenfolgen ".OCP" und ".ACP" kann anstelle einer Codepageseitenzahl verwendet werden, um die Verwendung von der Codepage des Anwenderstandards OEM und Anwenderstandard ANSI-Codepage anzugeben, bzw.

  • setlocale( LC_ALL, "" );
    Legt das Gebietsschema zum Standardwert fest, der die Anwenderstandard ANSI-Codepage vom Betriebssystem abgerufen wird.

  • setlocale( LC_ALL, ".OCP" );
    Legt das Gebietsschema explizit zur Codepage des aktuellen OEM vom Betriebssystem abgerufen fest.

  • setlocale( LC_ALL, ".ACP" );
    Legt das Gebietsschema der ANSI-Codepage vom Betriebssystem abgerufen fest.

  • setlocale( LC_ALL, "<localename>" );
    Legt das Gebietsschema dem Gebietsschemanamen fest, der durch <localename> angegeben wird.

  • setlocale( LC_ALL, "<language>_<country>" );
    Legt das Gebietsschema der Sprache fest und das Land/die Region, das von <language> und <country>, mithilfe der standardmäßigen Codepage angegeben wurde, wurde vom Hostbetriebssystem.

  • setlocale( LC_ALL, "<language>_<country>.<code_page>" );
    Legt das Gebietsschema der Sprache, dem Land/Region und zur Codepage, die von <language>, <country> und <code_page> Zeichenfolgen angegeben wird fest.Sie können verschiedene Kombinationen der Sprache, Land/Region und Codepage verwenden.Beispiel:

    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>" );
    Legt das Gebietsschema der Sprache, die von <language>, mithilfe des standardmäßigen Land/Region für die Sprache festgelegt wird, die angegeben wird, und die Anwenderstandard ANSI-Codepage für dieses Land/Region, wie vom Hostbetriebssystem erhalten.Beispielsweise sind die folgenden Aufrufe setlocale funktional äquivalent:

    setlocale( LC_ALL, "en-US" );
    setlocale( LC_ALL, "English" );
    setlocale( LC_ALL, "English_United States.1252" );
    
  • setlocale( LC_ALL, ".<code_page>" );
    Legt die Codepage auf den Wert fest, der durch <code_page>, mithilfe des standardmäßigen Land/Region und der Sprache angegeben wird (wie durch das Hostbetriebssystem definiert) für die angegebene Codepage.

Die Kategorie muss entweder LC_ALL oder LC_CTYPE sein, um eine Änderung der Codepage auszuführen.Wenn das standardmäßige Land/Region und die Sprache des Hostbetriebssystems "USA" und "Englisch" sind, sind die folgenden beiden Aufrufe setlocale funktional äquivalent:

setlocale( LC_ALL, ".1252" );

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

Weitere Informationen finden Sie unter setlocale Pragma in der Präprozessorreferenz.

Die Funktion _configthreadlocale wird verwendet, um zu steuern, ob setlocale das Gebietsschema aller Threads in einem Programm oder nur das Gebietsschema des aufrufenden Thread beeinflusst.

Anforderungen

Routine

Erforderlicher Header

setlocale

<locale.h>

_wsetlocale

<locale.h> oder <wchar.h>

So zusätzlicher Kompatibilitätsinformation finden Sie unter Kompatibilität in der Einführung.

Beispiel

// 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-Entsprechung

System::Globalization::CultureInfo-Klasse

Siehe auch

Referenz

Zeichenfolgen in lokalen Namen, Sprach- und Länder-/Regionseinstellungen

_configthreadlocale

_create_locale, _wcreate_locale

Gebietsschema

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 Funktionen

strftime, wcsftime, _strftime_l, _wcsftime_l

strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l