diff --git a/web/static/js/router.js b/web/static/js/router.js index 14f0f1fd..5a91b79b 100644 --- a/web/static/js/router.js +++ b/web/static/js/router.js @@ -232,7 +232,9 @@ function showSubmenuPopup(navItem, menuId) { } // 初始化页面 -function initPage(pageId) { +async function initPage(pageId) { + // 等待 i18n 就绪,避免快速刷新时翻译函数未初始化导致页面显示原始占位符 key + if (window.i18nReady) await window.i18nReady; switch(pageId) { case 'dashboard': if (typeof refreshDashboard === 'function') { diff --git a/web/static/js/settings.js b/web/static/js/settings.js index 7a1d75a1..40df9d54 100644 --- a/web/static/js/settings.js +++ b/web/static/js/settings.js @@ -278,8 +278,10 @@ let toolsStatusFilter = ''; // 加载工具列表(分页) async function loadToolsList(page = 1, searchKeyword = '') { + // 等待 i18n 就绪,避免快速刷新时翻译函数未初始化导致显示占位符 + if (window.i18nReady) await window.i18nReady; const toolsList = document.getElementById('tools-list'); - + // 显示加载状态 if (toolsList) { // 清空整个容器,包括可能存在的分页控件 @@ -1241,6 +1243,8 @@ async function fetchExternalMCPs() { // 加载外部MCP列表并渲染 async function loadExternalMCPs() { try { + // 等待 i18n 就绪,避免快速刷新时翻译函数未初始化导致显示占位符 + if (window.i18nReady) await window.i18nReady; const data = await fetchExternalMCPs(); renderExternalMCPList(data.servers || {}); renderExternalMCPStats(data.stats || {});