1#ifndef NEFORCE_CORE_SYSTEM_LOCALE_HPP__
2#define NEFORCE_CORE_SYSTEM_LOCALE_HPP__
14#ifdef NEFORCE_PLATFORM_LINUX
17NEFORCE_BEGIN_NAMESPACE__
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) {}
34 explicit locale_exception(
const exception& e) :
35 system_exception(e) {}
37 ~locale_exception()
override =
default;
39 static constexpr auto static_type =
"locale_exception";
127#ifdef NEFORCE_PLATFORM_WINDOWS
134 void load_locale(
const string&
name);
205 NEFORCE_NODISCARD
const string&
name() const noexcept {
return name_; }
211 NEFORCE_NODISCARD
const string&
encoding() const noexcept {
return encoding_; }
218 NEFORCE_NODISCARD
bool operator==(
const locale& o)
const noexcept {
return name_ == o.name_; }
225 NEFORCE_NODISCARD
bool operator!=(
const locale& o)
const noexcept {
return !(*
this == o); }
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;
254 NEFORCE_NODISCARD
char32_t to_upper(
char32_t cp)
const noexcept;
255 NEFORCE_NODISCARD
char32_t to_lower(
char32_t cp)
const noexcept;
264 NEFORCE_NODISCARD
int compare(
const string& a,
const string& b,
299NEFORCE_END_NAMESPACE__
NEFORCE_NODISCARD monetary_info monetary() const
获取货币格式信息
NEFORCE_NODISCARD int compare(const string &a, const string &b, collate_strength strength=collate_strength::tertiary) const
比较两个字符串
static NEFORCE_NODISCARD locale classic()
获取"C"区域设置
NEFORCE_NODISCARD string to_multibyte(const u32string &ucs4) const
将UTF-32字符串转换为当前区域设置的多字节字符串
locale(const locale &other)
拷贝构造函数
NEFORCE_NODISCARD bool is_alnum(char32_t cp) const noexcept
是否为字母或数字
static NEFORCE_NODISCARD locale from_name(const string &name)
从名称创建区域设置
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
转换为大写
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 currency_symbol
货币符号
bool n_cs_precedes
负数时货币符号是否前置
string mon_grouping
货币数字分组规则
string int_curr_symbol
国际货币符号
string mon_thousands_sep
货币千位分隔符
bool p_cs_precedes
正数时货币符号是否前置
string thousands_sep
千位分隔符
string decimal_point
小数点分隔符
vector< string > month_names
月份全名
vector< string > abbr_day_names
星期几缩写
vector< string > abbr_month_names
月份缩写
vector< string > day_names
星期几全名
string datetime_fmt
日期时间格式