diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index 0cf06f4e97..b1a63626f6 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -156,7 +156,7 @@ void SConfig::SaveInterfaceSettings(IniFile& ini) interface->Set("MainWindowPosY", (iPosY == -32000) ? 0 : iPosY); // TODO - HAX interface->Set("MainWindowWidth", iWidth); interface->Set("MainWindowHeight", iHeight); - interface->Set("Language", m_InterfaceLanguage); + interface->Set("LanguageCode", m_InterfaceLanguage); interface->Set("ShowToolbar", m_InterfaceToolbar); interface->Set("ShowStatusbar", m_InterfaceStatusbar); interface->Set("ShowLogWindow", m_InterfaceLogWindow); @@ -423,7 +423,7 @@ void SConfig::LoadInterfaceSettings(IniFile& ini) interface->Get("MainWindowPosY", &iPosY, 100); interface->Get("MainWindowWidth", &iWidth, 800); interface->Get("MainWindowHeight", &iHeight, 600); - interface->Get("Language", &m_InterfaceLanguage, 0); + interface->Get("LanguageCode", &m_InterfaceLanguage, ""); interface->Get("ShowToolbar", &m_InterfaceToolbar, true); interface->Get("ShowStatusbar", &m_InterfaceStatusbar, true); interface->Get("ShowLogWindow", &m_InterfaceLogWindow, false); diff --git a/Source/Core/Core/ConfigManager.h b/Source/Core/Core/ConfigManager.h index e8fa5eee7d..0f819797d7 100644 --- a/Source/Core/Core/ConfigManager.h +++ b/Source/Core/Core/ConfigManager.h @@ -210,7 +210,7 @@ struct SConfig : NonCopyable std::string m_bba_mac; // interface language - int m_InterfaceLanguage; + std::string m_InterfaceLanguage; float m_EmulationSpeed; bool m_OCEnable; float m_OCFactor; diff --git a/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp b/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp index a3934c9b8f..30a3c7aa30 100644 --- a/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp +++ b/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp @@ -27,38 +27,14 @@ #include "DolphinWX/X11Utils.h" #endif -static const wxLanguage language_ids[] = { - wxLANGUAGE_DEFAULT, +static const std::string language_ids[] = { + "", - wxLANGUAGE_MALAY, - wxLANGUAGE_CATALAN, - wxLANGUAGE_CZECH, - wxLANGUAGE_DANISH, - wxLANGUAGE_GERMAN, - wxLANGUAGE_ENGLISH, - wxLANGUAGE_SPANISH, - wxLANGUAGE_FRENCH, - wxLANGUAGE_CROATIAN, - wxLANGUAGE_ITALIAN, - wxLANGUAGE_HUNGARIAN, - wxLANGUAGE_DUTCH, - wxLANGUAGE_NORWEGIAN_BOKMAL, - wxLANGUAGE_POLISH, - wxLANGUAGE_PORTUGUESE, - wxLANGUAGE_PORTUGUESE_BRAZILIAN, - wxLANGUAGE_ROMANIAN, - wxLANGUAGE_SERBIAN, - wxLANGUAGE_SWEDISH, - wxLANGUAGE_TURKISH, + "ms", "ca", "cs", "da", "de", "en", "es", "fr", "hr", "it", "hu", "nl", + "nb", // wxWidgets won't accept "no" + "pl", "pt", "pt_BR", "ro", "sr", "sv", "tr", - wxLANGUAGE_GREEK, - wxLANGUAGE_RUSSIAN, - wxLANGUAGE_ARABIC, - wxLANGUAGE_FARSI, - wxLANGUAGE_KOREAN, - wxLANGUAGE_JAPANESE, - wxLANGUAGE_CHINESE_SIMPLIFIED, - wxLANGUAGE_CHINESE_TRADITIONAL, + "el", "ru", "ar", "fa", "ko", "ja", "zh_CN", "zh_TW", }; InterfaceConfigPane::InterfaceConfigPane(wxWindow* parent, wxWindowID id) : wxPanel(parent, id) diff --git a/Source/Core/DolphinWX/Main.cpp b/Source/Core/DolphinWX/Main.cpp index 20460e258c..12938544d6 100644 --- a/Source/Core/DolphinWX/Main.cpp +++ b/Source/Core/DolphinWX/Main.cpp @@ -295,11 +295,23 @@ void DolphinApp::AfterInit() void DolphinApp::InitLanguageSupport() { - unsigned int language = 0; - - IniFile ini; - ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); - ini.GetOrCreateSection("Interface")->Get("Language", &language, wxLANGUAGE_DEFAULT); + std::string language_code; + { + IniFile ini; + ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); + ini.GetOrCreateSection("Interface")->Get("LanguageCode", &language_code, ""); + } + int language = wxLANGUAGE_UNKNOWN; + if (language_code.empty()) + { + language = wxLANGUAGE_DEFAULT; + } + else + { + const wxLanguageInfo* language_info = wxLocale::FindLanguageInfo(StrToWxStr(language_code)); + if (language_info) + language = language_info->Language; + } // Load language if possible, fall back to system default otherwise if (wxLocale::IsAvailable(language))