diff --git a/frontend/index.html b/frontend/index.html index ecfdd9a..43348db 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -385,14 +385,14 @@ -

Einstellungen

- +

Einstellungen

+
@@ -400,7 +400,15 @@
-

Farben

+

Sprache

+
+ +
+ +

Farben

@@ -474,14 +482,6 @@
-

Sprache

-
- -
-

Ausgeblendete Kalender

Keine ausgeblendeten Kalender
diff --git a/frontend/js/calendar.js b/frontend/js/calendar.js index d9ee375..0c1fe33 100644 --- a/frontend/js/calendar.js +++ b/frontend/js/calendar.js @@ -4,7 +4,7 @@ import { renderMonth } from './views/month.js'; import { renderWeek } from './views/week.js'; import { renderAgenda } from './views/agenda.js'; import { openColorPicker } from './color-picker.js'; -import { t, setLang, applyLang } from './i18n.js'; +import { t, setLang, getLang } from './i18n.js'; // Fetch avatar image as blob URL (with auth header) function fetchAvatarBlob() { @@ -1046,7 +1046,7 @@ function openSettingsModal() { document.getElementById(id + '-preview').style.background = val; }); document.getElementById('cfg-dim-past').checked = !!s.dim_past_events; - document.getElementById('cfg-language').value = s.language || 'de'; + document.getElementById('cfg-language').value = getLang(); // Set active contrast/hour-height buttons [ diff --git a/frontend/js/i18n.js b/frontend/js/i18n.js index 94095af..382451e 100644 --- a/frontend/js/i18n.js +++ b/frontend/js/i18n.js @@ -364,13 +364,16 @@ const translations = { }, }; -let currentLang = 'de'; +let currentLang = (() => { + try { const l = localStorage.getItem('lang'); return (l && translations[l]) ? l : 'de'; } catch (_) { return 'de'; } +})(); export function getLang() { return currentLang; } export function setLang(lang) { currentLang = (lang && translations[lang]) ? lang : 'de'; document.documentElement.lang = currentLang; + try { localStorage.setItem('lang', currentLang); } catch (_) {} applyLang(); }