diff --git a/static/js/components/Header.js b/static/js/components/Header.js index 75156dd7..4e4053c8 100644 --- a/static/js/components/Header.js +++ b/static/js/components/Header.js @@ -3,6 +3,7 @@ import { toggleTheme } from '../utils/uiHelpers.js'; import { SearchManager } from '../managers/SearchManager.js'; import { FilterManager } from '../managers/FilterManager.js'; import { initPageState } from '../state/index.js'; +import { getStorageItem } from '../utils/storageHelpers.js'; import { updateSearchPlaceholder } from '../utils/i18nHelpers.js'; /** @@ -49,7 +50,7 @@ export class HeaderManager { const themeToggle = document.querySelector('.theme-toggle'); if (themeToggle) { // Set initial state based on current theme - const currentTheme = localStorage.getItem('lm_theme') || 'auto'; + const currentTheme = getStorageItem('theme') || 'auto'; themeToggle.classList.add(`theme-${currentTheme}`); // Set initial tooltip text @@ -157,8 +158,6 @@ export class HeaderManager { if (currentTheme === 'light') { themeToggle.title = window.i18n.t('header.theme.switchToDark'); } else if (currentTheme === 'dark') { - themeToggle.title = window.i18n.t('header.theme.switchToAuto'); - } else { themeToggle.title = window.i18n.t('header.theme.switchToLight'); } } diff --git a/static/js/components/controls/PageControls.js b/static/js/components/controls/PageControls.js index e00a5b02..fdd5ad8e 100644 --- a/static/js/components/controls/PageControls.js +++ b/static/js/components/controls/PageControls.js @@ -2,7 +2,6 @@ import { getCurrentPageState, setCurrentPageType } from '../../state/index.js'; import { getStorageItem, setStorageItem, getSessionItem, setSessionItem } from '../../utils/storageHelpers.js'; import { showToast } from '../../utils/uiHelpers.js'; -import { SidebarManager } from '../SidebarManager.js'; import { sidebarManager } from '../SidebarManager.js'; /** diff --git a/static/js/utils/i18nHelpers.js b/static/js/utils/i18nHelpers.js index e2aff1c4..14a8a745 100644 --- a/static/js/utils/i18nHelpers.js +++ b/static/js/utils/i18nHelpers.js @@ -8,45 +8,38 @@ import { i18n } from '../i18n/index.js'; * Uses data-i18n attribute to specify translation keys */ export function translateDOM() { - // Find all elements with data-i18n attribute + if (!window.i18n) return; + + // Select all elements with data-i18n attributes, including optgroups and options const elements = document.querySelectorAll('[data-i18n]'); elements.forEach(element => { const key = element.getAttribute('data-i18n'); - const params = element.getAttribute('data-i18n-params'); - - let parsedParams = {}; - if (params) { - try { - parsedParams = JSON.parse(params); - } catch (e) { - console.warn(`Invalid JSON in data-i18n-params for key ${key}:`, params); - } - } - - // Get translated text - const translatedText = i18n.t(key, parsedParams); - - // Handle different translation targets const target = element.getAttribute('data-i18n-target') || 'textContent'; - switch (target) { - case 'placeholder': - element.placeholder = translatedText; - break; - case 'title': - element.title = translatedText; - break; - case 'alt': - element.alt = translatedText; - break; - case 'innerHTML': - element.innerHTML = translatedText; - break; - case 'textContent': - default: - element.textContent = translatedText; - break; + if (key) { + const translation = window.i18n.t(key); + + // Handle different target attributes + switch (target) { + case 'placeholder': + element.placeholder = translation; + break; + case 'title': + element.title = translation; + break; + case 'label': + // For optgroup elements + element.label = translation; + break; + case 'value': + element.value = translation; + break; + case 'textContent': + default: + element.textContent = translation; + break; + } } }); } diff --git a/templates/components/controls.html b/templates/components/controls.html index 70c7dcad..a4118cd2 100644 --- a/templates/components/controls.html +++ b/templates/components/controls.html @@ -3,15 +3,15 @@