locale Sınıfı
Kültüre özgü bilgileri depolayan bir yerel ayar nesnesini belirli bir yerelleştirilmiş ortamı toplu olarak kapsülleyen bir modeller kümesi olarak tanımlayan sınıf.
Sözdizimi
class locale;
Açıklamalar
Model, formun genel nesnesine sahip sınıf modelinden türetilmiş bir sınıfın nesnesine yönelik bir işaretçidir:
static locale::id id;
Bu modellerin açık uçlu bir kümesini tanımlayabilirsiniz. Ayrıca, modellerin rastgele bir sayısını gösteren bir yerel ayar nesnesi oluşturabilirsiniz.
Bu modellerin önceden tanımlanmış grupları, işlevi setlocale
tarafından Standart C Kitaplığı'nda geleneksel olarak yönetilen yerel ayar kategorilerini temsil edilir.
Kategori collate
(LC_COLLATE) modelleri içerir:
collate<char>
collate<wchar_t>
Kategori ctype
(LC_CTYPE) modelleri içerir:
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>
Kategori monetary
(LC_MONETARY) modelleri içerir:
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>>
Kategori numeric
(LC_NUMERIC) modelleri içerir:
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>
Kategori time
(LC_TIME) modelleri içerir:
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>>
Kategori messages
(LC_MESSAGES) modelleri içerir:
messages<char>
messages<wchar_t>
(Son kategori POSIX için gereklidir, ancak C Standardı için gerekli değildir.)
Bu önceden tanımlanmış modellerden bazıları, sayısal değerlerin iostream
metin dizilerine ve metin dizilerinden dönüştürülmelerini denetlemek için sınıflar tarafından kullanılır.
Sınıf yerel ayarının nesnesi de bir yerel ayar adını sınıf dizesinin nesnesi olarak depolar. Yerel ayar modeli veya yerel ayar nesnesi oluşturmak için geçersiz bir yerel ayar adı kullanıldığında sınıf runtime_error nesnesi oluşturulur. Depolanan yerel ayar adı, "*"
yerel ayar nesnesinin C stili yerel ayarın nesne tarafından temsil edilene tam olarak karşılık geldiğinin emin olamıyor olmasıdır. Aksi takdirde, standart C Kitaplığı'nın içinde, bazı yerel ayar nesnesi locale_object
için adı().c_str())
çağırarak setlocale(LC_ALL , locale_object.
eşleşen bir yerel ayar oluşturabilirsiniz.
Bu uygulamada, statik üye işlevini de çağırabilirsiniz:
static locale empty();
Böylece, modeli olmayan bir yerel bir nesne oluşturabilirsiniz. Ayrıca saydam bir yerel ayardır. Şablon has_facet ve use_facet istenen model saydam bir yerel ayarda bulamazsa, önce genel yerel ayara ve sonra saydamsa klasik yerel ayara başvurur. Bu nedenle şunları yazabilirsiniz:
cout.imbue(locale::empty());
sonraki cout
eklemeler, genel yerel ayarın geçerli durumu tarafından aracılık edilir. Şunu da yazabilirsiniz:
locale loc(locale::empty(),
locale::classic(),
locale::numeric);
cout.imbue(loc);
Genel yerel ayar tarih ve parasal tutar eklemeye cout
yönelik değişen kurallar sağladığından, izleyen eklemelerin C yerel ayarındakiyle aynı kalması için sayısal biçimlendirme kuralları.
Oluşturucular
Oluşturucu | Açıklama |
---|---|
yerel ayar | Bir yerel ayar veya yerel ayar kopyası ya da modelin veya kategorinin başka bir yerel ayardaki bir model veya kategori tarafından değiştirilen bir kopyasını oluşturur. |
Tür tanımları
Tür adı | Açıklama |
---|---|
category | Standart model aileleri belirtmek için bit maskesi değerleri sağlayan bir tamsayı türü. |
Üye işlevleri
Üye işlevi | Açıklama |
---|---|
birleşmek | Belirtilen yerel ayardaki bir modeli hedef yerel ayara ekler. |
ad | Depolanan yerel ayar adını döndürür. |
Statik işlevler
Veri Akışı Adı | Açıklama |
---|---|
Klasik | Statik üye işlevini klasik C yerel ayarını temsil eden yerel bir nesneye döndürür. |
genel | Varsayılan programın yerel ayarını sıfırlar. |
İşleçler
Operator | Açıklama |
---|---|
operator= | Bir yerel ayar atar. |
operator!= | İki yerel ayarın farklı olup olmadığını sınar. |
operator( ) | İki basic_string nesneyi karşılaştırır. |
operator== | İki yerel ayarın farksız olup olmadığını sınar. |
Sınıflar
Sınıf | Açıklama |
---|---|
facet | Tüm yerel ayar modelleri için temel sınıf görevi gören sınıf. |
id |
Üye sınıfı özellikleri, bir yerel ayardaki arama modelleri için bir dizin olarak kullanılan benzersiz bir kimlik sağlar. |
Gereksinimler
Üst bilgi:<yerel ayar>
Ad alanı: std
locale::category
Standart model aileleri belirtmek için bit maskesi değerleri sağlayan bir tamsayı türü.
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;
Açıklamalar
türü, bit maskesi türündeki bir grup ayrı öğeyi sınıf yerel ayarına göre temsil eden veya ilgili C yerel ayarı kategorilerinden herhangi birini temsil etmek için kullanılabilen bir türün eş int
anlamlısıdır. Öğeler şunlardır:
collate
, C kategorisine karşılık gelen LC_COLLATEctype
, C kategorisine karşılık gelen LC_CTYPEmonetary
, C kategorisine karşılık gelen LC_MONETARYnumeric
, C kategorisine karşılık gelen LC_NUMERICtime
, C kategorisine karşılık gelen LC_TIMEmessages
, POSIX kategorisine karşılık gelen LC_MESSAGES
İki yararlı değer daha şunlardır:
none
, C kategorilerinden hiçbirine karşılık gelenall
, tüm kategorilerin C birleşimine karşılık LC_ALL
içinde olduğu gibi monetary | time
bit düzeyinde OR kullanarak rastgele bir kategori grubunu bu sabitlerle temsil edebilirsiniz.
locale::classic
Statik üye işlevini klasik C yerel ayarını temsil eden yerel bir nesneye döndürür.
static const locale& classic();
Dönüş Değeri
C yerel ayarına başvuru.
Açıklamalar
Klasik C yerel ayarı, Standart C kitaplığındaki ABD İngilizcesi ASCII yerel ayarıdır. Uluslararası olmayan programlarda örtük olarak kullanılan yerel ayardır.
Örnek
// 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
Belirtilen yerel ayardaki bir modeli hedef yerel ayara ekler.
template <class Facet>
locale combine(const locale& source_locale) const;
Parametreler
source_locale
Hedef yerel ayara eklenecek model içeren yerel ayar.
Dönüş Değeri
Üye işlevi, içinde öğesinin yerini alan veya source_locale listelenen modele *this
Facet
ekleyen bir yerel ayar nesnesi döndürür.
Örnek
// 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;
}
model sınıfı
Tüm yerel ayar modelleri için temel sınıf görevi gören sınıf.
class facet {
protected:
explicit facet(size_t references = 0);
virtual ~facet();
private:
facet(const facet&) // not defined
void operator=(const facet&) // not defined
};
Açıklamalar
sınıfının facet
nesnesini kopyalayamaz veya atayamazsınız. Sınıfından locale::facet
türetilen nesneleri oluşturabilir ve yok edebilirsiniz, ancak temel sınıfın nesneleri uygun değildir. Normalde, içinde olduğu gibi bir oluştururken öğesinden facet
türetilen bir locale
nesne _Myfac
oluşturursunuzlocale loc(locale::classic(), new _Myfac);
Bu gibi durumlarda, temel sınıfın facet
oluşturucusunun sıfır başvuru bağımsız değişkeni olmalıdır. Nesne artık gerekli olmadığında silinir. Sıfır olmayan başvurular bağımsız değişkenini yalnızca nesnenin kullanım ömrü sorumluluğunu üstlendiğiniz nadir durumlarda sağlayın.
locale::global
Program için varsayılan yerel ayarı sıfırlar. Bu çağrı hem C hem de C++ için genel yerel ayarı etkiler.
static locale global(const locale& new_default_locale);
Parametreler
new_default_locale
Program tarafından varsayılan yerel ayar olarak kullanılacak yerel ayar.
Dönüş Değeri
Varsayılan yerel ayardan önceki yerel ayar sıfırlandı.
Açıklamalar
Program başlangıcında genel yerel ayar, klasik yerel ayar ile aynıdır. İşlev, global()
Standart C kitaplığında eşleşen bir yerel ayar oluşturmak için çağırır setlocale( LC_ALL, loc.name. c_str())
.
Örnek
// 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 Sınıfı
Üye sınıfı özellikleri, bir yerel ayardaki arama modelleri için bir dizin olarak kullanılan benzersiz bir kimlik sağlar.
class id
{
protected: id();
private: id(const id&)
void operator=(const id&) // not defined
};
Açıklamalar
Üye sınıfı, her benzersiz yerel ayar modeli için gereken statik üye nesnesini açıklar. sınıfının id
nesnesini kopyalayamaz veya atayamazsınız.
locale::locale
Bir yerel ayar veya yerel ayar kopyası ya da modelin veya kategorinin başka bir yerel ayardaki bir model veya kategori tarafından değiştirilen bir kopyasını oluşturur. Ayrıca bir yıkıcı da içerir.
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();
Parametreler
locale_name
Yerel ayarın adı.
from_locale
Yeni yerel ayarı oluştururken kopyalanacak bir yerel ayar.
Diğer
Kategorinin seçildiği yerel ayar.
new_category
Oluşturulacak kategori yerel ayarıyla değiştirilecek.
new_facet
Model, oluşturulmuş yerel ayara değiştirilecek.
Açıklamalar
İlk oluşturucu, nesneyi genel yerel ayarla eşleşecek şekilde başlatır. İkinci ve üçüncü oluşturucular, locale_name yerel ayar adıyla tutarlı davranışlara sahip olmak için tüm yerel ayar kategorilerini başlatır. Kalan oluşturucular from_locale kopyalar ve özel durumlar dikkate alınır:
locale(const locale& from_locale, const locale& Other, category new_category);
, C & new_category sıfır olmayan C kategorisine karşılık gelen Diğer modellerinden değiştirir.
locale(const locale& from_locale, const char* locale_name, category new_category);
locale(const locale& from_locale, const string& locale_name, category new_category);
, sıfır olmayan bir kategori replace_category replace_category & new_category
karşılık gelen modellerden locale(locale_name, all)
değiştirir.
template<class Facet> locale(const locale& from_locale, Facet* new_facet);
new_facet null işaretçi değilse model new_facet from_locale içinde değiştirir (veya ekler).
Yerel ayar adı locale_name null bir işaretçiyse veya başka bir şekilde geçersizse, işlev runtime_error oluşturur.
Örnek
// 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
Depolanan yerel ayar adını döndürür.
string name() const;
Dönüş Değeri
Yerel ayarın adını veren bir dize.
Örnek
// 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=
Bir yerel ayar atar.
const locale& operator=(const locale& other) noexcept;
locale::operator!=
İki yerel ayarın farklı olup olmadığını sınar.
bool operator!=(const locale& right) const;
Parametreler
Sağ
Eşitsizlik için test edilecek yerel ayarlardan biri.
Dönüş Değeri
Yerel ayarlar aynı yerel ayarın kopyaları değilse boole değeridir true
. Bu, false
yerel ayarların aynı yerel ayarın kopyaları olmasıdır.
Açıklamalar
İki yerel ayar, aynı yerel ayarsa, biri diğerinin kopyasıysa veya aynı adlara sahipse eşittir.
Örnek
// 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()
Bu yerel ayarın std::collate<charT>
modelinde tanımlanan sözcük temelli karşılaştırma kurallarına göre iki basic_string
nesneyi karşılaştırır.
template <class CharType, class Traits, class Allocator>
bool operator()(
const basic_string<CharType, Traits, Allocator>& left,
const basic_string<CharType, Traits, Allocator>& right) const;
Parametreler
Sol
Karşılaştırılacak ilk dize.
Sağ
Karşılaştırılacak ikinci dize.
Dönüş Değeri
true
sol sözcük temelli olarak sağdan küçükse, aksi takdirdefalse
.
Açıklamalar
Üye işlevi etkili bir şekilde yürütülür:
const collate<CharType>& fac = use_fac<collate<CharType>>(*this);
return (fac.compare(left.begin(), left.end(), right.begin(), right.end()) < 0);
Bu, bir yerel ayar nesnesini işlev nesnesi olarak kullanabileceğiniz anlamına gelir.
Örnek
// 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==
İki yerel ayarın farksız olup olmadığını sınar.
bool operator==(const locale& right) const;
Parametreler
Sağ
Eşitlik için test edilecek yerel ayarlardan biri.
Dönüş Değeri
Yerel ayarlar aynı yerel ayarın kopyalarıysa boole değeridir true
. Yerel false
ayarlar aynı yerel ayarın kopyaları değilse.
Açıklamalar
İki yerel ayar, aynı yerel ayarsa, biri diğerinin kopyasıysa veya aynı adlara sahipse eşittir.
Örnek
// 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.
Ayrıca bkz.
<yerel ayar>
Kod Sayfaları
Yerel Ayar Adları, Diller ve Ülke/Bölge Dizeleri
C++ Standart Kitaplığında İş Parçacığı Güvenliği