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:
mhoennig
2026-07-23 10:15:23 +02:00
co-authored by Claude Opus 4.8
parent 095dbfb63e
commit 29e144eddf
2 changed files with 29 additions and 1 deletions
+14 -1
View File
@@ -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 */