#include "stdafx.h"
|
#include "CLanguageControl.h"
|
|
CLanguageControl::CLanguageControl()
|
{
|
CString strPath;
|
strPath.Format(_T("%s\\LanguageType.ini"), LANGUAGE_DIR_PATH);
|
CT2CA pszConvertedAnsiString(strPath, CP_UTF8);
|
|
m_eSelectLangType = LoadLanguageSetting(std::string(pszConvertedAnsiString));
|
switch (m_eSelectLangType)
|
{
|
case emLanguageType::emLanguageType_EN:
|
m_hLangDLL = NULL;
|
break;
|
case emLanguageType::emLanguageType_KR:
|
// 将资源句柄重置回默认值
|
AfxSetResourceHandle(AfxGetInstanceHandle());
|
m_hLangDLL = NULL;
|
break;
|
case emLanguageType::emLanguageType_CH:
|
// 加载中文资源库
|
m_hLangDLL = LoadLibraryEx(_T("ENRUTResources_zh-CN.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE);
|
if (m_hLangDLL != NULL)
|
{
|
AfxSetResourceHandle(m_hLangDLL);
|
}
|
break;
|
}
|
}
|
|
CLanguageControl::~CLanguageControl()
|
{
|
if (m_hLangDLL != NULL)
|
{
|
FreeLibrary(m_hLangDLL);
|
}
|
}
|
|
bool CLanguageControl::SaveLanguageSetting(const std::string& filename, emLanguageType language) {
|
std::ofstream iniFile;
|
|
iniFile.open(filename, std::ios::out);
|
if (!iniFile.is_open()) {
|
std::cerr << "Unable to open file for writing.\n";
|
return false;
|
}
|
|
switch (language) {
|
case emLanguageType::emLanguageType_CH:
|
iniFile << "language=Chinese\n";
|
break;
|
case emLanguageType::emLanguageType_KR:
|
iniFile << "language=Korean\n";
|
break;
|
case emLanguageType::emLanguageType_EN:
|
iniFile << "language=English\n";
|
break;
|
default:
|
iniFile << "language=Unknown\n";
|
break;
|
}
|
|
iniFile.close();
|
return true;
|
}
|
|
emLanguageType CLanguageControl::LoadLanguageSetting(const std::string& filename) {
|
std::ifstream iniFile;
|
std::string line;
|
std::string languagePrefix = "language=";
|
emLanguageType language = emLanguageType::emLanguageType_KR; // 默认语言
|
|
iniFile.open(filename, std::ios::in);
|
if (!iniFile.is_open()) {
|
std::cerr << "Unable to open file for reading. Default language will be used.\n";
|
return language;
|
}
|
|
while (std::getline(iniFile, line)) {
|
// 检查行中是否包含语言设置
|
size_t pos = line.find(languagePrefix);
|
if (pos != std::string::npos) {
|
std::string langStr = line.substr(pos + languagePrefix.length());
|
if (langStr == "Chinese") {
|
language = emLanguageType::emLanguageType_CH;
|
}
|
else if (langStr == "Korean") {
|
language = emLanguageType::emLanguageType_KR;
|
}
|
else if (langStr == "English") {
|
language = emLanguageType::emLanguageType_EN;
|
}
|
break;
|
}
|
}
|
|
iniFile.close();
|
return language;
|
}
|