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
+18 -18
View File
@@ -2,7 +2,7 @@
<html lang="de">
<head>
<meta charset="UTF-8" />
<title>Terminal</title>
<title data-i18n="panel.windowTerminal">Terminal</title>
<style>
/* Theme-Variablen — Defaults sind Mocha; applyTheme (themes.ts) überschreibt. */
:root {
@@ -457,22 +457,22 @@
<img id="project-icon" hidden data-tauri-drag-region />
<span id="project-name" data-tauri-drag-region></span>
<div class="panel-tabs" id="panel-tabs">
<button class="panel-btn" data-mode="commands" title="Befehls-History">Befehle</button>
<button class="panel-btn" data-mode="commands" data-i18n-title="panel.tabCommandsTitle" data-i18n="panel.tabCommands">Befehle</button>
<span class="tab-sep"></span>
<button class="panel-btn" data-mode="draft" title="Dokument">Dokument</button>
<button class="panel-btn" data-mode="wiki" title="Archiv-Wiki">Wiki</button>
<button class="panel-btn" data-mode="search" title="Suchtreffer">Suche</button>
<button class="panel-btn" data-mode="draft" data-i18n-title="panel.tabDraftTitle" data-i18n="panel.tabDraft">Dokument</button>
<button class="panel-btn" data-mode="wiki" data-i18n-title="panel.tabWikiTitle" data-i18n="panel.tabWiki">Wiki</button>
<button class="panel-btn" data-mode="search" data-i18n-title="panel.tabSearchTitle" data-i18n="panel.tabSearch">Suche</button>
<span class="tab-sep"></span>
</div>
<span id="pool"></span>
<div id="winbtns">
<button class="winbtn" id="win-min" aria-label="Minimieren">
<button class="winbtn" id="win-min" data-i18n-aria="panel.minimize">
<svg width="12" height="12" viewBox="0 0 12 12"><line x1="2" y1="6.5" x2="10" y2="6.5" /></svg>
</button>
<button class="winbtn" id="win-max" aria-label="Maximieren">
<button class="winbtn" id="win-max" data-i18n-aria="panel.maximize">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none"><rect x="2.5" y="2.5" width="7" height="7" rx="1" /></svg>
</button>
<button class="winbtn close" id="win-close" aria-label="Schließen">
<button class="winbtn close" id="win-close" data-i18n-aria="panel.close">
<svg width="12" height="12" viewBox="0 0 12 12"><line x1="2.7" y1="2.7" x2="9.3" y2="9.3" /><line x1="9.3" y1="2.7" x2="2.7" y2="9.3" /></svg>
</button>
</div>
@@ -483,17 +483,17 @@
<aside id="panel" hidden>
<div class="panel-head">
<div class="panel-titlerow">
<span class="panel-title">Dokument</span>
<button class="panel-btn panel-edit draft-only" id="panel-title-edit" title="Titel bearbeiten"></button>
<button class="panel-btn" id="panel-detach" title="In eigenes Fenster ablösen">
<span class="panel-title" data-i18n="panel.tabDraft">Dokument</span>
<button class="panel-btn panel-edit draft-only" id="panel-title-edit" data-i18n-title="panel.editTitle"></button>
<button class="panel-btn" id="panel-detach" data-i18n-title="panel.detach">
<svg width="14" height="14" viewBox="0 0 16 16"><path d="M12.5 8.5V13a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4.5a1 1 0 0 1 1-1h4.5" /><path d="M10 2h4v4" /><path d="M14 2 8 8" /></svg>
</button>
<button class="panel-btn" id="panel-hide" title="Panel ausblenden">
<button class="panel-btn" id="panel-hide" data-i18n-title="panel.hidePanel">
<svg width="12" height="12" viewBox="0 0 12 12"><path d="M3 3l6 6M9 3l-6 6" /></svg>
</button>
</div>
<div class="panel-actions">
<select class="panel-lang draft-only" id="panel-lang" title="Sprache der Rechtschreibprüfung">
<select class="panel-lang draft-only" id="panel-lang" data-i18n-title="panel.spellcheckLang">
<option value="de">DE</option>
<option value="en">EN</option>
<option value="en-GB">EN-GB</option>
@@ -502,17 +502,17 @@
<option value="it">IT</option>
<option value="nl">NL</option>
</select>
<button class="panel-btn draft-only" id="panel-wiki-jump" title="Im Wiki öffnen">
<button class="panel-btn draft-only" id="panel-wiki-jump" data-i18n-title="panel.openInWiki">
<svg width="14" height="14" viewBox="0 0 16 16"><path d="M8 3.5C6.6 2.4 4.6 2 2.5 2v11c2.1 0 4.1.4 5.5 1.5 1.4-1.1 3.4-1.5 5.5-1.5V2c-2.1 0-4.1.4-5.5 1.5z" /><path d="M8 3.5v11" /></svg>
</button>
<button class="panel-btn draft-only" id="panel-mode" title="Rohtext / gerendert">MD</button>
<button class="panel-btn draft-only" id="panel-content-edit" title="Entwurf bearbeiten (Cmd/Ctrl+Enter speichert, Esc verwirft)">
<button class="panel-btn draft-only" id="panel-mode" data-i18n-title="panel.toggleRaw" data-i18n="panel.rendered">MD</button>
<button class="panel-btn draft-only" id="panel-content-edit" data-i18n-title="panel.editDraft">
<svg width="14" height="14" viewBox="0 0 16 16"><path d="M10.8 2.6 13.4 5.2 6 12.6l-3.1.5.5-3.1z" /><path d="M9.7 3.7 12.3 6.3" /></svg>
</button>
<button class="panel-btn draft-only" id="panel-copy" title="In die Zwischenablage kopieren">
<button class="panel-btn draft-only" id="panel-copy" data-i18n-title="panel.copy">
<svg width="14" height="14" viewBox="0 0 16 16"><rect x="5.5" y="5.5" width="8" height="8" rx="1.5" /><path d="M10.5 3.2V3A1.5 1.5 0 0 0 9 1.5H3A1.5 1.5 0 0 0 1.5 3v6A1.5 1.5 0 0 0 3 10.5h.2" /></svg>
</button>
<button class="panel-btn draft-only" id="panel-archive" title="In den Archiv-Ordner speichern">
<button class="panel-btn draft-only" id="panel-archive" data-i18n-title="panel.archive">
<svg width="14" height="14" viewBox="0 0 16 16"><rect x="1.5" y="2.5" width="13" height="3.5" rx="1" /><path d="M2.8 6v6.5a1 1 0 0 0 1 1h8.4a1 1 0 0 0 1-1V6" /><path d="M6.3 9h3.4" /></svg>
</button>
</div>