#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; }