57c338fe53
- Statusfarben als OKLCH-Tokens (Flaeche + kontrastgepruefte Textvariante) und Well-Token - Gesundheitsbalken mit Legende und vorgelesener Zusammenfassung - Karten nach Zustand sortiert, Statusleiste, getoenter Schatten, Statuspille - Messwerte in eingelassenen Feldern: PVE-Knoten mit Balken, PBS-Fuellstand/Sicherung/Pruefung, PMG-Zahlfelder - offline & verwaist: gestrichelt, gedaempft, keine alten Messwerte - Skelett-Karten beim Laden, Leerzustand als Well, relative Zeitangaben Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
196 lines
5.5 KiB
TypeScript
196 lines
5.5 KiB
TypeScript
/**
|
|
* umlaut-dictionary — single source of truth for the ae/oe/ue/ss umlaut
|
|
* correction in `de.json` and for the `umlaut-guard.spec.ts` regression
|
|
* guard.
|
|
*
|
|
* Why an explicit token list instead of a character rule (`ue` -> `ü`,
|
|
* `oe` -> `ö`, `ae` -> `ä`): a blanket character substitution destroys
|
|
* correct German. `Quelle` would become `Qülle`, `manuell` would become
|
|
* `manüll`, `neuen` would become `nün`, `Erzeugnisse` would become
|
|
* `Erzügnisse`. Replacement therefore only ever targets a whole token
|
|
* that is an exact key in `UMLAUT_REPLACEMENTS`.
|
|
*
|
|
* `UMLAUT_ALLOWLIST` lists every token that legitimately contains
|
|
* `ae`/`oe`/`ue`/`ss` and is already correct German — it must never be
|
|
* replaced. `empfaenger` sits on this list purely because it is part of
|
|
* the example placeholder address `empfaenger@example.com`
|
|
* (key `testToPlaceholder`): an umlaut inside a placeholder email address
|
|
* would wrongly suggest umlaut addresses are the expected format, so that
|
|
* value is skipped entirely (any string containing `@`) rather than
|
|
* "corrected".
|
|
*/
|
|
|
|
/** Wrong substitute spelling -> correct German spelling, exact token match only. */
|
|
export const UMLAUT_REPLACEMENTS: Record<string, string> = {
|
|
loeschen: 'löschen',
|
|
Loeschen: 'Löschen',
|
|
geloescht: 'gelöscht',
|
|
hinzufuegen: 'hinzufügen',
|
|
Hinzufuegen: 'Hinzufügen',
|
|
hinzuzufuegen: 'hinzuzufügen',
|
|
einfuegen: 'einfügen',
|
|
fuege: 'füge',
|
|
Fuege: 'Füge',
|
|
Fuegen: 'Fügen',
|
|
fuer: 'für',
|
|
pruefen: 'prüfen',
|
|
Pruefen: 'Prüfen',
|
|
Pruefe: 'Prüfe',
|
|
Pruefung: 'Prüfung',
|
|
geprueft: 'geprüft',
|
|
ueberpruefen: 'überprüfen',
|
|
Ueberpruefe: 'Überprüfe',
|
|
Zertifikatspruefung: 'Zertifikatsprüfung',
|
|
aendern: 'ändern',
|
|
// Nachtrag 2026-09-07: die grossgeschriebenen Formen fehlten. Der Waechter
|
|
// hat sie nicht gemeldet, weil sein Verdachtsmuster case-sensitiv war und
|
|
// "Ae"/"Oe" deshalb durchrutschten — mitbehoben in umlaut-guard.spec.ts.
|
|
Aenderung: 'Änderung',
|
|
Aenderungen: 'Änderungen',
|
|
Oeffnen: 'Öffnen',
|
|
geaendert: 'geändert',
|
|
Moechten: 'Möchten',
|
|
moeglich: 'möglich',
|
|
moegliche: 'mögliche',
|
|
koennen: 'können',
|
|
verfuegbar: 'verfügbar',
|
|
Verfuegbar: 'Verfügbar',
|
|
Verfuegbare: 'Verfügbare',
|
|
Verfuegbarkeit: 'Verfügbarkeit',
|
|
Zurueck: 'Zurück',
|
|
Zuruecksetzen: 'Zurücksetzen',
|
|
zuruecksetzen: 'zurücksetzen',
|
|
zurueckgesetzt: 'zurückgesetzt',
|
|
rueckgaengig: 'rückgängig',
|
|
Zusammenfuehren: 'Zusammenführen',
|
|
zusammenfuehren: 'zusammenführen',
|
|
bestaetigen: 'bestätigen',
|
|
Bestaetigen: 'Bestätigen',
|
|
Passwoerter: 'Passwörter',
|
|
spaeter: 'später',
|
|
ueberein: 'überein',
|
|
uebersprungen: 'übersprungen',
|
|
ueber: 'über',
|
|
ungueltig: 'ungültig',
|
|
Verschluesselung: 'Verschlüsselung',
|
|
entschluesselt: 'entschlüsselt',
|
|
ausgewaehlt: 'ausgewählt',
|
|
Ausgewaehlt: 'Ausgewählt',
|
|
ausgewaehlte: 'ausgewählte',
|
|
Ausgewaehlte: 'Ausgewählte',
|
|
waehle: 'wähle',
|
|
benoetigt: 'benötigt',
|
|
noetig: 'nötig',
|
|
muessen: 'müssen',
|
|
Domaene: 'Domäne',
|
|
Einschraenkung: 'Einschränkung',
|
|
Empfaenger: 'Empfänger',
|
|
Oberflaeche: 'Oberfläche',
|
|
Postfaecher: 'Postfächer',
|
|
Praefix: 'Präfix',
|
|
Sicherheitsgruenden: 'Sicherheitsgründen',
|
|
unterstuetzt: 'unterstützt',
|
|
vertrauenswuerdigen: 'vertrauenswürdigen',
|
|
zusaetzlich: 'zusätzlich',
|
|
zusaetzliche: 'zusätzliche',
|
|
Groesse: 'Größe',
|
|
Schliessen: 'Schließen',
|
|
ausschliessen: 'ausschließen',
|
|
};
|
|
|
|
/**
|
|
* Tokens containing `ae`/`oe`/`ue`/`ss` that are already correct German
|
|
* and must never be touched by the replacement or flagged by the guard.
|
|
*/
|
|
export const UMLAUT_ALLOWLIST: readonly string[] = [
|
|
'manuell',
|
|
'Manuell',
|
|
'Quelle',
|
|
'Quellen',
|
|
'Quell',
|
|
'Quellportal',
|
|
'Kalenderquelle',
|
|
'Kalenderquellen',
|
|
'Energiequellen',
|
|
'neue',
|
|
'neuen',
|
|
'neuere',
|
|
'Neue',
|
|
'Neues',
|
|
'aktuelle',
|
|
'Aktuell',
|
|
'Aktuelle',
|
|
'Aktuelles',
|
|
'zuerst',
|
|
'dauerhaft',
|
|
'Schauen',
|
|
'Taktfrequenz',
|
|
'Feuerlösch',
|
|
'Bergbauerzeugnisse',
|
|
'true',
|
|
'guest',
|
|
'Passwort',
|
|
'Adresse',
|
|
// Bilderrahmen-Widget (quick-260921-pi9): korrektes Deutsch mit „ss“
|
|
'Webadresse',
|
|
'Bildausschnitt',
|
|
// XFrame-Widget (quick-260921-qd3): „In neuem Tab öffnen“, korrektes Deutsch wie neuen
|
|
'neuem',
|
|
// XFrame-Ausschnitt (quick-260922-ge2): korrektes Deutsch mit „ss“
|
|
'Ausschnitt',
|
|
'Absenderadresse',
|
|
'muss',
|
|
'musste',
|
|
'müssen',
|
|
'lassen',
|
|
'vergessen',
|
|
'stattdessen',
|
|
'Wasser',
|
|
'Abwasser',
|
|
'Hessen',
|
|
'Erzeugnisse',
|
|
'Druckerzeugnisse',
|
|
'Gummierzeugnisse',
|
|
'Mineralölerzeugnisse',
|
|
'Ausschreibung',
|
|
'Ausschreibungen',
|
|
'Ausschreibungs',
|
|
'Ausschreibungsdetails',
|
|
'erfasst',
|
|
'erfasster',
|
|
'Erfassung',
|
|
'Ergebnisse',
|
|
'gedrosselt',
|
|
'ausgeschlossen',
|
|
'Ausgeschlossen',
|
|
'Ausschlussliste',
|
|
'Informationssysteme',
|
|
'Zeitmessung',
|
|
'Tessera',
|
|
'Passen',
|
|
'Passt',
|
|
'Fasst',
|
|
'Verschlüsselung',
|
|
'empfaenger',
|
|
'Passwörter',
|
|
'vertrauenswürdigen',
|
|
'ausschließen',
|
|
'entschlüsselt',
|
|
// Nachtrag 2026-09-07: Abkuerzungen mit doppeltem S. Sie tauchen erst auf,
|
|
// seit das Verdachtsmuster case-insensitiv prueft — vorher fiel jedes
|
|
// grossgeschriebene "SS" durch dasselbe Loch wie "Aenderungen".
|
|
'RSS',
|
|
'RSSGenerator',
|
|
'SSL',
|
|
// 260914-m97: Fehler-melden-Knopf, Pflichtlabel "Was ist passiert?"
|
|
'passiert',
|
|
// quick-260923-dhh: Proxmox-Modul — korrektes Deutsch mit „ss“
|
|
'bewusst',
|
|
'gemessene',
|
|
'Messung',
|
|
'Prozessorlast',
|
|
// quick-260924-h7x: Proxmox-Seite neu gestaltet — korrektes Deutsch mit „ss“
|
|
'Prozessor',
|
|
'Arbeitsspeicher',
|
|
];
|