diff --git a/components/ts_webui/web/index.html b/components/ts_webui/web/index.html index 75457b2..9b85a1d 100644 --- a/components/ts_webui/web/index.html +++ b/components/ts_webui/web/index.html @@ -282,8 +282,12 @@

电压保护设置

function init() { try { var saved = localStorage.getItem('ts_language'); - if (saved && languages[saved]) currentLang = saved; - else currentLang = (navigator.language || '').indexOf('zh') === 0 ? 'zh-CN' : 'en-US'; + /* 使用 supportedLanguages 校验(languages 在 init 时尚未加载语言包) */ + if (saved && supportedLanguages[saved]) { + currentLang = saved; + } else { + currentLang = (navigator.language || '').indexOf('zh') === 0 ? 'zh-CN' : 'en-US'; + } } catch(e) {} document.documentElement.lang = currentLang; } diff --git a/components/ts_webui/web/js/app.js b/components/ts_webui/web/js/app.js index 0be8c44..b012d56 100644 --- a/components/ts_webui/web/js/app.js +++ b/components/ts_webui/web/js/app.js @@ -129,9 +129,11 @@ document.addEventListener('DOMContentLoaded', () => { // 初始化认证 UI updateAuthUI(); - // 根据设备 system.language 同步 WebUI 语言(与设备终端 help i18n 一致) + // 仅当 localStorage 无有效语言偏好时,才从设备 system.language 同步(不覆盖用户已有选择) (async function syncLanguageFromDevice() { try { + const saved = localStorage.getItem('ts_language'); + if (saved) return; /* 用户已有选择,优先尊重 */ const r = await api.configGet('system.language'); if (r && r.code === 0 && r.data && r.data.value !== undefined) { const webLang = r.data.value === 1 ? 'zh-CN' : 'en-US';