#include "localization.h" #include "localization_en.h" #include "localization_jp.h" #include std::unordered_map Localization::strings; std::unordered_map Localization::wstrings; Locales Localization::currentLanguage; void Localization::SetLanguage(Locales languageCode) { currentLanguage = languageCode; strings.clear(); wstrings.clear(); // Load strings based on language code if (languageCode == Locales::En) { LoadLanguageStrings(EnglishStrings::GetStrings()); } else if (languageCode == Locales::Jp) { LoadLanguageStrings(JapaneseStrings::GetStrings()); } else { // Fallback to English if language not found LoadLanguageStrings(EnglishStrings::GetStrings()); } ui.localize_tables(); } void Localization::LoadLanguageStrings(const std::unordered_map& langStrings) { strings = langStrings; // Convert all strings to wide strings for Windows API for (const auto& pair : strings) { wstrings[pair.first] = StringToWString(pair.second); } } const std::string& Localization::GetString(StringID id) { auto it = strings.find(id); if (it != strings.end()) { return it->second; } // Return empty string if not found (shouldn't happen if initialized properly) static std::string empty; return empty; } const std::wstring& Localization::GetWString(StringID id) { auto it = wstrings.find(id); if (it != wstrings.end()) { return it->second; } // Return empty string if not found static std::wstring empty; return empty; } std::wstring Localization::StringToWString(const std::string& str) { if (str.empty()) return std::wstring(); int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0); std::wstring wstrTo(size_needed, 0); MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed); return wstrTo; }