Partager via


locale, classe

Classe qui décrit un objet de paramètres régionaux encapsulant des informations spécifiques à la culture sous la forme d'un ensemble de facettes qui définissent collectivement un environnement localisé spécifique.

Syntaxe

class locale;

Notes

Une facette est un pointeur vers un objet d’une classe dérivée de la classe facet qui contient un objet public au format suivant :

static locale::id id;

Vous pouvez définir un ensemble ouvert de ces facettes. Vous pouvez également créer un objet de paramètres régionaux qui désigne un nombre arbitraire de facettes.

Les groupes prédéfinis de ces facettes correspondent aux catégories de paramètres régionaux traditionnellement gérées dans la bibliothèque C standard par la fonction setlocale.

La catégorie collate (LC_COLLATE) inclut les facettes :

collate<char>
collate<wchar_t>

La catégorie ctype (LC_CTYPE) inclut les facettes :

ctype<char>
ctype<wchar_t>
codecvt<char, char, mbstate_t>
codecvt<wchar_t, char, mbstate_t>
codecvt<char16_t, char, mbstate_t>
codecvt<char32_t, char, mbstate_t>

La catégorie monetary (LC_MONETARY) inclut les facettes :

moneypunct<char, false>
moneypunct<wchar_t, false>
moneypunct<char, true>
moneypunct<wchar_t, true>
money_get<char, istreambuf_iterator<char>>
money_get<wchar_t, istreambuf_iterator<wchar_t>>
money_put<char, ostreambuf_iterator<char>>
money_put<wchar_t, ostreambuf_iterator<wchar_t>>

La catégorie numeric (LC_NUMERIC) inclut les facettes :

num_get<char, istreambuf_iterator<char>>
num_get<wchar_t, istreambuf_iterator<wchar_t>>
num_put<char, ostreambuf_iterator<char>>
num_put<wchar_t, ostreambuf_iterator<wchar_t>>
numpunct<char>
numpunct<wchar_t>

La catégorie time (LC_TIME) comprend les facettes :

time_get<char, istreambuf_iterator<char>>
time_get<wchar_t, istreambuf_iterator<wchar_t>>
time_put<char, ostreambuf_iterator<char>>
time_put<wchar_t, ostreambuf_iterator<wchar_t>>

La catégorie messages (LC_MESSAGES) inclut les facettes :

messages<char>
messages<wchar_t>

(La dernière catégorie est requise par POSIX, mais pas la norme C.)

Certaines de ces facettes prédéfinies sont utilisées par les iostream classes pour contrôler la conversion de valeurs numériques vers et depuis des séquences de texte.

Un objet de classe locale stocke également un nom de paramètres régionaux en tant qu’objet de classe string. L’utilisation d’un nom de paramètres régionaux non valide pour construire une facette de paramètres régionaux ou un objet de paramètres régionaux entraîne la levée d’un objet de la classe runtime_error. Le nom des paramètres régionaux stockés est "*" si l’objet de paramètres régionaux ne peut pas être certain qu’un paramètre régional de style C correspond exactement à celui représenté par l’objet. Sinon, vous pouvez établir des paramètres régionaux correspondants dans la bibliothèque C standard, pour un objet locale_objectde paramètres régionaux, en appelant setlocale(LC_ALL , locale_object.le nom().c_str()).

Dans cette implémentation, vous pouvez également appeler la fonction membre statique :

static locale empty();

pour construire un objet de paramètres régionaux sans facette. Il s’agit également d’un paramètre régional transparent. Si les fonctions de modèle has_facet et use_facet ne peuvent pas trouver la facette demandée dans des paramètres régionaux transparents, elles consultent d’abord les paramètres régionaux globaux, puis, si c’est transparent, les paramètres régionaux classiques. Ainsi, vous pouvez écrire :

cout.imbue(locale::empty());

Les insertions suivantes sont cout médiatées par l’état actuel des paramètres régionaux globaux. Vous pouvez même écrire :

locale loc(locale::empty(),
    locale::classic(),
    locale::numeric);

cout.imbue(loc);

Les règles de mise en forme numérique pour les insertions suivantes dans cout restent les mêmes que dans les paramètres régionaux du langage C, même lorsque les paramètres régionaux globaux fournissent des règles différentes d'insertion de dates et de valeurs monétaires.

Constructeurs

Constructeur Description
locale Crée des paramètres régionaux, une copie de paramètres régionaux ou une copie de paramètres régionaux où une facette ou une catégorie a été remplacée par une facette, ou une catégorie provenant d'autres paramètres régionaux.

Typedefs

Nom de type Description
category Type entier qui fournit des valeurs de masque de bits pour indiquer des familles de facettes standard.

Fonctions Membre

Fonction membre Description
combine Insère une facette à partir des paramètres régionaux spécifiés dans les paramètres régionaux cibles.
name Retourne le nom des paramètres régionaux stocké.

Fonctions statiques

Nom Description
classique La fonction membre statique retourne un objet de paramètres régionaux qui représente les paramètres régionaux classiques du langage C.
global Réinitialise les paramètres régionaux par défaut du programme.

Opérateurs

Opérateur Description
operator= Affecte des paramètres régionaux.
operator!= Vérifie l'inégalité de deux ensembles de paramètres régionaux.
operator( ) Compare deux objets basic_string.
operator== Vérifie l'égalité de deux ensembles de paramètres régionaux.

Classes

Classe Description
facet Classe qui sert de classe de base pour toutes les facettes de paramètres régionaux.
id La classe membre fournit un ID unique de facette utilisé comme index pour rechercher les facettes de paramètres régionaux.

Spécifications

Header :<locale>

Espace de noms : std

paramètres régionaux ::category

Type entier qui fournit des valeurs de masque de bits pour indiquer des familles de facettes standard.

typedef int category;
static const int collate = LC_COLLATE;
static const int ctype = LC_CTYPE;
static const int monetary = LC_MONETARY;
static const int numeric = LC_NUMERIC;
static const int time = LC_TIME;
static const int messages = LC_MESSAGES;
static const int all = LC_ALL;
static const int none = 0;

Notes

Le type est un synonyme d’un type int qui peut représenter un groupe d’éléments distincts d’un type de masque de bits local à la classe locale ou qui peut être utilisé pour représenter n’importe laquelle des catégories de paramètres régionaux C correspondantes. Les éléments sont :

  • collate, correspondant à la catégorie C LC_COLLATE

  • ctype, correspondant à la catégorie C LC_CTYPE

  • monetary, correspondant à la catégorie C LC_MONETARY

  • numeric, correspondant à la catégorie C LC_NUMERIC

  • time, correspondant à la catégorie C LC_TIME

  • messages, correspondant à la catégorie POSIX LC_MESSAGES

Deux valeurs plus utiles sont les suivantes :

  • none, correspondant à aucune des catégories C

  • all, correspondant à l’union C de toutes les catégories LC_ALL

Vous pouvez représenter un groupe arbitraire de catégories à l’aide d’une or au niveau du bit avec ces constantes, comme dans monetary | time.

paramètres régionaux ::classic

La fonction membre statique retourne un objet de paramètres régionaux qui représente les paramètres régionaux classiques du langage C.

static const locale& classic();

Valeur de retour

Référence aux paramètres régionaux C.

Notes

Les paramètres régionaux C classiques sont les paramètres régionaux ASCII anglais américains au sein de la bibliothèque C Standard. Il s’agit des paramètres régionaux utilisés implicitement dans les programmes qui ne sont pas internationalisés.

Exemple

// locale_classic.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <locale>

using namespace std;

int main( )
{
   locale loc1( "german" );
   locale loc2 = locale::global( loc1 );
   cout << "The name of the previous locale is: " << loc2.name( )
        << "." << endl;
   cout << "The name of the current locale is: " << loc1.name( )
        << "." << endl;

   if (loc2 == locale::classic( ) )
      cout << "The previous locale was classic." << endl;
   else
      cout << "The previous locale was not classic." << endl;

   if (loc1 == locale::classic( ) )
      cout << "The current locale is classic." << endl;
   else
      cout << "The current locale is not classic." << endl;
}
The name of the previous locale is: C.
The name of the current locale is: German_Germany.1252.
The previous locale was classic.
The current locale is not classic.

locale ::combine

Insère une facette à partir des paramètres régionaux spécifiés dans les paramètres régionaux cibles.

template <class Facet>
locale combine(const locale& source_locale) const;

Paramètres

source_locale
Paramètres régionaux contenant la facette à insérer dans les paramètres régionaux cibles.

Valeur de retour

La fonction membre retourne un objet de paramètres régionaux qui remplace ou ajoute à *this la facette Facet répertoriée dans source_locale.

Exemple

// locale_combine.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;

int main() {
   locale loc ( "German_germany" );
   _TCHAR * s1 = _T("Das ist wei\x00dfzz."); // \x00df is the German sharp-s; it comes before z in the German alphabet
   _TCHAR * s2 = _T("Das ist weizzz.");
   int result1 = use_facet<collate<_TCHAR> > ( loc ).
      compare (s1, &s1[_tcslen( s1 )-1 ],  s2, &s2[_tcslen( s2 )-1 ] );
   cout << isalpha (_T ( '\x00df' ), loc ) << result1 << endl;

   locale loc2 ( "C" );
   int result2 = use_facet<collate<_TCHAR> > ( loc2 ).
      compare (s1, &s1[_tcslen( s1 )-1 ],  s2, &s2[_tcslen( s2 )-1 ] );
   cout << isalpha (_T ( '\x00df' ), loc2 )  << result2 << endl;

   locale loc3 = loc2.combine<collate<_TCHAR> > (loc);
   int result3 = use_facet<collate<_TCHAR> > ( loc3 ).
      compare (s1, &s1[_tcslen( s1 )-1 ],  s2, &s2[_tcslen( s2 )-1 ] );
   cout << isalpha (_T ( '\x00df' ), loc3 ) << result3 << endl;
}

facet, classe

Classe qui sert de classe de base pour toutes les facettes de paramètres régionaux.

class facet {
protected:
    explicit facet(size_t references = 0);
    virtual ~facet();
private:
    facet(const facet&) // not defined
    void operator=(const facet&) // not defined
};

Notes

Vous ne pouvez pas copier ou affecter un objet de classe facet. Vous pouvez construire et détruire des objets dérivés de la classe locale::facet, mais pas des objets de la classe de base proprement dite. En règle générale, vous construisez un objet _Myfac dérivé du facet moment où vous construisez un locale, comme dans locale loc(locale::classic(), new _Myfac);

Dans ce cas, le constructeur de la classe facet de base doit avoir un argument de référence zéro. Lorsque l’objet n’est plus nécessaire, il est supprimé. Fournissez un argument de référence différent de zéro uniquement dans les rares cas où vous assumez la responsabilité de la durée de vie de l’objet.

locale ::global

Réinitialise les paramètres régionaux par défaut du programme. Cet appel affecte les paramètres régionaux globaux pour C et C++.

static locale global(const locale& new_default_locale);

Paramètres

new_default_locale
Paramètres régionaux à utiliser comme paramètres régionaux par défaut par le programme.

Valeur de retour

Paramètres régionaux en vigueur avant la réinitialisation des paramètres régionaux par défaut.

Notes

Au démarrage du programme, les paramètres régionaux globaux sont les mêmes que les paramètres régionaux classiques. La fonction global() appelle setlocale( LC_ALL, loc.name. c_str()) pour déterminer les paramètres régionaux correspondants dans la bibliothèque C standard.

Exemple

// locale_global.cpp
// compile by using: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;

int main( )
{
   locale loc ( "German_germany" );
   locale loc1;
   cout << "The initial locale is: " << loc1.name( ) << endl;
   locale loc2 = locale::global ( loc );
   locale loc3;
   cout << "The current locale is: " << loc3.name( ) << endl;
   cout << "The previous locale was: " << loc2.name( ) << endl;
}
The initial locale is: C
The current locale is: German_Germany.1252
The previous locale was: C

id, classe

La classe membre fournit un ID unique de facette utilisé comme index pour rechercher les facettes de paramètres régionaux.

class id
{
   protected:    id();
   private:      id(const id&)
   void operator=(const id&)  // not defined
};

Notes

La classe membre décrit l’objet membre statique exigé par chaque facette de paramètres régionaux unique. Vous ne pouvez pas copier ou affecter un objet de classe id.

locale ::locale

Crée des paramètres régionaux, une copie de paramètres régionaux ou une copie de paramètres régionaux où une facette ou une catégorie a été remplacée par une facette, ou une catégorie provenant d'autres paramètres régionaux. Inclut également un destructeur.

locale();

explicit locale(const char* locale_name, category new_category = all);
explicit locale(const string& locale_name);
locale(const locale& from_locale);
locale(const locale& from_locale, const locale& Other, category new_category);
locale(const locale& from_locale, const char* locale_name, category new_category);

template <class Facet>
locale(const locale& from_locale, const Facet* new_facet);

~locale();

Paramètres

locale_name
Nom de paramètres régionaux.

from_locale
Paramètres régionaux qui doivent être copiés lors de la construction des nouveaux paramètres régionaux.

Autres
Paramètres régionaux à partir desquels sélectionner une catégorie.

new_category
Catégorie à substituer dans les paramètres régionaux construits.

new_facet
Facette à substituer dans les paramètres régionaux construits.

Notes

Le premier constructeur initialise l’objet pour qu’il corresponde aux paramètres régionaux globaux. Les deuxième et troisième constructeurs initialisent toutes les catégories de paramètres régionaux pour avoir un comportement cohérent avec le nom des paramètres régionaux locale_name. Les constructeurs restants copient from_locale, avec les exceptions indiquées :

locale(const locale& from_locale, const locale& Other, category new_category);

remplace d’autres facettes correspondant à une catégorie C pour laquelle C &new_category n’est pas zéro.

locale(const locale& from_locale, const char* locale_name, category new_category);

locale(const locale& from_locale, const string& locale_name, category new_category);

remplace de locale(locale_name, all) ces facettes correspondant à une catégorie replace_category pour laquelle replace_category & new_category elle n’est pas nulle.

template<class Facet> locale(const locale& from_locale, Facet* new_facet);

remplace (ou ajoute à) from_locale la facette new_facet, si new_facet n’est pas un pointeur Null.

Si le nom des paramètres régionaux locale_name est un pointeur Null ou non valide, la fonction lève runtime_error.

Exemple

// locale_locale.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;

int main( ) {

   // Second constructor
   locale loc ( "German_germany" );
   _TCHAR * s1 = _T("Das ist wei\x00dfzz."); // \x00df is the German sharp-s, it comes before z in the German alphabet
   _TCHAR * s2 = _T("Das ist weizzz.");
   int result1 = use_facet<collate<_TCHAR> > ( loc ).
      compare (s1, &s1[_tcslen( s1 )-1 ],  s2, &s2[_tcslen( s2 )-1 ] );
   cout << isalpha (_T ( '\x00df' ), loc ) << result1 << endl;

   // The first (default) constructor
   locale loc2;
   int result2 = use_facet<collate<_TCHAR> > ( loc2 ).
      compare (s1, &s1[_tcslen( s1 )-1 ],  s2, &s2[_tcslen( s2 )-1 ] );
   cout << isalpha (_T ( '\x00df' ), loc2 )  << result2 << endl;

   // Third constructor
   locale loc3 (loc2,loc, _M_COLLATE );
   int result3 = use_facet<collate<_TCHAR> > ( loc3 ).
      compare (s1, &s1[_tcslen( s1 )-1 ],  s2, &s2[_tcslen( s2 )-1 ] );
   cout << isalpha (_T ( '\x00df' ), loc3 ) << result3 << endl;

   // Fourth constructor
   locale loc4 (loc2, "German_Germany", _M_COLLATE );
   int result4 = use_facet<collate<_TCHAR> > ( loc4 ).
      compare (s1, &s1[_tcslen( s1 )-1 ],  s2, &s2[_tcslen( s2 )-1 ] );
   cout << isalpha (_T ( '\x00df' ), loc4 ) << result4 << endl;
}

locale ::name

Retourne le nom des paramètres régionaux stocké.

string name() const;

Valeur de retour

Chaîne indiquant le nom des paramètres régionaux.

Exemple

// locale_name.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <locale>

using namespace std;

int main( )
{
   locale loc1( "german" );
   locale loc2 = locale::global( loc1 );
   cout << "The name of the previous locale is: "
        << loc2.name( ) << "." << endl;
   cout << "The name of the current locale is: "
        << loc1.name( ) << "." << endl;
}
The name of the previous locale is: C.
The name of the current locale is: German_Germany.1252.

locale ::operator=

Affecte des paramètres régionaux.

const locale& operator=(const locale& other) noexcept;

locale ::operator !=

Vérifie l'inégalité de deux ensembles de paramètres régionaux.

bool operator!=(const locale& right) const;

Paramètres

right
L’un des paramètres régionaux dont l’inégalité doit être testée.

Valeur de retour

Valeur booléenne qui est true si les paramètres régionaux ne sont pas des copies des mêmes paramètres régionaux. C’est false si les paramètres régionaux sont des copies des mêmes paramètres régionaux.

Notes

Deux paramètres régionaux sont égaux s’ils sont les mêmes paramètres régionaux, s’il s’agit d’une copie de l’autre ou s’ils ont des noms identiques.

Exemple

// locale_op_ne.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <locale>

using namespace std;

int main( )
{
   locale loc1( "German_Germany" );
   locale loc2( "German_Germany" );
   locale loc3( "English" );

   if ( loc1 != loc2 )
      cout << "locales loc1 (" << loc1.name( )
      << ") and\n loc2 (" << loc2.name( ) << ") are not equal." << endl;
   else
      cout << "locales loc1 (" << loc1.name( )
      << ") and\n loc2 (" << loc2.name( ) << ") are equal." << endl;

   if ( loc1 != loc3 )
      cout << "locales loc1 (" << loc1.name( )
      << ") and\n loc3 (" << loc3.name( ) << ") are not equal." << endl;
   else
      cout << "locales loc1 (" << loc1.name( )
      << ") and\n loc3 (" << loc3.name( ) << ") are equal." << endl;
}
locales loc1 (German_Germany.1252) and
loc2 (German_Germany.1252) are equal.
locales loc1 (German_Germany.1252) and
loc3 (English_United States.1252) are not equal.

locale ::operator()

Compare deux basic_string objets en fonction des règles de comparaison lexicographique définies par la facette de std::collate<charT> ces paramètres régionaux.

template <class CharType, class Traits, class Allocator>
bool operator()(
    const basic_string<CharType, Traits, Allocator>& left,
    const basic_string<CharType, Traits, Allocator>& right) const;

Paramètres

left
Première chaîne à comparer.

right
Deuxième chaîne à comparer.

Valeur de retour

  • true si la gauche est lexicographiquement inférieure à droite, sinon false.

Notes

La fonction de modèle exécute :

const collate<CharType>& fac = use_fac<collate<CharType>>(*this);

return (fac.compare(left.begin(), left.end(), right.begin(), right.end()) < 0);

Cela signifie que vous pouvez utiliser un objet de paramètres régionaux comme objet de fonction.

Exemple

// locale_op_compare.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <locale>

int main( )
{
   using namespace std;
   const wchar_t *sa = L"ztesting";
   const wchar_t *sb = L"\0x00DFtesting";
   basic_string<wchar_t> a( sa );
   basic_string<wchar_t> b( sb );

   locale loc( "German_Germany" );
   cout << loc( a,b ) << endl;

   const collate<wchar_t>& fac = use_facet<collate<wchar_t> >( loc );
   cout << ( fac.compare( sa, sa + a.length( ),
       sb, sb + b.length( ) ) < 0) << endl;
}
0
0

locale ::operator==

Vérifie l'égalité de deux ensembles de paramètres régionaux.

bool operator==(const locale& right) const;

Paramètres

right
L’un des paramètres régionaux dont l’égalité doit être testée.

Valeur de retour

Valeur booléenne qui est true si les paramètres régionaux sont des copies des mêmes paramètres régionaux. C’est false si les paramètres régionaux ne sont pas des copies des mêmes paramètres régionaux.

Notes

Deux paramètres régionaux sont égaux s’ils sont les mêmes paramètres régionaux, s’il s’agit d’une copie de l’autre ou s’ils ont des noms identiques.

Exemple

// locale_op_eq.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <locale>

using namespace std;

int main( )
{
   locale loc1( "German_Germany" );
   locale loc2( "German_Germany" );
   locale loc3( "English" );

   if ( loc1 == loc2 )
      cout << "locales loc1 (" << loc1.name( )
      << ")\n and loc2 (" << loc2.name( ) << ") are equal."
      << endl;
   else
      cout << "locales loc1 (" << loc1.name( )
      << ")\n and loc2 (" << loc2.name( ) << ") are not equal."
      << endl;

   if ( loc1 == loc3 )
      cout << "locales loc1 (" << loc1.name( )
      << ")\n and loc3 (" << loc3.name( ) << ") are equal."
      << endl;
   else
      cout << "locales loc1 (" << loc1.name( )
      << ")\n and loc3 (" << loc3.name( ) << ") are not equal."
      << endl;
}
locales loc1 (German_Germany.1252)
and loc2 (German_Germany.1252) are equal.
locales loc1 (German_Germany.1252)
and loc3 (English_United States.1252) are not equal.

Voir aussi

<locale>
Pages de codes
Chaînes relatives aux noms des paramètres régionaux, aux langues et au pays/à la région
Sécurité des threads dans la bibliothèque C++ Standard