dl
dl_language.h
浏览该文件的文档.
1
13#pragma once
14
15#include <string>
16#include <vector>
17#include <optional>
18
19#include "dl_range.h"
21#include "io/dl_log.h"
22#include "base/dl_string.h"
23
24namespace dl
25{
28{
29public:
30 enum Type : size_t
31 {
34 };
40 void LoadXlsx(std::string_view path_name);
41
45 std::string_view Get(std::string_view tag, std::string_view name);
46
47
51 std::optional<std::string_view> GetCheck(std::string_view tag, std::string_view name);
52
56 std::size_t GetTagSize(std::string_view tag);
57
58
63 std::vector<std::string_view> GetTagVector(std::string_view tag);
64 std::unordered_map<std::string, std::string> GetTagMap(std::string_view tag);
65
70 std::vector<std::string_view> GetTagNameVector(std::string_view tag, std::string_view name);
71 std::unordered_map<std::string, std::string_view> GetTagNameMap(std::string_view tag, std::string_view name);
72
76 std::string_view GetTagNameRandom(std::string_view tag);
77
81 const std::vector<std::string>& GetLangAll();
82
87 {
88 _typeCur = type;
89 if (_data.size() < _typeCur)
90 _data.resize(_typeCur);
91 }
92
94
95 using MapName = std::unordered_map<std::string, std::string, string_hash, std::equal_to<>>;
96 using MapTag = std::unordered_map<std::string, MapName, string_hash, std::equal_to<>>;
97private:
98 std::vector<MapTag> _data;
99 Type _typeCur;
100 std::vector<std::string> _allLang;
101
102 const MapName* _get_tag_name_map(std::string_view tag);
103};
104
105extern Language* g_lang;
106
107
112std::string_view lang(std::string_view tag_name);
113
118std::string_view lang_auto(std::string_view tag_name);
119
125template<typename... Args>
126std::string lang(std::string_view tag_name, Args&& ...args)
127{
128 return fmt::vformat(lang(tag_name), fmt::make_format_args(args...));
129}
130
131}
语言管理器
std::vector< std::string_view > GetTagVector(std::string_view tag)
返回tag所有子项
std::unordered_map< std::string, std::string > GetTagMap(std::string_view tag)
std::optional< std::string_view > GetCheck(std::string_view tag, std::string_view name)
失败返回false
std::unordered_map< std::string, MapName, string_hash, std::equal_to<> > MapTag
std::unordered_map< std::string, std::string_view > GetTagNameMap(std::string_view tag, std::string_view name)
std::string_view Get(std::string_view tag, std::string_view name)
失败返回特定字符串,并写入日志
std::vector< std::string_view > GetTagNameVector(std::string_view tag, std::string_view name)
返回tag子项,以name字符串开头所有元素
std::unordered_map< std::string, std::string, string_hash, std::equal_to<> > MapName
std::string_view GetTagNameRandom(std::string_view tag)
随机获取tag的子项
void LoadXlsx(std::string_view path_name)
从xlsx文件加载语言配置文件
const std::vector< std::string > & GetLangAll()
返回所有语言
std::size_t GetTagSize(std::string_view tag)
返回tag包含的子项数量
void SetLangCurrent(Type type)
设置当前语言
日志系统
范围操作
字符串相关
基于标准库散列表的2维实现
std::string_view lang(std::string_view tag_name)
返回一个语言配置的字符串,传入 menu.start
Language * g_lang
std::string_view lang_auto(std::string_view tag_name)
返回一个语言配置的字符串,传入 @开头表示是语言配置,否则原样返回