Multilanguage: Deutsch / English, umschaltbar in Einstellungen

- i18n.js: Übersetzungsmodul mit t(), setLang(), applyLang() + vollst. DE/EN Wörterbuch
- Backend: language-Feld in UserSettings, Migration, Settings-API
- calendar.js: alle deutschen Strings auf t()-Aufrufe umgestellt, setLang() beim Start
- app.js, api.js, color-picker.js, views/*.js: alle UI-Strings übersetzt
- Sprach-Dropdown in Einstellungen > Darstellung, data-i18n-Attribute in index.html
This commit is contained in:
2026-03-27 15:15:07 +01:00
parent e4a14e6927
commit cd5d866cb1
12 changed files with 544 additions and 129 deletions

View File

@@ -1,5 +1,6 @@
import { api } from './api.js';
import { initCalendar, showToast, openProfileModal } from './calendar.js';
import { t } from './i18n.js';
// ── Bootstrap ─────────────────────────────────────────────
async function boot() {
@@ -109,12 +110,12 @@ function bindSetupForm() {
errEl.classList.add('hidden');
if (pw1 !== pw2) {
errEl.textContent = 'Passwörter stimmen nicht überein';
errEl.textContent = t('setup_pw_mismatch');
errEl.classList.remove('hidden');
return;
}
if (pw1.length < 6) {
errEl.textContent = 'Passwort muss mindestens 6 Zeichen haben';
errEl.textContent = t('setup_pw_short');
errEl.classList.remove('hidden');
return;
}