diff --git a/Core/EmulationSettings.h b/Core/EmulationSettings.h index f94ee776..d2955387 100644 --- a/Core/EmulationSettings.h +++ b/Core/EmulationSettings.h @@ -198,7 +198,8 @@ enum class Language SystemDefault = 0, English = 1, French = 2, - Japanese = 3 + Japanese = 3, + Russian = 4 }; enum class StereoFilter diff --git a/Core/MessageManager.cpp b/Core/MessageManager.cpp index 2754b7df..48cd45d6 100644 --- a/Core/MessageManager.cpp +++ b/Core/MessageManager.cpp @@ -204,42 +204,37 @@ string MessageManager::Localize(string key) case Language::English: resources = &_enResources; break; case Language::French: resources = &_frResources; break; case Language::Japanese: resources = &_jaResources; break; + case Language::Russian: resources = &_enResources; break; } if(resources) { if(resources->find(key) != resources->end()) { return (*resources)[key]; + } else if(EmulationSettings::GetDisplayLanguage() != Language::English) { + //Fallback on English if resource key is missing another language + resources = &_enResources; + if(resources->find(key) != resources->end()) { + return (*resources)[key]; + } } } - return ""; + return key; } void MessageManager::DisplayMessage(string title, string message, string param1, string param2) { if(MessageManager::_messageManager) { - std::unordered_map *resources = nullptr; - switch(EmulationSettings::GetDisplayLanguage()) { - case Language::English: resources = &_enResources; break; - case Language::French: resources = &_frResources; break; - case Language::Japanese: resources = &_jaResources; break; + title = Localize(title); + message = Localize(message); + + size_t startPos = message.find(u8"%1"); + if(startPos != std::string::npos) { + message.replace(startPos, 2, param1); } - if(resources) { - if(resources->find(title) != resources->end()) { - title = (*resources)[title]; - } - if(resources->find(message) != resources->end()) { - message = (*resources)[message]; - size_t startPos = message.find(u8"%1"); - if(startPos != std::string::npos) { - message.replace(startPos, 2, param1); - } - - startPos = message.find(u8"%2"); - if(startPos != std::string::npos) { - message.replace(startPos, 2, param2); - } - } + startPos = message.find(u8"%2"); + if(startPos != std::string::npos) { + message.replace(startPos, 2, param2); } MessageManager::_messageManager->DisplayMessage(title, message); } diff --git a/GUI.NET/Config/ConfigManager.cs b/GUI.NET/Config/ConfigManager.cs index 0690d9ef..d4ee4b01 100644 --- a/GUI.NET/Config/ConfigManager.cs +++ b/GUI.NET/Config/ConfigManager.cs @@ -15,6 +15,8 @@ namespace Mesen.GUI.Config { private static Configuration _config; private static Configuration _dirtyConfig; + private static bool? _portableMode = null; + private static string _portablePath = null; private static void LoadConfig() { @@ -42,7 +44,16 @@ namespace Mesen.GUI.Config { get { - return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments, Environment.SpecialFolderOption.Create), "Mesen"); + if(_portableMode == null) { + _portableMode = System.Reflection.Assembly.GetEntryAssembly().Location.EndsWith("_P.exe", StringComparison.InvariantCultureIgnoreCase); + _portablePath = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location); + } + + if(_portableMode.Value) { + return Path.Combine(_portablePath, "Mesen"); + } else { + return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments, Environment.SpecialFolderOption.Create), "Mesen"); + } } } diff --git a/GUI.NET/Dependencies/Font.24.spritefont b/GUI.NET/Dependencies/Font.24.spritefont index d73846b5..6743e0e9 100644 Binary files a/GUI.NET/Dependencies/Font.24.spritefont and b/GUI.NET/Dependencies/Font.24.spritefont differ diff --git a/GUI.NET/Forms/frmMain.cs b/GUI.NET/Forms/frmMain.cs index bc04492b..914a8258 100644 --- a/GUI.NET/Forms/frmMain.cs +++ b/GUI.NET/Forms/frmMain.cs @@ -1350,6 +1350,7 @@ namespace Mesen.GUI.Forms case Language.English: langCode = "en"; break; case Language.French: langCode = "fr"; break; case Language.Japanese: langCode = "ja"; break; + case Language.Russian: langCode = "ru"; break; } xmlDoc.LoadXml(client.DownloadString("http://www.mesen.ca/Services/GetLatestVersion.php?v=" + InteropEmu.GetMesenVersion() + "&p=win&l=" + langCode)); Version currentVersion = new Version(InteropEmu.GetMesenVersion());