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;
}
///