locale 类

一种描述区域设置对象的类,此对象用于将特定于文化的信息封装为一组 facet 以共同定义特定本地化环境。

class locale;

备注

facet 是指向派生自 facet 类的类对象的指针,该类具有以下格式的公共对象:

static locale::id id;

可以定义这些 facet 的开放式集。 还可以构建指定任意个 facet 的区域设置对象。

这些 facet 的预定义组表示传统上在标准 C 库中由函数 setlocale 管理的区域设置类别

类别 collate (LC_COLLATE) 包括以下 facet:

collate<char>
collate<wchar_t>

类别 ctype (LC_CTYPE) 包括以下 facet:

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>

类别 monetary (LC_MONETARY) 包括以下 facet:

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> >

类别 numeric (LC_NUMERIC) 包括以下 facet:

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>

类别 time (LC_TIME) 包括以下 facet:

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> >

类别 messages (LC_MESSAGES) 包括以下 facet:

messages<char>
messages<wchar_t>

(最后一个类别是 Posix 需要而非 C 标准需要的类别。)

其中某些预定义的 facet 由 iostreams 类使用,用来控制数值与文本序列的相互转换。

locale 类的对象还将区域设置名称存储为字符串类的对象。 若使用无效区域设置名称构造区域设置 facet 或区域设置对象,将引发 runtime_error 类的对象。 如果区域设置对象无法确定 C 样式区域设置与此对象表示的区域设置完全对应,则存储的区域设置名称为 "*"。 如果能够确定,可以在标准 C 库中通过调用 setlocale(LC_ALL, _Loc.name().c_str()) 为区域设置对象 _Loc 建立匹配的区域设置。

在此实现中,还可以调用静态成员函数:

static locale empty( );

构造不包含 facet 的区域设置对象。 这也是透明区域设置;如果模板函数 has_facetuse_facet 在透明区域设置中找不到请求的 facet,将先参考全局区域设置,如果此为透明区域设置,则将再参考经典区域设置。 因此,你可以编写:

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

cout 的后续插入通过全局区域设置的当前状态调整。 你还可以编写:

locale loc(locale::empty( ), locale::classic( ),
    locale::numeric);
cout.imbue(loc);

对 cout 的后续插入的数值格式设置规则与 C 区域设置相同,即使全局区域设置提供有关插入日期和货币金额的更改规则也是如此。

构造函数

locale

创建区域设置、区域设置副本,或其中的 facet 或类别替换为其他区域设置中的 facet 类别的区域设置副本。

Typedef

category

一种整数类型,此类型提供位掩码值以表示标准 facet 系列。

成员函数

combine

将指定区域设置中的 facet 插入到目标区域设置。

name

返回存储的区域设置名称。

静态函数

classic

此静态成员函数返回表示经典 C 区域设置的区域设置对象。

global

重置程序的默认区域设置。

运算符

operator!=

测试两个区域设置是否不相等。

operator( )

比较两个 basic_string 对象。

operator==

测试两个区域设置是否相等。

facet

一种类,此类用作所有区域设置 facet 的基类。

id

成员类提供用作索引以查找区域设置中的 facet 的唯一 facet 标识。

要求

标头:<locale>

命名空间: std

请参见

参考

<locale>

代码页

区域设置名称、语言和国家/地区字符串

C++ 标准库中的线程安全