mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-21 21:22:11 -03:00
fix(i18n): sync language with state settings
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import { state } from '../state/index.js';
|
||||
|
||||
/**
|
||||
* Internationalization (i18n) system for LoRA Manager
|
||||
* Uses user-selected language from settings with fallback to English
|
||||
@@ -123,26 +125,12 @@ class I18nManager {
|
||||
* @returns {string} Language code
|
||||
*/
|
||||
getLanguageFromSettings() {
|
||||
// Check localStorage for user-selected language
|
||||
const STORAGE_PREFIX = 'lora_manager_';
|
||||
let userLanguage = null;
|
||||
|
||||
try {
|
||||
const settings = localStorage.getItem(STORAGE_PREFIX + 'settings');
|
||||
if (settings) {
|
||||
const parsedSettings = JSON.parse(settings);
|
||||
userLanguage = parsedSettings.language;
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('Failed to parse settings from localStorage:', e);
|
||||
const language = state?.global?.settings?.language;
|
||||
|
||||
if (language && this.availableLocales[language]) {
|
||||
return language;
|
||||
}
|
||||
|
||||
// If user has selected a language, use it
|
||||
if (userLanguage && this.availableLocales[userLanguage]) {
|
||||
return userLanguage;
|
||||
}
|
||||
|
||||
// Fallback to English
|
||||
|
||||
return 'en';
|
||||
}
|
||||
|
||||
@@ -165,18 +153,10 @@ class I18nManager {
|
||||
this.readyPromise = this.initializeWithLocale(languageCode);
|
||||
await this.readyPromise;
|
||||
|
||||
// Save to localStorage
|
||||
const STORAGE_PREFIX = 'lora_manager_';
|
||||
const currentSettings = localStorage.getItem(STORAGE_PREFIX + 'settings');
|
||||
let settings = {};
|
||||
|
||||
if (currentSettings) {
|
||||
settings = JSON.parse(currentSettings);
|
||||
if (state?.global?.settings) {
|
||||
state.global.settings.language = languageCode;
|
||||
}
|
||||
|
||||
settings.language = languageCode;
|
||||
localStorage.setItem(STORAGE_PREFIX + 'settings', JSON.stringify(settings));
|
||||
|
||||
console.log(`Language changed to: ${languageCode}`);
|
||||
|
||||
// Dispatch event to notify components of language change
|
||||
|
||||
@@ -4,6 +4,7 @@ import { state, createDefaultSettings } from '../state/index.js';
|
||||
import { resetAndReload } from '../api/modelApiFactory.js';
|
||||
import { DOWNLOAD_PATH_TEMPLATES, MAPPABLE_BASE_MODELS, PATH_TEMPLATE_PLACEHOLDERS, DEFAULT_PATH_TEMPLATES } from '../utils/constants.js';
|
||||
import { translate } from '../utils/i18nHelpers.js';
|
||||
import { i18n } from '../i18n/index.js';
|
||||
|
||||
export class SettingsManager {
|
||||
constructor() {
|
||||
@@ -57,9 +58,26 @@ export class SettingsManager {
|
||||
state.global.settings = this.mergeSettingsWithDefaults();
|
||||
}
|
||||
|
||||
await this.applyLanguageSetting();
|
||||
this.applyFrontendSettings();
|
||||
}
|
||||
|
||||
async applyLanguageSetting() {
|
||||
const desiredLanguage = state?.global?.settings?.language;
|
||||
|
||||
if (!desiredLanguage) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
if (i18n.getCurrentLocale() !== desiredLanguage) {
|
||||
await i18n.setLanguage(desiredLanguage);
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('Failed to apply language from settings:', error);
|
||||
}
|
||||
}
|
||||
|
||||
mergeSettingsWithDefaults(backendSettings = {}) {
|
||||
const defaults = createDefaultSettings();
|
||||
const merged = { ...defaults, ...backendSettings };
|
||||
@@ -1158,8 +1176,6 @@ export class SettingsManager {
|
||||
// Use the universal save method for language (frontend-only setting)
|
||||
await this.saveSetting('language', selectedLanguage);
|
||||
|
||||
this.persistLanguageToLocalStorage(selectedLanguage);
|
||||
|
||||
// Reload the page to apply the new language
|
||||
window.location.reload();
|
||||
|
||||
@@ -1168,30 +1184,6 @@ export class SettingsManager {
|
||||
}
|
||||
}
|
||||
|
||||
persistLanguageToLocalStorage(language) {
|
||||
const STORAGE_PREFIX = 'lora_manager_';
|
||||
|
||||
try {
|
||||
const storageKey = `${STORAGE_PREFIX}settings`;
|
||||
const currentSettings = localStorage.getItem(storageKey);
|
||||
let parsedSettings = {};
|
||||
|
||||
if (currentSettings) {
|
||||
try {
|
||||
parsedSettings = JSON.parse(currentSettings) || {};
|
||||
} catch (parseError) {
|
||||
console.warn('Failed to parse existing settings from localStorage, resetting to defaults');
|
||||
parsedSettings = {};
|
||||
}
|
||||
}
|
||||
|
||||
parsedSettings.language = language;
|
||||
localStorage.setItem(storageKey, JSON.stringify(parsedSettings));
|
||||
} catch (error) {
|
||||
console.warn('Failed to persist language preference to localStorage:', error);
|
||||
}
|
||||
}
|
||||
|
||||
toggleInputVisibility(button) {
|
||||
const input = button.parentElement.querySelector('input');
|
||||
const icon = button.querySelector('i');
|
||||
|
||||
Reference in New Issue
Block a user