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-
|
Verworfene Alternative: Google-Link ersatzlos streichen und nur die System-
|
||||||
Schrift (`system-ui`) nutzen — spart die 204 KB, gibt aber die einheitliche
|
Schrift (`system-ui`) nutzen — spart die 204 KB, gibt aber die einheitliche
|
||||||
Markentypografie (IBM Plex, BRAND) auf.
|
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);
|
mqMobile.addEventListener('change', applyMobile);
|
||||||
|
|
||||||
restoreState(); /* Editortext + GUI-Zustand aus dem Browser wiederherstellen */
|
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';
|
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 */
|
applyLang(I18N[startLang] ? startLang : 'de'); /* setzt Texte + rendert */
|
||||||
applyMobile(); /* Mobil-Verhalten (nach Sprache/Restore) anwenden */
|
applyMobile(); /* Mobil-Verhalten (nach Sprache/Restore) anwenden */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user