NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
locale.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_SYSTEM_LOCALE_HPP__
2#define NEFORCE_CORE_SYSTEM_LOCALE_HPP__
3
11
14#ifdef NEFORCE_PLATFORM_LINUX
15# include <locale.h>
16#endif
17NEFORCE_BEGIN_NAMESPACE__
18
24
29struct locale_exception final : system_exception {
30 explicit locale_exception(const char* info = "Locale Operation Failed", const char* type = static_type,
31 const int code = 0) noexcept :
32 system_exception(info, type, code) {}
33
34 explicit locale_exception(const exception& e) :
35 system_exception(e) {}
36
37 ~locale_exception() override = default;
38
39 static constexpr auto static_type = "locale_exception";
40};
41 // Exceptions
43
49
64class NEFORCE_API locale {
65public:
70 struct numeric_info {
73 string grouping;
74 };
75
93
109
117 primary = 1,
118 secondary = 2,
119 tertiary = 3,
120 identical = 4
121 };
122
123private:
124 string name_;
125 string encoding_;
126
127#ifdef NEFORCE_PLATFORM_WINDOWS
128 string win_name_;
129#else
130 ::locale_t loc_;
131 bool owns_;
132#endif
133
134 void load_locale(const string& name);
135
136public:
143
149 explicit locale(const string& name);
150
155
160 locale(const locale& other);
161
167 locale& operator=(const locale& other);
168
173 locale(locale&& other) noexcept;
174
180 locale& operator=(locale&& other) noexcept;
181
186 NEFORCE_NODISCARD static locale classic();
187
192 NEFORCE_NODISCARD static locale system();
193
199 NEFORCE_NODISCARD static locale from_name(const string& name);
200
205 NEFORCE_NODISCARD const string& name() const noexcept { return name_; }
206
211 NEFORCE_NODISCARD const string& encoding() const noexcept { return encoding_; }
212
218 NEFORCE_NODISCARD bool operator==(const locale& o) const noexcept { return name_ == o.name_; }
219
225 NEFORCE_NODISCARD bool operator!=(const locale& o) const noexcept { return !(*this == o); }
226
231 NEFORCE_NODISCARD numeric_info numeric() const;
232
237 NEFORCE_NODISCARD monetary_info monetary() const;
238
243 NEFORCE_NODISCARD time_info time() const;
244
245 NEFORCE_NODISCARD bool is_alpha(char32_t cp) const noexcept;
246 NEFORCE_NODISCARD bool is_digit(char32_t cp) const noexcept;
247 NEFORCE_NODISCARD bool is_alnum(char32_t cp) const noexcept;
248 NEFORCE_NODISCARD bool is_space(char32_t cp) const noexcept;
249 NEFORCE_NODISCARD bool is_upper(char32_t cp) const noexcept;
250 NEFORCE_NODISCARD bool is_lower(char32_t cp) const noexcept;
251 NEFORCE_NODISCARD bool is_punct(char32_t cp) const noexcept;
252 NEFORCE_NODISCARD bool is_print(char32_t cp) const noexcept;
253
254 NEFORCE_NODISCARD char32_t to_upper(char32_t cp) const noexcept;
255 NEFORCE_NODISCARD char32_t to_lower(char32_t cp) const noexcept;
256
264 NEFORCE_NODISCARD int compare(const string& a, const string& b,
266
274 NEFORCE_NODISCARD string collation_key(const string& s) const;
275
281 NEFORCE_NODISCARD string to_multibyte(const u32string& ucs4) const;
282
288 NEFORCE_NODISCARD u32string to_ucs4(const string& mb) const;
289
294 NEFORCE_NODISCARD static vector<string> available_locales();
295};
296 // Locale
298
299NEFORCE_END_NAMESPACE__
300#endif // NEFORCE_CORE_SYSTEM_LOCALE_HPP__
NEFORCE_NODISCARD monetary_info monetary() const
获取货币格式信息
NEFORCE_NODISCARD int compare(const string &a, const string &b, collate_strength strength=collate_strength::tertiary) const
比较两个字符串
collate_strength
字符串比较强度
@ tertiary
三级比较:忽略大小写
static NEFORCE_NODISCARD locale classic()
获取"C"区域设置
NEFORCE_NODISCARD string to_multibyte(const u32string &ucs4) const
将UTF-32字符串转换为当前区域设置的多字节字符串
locale(const locale &other)
拷贝构造函数
locale()
默认构造函数
NEFORCE_NODISCARD bool is_alnum(char32_t cp) const noexcept
是否为字母或数字
static NEFORCE_NODISCARD locale from_name(const string &name)
从名称创建区域设置
~locale()
析构函数
NEFORCE_NODISCARD bool operator==(const locale &o) const noexcept
相等比较运算符
locale(const string &name)
从名称构造区域设置
NEFORCE_NODISCARD bool is_lower(char32_t cp) const noexcept
是否为小写字母
static NEFORCE_NODISCARD vector< string > available_locales()
获取系统所有可用的区域设置列表
NEFORCE_NODISCARD time_info time() const
获取时间格式信息
NEFORCE_NODISCARD char32_t to_lower(char32_t cp) const noexcept
转换为小写
locale & operator=(const locale &other)
拷贝赋值运算符
NEFORCE_NODISCARD bool is_alpha(char32_t cp) const noexcept
是否为字母
NEFORCE_NODISCARD u32string to_ucs4(const string &mb) const
将当前区域设置的多字节字符串转换为UTF-32
static NEFORCE_NODISCARD locale system()
获取系统区域设置
NEFORCE_NODISCARD bool is_print(char32_t cp) const noexcept
是否为可打印字符
NEFORCE_NODISCARD bool is_digit(char32_t cp) const noexcept
是否为数字
NEFORCE_NODISCARD numeric_info numeric() const
获取数字格式信息
NEFORCE_NODISCARD bool is_upper(char32_t cp) const noexcept
是否为大写字母
locale & operator=(locale &&other) noexcept
移动赋值运算符
NEFORCE_NODISCARD const string & name() const noexcept
获取区域设置名称
NEFORCE_NODISCARD string collation_key(const string &s) const
生成排序键
locale(locale &&other) noexcept
移动构造函数
NEFORCE_NODISCARD bool operator!=(const locale &o) const noexcept
不等比较运算符
NEFORCE_NODISCARD bool is_punct(char32_t cp) const noexcept
是否为标点符号
NEFORCE_NODISCARD bool is_space(char32_t cp) const noexcept
是否为空白字符
NEFORCE_NODISCARD const string & encoding() const noexcept
获取字符编码
NEFORCE_NODISCARD char32_t to_upper(char32_t cp) const noexcept
转换为大写
动态大小数组容器
int int32_t
32位有符号整数类型
basic_string< char32_t > u32string
UTF-32字符串
NEFORCE_ALWAYS_INLINE_INLINE bool name(char *buffer, size_t size)
获取当前线程名称
字符串类型别名和实用函数
exception(const char *info=static_type, const char *type=static_type, const int code=0)
构造函数
NEFORCE_NODISCARD int code() const noexcept
获取异常码
NEFORCE_NODISCARD const char * type() const noexcept
获取异常类型
货币格式信息
string mon_decimal_point
货币小数点分隔符
int int_frac_digits
国际货币小数位数
string positive_sign
正数符号
string currency_symbol
货币符号
string negative_sign
负数符号
bool n_cs_precedes
负数时货币符号是否前置
string mon_grouping
货币数字分组规则
string int_curr_symbol
国际货币符号
string mon_thousands_sep
货币千位分隔符
bool p_cs_precedes
正数时货币符号是否前置
int frac_digits
本地货币小数位数
数字格式信息
string thousands_sep
千位分隔符
string grouping
数字分组规则
string decimal_point
小数点分隔符
时间格式信息
string date_fmt
日期格式
string time_fmt
时间格式
vector< string > month_names
月份全名
string am_str
上午标识
vector< string > abbr_day_names
星期几缩写
vector< string > abbr_month_names
月份缩写
vector< string > day_names
星期几全名
string datetime_fmt
日期时间格式
string pm_str
下午标识
动态大小数组容器