setlocale, _wsetlocale
L'ensemble ou récupèrent les paramètres régionaux à l'exécution.
char *setlocale(
int category,
const char *locale
);
wchar_t *_wsetlocale(
int category,
const wchar_t *locale
);
Paramètres
category
Catégorie affectée par les paramètres régionaux.locale
Spécificateur de paramètres régionaux.
Valeur de retour
Si locale valide et category sont fournis, retourne un pointeur vers la chaîne a associés à locale spécifié et category.Si locale ou category est pas valide, retourne un pointeur null et les paramètres régionaux du programme ne sont pas modifiés.
Par exemple, l'appel
setlocale( LC_ALL, "en-US" );
définit les catégories, en retournant uniquement la chaîne
en-US
Vous pouvez utiliser le pointeur de chaînes retourné par setlocale dans les appels suivants pour restaurer cette partie des informations de paramètres régionaux du programme, en supposant que votre programme ne modifie pas le pointeur ou une chaîne.Les appels ultérieurs à setlocale remplacez la chaîne, qui rend les pointeurs de chaîne non retournés par des rappels plus valides.Vous pouvez utiliser _strdup pour enregistrer une copie d'une chaîne spécifique de paramètres régionaux.
Notes
Utilisez la fonction d' setlocale pour définir, modifier, ou en interroger ou toutes les informations de paramètres régionaux du programme en cours spécifiées par locale et category.locale fait référence à la localité (pays/région et langage) pour laquelle vous pouvez personnaliser certains aspects de votre programme.Certaines catégories dépendent des paramètres régionaux, notamment la mise en forme des dates et le format d'affichage des valeurs monétaires.Si vous définissez locale à la chaîne par défaut pour un langage avec plusieurs formulaires prises en charge sur votre ordinateur, vous devez vérifier le code de retour d' setlocale pour voir quel langage est appliquée.Par exemple, en utilisant « Chinois » pourrait entraîner une valeur de retour d' chinese-simplified ou d' chinese-traditional.
_wsetlocale est une version à caractère élargi d' setlocale; l'argument d' locale et la valeur de retour d' _wsetlocale sont des chaînes à caractères larges._wsetlocale et setlocale se comportent de sinon.
Mappages de routines de texte générique
Routine de TCHAR.H |
_UNICODE et non définis _MBCS |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_tsetlocale |
setlocale |
setlocale |
_wsetlocale |
L'argument d' category spécifie les parties des informations de paramètres régionaux d'un programme affectées.Les macros utilisées pour category et les parties du programme qu'elles affectent les sont les suivantes :
LC_ALL
Toutes les catégories, comme répertoriées ci-dessous.LC_COLLATE
strcoll, _stricoll, wcscoll, _wcsicoll, strxfrm, _strncoll, _strnicoll, _wcsncoll, _wcsnicoll, et fonctions d' wcsxfrm .LC_CTYPE
Les fonctions de gestion caractère- (sauf isdigit, isxdigit, mbstowcs, et mbtowc, qui ne sont pas affectés).LC_MONETARY
Les informations de mise en forme Monétaire- retournées par la fonction d' localeconv .LC_NUMERIC
Caractère de virgule décimale pour les routines de sortie mise en forme (par exemple printf), pour les routines de conversion de données, et pour des informations de mise en forme nonmonétaire retournée par localeconv. Outre le caractère de virgule décimale, LC_NUMERIC définit également le séparateur des milliers et la chaîne de contrôle de regroupement retournés par localeconv.LC_TIME
Les fonctions d' strftime et d' wcsftime .
Cette fonction valide le paramètre de catégorie.Si le paramètre de catégorie n'est pas l'une des valeurs fournies dans le tableau ci-dessus, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution pour continuer, la fonction définit errno à EINVAL et retourne NULL.
L'argument d' locale est un pointeur vers une chaîne qui spécifie les paramètres régionaux.Pour plus d'informations sur le format de l'argument d' locale, consultez Chaînes relatives aux noms, aux langues, au pays et à la région.Si les points d' locale à une chaîne vide, les paramètres régionaux est l'environnement natif implémentation défini.Une valeur d' C spécifie l'environnement de conformation minimal ANSI pour la traduction C.Les paramètres régionaux d' C supposent que tous les types de données d' char sont de 1 octets et que leur valeur est toujours moins de 256.
Au démarrage du programme, l'équivalent de l'instruction suivante est exécuté :
setlocale( LC_ALL, "C" );
L'argument d' locale peut prendre un nom des paramètres régionaux, une chaîne SQL, une chaîne de langue et un pays/région code, une page de codes, ou une chaîne SQL, un pays/région code, et une page de codes.L'ensemble des noms des paramètres régionaux disponibles, de langages, de pays ou de région codes, et de pages de codes inclut tous ceux pris en charge par l'API windows NLS exception de les pages de codes qui requièrent plus de deux octets pour chaque caractère, tel que UTF-7 et UTF-8.Si vous fournissez une page de codes comme UTF-7 ou UTF-8, setlocale échoue, qui retourne NULL.L'ensemble des noms des paramètres régionaux pris en charge par setlocale sont décrits dans Chaînes relatives aux noms, aux langues, au pays et à la région.L'ensemble de chaînes de langue et de pays/région prises en charge par setlocale sont répertoriés dans Chaînes de langage et Chaînes de pays/région.
Un pointeur null passé comme argument d' locale indique setlocale interroger et non définissez l'environnement int.Si l'argument d' locale est un pointeur null, les paramètres régionaux du programme ne sont pas modifiés.À la place, setlocale retourne un pointeur vers la chaîne associée à category des paramètres régionaux du thread.Si l'argument d' category est LC_ALL, la fonction retourne une chaîne indiquant la configuration actuelle de chacune des catégories, séparés par des points-virgules.Par exemple, la séquence d'appels
// Set all categories and return "en-US"
setlocale(LC_ALL, "en-US");
// Set only the LC_MONETARY category and return "fr-FR"
setlocale(LC_MONETARY, "fr-FR");
printf("%s\n", setlocale(LC_ALL, NULL));
retourne « »
LC_COLLATE=en-US;LC_CTYPE=en-US;LC_MONETARY=fr-FR;LC_NUMERIC=en-US;LC_TIME=en-US
ce qui est la chaîne associée à la catégorie d' LC_ALL .
Les exemples suivants se rapportent à la catégorie d' LC_ALL .L'un ou l'autre des chaînes « .OCP » et « .ACP » peut être utilisée à la place d'un numéro de page de codes pour spécifier l'utilisation de la page de codes OEM d'utilisateur et par défaut de la page de codes ANSI de l'utilisateur valeur par défaut, respectivement.
setlocale( LC_ALL, "" );
Définit les paramètres régionaux à la valeur par défaut, qui est la page de codes ANSI de l'utilisateur valeur par défaut obtenue du système d'exploitation.setlocale( LC_ALL, ".OCP" );
Définit explicitement les paramètres régionaux dans la page de codes actuelle OEM obtenue du système d'exploitation.setlocale( LC_ALL, ".ACP" );
Définit les paramètres régionaux dans la page de codes ANSI obtenue du système d'exploitation.setlocale( LC_ALL, "<localename>" );
Définit les paramètres régionaux au nom des paramètres régionaux indiqué par <localename>.setlocale( LC_ALL, "<language>_<country>" );
Définit les paramètres régionaux au langage et au pays/région indiquée par <language> et <country>, à l'aide de la page de codes par défaut obtenue du système d'exploitation hôte.setlocale( LC_ALL, "<language>_<country>.<code_page>" );
Définit les paramètres régionaux de la langue, le pays/région, et dans la page de codes indiquée par <language>, <country>, et les chaînes d' <code_page> .Vous pouvez utiliser différentes combinaisons de langage, de pays ou de région, et de page de codes.Par exemple :setlocale( LC_ALL, "French_Canada.1252" ); // Set code page to French Canada ANSI default setlocale( LC_ALL, "French_Canada.ACP" ); // Set code page to French Canada OEM default setlocale( LC_ALL, "French_Canada.OCP" );
setlocale( LC_ALL, "<language>" );
Définit les paramètres régionaux au langage indiqué par <language>, à l'aide de le pays ou la région par défaut pour le langage spécifié, et la page de codes ANSI de l'utilisateur valeur par défaut pour ces pays/région comme obtenu auprès de le système d'exploitation hôte.Par exemple, les appels suivants à setlocale sont équivalents :setlocale( LC_ALL, "en-US" ); setlocale( LC_ALL, "English" ); setlocale( LC_ALL, "English_United States.1252" );
setlocale( LC_ALL, ".<code_page>" );
Définit la page de codes à la valeur indiquée par <code_page>, à l'aide de le pays ou la région et la langue par défaut (comme défini par le système d'exploitation hôte) pour la page de codes spécifiée.
La catégorie doit être LC_ALL ou LC_CTYPE pour effectuer un changement de page de codes.Par exemple, si le pays ou la région et la langue par défaut du système d'exploitation hôte sont « Etats-Unis » et « anglais, » les deux appels suivants à setlocale sont équivalents :
setlocale( LC_ALL, ".1252" );
setlocale( LC_ALL, "English_United States.1252");
Pour plus d'informations pragma de setlocale dans la référence de préprocesseur.
La fonction _configthreadlocale est utilisée pour contrôler si setlocale affecte les paramètres régionaux de tous les threads dans un programme ou uniquement les paramètres régionaux du thread appelant.
Configuration requise
Routine |
En-tête requis |
---|---|
setlocale |
<locale.h> |
_wsetlocale |
<locale.h> ou <wchar.h> |
Pour des informations de compatibilité supplémentaires, consultez l' Compatibilité dans l'introduction.
Exemple
// crt_setlocale.cpp
//
// This program demonstrates the use of setlocale when
// using two independent threads.
//
#include <locale.h>
#include <process.h>
#include <windows.h>
#include <stdio.h>
#include <time.h>
#define BUFF_SIZE 100
// Retrieve the date and time in the current
// locale's format.
int get_time(unsigned char* str)
{
__time64_t ltime;
struct tm thetime;
// Retieve the time
_time64(<ime);
_gmtime64_s(&thetime, <ime);
// Format the current time structure into a string
// using %#x is the long date representation,
// appropriate to the current locale
if (!strftime((char *)str, BUFF_SIZE, "%#x",
(const struct tm *)&thetime))
{
printf("strftime failed!\n");
return -1;
}
return 0;
}
// This thread sets its locale to German
// and prints the time.
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
unsigned char str[BUFF_SIZE];
// Set the thread local
printf("The thread locale is now set to %s.\n",
setlocale(LC_ALL, "de-DE"));
// Retrieve the time string from the helper function
if (get_time(str) == 0)
{
printf("The time in de-DE locale is: '%s'\n", str);
}
_endthreadex( 0 );
return 0;
}
// The main thread spawns a second thread (above) and then
// sets the locale to English and prints the time.
int main()
{
HANDLE hThread;
unsigned threadID;
unsigned char str[BUFF_SIZE];
// Configure per-thread locale to cause all subsequently created
// threads to have their own locale.
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
// Retrieve the time string from the helper function
printf("The thread locale is now set to %s.\n",
setlocale(LC_ALL, "en-US"));
// Create the second thread.
hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc,
NULL, 0, &threadID );
if (get_time(str) == 0)
{
// Retrieve the time string from the helper function
printf("The time in en-US locale is: '%s'\n\n", str);
}
// Wait for the created thread to finish.
WaitForSingleObject( hThread, INFINITE );
// Destroy the thread object.
CloseHandle( hThread );
}
Équivalent .NET Framework
Classe de System::Globalization::CultureInfo
Voir aussi
Référence
Chaînes relatives aux noms, aux langues, au pays et à la région
_create_locale, _wcreate_locale
strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
strftime, wcsftime, _strftime_l, _wcsftime_l