std:: setlocale
| 
           
           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 . |