From 663b806d5940b9a89b0a0cc748563d31e2e04685 Mon Sep 17 00:00:00 2001 From: Minidoracat Date: Sat, 14 Jun 2025 10:40:36 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=BE=A9=E9=9F=B3?= =?UTF-8?q?=E6=95=88=E9=80=9A=E7=9F=A5=E5=8D=80=E5=9F=9F=E8=AA=9E=E7=B3=BB?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/static/js/i18n.js | 6 +-- .../js/modules/audio/audio-settings-ui.js | 47 ++++++++++++++++++- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/mcp_feedback_enhanced/web/static/js/i18n.js b/src/mcp_feedback_enhanced/web/static/js/i18n.js index 40dc4e5..8bb2257 100644 --- a/src/mcp_feedback_enhanced/web/static/js/i18n.js +++ b/src/mcp_feedback_enhanced/web/static/js/i18n.js @@ -321,10 +321,10 @@ class I18nManager { } updateAudioSelectTranslations() { - // 更新音效選擇器的翻譯 + // 更新音效設定區域的所有翻譯 if (window.feedbackApp && window.feedbackApp.audioSettingsUI) { - if (typeof window.feedbackApp.audioSettingsUI.updateAudioSelectTranslations === 'function') { - window.feedbackApp.audioSettingsUI.updateAudioSelectTranslations(); + if (typeof window.feedbackApp.audioSettingsUI.updateTranslations === 'function') { + window.feedbackApp.audioSettingsUI.updateTranslations(); } } } diff --git a/src/mcp_feedback_enhanced/web/static/js/modules/audio/audio-settings-ui.js b/src/mcp_feedback_enhanced/web/static/js/modules/audio/audio-settings-ui.js index bc24e70..19d197e 100644 --- a/src/mcp_feedback_enhanced/web/static/js/modules/audio/audio-settings-ui.js +++ b/src/mcp_feedback_enhanced/web/static/js/modules/audio/audio-settings-ui.js @@ -58,7 +58,10 @@ this.createUI(); this.setupEventListeners(); this.refreshUI(); - + + // 主動應用翻譯到新創建的元素 + this.applyInitialTranslations(); + console.log('✅ AudioSettingsUI 初始化完成'); }; @@ -637,6 +640,48 @@ + /** + * 應用初始翻譯到新創建的元素 + */ + AudioSettingsUI.prototype.applyInitialTranslations = function() { + if (!this.container) return; + + // 對容器內所有有 data-i18n 屬性的元素應用翻譯 + const elements = this.container.querySelectorAll('[data-i18n]'); + elements.forEach(element => { + const key = element.getAttribute('data-i18n'); + const translation = this.t(key); + if (translation && translation !== key) { + element.textContent = translation; + } + }); + + // 對有 data-i18n-placeholder 屬性的元素應用翻譯 + const placeholderElements = this.container.querySelectorAll('[data-i18n-placeholder]'); + placeholderElements.forEach(element => { + const key = element.getAttribute('data-i18n-placeholder'); + const translation = this.t(key); + if (translation && translation !== key) { + element.placeholder = translation; + } + }); + + console.log('🌐 AudioSettingsUI 初始翻譯已應用'); + }; + + /** + * 更新所有翻譯(包括靜態文字和動態內容) + */ + AudioSettingsUI.prototype.updateTranslations = function() { + // 更新所有靜態文字元素 + this.applyInitialTranslations(); + + // 更新音效選擇器的翻譯 + this.updateAudioSelectTranslations(); + + console.log('🌐 AudioSettingsUI 翻譯已更新'); + }; + /** * 更新音效選擇器的翻譯 */