33#include " Common.h"
44#include " IniHelper.h"
55#include " TrafficMonitor.h"
6-
76CStrTable::CStrTable ()
87{
98}
@@ -70,13 +69,11 @@ void CStrTable::Init()
7069
7170 // 先读取默认字符串资源,如果当前语言中没有对应字符串,则会使用默认的字符串资源
7271 CIniHelper ini_default (IDR_LANGUAGE_DEFAULT);
73- ini_default.GetAllKeyValues (L" text" , m_text_string_table);
74- ini_default.GetAllKeyValues (L" menu" , m_menu_string_table);
72+ ReadStringtableFronIni (ini_default);
7573
7674 // 读取字符串资源
7775 CIniHelper ini (IDR_LANGUAGE);
78- ini.GetAllKeyValues (L" text" , m_text_string_table);
79- ini.GetAllKeyValues (L" menu" , m_menu_string_table);
76+ ReadStringtableFronIni (ini);
8077 LanguageInfoFromIni (m_language_info, ini);
8178
8279 // 从外部language文件夹获取语言文件
@@ -100,8 +97,7 @@ void CStrTable::Init()
10097 if (language_info.language_id == cur_language_id)
10198 {
10299 m_language_info = language_info;
103- ini_file.GetAllKeyValues (L" text" , m_text_string_table);
104- ini_file.GetAllKeyValues (L" menu" , m_menu_string_table);
100+ ReadStringtableFronIni (ini_file);
105101 }
106102
107103 // 如果语言不在m_language_list,添加到该列表
@@ -113,18 +109,79 @@ void CStrTable::Init()
113109
114110const wstring& CStrTable::LoadText (const wstring& key) const
115111{
116- auto iter = m_text_string_table.find (key);
117- if (iter != m_text_string_table.end ())
112+ const auto & text_string_table = GetTextStringTable ();
113+ return LoadText (key, text_string_table);
114+ }
115+
116+ wstring CStrTable::LoadTextFormat (const wstring& key, const std::initializer_list<CVariant>& paras) const
117+ {
118+ const auto & text_string_table = GetTextStringTable ();
119+ return LoadTextFormat (key, text_string_table, paras);
120+ }
121+
122+ const wstring& CStrTable::LoadMenuText (const wstring& key) const
123+ {
124+ const auto & menu_string_table = GetMenuStringTable ();
125+ return LoadText (key, menu_string_table);
126+ }
127+
128+ const wstring& CStrTable::LoadText (const wstring& key, const wstring& section)
129+ {
130+ auto iter = m_string_table.find (section);
131+ if (iter != m_string_table.end ())
132+ {
133+ return LoadText (key, iter->second );
134+ }
135+ static std::wstring str_empty;
136+ return str_empty;
137+ }
138+
139+ void CStrTable::ReadStringtableFronIni (const CIniHelper& ini)
140+ {
141+ std::set<std::wstring> sections{ L" general" , L" text" , L" menu" };
142+ auto section_list = ini.GetAllAppName (L" " );
143+ for (const auto & section : section_list)
144+ sections.insert (section);
145+
146+ for (const auto & section : sections)
147+ {
148+ auto & value_map = m_string_table[section];
149+ ini.GetAllKeyValues (section, value_map);
150+ }
151+ }
152+
153+ const std::map<std::wstring, std::wstring>& CStrTable::GetTextStringTable () const
154+ {
155+ auto iter = m_string_table.find (L" text" );
156+ if (iter != m_string_table.end ())
157+ return iter->second ;
158+ static std::map<std::wstring, std::wstring> empty_map;
159+ return empty_map;
160+ }
161+
162+ const std::map<std::wstring, std::wstring>& CStrTable::GetMenuStringTable () const
163+ {
164+ auto iter = m_string_table.find (L" menu" );
165+ if (iter != m_string_table.end ())
166+ return iter->second ;
167+ static std::map<std::wstring, std::wstring> empty_map;
168+ return empty_map;
169+ }
170+
171+ const wstring& CStrTable::LoadText (const wstring& key, const std::map<std::wstring, std::wstring>& string_table)
172+ {
173+ auto iter = string_table.find (key);
174+ if (iter != string_table.end ())
118175 return iter->second ;
119176 ASSERT (false );
120177 static std::wstring str_empty;
121178 return str_empty;
122179}
123180
124- wstring CStrTable::LoadTextFormat (const wstring& key, const std::initializer_list<CVariant>& paras) const
181+ wstring CStrTable::LoadTextFormat (const wstring& key, const std::map<std::wstring, std::wstring>& string_table, const std:: initializer_list<CVariant>& paras)
125182{
126- auto iter = m_text_string_table .find (key);
127- if (iter == m_text_string_table .end ())
183+ auto iter = string_table .find (key);
184+ if (iter == string_table .end ())
128185 {
129186 ASSERT (false );
130187 return std::wstring ();
@@ -139,13 +196,3 @@ wstring CStrTable::LoadTextFormat(const wstring& key, const std::initializer_lis
139196 }
140197 return str;
141198}
142-
143- const wstring& CStrTable::LoadMenuText (const wstring& key) const
144- {
145- auto iter = m_menu_string_table.find (key);
146- if (iter != m_menu_string_table.end ())
147- return iter->second ;
148- ASSERT (false );
149- static std::wstring str_empty;
150- return str_empty;
151- }
0 commit comments