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_object
de 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. |
nom | 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_COLLATEctype
, correspondant à la catégorie C LC_CTYPEmonetary
, correspondant à la catégorie C LC_MONETARYnumeric
, correspondant à la catégorie C LC_NUMERICtime
, correspondant à la catégorie C LC_TIMEmessages
, correspondant à la catégorie POSIX LC_MESSAGES
Deux valeurs plus utiles sont les suivantes :
none
, correspondant à aucune des catégories Call
, 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.
Other
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, sinonfalse
.
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