fix(settings): use the translations that were already sitting there

The window came out half German and half English on a German client. Thirteen of
those labels had a translated resource all along, reachable from no line of
code -- the same defect this cycle has now hit four times.

Most visible: all seven tab names in the sidebar. Settings_Tab_General and its
siblings exist in 25 languages and the sidebar drew "General", "Appearance",
"Chat" as literals. That is the first thing anyone sees in this window.

Plus reduce motion, custom sound volume, show hide button, window opacity, the
window style heading, and the themes folder button.

Deliberately left alone where the wording matched but the context did not.
"Never" exists as a world-suffix option, not as "the sweep has never run", and
"Opacity" exists for a tab rather than a window; reusing either would read
wrong in any language that inflects them differently. Those want their own keys,
not a borrowed one.

What stays English is what has no key at all: the section headings, the keybind
labels, and the descriptions written during this cycle. Roughly a hundred
strings, and adding them means 25 files each -- that is the localisation pass,
not this commit.
This commit is contained in:
2026-08-18 19:15:00 +02:00
parent 9c7be4106d
commit 051fd64857
4 changed files with 46 additions and 13 deletions
@@ -2,6 +2,7 @@ using System.Numerics;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface;
using Dalamud.Interface.Utility.Raii;
using HellionChat.Resources;
using HellionChat.Themes;
using HellionChat.Ui.StyleEngine;
using HellionChat.Util;
@@ -71,13 +72,38 @@ internal sealed class TabSidebar
IconSize = iconSize,
};
DrawEntry("general", FontAwesomeIcon.SlidersH, "General", palette);
DrawEntry("appearance", FontAwesomeIcon.Palette, "Appearance", palette);
DrawEntry("chat", FontAwesomeIcon.Comments, "Chat", palette);
DrawEntry("window", FontAwesomeIcon.WindowMaximize, "Window", palette);
DrawEntry("channels", FontAwesomeIcon.Hashtag, "Channels", palette);
DrawEntry("data-privacy", FontAwesomeIcon.Shield, "Data & Privacy", palette);
DrawEntry("about", FontAwesomeIcon.InfoCircle, "About", palette);
DrawEntry(
"general",
FontAwesomeIcon.SlidersH,
HellionStrings.Settings_Tab_General,
palette
);
DrawEntry(
"appearance",
FontAwesomeIcon.Palette,
HellionStrings.Settings_Tab_Appearance,
palette
);
DrawEntry("chat", FontAwesomeIcon.Comments, HellionStrings.Settings_Tab_Chat, palette);
DrawEntry(
"window",
FontAwesomeIcon.WindowMaximize,
HellionStrings.Settings_Tab_Window,
palette
);
DrawEntry("channels", FontAwesomeIcon.Hashtag, HellionStrings.Settings_Tab_Tabs, palette);
DrawEntry(
"data-privacy",
FontAwesomeIcon.Shield,
HellionStrings.Settings_Card_DataManagement_Title,
palette
);
DrawEntry(
"about",
FontAwesomeIcon.InfoCircle,
HellionStrings.Settings_Tab_Information,
palette
);
}
private readonly record struct SidebarPalette
@@ -38,7 +38,7 @@ internal sealed class GeneralTab
{
_w.ToggleRow(
ImGui.GetID("general.behaviour.reducemotion"u8),
"Reduce motion",
HellionStrings.Settings_ThemeAndLayout_ReduceMotion_Name,
"Turns off theme crossfades, hover fades and the drifting motes.",
() => Plugin.Config.ReduceMotion,
v => Plugin.Config.ReduceMotion = v
@@ -75,7 +75,7 @@ internal sealed class GeneralTab
);
_w.SliderFloatRow(
ImGui.GetID("general.notifications.volume"u8),
"Custom sound volume",
HellionStrings.Settings_General_CustomSoundVolume_Name,
null,
() => Plugin.Config.CustomSoundVolume,
v => Plugin.Config.CustomSoundVolume = v,
@@ -1,4 +1,5 @@
using Dalamud.Bindings.ImGui;
using HellionChat.Resources;
using HellionChat.Ui.StyleEngine;
namespace HellionChat.Ui.Components.Settings.Tabs;
@@ -41,7 +42,12 @@ internal sealed class WindowTab
);
}
if (_w.Section(ImGui.GetID("window.style"u8), "Window style"))
if (
_w.Section(
ImGui.GetID("window.style"u8),
HellionStrings.Settings_ThemeAndLayout_WindowStyle_Heading
)
)
{
_w.ToggleRow(
ImGui.GetID("window.style.titlebar"u8),
@@ -59,7 +65,7 @@ internal sealed class WindowTab
);
_w.ToggleRow(
ImGui.GetID("window.style.hidebutton"u8),
"Show hide button",
Language.Options_ShowHideButton_Name,
null,
() => Plugin.Config.ShowHideButton,
v => Plugin.Config.ShowHideButton = v
@@ -70,7 +76,7 @@ internal sealed class WindowTab
{
_w.SliderFloatRow(
ImGui.GetID("window.opacity.active"u8),
"Window opacity",
HellionStrings.Theme_WindowOpacity_Label,
null,
() => Plugin.Config.WindowOpacity,
v => Plugin.Config.WindowOpacity = v,
@@ -1,6 +1,7 @@
using System.Diagnostics;
using System.Security;
using Dalamud.Bindings.ImGui;
using HellionChat.Resources;
using HellionChat.Themes;
using Microsoft.Extensions.Logging;
@@ -32,7 +33,7 @@ internal sealed class ThemeImportExportRow
}
ImGui.SameLine();
if (ImGui.Button("Open themes folder"))
if (ImGui.Button(HellionStrings.Settings_Themes_OpenFolder))
{
OpenThemesFolder();
}