From 1b39ac863be16a899d2f1292f284d18ef0a4d99d Mon Sep 17 00:00:00 2001 From: Florian Wathling Date: Sun, 22 Mar 2026 14:07:17 +0100 Subject: [PATCH] fix(i18n): Code-Quality-Review Korrekturen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - resolveLang() Hilfsfunktion extrahieren (DRY) - JSDoc-Kommentar in I18n.init() korrigieren - settings.export.btn Key für Export-Button trennen - setLanguage('auto') im Reset-Handler aufrufen --- newtab.html | 2 +- src/js/i18n.js | 29 ++++++++++++++++++----------- src/js/settings.js | 1 + 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/newtab.html b/newtab.html index c69bb0a..0ef046f 100644 --- a/newtab.html +++ b/newtab.html @@ -173,7 +173,7 @@ Backup exportieren Alle Boards, Notes und Einstellungen als JSON sichern - +
diff --git a/src/js/i18n.js b/src/js/i18n.js index 15d1cf0..7789159 100644 --- a/src/js/i18n.js +++ b/src/js/i18n.js @@ -224,6 +224,7 @@ const STRINGS = { 'settings.image_ref.desc': 'Bilder als Referenz anzeigen (nur aktuelle Session)', 'settings.export': 'Backup exportieren', 'settings.export.desc': 'Alle Boards, Notes und Einstellungen als JSON sichern', + 'settings.export.btn': 'Export', 'settings.import': 'Backup importieren', 'settings.import.desc': 'JSON-Backup wiederherstellen', 'settings.browser_import': 'Browser-Lesezeichen', @@ -514,6 +515,7 @@ const STRINGS = { 'settings.image_ref.desc': 'Show images as reference (current session only)', 'settings.export': 'Export backup', 'settings.export.desc': 'Save all boards, notes and settings as JSON', + 'settings.export.btn': 'Export', 'settings.import': 'Import backup', 'settings.import.desc': 'Restore a JSON backup', 'settings.browser_import': 'Browser bookmarks', @@ -621,16 +623,24 @@ function applyLanguage() { }); } +/** + * 'auto' auflösen zu konkretem Sprachcode + * @param {string} lang - 'de', 'en' oder 'auto' + * @returns {string} 'de' oder 'en' + */ +function resolveLang(lang) { + return (lang === 'auto') + ? (navigator.language.startsWith('de') ? 'de' : 'en') + : lang; +} + /** * Sprache setzen, speichern und DOM aktualisieren * @param {string} lang - 'de', 'en' oder 'auto' */ function setLanguage(lang) { - const resolved = (lang === 'auto') - ? (navigator.language.startsWith('de') ? 'de' : 'en') - : lang; - currentLang = resolved; - document.documentElement.lang = resolved; + currentLang = resolveLang(lang); + document.documentElement.lang = currentLang; applyLanguage(); } @@ -643,17 +653,14 @@ const I18n = { /** * Initialisierung: Sprache aus Settings lesen, auflösen, DOM anwenden - * Wird nach applySettings() aufgerufen (settings-Objekt muss bereit sein) + * Muss NACH dem Laden des settings-Objekts aufgerufen werden */ init() { const lang = (typeof settings !== 'undefined' && settings.language) ? settings.language : 'auto'; - const resolved = (lang === 'auto') - ? (navigator.language.startsWith('de') ? 'de' : 'en') - : lang; - currentLang = resolved; - document.documentElement.lang = resolved; + currentLang = resolveLang(lang); + document.documentElement.lang = currentLang; applyLanguage(); } }; diff --git a/src/js/settings.js b/src/js/settings.js index dae59b0..fca7e5c 100644 --- a/src/js/settings.js +++ b/src/js/settings.js @@ -235,6 +235,7 @@ function bindSettingsEvents() { imageRefEnabled: false, language: 'auto' }; await saveBoards(); await saveSettings(); + setLanguage('auto'); applySettings(); renderBoards(); closeSettings();