feat: add language override
This commit is contained in:
parent
9b1e87209a
commit
4779ed0f48
|
@ -23,6 +23,7 @@ internal class Configuration : IPluginConfiguration {
|
|||
public bool SidebarTabView;
|
||||
public CommandHelpSide CommandHelpSide = CommandHelpSide.None;
|
||||
public KeybindMode KeybindMode = KeybindMode.Strict;
|
||||
public LanguageOverride LanguageOverride = LanguageOverride.None;
|
||||
public bool CanMove = true;
|
||||
public bool CanResize = true;
|
||||
public bool ShowTitleBar;
|
||||
|
@ -49,6 +50,7 @@ internal class Configuration : IPluginConfiguration {
|
|||
this.SidebarTabView = other.SidebarTabView;
|
||||
this.CommandHelpSide = other.CommandHelpSide;
|
||||
this.KeybindMode = other.KeybindMode;
|
||||
this.LanguageOverride = other.LanguageOverride;
|
||||
this.CanMove = other.CanMove;
|
||||
this.CanResize = other.CanResize;
|
||||
this.ShowTitleBar = other.ShowTitleBar;
|
||||
|
@ -207,3 +209,56 @@ internal static class KeybindModeExt {
|
|||
_ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null),
|
||||
};
|
||||
|
||||
internal static string? Tooltip(this KeybindMode mode) => mode switch {
|
||||
KeybindMode.Flexible => Language.KeybindMode_Flexible_Tooltip,
|
||||
KeybindMode.Strict => Language.KeybindMode_Strict_Tooltip,
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
internal enum LanguageOverride {
|
||||
None,
|
||||
English,
|
||||
French,
|
||||
German,
|
||||
Italian,
|
||||
Japanese,
|
||||
Korean,
|
||||
Norwegian,
|
||||
PortugueseBrazil,
|
||||
Russian,
|
||||
Spanish,
|
||||
}
|
||||
|
||||
internal static class LanguageOverrideExt {
|
||||
internal static string Name(this LanguageOverride mode) => mode switch {
|
||||
LanguageOverride.None => Language.LanguageOverride_None,
|
||||
LanguageOverride.English => "English",
|
||||
LanguageOverride.French => "Français",
|
||||
LanguageOverride.German => "Deutsch",
|
||||
LanguageOverride.Italian => "Italiano",
|
||||
LanguageOverride.Japanese => "日本語",
|
||||
LanguageOverride.Korean => "한국어 (Korean)",
|
||||
LanguageOverride.Norwegian => "Norsk",
|
||||
LanguageOverride.PortugueseBrazil => "Português do Brasil",
|
||||
LanguageOverride.Russian => "Русский",
|
||||
LanguageOverride.Spanish => "Español",
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null),
|
||||
};
|
||||
|
||||
internal static string Code(this LanguageOverride mode) => mode switch {
|
||||
LanguageOverride.None => "",
|
||||
LanguageOverride.English => "en",
|
||||
LanguageOverride.French => "fr",
|
||||
LanguageOverride.German => "de",
|
||||
LanguageOverride.Italian => "it",
|
||||
LanguageOverride.Japanese => "ja",
|
||||
LanguageOverride.Korean => "ko",
|
||||
LanguageOverride.Norwegian => "no",
|
||||
LanguageOverride.PortugueseBrazil => "pt-br",
|
||||
LanguageOverride.Russian => "ru",
|
||||
LanguageOverride.Spanish => "es",
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null),
|
||||
};
|
||||
}
|
||||
|
|
|
@ -68,10 +68,11 @@ public sealed class Plugin : IDalamudPlugin {
|
|||
|
||||
#pragma warning disable CS8618
|
||||
public Plugin() {
|
||||
LanguageChanged(this.Interface!.UiLanguage);
|
||||
|
||||
this.Config = this.Interface.GetPluginConfig() as Configuration ?? new Configuration();
|
||||
this.Config = this.Interface!.GetPluginConfig() as Configuration ?? new Configuration();
|
||||
this.Config.Migrate();
|
||||
|
||||
this.LanguageChanged(this.Interface.UiLanguage);
|
||||
|
||||
this.Common = new XivCommonBase();
|
||||
this.TextureCache = new TextureCache(this.DataManager!);
|
||||
this.Functions = new GameFunctions.GameFunctions(this);
|
||||
|
@ -79,12 +80,12 @@ public sealed class Plugin : IDalamudPlugin {
|
|||
this.Ui = new PluginUi(this);
|
||||
|
||||
this.Framework!.Update += this.FrameworkUpdate;
|
||||
this.Interface.LanguageChanged += LanguageChanged;
|
||||
this.Interface.LanguageChanged += this.LanguageChanged;
|
||||
}
|
||||
#pragma warning restore CS8618
|
||||
|
||||
public void Dispose() {
|
||||
this.Interface.LanguageChanged -= LanguageChanged;
|
||||
this.Interface.LanguageChanged -= this.LanguageChanged;
|
||||
this.Framework.Update -= this.FrameworkUpdate;
|
||||
GameFunctions.GameFunctions.SetChatInteractable(true);
|
||||
|
||||
|
@ -99,8 +100,12 @@ public sealed class Plugin : IDalamudPlugin {
|
|||
this.Interface.SavePluginConfig(this.Config);
|
||||
}
|
||||
|
||||
private static void LanguageChanged(string langCode) {
|
||||
Language.Culture = new CultureInfo(langCode);
|
||||
internal void LanguageChanged(string langCode) {
|
||||
var info = this.Config.LanguageOverride is LanguageOverride.None
|
||||
? new CultureInfo(langCode)
|
||||
: new CultureInfo(this.Config.LanguageOverride.Code());
|
||||
|
||||
Language.Culture = info;
|
||||
}
|
||||
|
||||
private static readonly string[] ChatAddonNames = {
|
||||
|
|
|
@ -249,6 +249,51 @@ namespace ChatTwo.Resources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Flexible.
|
||||
/// </summary>
|
||||
internal static string KeybindMode_Flexible_Name {
|
||||
get {
|
||||
return ResourceManager.GetString("KeybindMode_Flexible_Name", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Process keybinds with modifiers even if other modifiers are pressed..
|
||||
/// </summary>
|
||||
internal static string KeybindMode_Flexible_Tooltip {
|
||||
get {
|
||||
return ResourceManager.GetString("KeybindMode_Flexible_Tooltip", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Strict.
|
||||
/// </summary>
|
||||
internal static string KeybindMode_Strict_Name {
|
||||
get {
|
||||
return ResourceManager.GetString("KeybindMode_Strict_Name", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Only process keybinds with modifiers if no other modifiers are pressed..
|
||||
/// </summary>
|
||||
internal static string KeybindMode_Strict_Tooltip {
|
||||
get {
|
||||
return ResourceManager.GetString("KeybindMode_Strict_Tooltip", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use Dalamud's default language.
|
||||
/// </summary>
|
||||
internal static string LanguageOverride_None {
|
||||
get {
|
||||
return ResourceManager.GetString("LanguageOverride_None", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Click the button to the left to see what's being worked on and what's next..
|
||||
/// </summary>
|
||||
|
@ -510,6 +555,51 @@ namespace ChatTwo.Resources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The way in which {0} should handle keybinds..
|
||||
/// </summary>
|
||||
internal static string Options_KeybindMode_Description {
|
||||
get {
|
||||
return ResourceManager.GetString("Options_KeybindMode_Description", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Keybind mode.
|
||||
/// </summary>
|
||||
internal static string Options_KeybindMode_Name {
|
||||
get {
|
||||
return ResourceManager.GetString("Options_KeybindMode_Name", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The language to display {0} in..
|
||||
/// </summary>
|
||||
internal static string Options_Language_Description {
|
||||
get {
|
||||
return ResourceManager.GetString("Options_Language_Description", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Language.
|
||||
/// </summary>
|
||||
internal static string Options_Language_Name {
|
||||
get {
|
||||
return ResourceManager.GetString("Options_Language_Name", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Miscellaneous.
|
||||
/// </summary>
|
||||
internal static string Options_Miscellaneous_Tab {
|
||||
get {
|
||||
return ResourceManager.GetString("Options_Miscellaneous_Tab", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Reduce the spacing between messages..
|
||||
/// </summary>
|
||||
|
|
|
@ -407,4 +407,34 @@
|
|||
<data name="Options_HideWhenUiHidden_Description" xml:space="preserve">
|
||||
<value>Hide {0} when the game UI is hidden.</value>
|
||||
</data>
|
||||
<data name="Options_KeybindMode_Name" xml:space="preserve">
|
||||
<value>Keybind mode</value>
|
||||
</data>
|
||||
<data name="Options_KeybindMode_Description" xml:space="preserve">
|
||||
<value>The way in which {0} should handle keybinds.</value>
|
||||
</data>
|
||||
<data name="Options_Miscellaneous_Tab" xml:space="preserve">
|
||||
<value>Miscellaneous</value>
|
||||
</data>
|
||||
<data name="LanguageOverride_None" xml:space="preserve">
|
||||
<value>Use Dalamud's default language</value>
|
||||
</data>
|
||||
<data name="KeybindMode_Flexible_Name" xml:space="preserve">
|
||||
<value>Flexible</value>
|
||||
</data>
|
||||
<data name="KeybindMode_Strict_Name" xml:space="preserve">
|
||||
<value>Strict</value>
|
||||
</data>
|
||||
<data name="KeybindMode_Flexible_Tooltip" xml:space="preserve">
|
||||
<value>Process keybinds with modifiers even if other modifiers are pressed.</value>
|
||||
</data>
|
||||
<data name="KeybindMode_Strict_Tooltip" xml:space="preserve">
|
||||
<value>Only process keybinds with modifiers if no other modifiers are pressed.</value>
|
||||
</data>
|
||||
<data name="Options_Language_Name" xml:space="preserve">
|
||||
<value>Language</value>
|
||||
</data>
|
||||
<data name="Options_Language_Description" xml:space="preserve">
|
||||
<value>The language to display {0} in.</value>
|
||||
</data>
|
||||
</root>
|
||||
|
|
|
@ -398,12 +398,12 @@
|
|||
<value>Сторона помощи по команде</value>
|
||||
</data>
|
||||
<data name="Options_CommandHelpSide_Description" xml:space="preserve">
|
||||
<value>Сторона {0} с которой отображается помощь по командам.</value>
|
||||
<value>Сторона {0}, на которой отображается помощь по командам.</value>
|
||||
</data>
|
||||
<data name="Options_HideWhenUiHidden_Name" xml:space="preserve">
|
||||
<value>Скрывать, когда игровой интерфейс скрыт</value>
|
||||
</data>
|
||||
<data name="Options_HideWhenUiHidden_Description" xml:space="preserve">
|
||||
<value>Скрыть {0}, когда игровой интерфейс скрыт.</value>
|
||||
<value>Скрыть {0}, когда скрыт игровой интерфейс.</value>
|
||||
</data>
|
||||
</root>
|
||||
|
|
|
@ -132,6 +132,7 @@ internal sealed class Settings : IUiComponent {
|
|||
var fontSizeChanged = Math.Abs(this.Mutable.FontSize - this.Ui.Plugin.Config.FontSize) > 0.001
|
||||
|| Math.Abs(this.Mutable.JapaneseFontSize - this.Ui.Plugin.Config.JapaneseFontSize) > 0.001
|
||||
|| Math.Abs(this.Mutable.SymbolsFontSize - this.Ui.Plugin.Config.SymbolsFontSize) > 0.001;
|
||||
var langChanged = this.Mutable.LanguageOverride != this.Ui.Plugin.Config.LanguageOverride;
|
||||
|
||||
config.UpdateFrom(this.Mutable);
|
||||
|
||||
|
@ -145,6 +146,10 @@ internal sealed class Settings : IUiComponent {
|
|||
this.Ui.Plugin.Interface.UiBuilder.RebuildFonts();
|
||||
}
|
||||
|
||||
if (langChanged) {
|
||||
this.Ui.Plugin.LanguageChanged(this.Ui.Plugin.Interface.UiLanguage);
|
||||
}
|
||||
|
||||
if (!this.Mutable.HideChat && hideChatChanged) {
|
||||
GameFunctions.GameFunctions.SetChatInteractable(true);
|
||||
}
|
||||
|
|
|
@ -14,6 +14,16 @@ internal sealed class Miscellaneous : ISettingsTab {
|
|||
}
|
||||
|
||||
public void Draw() {
|
||||
if (ImGui.BeginCombo(Language.Options_Language_Name, this.Mutable.LanguageOverride.Name())) {
|
||||
foreach (var language in Enum.GetValues<LanguageOverride>()) {
|
||||
if (ImGui.Selectable(language.Name())) {
|
||||
this.Mutable.LanguageOverride = language;
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.EndCombo();
|
||||
}
|
||||
|
||||
ImGuiUtil.HelpText(string.Format(Language.Options_Language_Description, Plugin.PluginName));
|
||||
ImGui.Spacing();
|
||||
|
||||
|
|
Loading…
Reference in New Issue