From 4f3bdc3c7bab514a082562eeb9f1f0ea797eb0f9 Mon Sep 17 00:00:00 2001 From: Jon Kazama Date: Tue, 18 Aug 2026 22:30:12 +0200 Subject: [PATCH] fix(privacy): translate the channel list and give it back its presets Reported after a translation pass: the channel list in Data & Privacy reads English in every language. It was not, as assumed, the client's own naming -- the list called ToString() on the enum member, so it showed "FreeCompanyLoginLogout" while Language.ChatType_* sat next to it holding "Freie Gesellschaft (An-/Abmeldung)" in all 25 languages. Fixing the label exposed how little else the list had. Six translated strings written for exactly this control had no caller: the explanation of what it does, the note that it governs the database and not the chat window, and three presets -- data minimisation, select all, deselect all. Eighty-nine checkboxes without a "recommended" button is not a choice anyone makes. So the list now carries the same eight groups the export uses, with the individual channels one fold away. It is the one control that decides what reaches the database; the two screens describing channels the same way is worth more here than anywhere else. The unknown-channel switch gets its description back, and the telemetry section stops being the last English literal in the tab. It stays a statement rather than a switch: a toggle would imply there is something to turn off. --- .../Resources/HellionStrings.Designer.cs | 2 + HellionChat/Resources/HellionStrings.ca.resx | 6 ++ HellionChat/Resources/HellionStrings.cs.resx | 6 ++ HellionChat/Resources/HellionStrings.da.resx | 6 ++ HellionChat/Resources/HellionStrings.de.resx | 6 ++ HellionChat/Resources/HellionStrings.el.resx | 6 ++ HellionChat/Resources/HellionStrings.es.resx | 6 ++ HellionChat/Resources/HellionStrings.fi.resx | 6 ++ HellionChat/Resources/HellionStrings.fr.resx | 6 ++ HellionChat/Resources/HellionStrings.hu.resx | 6 ++ HellionChat/Resources/HellionStrings.it.resx | 6 ++ HellionChat/Resources/HellionStrings.ja.resx | 6 ++ HellionChat/Resources/HellionStrings.ko.resx | 6 ++ HellionChat/Resources/HellionStrings.nb.resx | 6 ++ HellionChat/Resources/HellionStrings.nl.resx | 6 ++ HellionChat/Resources/HellionStrings.pl.resx | 6 ++ .../Resources/HellionStrings.pt-BR.resx | 6 ++ .../Resources/HellionStrings.pt-PT.resx | 6 ++ HellionChat/Resources/HellionStrings.resx | 6 ++ HellionChat/Resources/HellionStrings.ro.resx | 6 ++ HellionChat/Resources/HellionStrings.ru.resx | 6 ++ HellionChat/Resources/HellionStrings.sv.resx | 6 ++ HellionChat/Resources/HellionStrings.tr.resx | 6 ++ HellionChat/Resources/HellionStrings.uk.resx | 6 ++ .../Resources/HellionStrings.zh-Hans.resx | 6 ++ .../Resources/HellionStrings.zh-Hant.resx | 6 ++ .../Settings/Tabs/DataPrivacyTab.cs | 91 +++++++++++++++---- 27 files changed, 224 insertions(+), 19 deletions(-) diff --git a/HellionChat/Resources/HellionStrings.Designer.cs b/HellionChat/Resources/HellionStrings.Designer.cs index e2b1f74..a6910a7 100644 --- a/HellionChat/Resources/HellionStrings.Designer.cs +++ b/HellionChat/Resources/HellionStrings.Designer.cs @@ -380,6 +380,8 @@ internal class HellionStrings internal static string Settings_Section_Retention => Get(nameof(Settings_Section_Retention)); internal static string Settings_Section_Cleanup => Get(nameof(Settings_Section_Cleanup)); internal static string Settings_Section_Export => Get(nameof(Settings_Section_Export)); + internal static string Settings_Section_Telemetry => Get(nameof(Settings_Section_Telemetry)); + internal static string Settings_Telemetry_None => Get(nameof(Settings_Telemetry_None)); internal static string Settings_Section_Database => Get(nameof(Settings_Section_Database)); // Hellion Chat — v1.2.1 Migration v15 → v16 toast diff --git a/HellionChat/Resources/HellionStrings.ca.resx b/HellionChat/Resources/HellionStrings.ca.resx index b445e98..13dfaa5 100644 --- a/HellionChat/Resources/HellionStrings.ca.resx +++ b/HellionChat/Resources/HellionStrings.ca.resx @@ -1187,4 +1187,10 @@ No s'ha pogut esborrar l'historial. No s'ha eliminat res, consulta /xllog. + + Telemetria + + + No es recull cap telemetria. El complement no envia res sobre tu ni sobre el teu ús enlloc. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.cs.resx b/HellionChat/Resources/HellionStrings.cs.resx index 287615b..434ff9d 100644 --- a/HellionChat/Resources/HellionStrings.cs.resx +++ b/HellionChat/Resources/HellionStrings.cs.resx @@ -1186,4 +1186,10 @@ Vymazání historie selhalo. Nic nebylo odstraněno, viz /xllog. + + Telemetrie + + + Nesbírá se žádná telemetrie. Plugin nikam neposílá nic o vás ani o vašem používání. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.da.resx b/HellionChat/Resources/HellionStrings.da.resx index 6f31c30..dc811a0 100644 --- a/HellionChat/Resources/HellionStrings.da.resx +++ b/HellionChat/Resources/HellionStrings.da.resx @@ -1186,4 +1186,10 @@ Sletning af historikken mislykkedes. Intet blev fjernet, se /xllog. + + Telemetri + + + Der indsamles ingen telemetri. Pluginet sender intet om dig eller din brug nogen steder. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.de.resx b/HellionChat/Resources/HellionStrings.de.resx index a3a7f54..b67c823 100644 --- a/HellionChat/Resources/HellionStrings.de.resx +++ b/HellionChat/Resources/HellionStrings.de.resx @@ -1181,4 +1181,10 @@ Das Löschen des Verlaufs ist fehlgeschlagen. Es wurde nichts entfernt, siehe /xllog. + + Telemetrie + + + Es wird keine Telemetrie erhoben. Das Plugin sendet nichts über dich oder deine Nutzung irgendwohin. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.el.resx b/HellionChat/Resources/HellionStrings.el.resx index b818787..4da4420 100644 --- a/HellionChat/Resources/HellionStrings.el.resx +++ b/HellionChat/Resources/HellionStrings.el.resx @@ -1186,4 +1186,10 @@ Η διαγραφή του ιστορικού απέτυχε. Δεν αφαιρέθηκε τίποτα, δείτε /xllog. + + Τηλεμετρία + + + Δεν συλλέγεται τηλεμετρία. Το πρόσθετο δεν στέλνει πουθενά τίποτα για εσάς ή τη χρήση σας. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.es.resx b/HellionChat/Resources/HellionStrings.es.resx index 9f44dd6..71befcd 100644 --- a/HellionChat/Resources/HellionStrings.es.resx +++ b/HellionChat/Resources/HellionStrings.es.resx @@ -1187,4 +1187,10 @@ No se pudo borrar el historial. No se eliminó nada, consulta /xllog. + + Telemetría + + + No se recopila telemetría. El complemento no envía nada sobre ti ni sobre tu uso a ninguna parte. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.fi.resx b/HellionChat/Resources/HellionStrings.fi.resx index a0a6f20..f30b33f 100644 --- a/HellionChat/Resources/HellionStrings.fi.resx +++ b/HellionChat/Resources/HellionStrings.fi.resx @@ -1186,4 +1186,10 @@ Historian tyhjennys epäonnistui. Mitään ei poistettu, katso /xllog. + + Telemetria + + + Telemetriaa ei kerätä. Lisäosa ei lähetä mitään sinusta tai käytöstäsi minnekään. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.fr.resx b/HellionChat/Resources/HellionStrings.fr.resx index 81dd5f0..98e7e99 100644 --- a/HellionChat/Resources/HellionStrings.fr.resx +++ b/HellionChat/Resources/HellionStrings.fr.resx @@ -1187,4 +1187,10 @@ L'effacement de l'historique a échoué. Rien n'a été supprimé, voir /xllog. + + Télémétrie + + + Aucune télémétrie n'est collectée. Le plugin n'envoie rien vous concernant ni sur votre utilisation. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.hu.resx b/HellionChat/Resources/HellionStrings.hu.resx index 8e023c9..39e2de0 100644 --- a/HellionChat/Resources/HellionStrings.hu.resx +++ b/HellionChat/Resources/HellionStrings.hu.resx @@ -1186,4 +1186,10 @@ Az előzmények törlése nem sikerült. Semmi sem lett eltávolítva, lásd /xllog. + + Telemetria + + + Nem gyűjtünk telemetriát. A bővítmény semmit sem küld rólad vagy a használatodról sehová. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.it.resx b/HellionChat/Resources/HellionStrings.it.resx index f428f96..93a4e63 100644 --- a/HellionChat/Resources/HellionStrings.it.resx +++ b/HellionChat/Resources/HellionStrings.it.resx @@ -1187,4 +1187,10 @@ La cancellazione della cronologia non è riuscita. Non è stato rimosso nulla, vedi /xllog. + + Telemetria + + + Non viene raccolta alcuna telemetria. Il plugin non invia nulla su di te o sul tuo utilizzo. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.ja.resx b/HellionChat/Resources/HellionStrings.ja.resx index b5c0bd1..2d292a1 100644 --- a/HellionChat/Resources/HellionStrings.ja.resx +++ b/HellionChat/Resources/HellionStrings.ja.resx @@ -1187,4 +1187,10 @@ 履歴の削除に失敗しました。何も削除されていません。/xllog を確認してください。 + + テレメトリ + + + テレメトリは収集していません。あなたや利用状況に関する情報をどこにも送信しません。 + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.ko.resx b/HellionChat/Resources/HellionStrings.ko.resx index 1e0302e..31809e0 100644 --- a/HellionChat/Resources/HellionStrings.ko.resx +++ b/HellionChat/Resources/HellionStrings.ko.resx @@ -1187,4 +1187,10 @@ 기록 삭제에 실패했습니다. 아무것도 삭제되지 않았습니다. /xllog를 확인하세요. + + 원격 측정 + + + 원격 측정 정보를 수집하지 않습니다. 사용자나 사용 내역에 관한 어떤 정보도 전송하지 않습니다. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.nb.resx b/HellionChat/Resources/HellionStrings.nb.resx index 3ddc5db..4269ae8 100644 --- a/HellionChat/Resources/HellionStrings.nb.resx +++ b/HellionChat/Resources/HellionStrings.nb.resx @@ -1186,4 +1186,10 @@ Sletting av historikken mislyktes. Ingenting ble fjernet, se /xllog. + + Telemetri + + + Ingen telemetri samles inn. Programtillegget sender ingenting om deg eller bruken din noe sted. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.nl.resx b/HellionChat/Resources/HellionStrings.nl.resx index aa8eb65..2d325b7 100644 --- a/HellionChat/Resources/HellionStrings.nl.resx +++ b/HellionChat/Resources/HellionStrings.nl.resx @@ -1187,4 +1187,10 @@ Het wissen van de geschiedenis is mislukt. Er is niets verwijderd, zie /xllog. + + Telemetrie + + + Er wordt geen telemetrie verzameld. De plug-in stuurt niets over jou of je gebruik ergens heen. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.pl.resx b/HellionChat/Resources/HellionStrings.pl.resx index 2381382..a0bddf8 100644 --- a/HellionChat/Resources/HellionStrings.pl.resx +++ b/HellionChat/Resources/HellionStrings.pl.resx @@ -1186,4 +1186,10 @@ Usuwanie historii nie powiodło się. Nic nie zostało usunięte, zobacz /xllog. + + Telemetria + + + Nie zbieramy żadnej telemetrii. Wtyczka nigdzie nie wysyła informacji o tobie ani o twoim użytkowaniu. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.pt-BR.resx b/HellionChat/Resources/HellionStrings.pt-BR.resx index aa86657..8bc2429 100644 --- a/HellionChat/Resources/HellionStrings.pt-BR.resx +++ b/HellionChat/Resources/HellionStrings.pt-BR.resx @@ -1187,4 +1187,10 @@ Falha ao apagar o histórico. Nada foi removido, veja /xllog. + + Telemetria + + + Nenhuma telemetria é coletada. O plugin não envia nada sobre você ou seu uso para lugar nenhum. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.pt-PT.resx b/HellionChat/Resources/HellionStrings.pt-PT.resx index 06c1334..57383ab 100644 --- a/HellionChat/Resources/HellionStrings.pt-PT.resx +++ b/HellionChat/Resources/HellionStrings.pt-PT.resx @@ -1186,4 +1186,10 @@ Falha ao apagar o histórico. Nada foi removido, consulte /xllog. + + Telemetria + + + Não é recolhida qualquer telemetria. O plugin não envia nada sobre si ou sobre a sua utilização. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.resx b/HellionChat/Resources/HellionStrings.resx index 9feaf9a..7cf4df6 100644 --- a/HellionChat/Resources/HellionStrings.resx +++ b/HellionChat/Resources/HellionStrings.resx @@ -1207,4 +1207,10 @@ Clearing the history failed. Nothing was removed, see /xllog. + + Telemetry + + + No telemetry is collected. The plugin sends nothing about you or your usage anywhere. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.ro.resx b/HellionChat/Resources/HellionStrings.ro.resx index ba41ca9..145c502 100644 --- a/HellionChat/Resources/HellionStrings.ro.resx +++ b/HellionChat/Resources/HellionStrings.ro.resx @@ -1187,4 +1187,10 @@ Ștergerea istoricului a eșuat. Nu a fost eliminat nimic, vezi /xllog. + + Telemetrie + + + Nu se colectează telemetrie. Extensia nu trimite nimic despre tine sau despre utilizarea ta nicăieri. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.ru.resx b/HellionChat/Resources/HellionStrings.ru.resx index 04c6f72..e7b8baf 100644 --- a/HellionChat/Resources/HellionStrings.ru.resx +++ b/HellionChat/Resources/HellionStrings.ru.resx @@ -1187,4 +1187,10 @@ Не удалось удалить историю. Ничего не было удалено, см. /xllog. + + Телеметрия + + + Телеметрия не собирается. Плагин никуда не отправляет данные о вас или о вашем использовании. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.sv.resx b/HellionChat/Resources/HellionStrings.sv.resx index b8e95b3..b8f5610 100644 --- a/HellionChat/Resources/HellionStrings.sv.resx +++ b/HellionChat/Resources/HellionStrings.sv.resx @@ -1187,4 +1187,10 @@ Raderingen av historiken misslyckades. Ingenting togs bort, se /xllog. + + Telemetri + + + Ingen telemetri samlas in. Tillägget skickar ingenting om dig eller din användning någonstans. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.tr.resx b/HellionChat/Resources/HellionStrings.tr.resx index 47dc6b3..07d3675 100644 --- a/HellionChat/Resources/HellionStrings.tr.resx +++ b/HellionChat/Resources/HellionStrings.tr.resx @@ -1186,4 +1186,10 @@ Geçmiş silinemedi. Hiçbir şey kaldırılmadı, /xllog kaydına bakın. + + Telemetri + + + Hiçbir telemetri toplanmıyor. Eklenti sizinle veya kullanımınızla ilgili hiçbir şeyi hiçbir yere göndermiyor. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.uk.resx b/HellionChat/Resources/HellionStrings.uk.resx index 51d3331..93695bb 100644 --- a/HellionChat/Resources/HellionStrings.uk.resx +++ b/HellionChat/Resources/HellionStrings.uk.resx @@ -1186,4 +1186,10 @@ Не вдалося видалити історію. Нічого не було видалено, див. /xllog. + + Телеметрія + + + Телеметрія не збирається. Плагін нікуди не надсилає дані про вас або про ваше використання. + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.zh-Hans.resx b/HellionChat/Resources/HellionStrings.zh-Hans.resx index a069fac..e62ce07 100644 --- a/HellionChat/Resources/HellionStrings.zh-Hans.resx +++ b/HellionChat/Resources/HellionStrings.zh-Hans.resx @@ -1187,4 +1187,10 @@ 清空历史记录失败。没有删除任何内容,请查看 /xllog。 + + 遥测 + + + 不收集任何遥测数据。插件不会向任何地方发送关于你或你使用情况的信息。 + \ No newline at end of file diff --git a/HellionChat/Resources/HellionStrings.zh-Hant.resx b/HellionChat/Resources/HellionStrings.zh-Hant.resx index 5ba3eed..1baea38 100644 --- a/HellionChat/Resources/HellionStrings.zh-Hant.resx +++ b/HellionChat/Resources/HellionStrings.zh-Hant.resx @@ -1187,4 +1187,10 @@ 清除歷史紀錄失敗。沒有刪除任何內容,請查看 /xllog。 + + 遙測 + + + 不收集任何遙測資料。外掛不會向任何地方傳送關於你或你使用情況的資訊。 + \ No newline at end of file diff --git a/HellionChat/Ui/Components/Settings/Tabs/DataPrivacyTab.cs b/HellionChat/Ui/Components/Settings/Tabs/DataPrivacyTab.cs index a9e293a..a889602 100644 --- a/HellionChat/Ui/Components/Settings/Tabs/DataPrivacyTab.cs +++ b/HellionChat/Ui/Components/Settings/Tabs/DataPrivacyTab.cs @@ -186,7 +186,7 @@ internal sealed class DataPrivacyTab _w.ToggleRow( ImGui.GetID("privacy.filter.unknown"u8), HellionStrings.Privacy_PersistUnknown_Name, - null, + HellionStrings.Privacy_PersistUnknown_Description, () => Plugin.Config.PrivacyPersistUnknownChannels, v => Plugin.Config.PrivacyPersistUnknownChannels = v ); @@ -226,11 +226,18 @@ internal sealed class DataPrivacyTab if (dbOpen) DrawDatabaseSection(); - if (_w.Section(ImGui.GetID("privacy.telemetry"u8), "Telemetry", open: false)) + if ( + _w.Section( + ImGui.GetID("privacy.telemetry"u8), + HellionStrings.Settings_Section_Telemetry, + open: false + ) + ) { - // Read-only placeholder; no telemetry is wired in v1.7.0. Do not - // promote this to a toggle without an explicit Sub-Spec change. - ImGui.TextUnformatted("No telemetry is collected."); + // Read-only statement, not a switch. Do not promote it to one + // without an explicit Sub-Spec change: a toggle implies there is + // something to turn off. + ImGuiUtil.HelpText(HellionStrings.Settings_Telemetry_None); } } @@ -1331,33 +1338,79 @@ internal sealed class DataPrivacyTab WrapperUtil.AddNotification(message, type); } + // The one control that decides what reaches the database, so it is worth + // being usable. Eighty-nine checkboxes in one flat run is not; the same + // eight groups the export uses carry it, with the individual channels one + // fold away for the cases that need them. private void DrawPrivacyPersistChannelsGrid() { - // HashSet: iterate Enum.GetValues() for stable - // display order (HashSet itself has none); toggle membership via - // Contains/Add/Remove. - ImGui.TextUnformatted("Persist channels:"); - foreach (var ct in Enum.GetValues()) + ImGuiUtil.HelpText(HellionStrings.Privacy_Whitelist_Help); + ImGuiUtil.HelpText(HellionStrings.Privacy_FilterEnabled_StorageOnly_Help); + + ImGui.Spacing(); + if (ImGui.Button(HellionStrings.Privacy_Preset_PrivacyFirst)) + ApplyPersistPreset(PrivacyDefaults.PrivacyFirstWhitelist); + ImGui.SameLine(); + if (ImGui.Button(HellionStrings.Privacy_Preset_SelectAll)) + ApplyPersistPreset(EnumValues.All); + ImGui.SameLine(); + if (ImGui.Button(HellionStrings.Privacy_Preset_ClearAll)) + ApplyPersistPreset([]); + + ImGui.Spacing(); + + for (var i = 0; i < ChannelGroups.All.Length; i++) { - var label = ct.ToString(); - var present = Plugin.Config.PrivacyPersistChannels.Contains(ct); - if (ImGui.Checkbox($"{label}##privacy-persist-{label}", ref present)) + var (heading, types) = ChannelGroups.All[i]; + + var picked = 0; + foreach (var type in types) + if (Plugin.Config.PrivacyPersistChannels.Contains(type)) + picked++; + + // ### keeps the node's identity while the visible count changes and + // while the language changes; without it every tick would collapse + // the fold the user just opened. + using var tree = ImRaii.TreeNode( + $"{heading()} ({picked}/{types.Length})###hc-persist-group-{i}" + ); + if (!tree.Success) + continue; + + foreach (var type in types) { + var present = Plugin.Config.PrivacyPersistChannels.Contains(type); + + // Name(), not ToString(): the enum member is an identifier, and + // this list showed "FreeCompanyLoginLogout" in every language + // while the translated channel name sat unused next to it. + if (!ImGui.Checkbox($"{type.Name()}##privacy-persist-{(int)type}", ref present)) + continue; + // Lock closes before SaveConfig: taking ConfigMapsLock across a save // would invert the lock order (SaveConfig can reach TabsListLock). lock (_plugin.ConfigMapsLock) { if (present) - { - Plugin.Config.PrivacyPersistChannels.Add(ct); - } + Plugin.Config.PrivacyPersistChannels.Add(type); else - { - Plugin.Config.PrivacyPersistChannels.Remove(ct); - } + Plugin.Config.PrivacyPersistChannels.Remove(type); } + _plugin.SaveConfig(); } } } + + private void ApplyPersistPreset(IReadOnlyCollection types) + { + lock (_plugin.ConfigMapsLock) + { + Plugin.Config.PrivacyPersistChannels.Clear(); + foreach (var type in types) + Plugin.Config.PrivacyPersistChannels.Add(type); + } + + _plugin.SaveConfig(); + } }