M21: Zweisprachigkeit (DE/EN) auf alle fünf Tabs ausgerollt

Einrichten-Wizard (alle sieben Schritte), Übersicht, LAN-Scanner,
Sicherungen laufen jetzt über L10n.t statt fester deutscher
String-Literale — Experte- und Verbinden-Tab waren bereits vorher
umgestellt (M16/M17). Model-Layer-Strings werden am Verwendungsort
gewrappt, ViewModel-generierte Laufzeitstrings (Fehlermeldungen,
CLI-Zeilen, Log) bleiben bewusst unübersetzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Kay
2026-09-16 08:31:08 +02:00
co-authored by Claude Sonnet 5
parent 04325e3bbd
commit 16706d5c6b
15 changed files with 656 additions and 304 deletions
+26 -7
View File
@@ -1259,6 +1259,27 @@ grün, wartet auf Test durch den Nutzer in Xcode):
Funktionen aufgeteilt (`withStaticAssignmentDialogs`/
`withDeviceDetailSheets`).
- ✅ M21: `L10n.t(...)`-Zweisprachigkeit (Bug-19-Muster: M16 begann im
Experte-Tab, siehe oben) auf die restlichen vier Tabs ausgerollt —
Einrichten (alle sieben Wizard-Schritte:
Mode/Wan/Lan/Vlan/Wifi/Firewall/Review, inkl. `PortConflictWarningView`
als eigener Sub-Struct mit durchgereichtem `appLanguage`), Übersicht
(inkl. `EdgeTooltipView`/`EdgeDetailView`/`NodeDetailView`/`LegendView`),
LAN-Scanner, Sicherungen. `L10n.swift` um einen entsprechenden
Übersetzungsblock erweitert; Model-Layer-Strings (z.B.
`WanConnectionMode.label`, `OverviewNode.Category.rawValue`,
`OverviewEdgeKind.rawValue`) werden wie schon bei `RouterOSMenuCategory`
am Verwendungsort gewrappt, nicht in der Model-Datei selbst geändert.
Etablierte Konvention beibehalten: nur statische View-Strings werden
übersetzt, ViewModel-generierte Laufzeitstrings (Fehlermeldungen,
`command.summary`/`cliLine`, `applyLog`-Zeilen, Router-Live-Daten)
bleiben unübersetzt — dieselbe Grenze, die schon der Experte-Tab zieht.
Bug 19 (Modifier-Ketten-Typecheck-Timeout) trat dabei ein drittes Mal
in `DevicesView.swift` auf (zwei lange Confirmation-Dialog-Texte), Fix
wie gehabt: in eigene Funktionen (`staticAssignmentMessage`/
`staticRemovalMessage`) ausgelagert statt inline verkettet. Live
bestätigt ("funktioniert").
**Nutzerfrage, keine Umsetzung** (2026-09-15): ob es Sinn macht, weitere
Sprachen "per Plugin" zu importieren. Antwort: für 1-2 weitere feste
Sprachen passt das bestehende `L10n.swift`-Dictionary-Muster gut; ein
@@ -1271,13 +1292,11 @@ Claude-Memory `future-language-support.md` für Details.
## Nächste Schritte
1. ~~M16: restliche `RouterOSSchemaCatalog.swift`-Sektionen übersetzen~~
und ~~Verbinden-Tab zweisprachig~~ — beides erledigt, live bestätigt.
Offen: dieselbe `L10n.t(...)`-Umstellung auf die übrigen vier Tabs
(Einrichten/Übersicht/Geräte/Sicherungen) ausrollen — dort läuft
aktuell noch alles auf festen deutschen String-Literalen ohne
Sprachumschaltung, mit dem Nutzer vereinbart Tab für Tab
weiterzumachen.
1. ~~M16: restliche `RouterOSSchemaCatalog.swift`-Sektionen übersetzen~~,
~~Verbinden-Tab zweisprachig~~ und ~~`L10n.t(...)`-Umstellung auf die
übrigen vier Tabs (Einrichten/Übersicht/LAN-Scanner/Sicherungen)~~ —
alles erledigt, live bestätigt ("funktioniert"). Damit sind alle
fünf Tabs vollständig zweisprachig (DE/EN).
2. WLAN (M5) an einem Gerät mit echtem WLAN-Chip nachholen.
2. Rest von M7: Fehlerzustände/Politur, REST-Schreibtest an einem Gerät
mit aktivem `www-ssl`.