Namespaces
Variants

std:: setlocale

From cppreference.net
Défini dans l'en-tête <clocale>
char * setlocale ( int category, const char * locale ) ;

La fonction setlocale installe la locale système spécifiée ou une partie de celle-ci comme nouvelle locale C. Les modifications restent en vigueur et influencent l'exécution de toutes les fonctions de la bibliothèque C sensibles à la locale jusqu'au prochain appel à setlocale . Si locale est un pointeur nul, setlocale interroge la locale C actuelle sans la modifier.

Table des matières

Paramètres

catégorie - identifiant de catégorie de paramètres régionaux, l'une des macros LC_xxx . Peut être 0 .
locale - identifiant de paramètres régionaux spécifique au système. Peut être "" pour les paramètres régionaux préférés de l'utilisateur ou "C" pour les paramètres régionaux minimaux

Valeur de retour

Pointeur vers une chaîne de caractères étroite terminée par un caractère nul identifiant les paramètres régionaux C après application des modifications, le cas échéant, ou pointeur nul en cas d'échec.

Une copie de la chaîne retournée ainsi que la catégorie utilisée dans cet appel à std::setlocale peut être utilisée ultérieurement dans le programme pour restaurer les paramètres régionaux à l'état qu'ils avaient à la fin de cet appel.

Notes

Pendant le démarrage du programme, l'équivalent de std :: setlocale ( LC_ALL , "C" ) ; est exécuté avant qu'aucun code utilisateur ne soit lancé.

Bien que le type de retour soit char * , modifier les caractères pointés est un comportement indéfini.

Étant donné que setlocale modifie l'état global qui affecte l'exécution des fonctions dépendantes de la locale, il s'agit d'un comportement indéfini de l'appeler depuis un thread, tandis qu'un autre thread exécute l'une des fonctions suivantes : 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 définit également un locale nommé "POSIX" , qui est toujours accessible et est exactement équivalent au locale minimal par défaut "C" .

POSIX spécifie également que le pointeur retourné, et pas seulement le contenu de la chaîne pointée, peut être invalidé par des appels ultérieurs à setlocale .

Exemple

#include <clocale>
#include <cstdio>
#include <ctime>
#include <cwchar>
#include <iterator>
#include <string>
int main()
{
    // Crée une copie profonde du nom de locale actuel.
    std::string prev_loc = std::setlocale(LC_ALL, nullptr);
    // La locale C sera l'anglais avec support UTF-8,
    // le séparateur décimal sera l'allemand,
    // le formatage de date et heure sera japonais.
    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);
    // Restaure la locale précédente.
    if (const char* loc = std::setlocale(LC_ALL, prev_loc.c_str()))
        std::wprintf(L"Restorred LC_ALL locale: %s\n", loc);
}

Sortie possible :

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

Voir aussi

catégories de paramètres régionaux pour std::setlocale
(constante macro)
ensemble de facettes polymorphes qui encapsulent les différences culturelles
(classe)
Documentation C pour setlocale

Liens externes

1. Liste des noms de paramètres régionaux Windows .
2. Liste des noms de paramètres régionaux Linux .