frontend: UI-Default-Sprache aus der Browsersprache (Fallback DE)
Ohne gespeicherte werkbaum-lang wählt detectLang() die erste vom Browser gemeldete Sprache (navigator.languages), für die eine Übersetzung existiert (Primär-Subtag; de-AT->de, zh-Hans->zh), sonst Deutsch. Greift auch nach dem Reset. Deutsch bleibt Quellsprache. Als D21 dokumentiert. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
095dbfb63e
commit
29e144eddf
@@ -314,3 +314,18 @@ Standalone-Tauglichkeit (`file://`).
|
||||
Verworfene Alternative: Google-Link ersatzlos streichen und nur die System-
|
||||
Schrift (`system-ui`) nutzen — spart die 204 KB, gibt aber die einheitliche
|
||||
Markentypografie (IBM Plex, BRAND) auf.
|
||||
|
||||
## D21 — UI-Default-Sprache aus der Browsersprache, Fallback Deutsch
|
||||
Ohne gespeicherte Nutzerwahl (`werkbaum-lang`) richtet sich die Anzeigesprache
|
||||
nach der **Browsersprache**: die erste aus `navigator.languages`, für die eine
|
||||
Übersetzung existiert (nur der Primär-Subtag zählt, `de-AT`→`de`,
|
||||
`zh-Hans-CN`→`zh`); trifft keine zu, bleibt **Deutsch** der Fallback
|
||||
(`detectLang()` in `app.js`). Zuvor war der Default fest `'de'`, unabhängig vom
|
||||
Browser.
|
||||
|
||||
Begründung: Ein spanisch- oder englischsprachiger Erstbesucher sah bislang ohne
|
||||
Not eine deutsche Oberfläche. Die Erkennung greift auch **nach dem Reset**
|
||||
(löscht `werkbaum-lang`, lädt neu → selber Pfad). **Deutsch bleibt Quellsprache**
|
||||
(CLAUDE: neue UI-Texte zuerst auf Deutsch) — das betrifft die Autoren-/Pflege
|
||||
seite und ist unabhängig vom Anzeige-Default für Besucher. Eine bewusste
|
||||
Sprachwahl überschreibt die Erkennung dauerhaft (Persistenz in `werkbaum-lang`).
|
||||
|
||||
+14
-1
@@ -1146,8 +1146,21 @@ function applyMobile(){
|
||||
mqMobile.addEventListener('change', applyMobile);
|
||||
|
||||
restoreState(); /* Editortext + GUI-Zustand aus dem Browser wiederherstellen */
|
||||
|
||||
/* Default-Sprache: gespeicherte Wahl, sonst die erste vom Browser gemeldete
|
||||
Sprache (navigator.languages), die wir übersetzt haben — sonst Deutsch.
|
||||
Nur der Primär-Subtag zählt (z. B. "de-AT" -> "de", "zh-Hans" -> "zh"). */
|
||||
function detectLang(){
|
||||
const cands = (navigator.languages && navigator.languages.length)
|
||||
? navigator.languages : [navigator.language];
|
||||
for(const c of cands){
|
||||
const primary = (c || '').toLowerCase().split('-')[0];
|
||||
if(I18N[primary]) return primary;
|
||||
}
|
||||
return 'de';
|
||||
}
|
||||
let startLang = 'de';
|
||||
try{ startLang = localStorage.getItem('werkbaum-lang') || 'de'; }catch(_){}
|
||||
try{ startLang = localStorage.getItem('werkbaum-lang') || detectLang(); }catch(_){ startLang = detectLang(); }
|
||||
applyLang(I18N[startLang] ? startLang : 'de'); /* setzt Texte + rendert */
|
||||
applyMobile(); /* Mobil-Verhalten (nach Sprache/Restore) anwenden */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user