Files
GdCpp12/include/CLang.h

95 lines
2.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef CLANG_H
#define CLANG_H
#include "GdCPP_Exports.h"
#include "json\_nlohmann_json_wrapper.h"
//#include "LangEnum.h"
/// 界面语言相关。
/// - 定义了一组界面语言和对应的字符串
/// - 定义了界面语言的静态成员,方便全局访问。
/// - 定义了与json互转的函数
struct GDCPP_API CLang
{
///界面语言的枚举
enum eLang {
undef=-1, ///< 未定义
zh=0, ///< 简体中文
en, ///< 英语
vn, ///< 越南语
th, ///< 泰语
sp, ///< 西班牙语
jp, ///< 日语
ru, ///< 俄语
LangNum
};
CLang() = default;
/// 复制构造函数
CLang(const CLang & p) :Lang(p.Lang) {}
CLang(const CLang::eLang& e) :Lang(e) {}
/// 当前语言的枚举
eLang Lang = eLang::zh;
/// 字符串转枚举
static eLang fromStr(const char * str);
/// 用于json文件的英文字符串
static const char* LangStr[LangNum];
/// 用于UI显示的中英文字符串
static const wchar_t* LangWStr[LangNum];
static const wchar_t* LangWStrCn[LangNum];
/// @brief 实例名称后面加括号直接返回
inline eLang operator()() {return Lang;}
/// 重载比较运算符
inline bool operator == (const CLang& l) { return Lang == l.Lang; }
inline bool operator != (const CLang& l) { return Lang != l.Lang; }
inline bool operator == (eLang l) { return Lang == l; }
inline bool operator != (eLang l) { return Lang != l; }
inline bool operator == (const std::string & l) { return l == LangStr[Lang]; }
inline bool operator != (const std::string & l) { return l != LangStr[Lang]; }
inline bool operator == (const char * l) { return strcmp(l, LangStr[Lang]) == 0; }
inline bool operator != (const char * l) { return strcmp(l, LangStr[Lang]) != 0; }
// const char *类型转换操作符重载
inline operator const char *()
{
return LangStr[Lang];
}
// std::string类型转换操作符重载
inline operator std::string()
{
return LangStr[Lang];
}
};
/// \brief 全局共用的语言实例。
/// \details 界面刷新时使用全局实例,参数设置里用局部实例。
/// 加载:
/// app从设置文件中加载配置到局部实例赋值给全局实例。
/// 设置:
/// 界面上修改局部实例,确认时赋值给全局实例,保存到配置文件。
///
/// 为什么不直接用静态成员变量?
/// 如果以exe与dll中都用到且是用静态库或直接使用源码exe与dll的静态成员不是同一个变量。
GDCPP_API extern CLang gLang;
void GDCPP_API to_json(jsonobj& j, const CLang & p);
void GDCPP_API from_json(const jsonobj& j, CLang& p);
#endif // CAPPSETTING_H