Namensräume
Varianten
Aktionen

std::setlocale

Von cppreference.com
< cpp‎ | locale
 
 
 
 
Definiert in Header <clocale>
char* setlocale( int category, const char* locale );

Die Funktion setlocale installiert die angegebene Systemlokalisierung oder einen Teil davon als neue C-Lokalisierung. Die Änderungen bleiben bestehen und beeinflussen die Ausführung aller lokalisierungsabhängigen C-Bibliotheksfunktionen, bis zum nächsten Aufruf von setlocale. Wenn locale ein Nullzeiger ist, fragt setlocale die aktuelle C-Lokalisierung ab, ohne sie zu ändern.

Inhalt

[bearbeiten] Parameter

category - Lokalisierungskategorie-Identifikator, einer der Makros LC_xxx. Kann 0 sein.
locale - Systemspezifischer Lokalisierungsidentifikator. Kann "" für die vom Benutzer bevorzugte Lokalisierung oder "C" für die minimale Lokalisierung sein.

[bearbeiten] Rückgabewert

Zeiger auf eine schmale, nullterminierte Zeichenkette, die die C-Lokalisierung nach Anwendung der Änderungen identifiziert, oder ein Nullzeiger im Fehlerfall.

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

[bearbeiten] Hinweise

Beim Programmstart wird die Entsprechung von std::setlocale(LC_ALL, "C"); ausgeführt, bevor irgendein Benutzercode läuft.

Obwohl der Rückgabetyp char* ist, ist die Änderung der zeigenden Zeichen undefiniertes Verhalten.

Da setlocale den globalen Zustand modifiziert, der die Ausführung lokalisierungsabhängiger Funktionen beeinflusst, ist es undefiniertes Verhalten, es von einem Thread 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 auch eine Lokalisierung namens "POSIX", die immer zugänglich ist und exakt der Standard-Minimal-Lokalisierung "C" entspricht.

POSIX legt auch fest, dass der zurückgegebene Zeiger, nicht nur der Inhalt der zeigenden Zeichenkette, durch nachfolgende Aufrufe von setlocale ungültig werden kann.

[bearbeiten] Beispiel

#include <clocale>
#include <cstdio>
#include <ctime>
#include <cwchar>
#include <iterator>
#include <string>
 
int main()
{
    // Make a "deep copy" of current locale name.
    std::string prev_loc = std::setlocale(LC_ALL, nullptr);
 
    // The C locale will be UTF-8 enabled English,
    // decimal dot will be German,
    // date and time formatting will be Japanese.
    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);
 
    // Restore the previous locale.
    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

[bearbeiten] Siehe auch

Lokalisierungskategorien für std::setlocale
(Makrokonstante) [bearbeiten]
Satz von polymorphen Facetten, die kulturelle Unterschiede kapseln
(Klasse) [bearbeiten]
C-Dokumentation für setlocale

[bearbeiten] Externe Links

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