Namespaces
Variants

std:: setlocale

From cppreference.net
Definiert in Header <clocale>
char * setlocale ( int category, const char * locale ) ;

Die setlocale -Funktion installiert das angegebene Systemgebietsschema oder einen Teil davon als neues C-Gebietsschema. Die Änderungen bleiben wirksam und beeinflussen die Ausführung aller gebietsschemaabhängigen C-Bibliotheksfunktionen bis zum nächsten Aufruf von setlocale . Wenn locale ein Nullzeiger ist, setlocale fragt das aktuelle C-Gebietsschema ab, ohne es zu modifizieren.

Inhaltsverzeichnis

Parameter

Kategorie - Lokalisierungs-Kategoriekennung, eine der LC_xxx Makros. Kann 0 sein.
Locale - Systemspezifische Lokalisierungskennung. Kann "" für die benutzerpräferierte Locale oder "C" für die minimale Locale sein

Rückgabewert

Zeiger auf eine schmale nullterminierte Zeichenkette, die die C-Locale nach Anwendung der Änderungen (falls vorhanden) identifiziert, oder Nullzeiger bei Fehlschlag.

Eine Kopie der zurückgegebenen Zeichenkette zusammen mit der in diesem Aufruf von std::setlocale verwendeten Kategorie kann später im Programm verwendet werden, um das Gebietsschema auf den Zustand am Ende dieses Aufrufs zurückzusetzen.

Hinweise

Während des Programmstarts wird das Äquivalent von std :: setlocale ( LC_ALL , "C" ) ; ausgeführt, bevor jeglicher Benutzercode läuft.

Obwohl der Rückgabetyp char * ist, ist das Modifizieren der gezeigten Zeichen undefiniertes Verhalten.

Da setlocale globalen Zustand verändert, der die Ausführung von lokalabhängigen Funktionen beeinflusst, ist es undefiniertes Verhalten, es von einem Thread aus aufzurufen, während ein anderer Thread eine der folgenden Funktionen ausführt: std::fprintf , std::isprint , std::iswdigit , std::localeconv , std::tolower , std::fscanf , std::ispunct , std::iswgraph , std::mblen , std::toupper , std::isalnum , std::isspace , std::iswlower , std::mbstowcs , std::towlower , std::isalpha , std::isupper , std::iswprint , std::mbtowc , std::towupper , std::isblank , std::iswalnum , std::iswpunct , std::setlocale , std::wcscoll , std::iscntrl , std::iswalpha , std::iswspace , std::strcoll , std::wcstod , std::isdigit , std::iswblank , std::iswupper , std::strerror , std::wcstombs , std::isgraph , std::iswcntrl , std::iswxdigit , std::strtod , std::wcsxfrm , std::islower , std::iswctype , std::isxdigit .

POSIX definiert ebenfalls ein Locale namens "POSIX" , das immer verfügbar ist und exakt dem standardmäßigen minimalen "C" -Locale entspricht.

POSIX legt ebenfalls fest, dass der zurückgegebene Zeiger, nicht nur der Inhalt der Zeichenkette, auf die gezeigt wird, durch nachfolgende Aufrufe von setlocale ungültig werden kann.

Beispiel

#include <clocale>
#include <cstdio>
#include <ctime>
#include <cwchar>
#include <iterator>
#include <string>
int main()
{
    // Erstelle eine "tiefe Kopie" des aktuellen Gebietsschemanamens.
    std::string prev_loc = std::setlocale(LC_ALL, nullptr);
    // Das C-Gebietsschema wird UTF-8-fähiges Englisch sein,
    // Dezimaltrennzeichen wird deutsch sein,
    // Datums- und Zeitformatierung wird japanisch sein.
    if (const char* loc = std::setlocale(LC_ALL, "en_US.UTF-8"))
        std::wprintf(L"New LC_ALL locale: %s\n", loc);
    if (const char* loc = std::setlocale(LC_NUMERIC, "de_DE.UTF-8"))
        std::wprintf(L"New LC_NUMERIC locale: %s\n", loc);
    if (const char* loc = std::setlocale(LC_TIME, "ja_JP.UTF-8"))
        std::wprintf(L"New LC_TIME locale: %s\n", loc);
    wchar_t buf[100];
    std::time_t t = std::time(nullptr);
    std::wcsftime(buf, std::size(buf), L"%A %c", std::localtime(&t));
    std::wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, buf);
    // Stelle das vorherige Gebietsschema wieder her.
    if (const char* loc = std::setlocale(LC_ALL, prev_loc.c_str()))
        std::wprintf(L"Restorred LC_ALL locale: %s\n", loc);
}

Mögliche Ausgabe:

New LC_ALL locale: en_US.UTF-8
New LC_NUMERIC locale: de_DE.UTF-8
New LC_TIME locale: ja_JP.UTF-8
Number: 3,14
Date: 日曜日 2022年11月06日 20時40分59秒
Restorred LC_ALL locale: C

Siehe auch

Gebietsschema-Kategorien für std::setlocale
(Makrokonstante)
Satz polymorpher Facetten, die kulturelle Unterschiede kapseln
(Klasse)
C-Dokumentation für setlocale

Externe Links

1. Liste der Windows-Gebietsschemanamen .
2. Liste der Linux-Gebietsschemanamen .