Skip to content

Commit 2f3747e

Browse files
committed
新增支持从外部文件(lanugage目录)读取语言
1 parent 7a41153 commit 2f3747e

File tree

5 files changed

+36
-8
lines changed

5 files changed

+36
-8
lines changed

TrafficMonitor/StrTable.cpp

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "StrTable.h"
33
#include "Common.h"
44
#include "IniHelper.h"
5+
#include "TrafficMonitor.h"
56

67
CStrTable::CStrTable()
78
{
@@ -72,8 +73,37 @@ void CStrTable::Init()
7273
CIniHelper ini(IDR_LANGUAGE);
7374
ini.GetAllKeyValues(L"text", m_text_string_table);
7475
ini.GetAllKeyValues(L"menu", m_menu_string_table);
75-
7676
LanguageInfoFromIni(m_language_info, ini);
77+
78+
//从外部language文件夹获取语言文件
79+
vector<wstring> files;
80+
std::wstring language_dir;
81+
#ifdef _DEBUG
82+
language_dir = L".\\language";
83+
#else
84+
language_dir = theApp.m_module_dir + L"language";
85+
#endif
86+
CCommon::GetFiles((language_dir + L"\\*.ini").c_str(), files);
87+
for (const wstring& file_name : files)
88+
{
89+
std::wstring file_path{ language_dir + file_name };
90+
CIniHelper ini_file(file_path);
91+
LanguageInfo language_info;
92+
LanguageInfoFromIni(language_info, ini_file);
93+
language_info.language_id = LocaleNameToLCID(language_info.bcp_47.c_str(), 0); //根据语言bcp-47代码获取语言id
94+
WORD cur_language_id = GetThreadUILanguage(); //当前语言id
95+
//从外部语言文件读取到当前语言,先从外部语言文件加载
96+
if (language_info.language_id == cur_language_id)
97+
{
98+
ini_file.GetAllKeyValues(L"text", m_text_string_table);
99+
ini_file.GetAllKeyValues(L"menu", m_menu_string_table);
100+
}
101+
102+
//如果语言不在m_language_list,添加到该列表
103+
auto iter = std::find(m_language_list.begin(), m_language_list.end(), language_info);
104+
if (iter == m_language_list.end())
105+
m_language_list.push_back(language_info);
106+
}
77107
}
78108

79109
const wstring& CStrTable::LoadText(const wstring& key) const

TrafficMonitor/StrTable.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ class CStrTable
1515
wstring translator;
1616
wstring translator_url;
1717
WORD language_id{};
18+
19+
bool operator==(const LanguageInfo& another) const
20+
{
21+
return bcp_47 == another.bcp_47;
22+
}
1823
};
1924

2025
void Init();

TrafficMonitor/TrafficMonitor.rc

-1008 Bytes
Binary file not shown.

TrafficMonitor/TrafficMonitor.vcxproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,6 @@
978978
<None Include="language\English.ini" />
979979
<None Include="language\Simplified_Chinese.ini" />
980980
<None Include="language\Traditional_Chinese.ini" />
981-
<None Include="language\Turkish.ini" />
982981
<None Include="res\TrafficMonitor.rc2" />
983982
</ItemGroup>
984983
<ItemGroup>

TrafficMonitor/TrafficMonitor.vcxproj.filters

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,6 @@
241241
<Filter Include="资源文件\language">
242242
<UniqueIdentifier>{f1f6139c-f164-49f7-86e8-0e5ac6bef657}</UniqueIdentifier>
243243
</Filter>
244-
<Filter Include="源文件和头文件\StrTable">
245-
<UniqueIdentifier>{66216d29-2897-4782-9297-fb60cf20d18e}</UniqueIdentifier>
246-
</Filter>
247244
<Filter Include="源文件和头文件\公共的类\StrTable">
248245
<UniqueIdentifier>{357eeb5d-af51-4701-83c9-e13a17c7f771}</UniqueIdentifier>
249246
</Filter>
@@ -792,9 +789,6 @@
792789
<None Include="language\English.ini">
793790
<Filter>资源文件\language</Filter>
794791
</None>
795-
<None Include="language\Turkish.ini">
796-
<Filter>资源文件\language</Filter>
797-
</None>
798792
</ItemGroup>
799793
<ItemGroup>
800794
<Image Include="res\menu_icon\close.ico">

0 commit comments

Comments
 (0)