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