i18n bis in die Terminal- und Panel-Fenster

Uebersetzt waren bisher nur die Vue-Fenster; Terminal, Panel und Popup hatten
ihre Beschriftungen hart auf Deutsch im Markup und in den Views -- ein
englisches UI blieb zur Haelfte deutsch.

Die Tabellen ziehen nach messages.ts um, dazu ein Vue-freier t() und ein
applyI18n(), das statisches Markup ueber data-i18n-Marker beschriftet.
i18n.ts bleibt der vue-i18n-Wrapper fuer die Vue-Fenster. So kommt kein Vue
in die Terminal- und Panel-Bundles (Terminal 657,02 -> 657,06 kB).
Neue Namensraeume: panel, popup, commands, archiveForm, search, wiki.
toLocaleTimeString folgt der Sprache statt fest 'de'.

Zwei Funde nebenbei:
- window.localStorage wird ueber try/catch gelesen. Gesperrter Storage
  (privater Modus) wirft schon beim Lesen, und unter Node 22 ueberschattet
  ein undefiniertes globales localStorage das der Testumgebung.
- Die Frontend-Tests liefen unbemerkt gegen happy-doms en-US.
  test-setup.ts nagelt die Sprache fest.

49 Tests (39 bestehende, 10 neue fuer Tabellen-Paritaet, t() und applyI18n).
This commit is contained in:
marcusH
2026-07-20 22:36:19 +02:00
parent 92f34cb64d
commit 1fa9ffcf1b
17 changed files with 746 additions and 386 deletions
+3 -2
View File
@@ -1,6 +1,7 @@
import { renderMarkdown } from "./markdown";
import { writeText } from "@tauri-apps/plugin-clipboard-manager";
import { flash } from "./commands-view";
import { t } from "./messages";
export interface PanelView {
set(text: string): void;
@@ -37,7 +38,7 @@ function firstLine(text: string): string {
if (t.startsWith("#") && h) return stripInlineMd(h);
if (!fallback) fallback = t;
}
return fallback ? stripInlineMd(fallback) : "Dokument";
return fallback ? stripInlineMd(fallback) : t("panel.tabDraft");
}
/// Ersetzt die erste Überschrift (bzw. legt eine an) im Rohtext durch `title`.
@@ -129,7 +130,7 @@ export function initPanelView(opts: {
opts.content.className = "raw";
opts.content.textContent = rawText;
}
opts.modeBtn.textContent = rendered ? "MD" : "Roh";
opts.modeBtn.textContent = rendered ? t("panel.rendered") : t("panel.raw");
}
opts.modeBtn.addEventListener("click", () => {