From 6ac126a743dbd650537253312553e45d5263ad52 Mon Sep 17 00:00:00 2001 From: kalilistic <35899782+kalilistic@users.noreply.github.com> Date: Sun, 28 Mar 2021 13:59:19 -0400 Subject: [PATCH] add current ui lang and change event --- Dalamud/Interface/DalamudInterface.cs | 2 +- Dalamud/Localization.cs | 21 ++++++++++++++------ Dalamud/Plugin/DalamudPluginInterface.cs | 25 ++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/Dalamud/Interface/DalamudInterface.cs b/Dalamud/Interface/DalamudInterface.cs index 5319ba9e5..560d5980b 100644 --- a/Dalamud/Interface/DalamudInterface.cs +++ b/Dalamud/Interface/DalamudInterface.cs @@ -223,7 +223,7 @@ namespace Dalamud.Interface { if (ImGui.MenuItem("From Fallbacks")) { - Loc.SetupWithFallbacks(); + this.dalamud.LocalizationManager.SetupWithFallbacks(); } if (ImGui.MenuItem("From UICulture")) diff --git a/Dalamud/Localization.cs b/Dalamud/Localization.cs index 838b45e13..b109db62d 100644 --- a/Dalamud/Localization.cs +++ b/Dalamud/Localization.cs @@ -13,8 +13,11 @@ namespace Dalamud class Localization { private readonly string workingDirectory; + private const string FallbackLangCode = "en"; public static readonly string[] ApplicableLangCodes = { "de", "ja", "fr", "it", "es", "ko", "no", "ru" }; - + public delegate void LocalizationChangedDelegate(string langCode); + public event LocalizationChangedDelegate OnLocalizationChanged; + public Localization(string workingDirectory) { this.workingDirectory = workingDirectory; } @@ -28,22 +31,28 @@ namespace Dalamud if (ApplicableLangCodes.Any(x => currentUiLang.TwoLetterISOLanguageName == x)) { SetupWithLangCode(currentUiLang.TwoLetterISOLanguageName); } else { - Loc.SetupWithFallbacks(); + SetupWithFallbacks(); } } catch (Exception ex) { Log.Error(ex, "Could not get language information. Setting up fallbacks."); - Loc.SetupWithFallbacks(); + SetupWithFallbacks(); } } + public void SetupWithFallbacks() { + OnLocalizationChanged?.Invoke(FallbackLangCode); + Loc.SetupWithFallbacks(); + } + public void SetupWithLangCode(string langCode) { - if (langCode.ToLower() == "en") { - Loc.SetupWithFallbacks(); + if (langCode.ToLower() == FallbackLangCode) { + SetupWithFallbacks(); return; } - + + OnLocalizationChanged?.Invoke(langCode); Loc.Setup(File.ReadAllText(Path.Combine(this.workingDirectory, "UIRes", "loc", "dalamud", $"dalamud_{langCode}.json"))); } } diff --git a/Dalamud/Plugin/DalamudPluginInterface.cs b/Dalamud/Plugin/DalamudPluginInterface.cs index e6da93282..de4832cc3 100644 --- a/Dalamud/Plugin/DalamudPluginInterface.cs +++ b/Dalamud/Plugin/DalamudPluginInterface.cs @@ -87,7 +87,23 @@ namespace Dalamud.Plugin #else public bool IsDebugging => this.dalamud.DalamudUi.IsDevMenu; #endif + + /// + /// Event that gets fired when loc is changed + /// + public event LanguageChangedDelegate OnLanguageChanged; + + /// + /// Delegate for localization change with two-letter iso lang code + /// + /// + public delegate void LanguageChangedDelegate(string langCode); + /// + /// Current ui language in two-letter iso format + /// + public string UiLanguage { get; private set; } + private readonly Dalamud dalamud; private readonly string pluginName; private readonly PluginConfigurations configs; @@ -109,6 +125,14 @@ namespace Dalamud.Plugin this.dalamud = dalamud; this.pluginName = pluginName; this.configs = configs; + + this.UiLanguage = this.dalamud.Configuration.LanguageOverride; + dalamud.LocalizationManager.OnLocalizationChanged += OnLocalizationChanged; + } + + private void OnLocalizationChanged(string langCode) { + this.UiLanguage = langCode; + OnLanguageChanged?.Invoke(langCode); } /// @@ -117,6 +141,7 @@ namespace Dalamud.Plugin public void Dispose() { this.UiBuilder.Dispose(); this.Framework.Gui.Chat.RemoveChatLinkHandler(this.pluginName); + this.dalamud.LocalizationManager.OnLocalizationChanged -= OnLocalizationChanged; } ///