summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2016-08-12 14:01:09 +0200
committerJosJuice <josjuice@gmail.com>2016-08-12 14:52:01 +0200
commited9007cab7d46e8fb271cfb5536c1936097dbf6c (patch)
tree116b3dbca9ec1bf427a3fd4639f9f8e95aef12bb
parentcef71afc2758702ed9bc03daac27b7e811ca9a50 (diff)
Save GUI language as string instead of wxLanguage enum
When 5.0-211 updated wxWidgets to 3.1.0, some entries in the wxLanguage enum were moved and added, changing the wxLanguage values. Because we save Dolphin's interface language to disk as a wxLanguage, the language you have set will mean something different depending on whether you have the updated wx version or not. For instance, setting the language to English with the updated version and then using an older version will make Dolphin use Dutch. Because we can't rely on the enum anymore, I'm replacing the "Language" setting with a "LanguageCode" setting that uses standard ISO 639 codes.
-rw-r--r--Source/Core/Core/ConfigManager.cpp4
-rw-r--r--Source/Core/Core/ConfigManager.h2
-rw-r--r--Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp40
-rw-r--r--Source/Core/DolphinWX/Main.cpp22
4 files changed, 28 insertions, 40 deletions
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,
-
- 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,
-
- wxLANGUAGE_GREEK,
- wxLANGUAGE_RUSSIAN,
- wxLANGUAGE_ARABIC,
- wxLANGUAGE_FARSI,
- wxLANGUAGE_KOREAN,
- wxLANGUAGE_JAPANESE,
- wxLANGUAGE_CHINESE_SIMPLIFIED,
- wxLANGUAGE_CHINESE_TRADITIONAL,
+static const std::string language_ids[] = {
+ "",
+
+ "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",
+
+ "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))