Syntaxe
char *setlocale(int category, const char *locale);
|
Paramètres
Nom |
Description |
category |
Ce paramètre permet d'indiquer la catégorie de variable locale : |
LC_ALL |
Cette valeur permet d'indiquer toutes les catégories. |
LC_COLLATE |
Cette valeur permet d'indiquer la catégorie de comparaison de chaîne de caractères. |
LC_CTYPE |
Cette valeur permet d'indiquer la catégorie de classification ainsi que de conversion de chaîne de caractères. |
LC_MESSAGES |
Cette valeur permet d'indiquer la catégorie de réponse du système d'exploitation. |
LC_MONETARY |
Cette valeur permet d'indiquer la catégorie de valeur monétaire et de devise. |
LC_NUMERIC |
Cette valeur permet d'indiquer la catégorie de décimal. |
LC_TIME |
Cette valeur permet d'indiquer la catégorie de temps. |
locale |
Ce paramètre permet d'indiquer le nom de la variable locale |
Description
Cette fonction permet de modifier des requêtes sur les paramètres régionales locale du programme.
Remarques
- La fonction setlocale() permet d'interroger ou de définir certains paramètres sensibles à l'environnement géopolitique de l'exécution d'un programme. Si locale est null,
la fonction setlocale() renvoie un pointeur sur la chaîne de caractères de localisation actuelle. Sinon, la fonction setlocale() tente d'utiliser la chaîne de caractères spécifiée par locale pour définir les
paramètres de locale spécifiés par category.
- La fonction setlocale() renvoie un pointeur sur une chaîne associée au paramètre category.
- Définition et utilité : La fonction setlocale fait partie de la bibliothèque <clocale> en C++ et <locale.h> en C. Elle permet de configurer les
paramètres régionaux (locale) d'un programme, influençant ainsi le comportement de certaines fonctions liées à l'affichage des nombres, à la gestion des caractères et au tri de
chaînes de caractères.
- Valeur de retour et vérification : setlocale retourne un pointeur vers la chaîne indiquant la locale actuellement utilisée. Si la locale
spécifiée est invalide ou non supportée, la fonction retourne NULL. Il est important de toujours vérifier la valeur de retour pour éviter des erreurs. Exemple :
- if (setlocale(LC_ALL, "es_ES.utf8") == NULL) {
- std::cerr << "Échec de la définition de la locale !" << std::endl;
- }
- Utilisation de "C" et "" comme valeurs spéciales : "C" (ou NULL) : Définit la locale par défaut du C standard, indépendante de la langue de l'utilisateur.
"" (chaîne vide) : Adapte automatiquement la locale en fonction des paramètres régionaux du système. Exemple :
- setlocale(LC_ALL, "C"); // Utilise la locale par défaut du langage C
- setlocale(LC_ALL, ""); // Utilise la locale du système
- Impact sur les fonctions standard : setlocale influence plusieurs fonctions standard de C et C++, notamment :
Fonction |
Description |
printf et scanf |
Affecte le format des nombres flottants (, ou .). |
strftime |
Modifie le format des dates et heures. |
tolower et toupper |
Dépendent de LC_CTYPE pour le traitement des caractères spéciaux. |
strcoll et strxfrm |
Utilisent LC_COLLATE pour comparer et trier les chaînes de manière spécifique à la langue. |
- Compatibilité et dépendance au système : La disponibilité des locales dépend du système d'exploitation. Certaines locales peuvent ne pas être supportées
sur Windows mais fonctionner sous Linux ou macOS. Sur certains systèmes
Unix/Linux, la commande locale -a permet de lister les locales disponibles.
Sous Windows, les locales utilisent souvent des noms légèrement différents, comme "French_France.1252" au lieu de "fr_FR.utf8".
- Utilisation avec std::locale en C++ moderne : En C++ moderne, il est souvent préférable d'utiliser la classe std::locale de la bibliothèque
<locale> plutôt que setlocale, car elle offre une gestion plus fine et sûre des paramètres régionaux, notamment pour les flux d'entrée et sortie
(std::cout, std::cin). Exemple :
- #include <iostream>
- #include <locale>
-
- int main() {
- std::locale::global(std::locale("fr_FR.utf8"));
- std::cout.imbue(std::locale()); // Applique la locale aux flux
- std::cout << 1234.56 << std::endl; // Affichera 1 234,56 en français
- return 0;
- }
Exemple
Dans cette exemple, on définit la locale en français (fr_FR.utf8), ce qui influence le format des nombres et des dates :
- #include <iostream>
- #include <clocale>
-
- int main() {
- setlocale(LC_ALL, "fr_FR.utf8"); // Définit la locale française
- std::cout << "Locale actuelle : " << setlocale(LC_ALL, NULL) << std::endl;
- return 0;
- }
Dernière mise à jour : Vendredi, le 1er mai 2020