From 53fc61da145328bdc072d1dda8c8c86ef2e06454 Mon Sep 17 00:00:00 2001 From: "NGnius (Graham)" Date: Mon, 5 Oct 2020 14:16:03 -0400 Subject: [PATCH] Add Steam language auto-detection --- Localization/Localization.csproj | 132 ++++++++++++++++--------------- Localization/LocalizationMod.cs | 53 ++++++++++++- 2 files changed, 119 insertions(+), 66 deletions(-) diff --git a/Localization/Localization.csproj b/Localization/Localization.csproj index 0136f30..3922b38 100644 --- a/Localization/Localization.csproj +++ b/Localization/Localization.csproj @@ -1,73 +1,75 @@  - - - Debug - AnyCPU - {E2169518-26AB-4DA6-ACB2-6BCFB35D6953} - Library - Properties - Localization - Localization - v4.8 - 512 - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\Lib.Harmony.2.0.2\lib\net48\0Harmony.dll - True - - - ..\..\GamecraftModdingAPI\GamecraftModdingAPI\bin\Debug\net472\GamecraftModdingAPI.dll - - - ..\..\GamecraftModdingAPI\GamecraftModdingAPI\bin\Debug\net472\IllusionPlugin.dll - - - ..\..\ref\Gamecraft_Data\Managed\Newtonsoft.Json.dll - - - ..\..\ref\Gamecraft_Data\Managed\RobocraftX.Common.dll - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/Localization/LocalizationMod.cs b/Localization/LocalizationMod.cs index dca0e98..6f3f545 100644 --- a/Localization/LocalizationMod.cs +++ b/Localization/LocalizationMod.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using GamecraftModdingAPI; +using GamecraftModdingAPI.App; using GamecraftModdingAPI.Commands; using GamecraftModdingAPI.Utility; using HarmonyLib; @@ -67,8 +68,22 @@ namespace Localization .Action(() => { File.WriteAllText(Path.Combine(_pluginFolder.FullName, "dumped.json"), - JsonConvert.SerializeObject(_origStrings)); + JsonConvert.SerializeObject(_origStrings, Formatting.Indented)); }).Build(); + + if (!settings.ContainsKey("autoload") || (bool) settings["autoload"]) + { + settings["autoload"] = true; + using (var stream = new JsonTextWriter(new StreamWriter(File.OpenWrite(settingsPath)))) + settings.WriteTo(stream); + Client.EnterMenu += TryLoadSteamLanguageMenuEnterEvent; + } + else + { + settings["autoload"] = false; + using (var stream = new JsonTextWriter(new StreamWriter(File.OpenWrite(settingsPath)))) + settings.WriteTo(stream); + } } public override void OnApplicationQuit() @@ -114,6 +129,42 @@ namespace Localization .GetValue(null); } + private void TryLoadSteamLanguageMenuEnterEvent(object sender, MenuEventArgs args) + { + TryLoadSteamLanguage(); + Client.EnterMenu -= TryLoadSteamLanguageMenuEnterEvent; + } + + private void TryLoadSteamLanguage() + { + string lang = Steamworks.SteamUtils.SteamUILanguage; + string first2 = lang.Substring(0, 2); + // try some possibly valid language codes + if (File.Exists(Path.Combine(_pluginFolder.FullName, lang + ".json"))) + { + Logging.MetaLog($"Automatically detected Steam UI language {lang}, loading translations..."); + LoadTranslation(lang); + } + else if (File.Exists(Path.Combine(_pluginFolder.FullName, first2 + ".json"))) + { + lang = first2; + Logging.MetaLog($"Automatically detected Steam UI language {lang}, loading translations..."); + LoadTranslation(lang); + } + else if (File.Exists(Path.Combine(_pluginFolder.FullName, first2 + "-" + first2 + ".json"))) + { + // a lot of standard languages codes are like fr-fr (French from France), but this won't work for English (nor fr-CA French from Canada) + lang = first2 + "-" + first2; + Logging.MetaLog($"Automatically detected Steam UI language {lang}, loading translations..."); + LoadTranslation(lang); + } + else + { + Logging.MetaLog($"Translations for Steam UI language {lang} are not available, skipping..."); + } + + } + public override string Name { get; } = "LocalizationMod"; public override string Version { get; } = "1.0.0"; }