diff --git a/src/mcp_feedback_enhanced/gui/locales/en/translations.json b/src/mcp_feedback_enhanced/gui/locales/en/translations.json index cf1e6a1..a1e8819 100644 --- a/src/mcp_feedback_enhanced/gui/locales/en/translations.json +++ b/src/mcp_feedback_enhanced/gui/locales/en/translations.json @@ -202,6 +202,120 @@ }, "test": { "qtGuiSummary": "🎯 Image Preview and Window Adjustment Test\n\nThis is a test session to verify the following features:\n\n✅ Test Items:\n1. Image upload and preview functionality\n2. Image X delete button in top-right corner\n3. Free window resizing\n4. Flexible splitter adjustment\n5. Dynamic layout of all areas\n6. Smart Ctrl+V image paste functionality\n\n📋 Test Steps:\n1. Try uploading some images (drag & drop, file selection, clipboard)\n2. Check if image preview displays correctly\n3. Click the X button in the top-right corner of images to delete them\n4. Try resizing the window, check if it can be freely adjusted\n5. Drag the splitter to adjust area sizes\n6. Press Ctrl+V in the text box to test smart paste functionality\n7. Provide any feedback or issues found\n\nPlease test these features and provide feedback!", - "webUiSummary": "Test Web UI Functionality\n\n🎯 **Test Items:**\n- Web UI server startup and operation\n- WebSocket real-time communication\n- Feedback submission functionality\n- Image upload and preview\n- Command execution functionality\n- Smart Ctrl+V image paste\n- Multi-language interface switching\n\n📋 **Test Steps:**\n1. Test image upload (drag & drop, file selection, clipboard)\n2. Press Ctrl+V in text box to test smart paste\n3. Try switching languages (Traditional Chinese/Simplified Chinese/English)\n4. Test command execution functionality\n5. Submit feedback and images\n\nPlease test these features and provide feedback!" + "webUiSummary": "Test Web UI Functionality\n\n🎯 **Test Items:**\n- Web UI server startup and operation\n- WebSocket real-time communication\n- Feedback submission functionality\n- Image upload and preview\n- Command execution functionality\n- Smart Ctrl+V image paste\n- Multi-language interface switching\n\n📋 **Test Steps:**\n1. Test image upload (drag & drop, file selection, clipboard)\n2. Press Ctrl+V in text box to test smart paste\n3. Try switching languages (Traditional Chinese/Simplified Chinese/English)\n4. Test command execution functionality\n5. Submit feedback and images\n\nPlease test these features and provide feedback!", + "messages": { + "webModuleLoaded": "✅ Using new web module", + "webModuleLoadFailed": "⚠️ Unable to import Web UI module: {error}", + "startingWebServer": "🚀 Starting Web server...", + "serverStartError": "Server startup error: {error}", + "webServerStartSuccess": "✅ Web server started successfully", + "serverRunningAt": "🌐 Server running at: http://{host}:{port}", + "cannotConnectToPort": "❌ Cannot connect to server port {port}", + "webServerStartFailed": "❌ Web server startup failed: {error}", + "serverNotStarted": "❌ Server failed to start properly", + "testSessionCreated": "✅ Test session created successfully (ID: {sessionId}...)", + "testUrl": "🔗 Test URL: {url}", + "testingBrowserLaunch": "🌐 Testing browser launch functionality...", + "wslEnvironmentDetected": "✅ WSL environment detected, using WSL-specific browser launch", + "nonWslEnvironment": "ℹ️ Non-WSL environment, using standard browser launch", + "browserLaunchSuccess": "✅ Browser launch successful: {url}", + "browserLaunchFailed": "⚠️ Browser launch failed: {error}", + "browserLaunchNote": "💡 This might be normal, please manually open the above URL in browser", + "sessionCreationFailed": "❌ Session creation failed: {error}", + "allTestsPassed": "🎉 All tests passed! Web UI ready", + "notes": "📝 Notes:", + "webUiAutoEnabled": " - Web UI will auto-enable in SSH remote environments", + "localEnvironmentGui": " - Local environment will continue using Qt GUI", + "realtimeCommandSupport": " - Supports real-time command execution and WebSocket communication", + "modernDarkTheme": " - Provides modern dark theme interface", + "smartCtrlVPaste": " - Supports smart Ctrl+V image paste functionality", + "testingEnvironmentDetection": "🔍 Testing environment detection functionality", + "wslDetection": "WSL environment detection: {result}", + "remoteDetection": "Remote environment detection: {result}", + "guiAvailability": "GUI availability: {result}", + "yes": "Yes", + "no": "No", + "wslEnvironmentWebUi": "✅ WSL environment detected, will use Web UI with Windows browser launch support", + "remoteEnvironmentWebUi": "✅ Will use Web UI (suitable for remote development environment)", + "localEnvironmentQtGui": "✅ Will use Qt GUI (local environment)", + "environmentDetectionFailed": "❌ Environment detection failed: {error}", + "testingMcpIntegration": "🔧 Testing MCP integration functionality", + "mcpToolFunctionAvailable": "✅ MCP tool function available", + "timeoutParameterSupported": "✅ Supports timeout parameter", + "environmentBasedWebUiSupported": "✅ Supports environment variable-based Web UI selection", + "readyForAiAssistantCalls": "✅ Ready to accept calls from AI assistant", + "mcpIntegrationTestFailed": "❌ MCP integration test failed: {error}", + "testingParameterFunctionality": "🆕 Testing parameter functionality", + "timeoutParameterExists": "✅ timeout parameter exists, default value: {default}", + "timeoutParameterMissing": "❌ timeout parameter does not exist", + "forceWebDetected": "✅ FORCE_WEB environment variable detected: {value}", + "forceWebNotSet": "ℹ️ FORCE_WEB environment variable not set (will use default logic)", + "parameterFunctionalityNormal": "✅ Parameter functionality normal", + "parameterTestFailed": "❌ Parameter test failed: {error}", + "testingEnvironmentWebUiMode": "🌐 Testing environment variable-controlled Web UI mode", + "currentEnvironment": "Current environment - WSL: {wsl}, Remote: {remote}, GUI available: {gui}", + "forceWebVariable": "FORCE_WEB environment variable: {value}", + "notSet": "Not set", + "forceWebEnabled": "✅ FORCE_WEB enabled, will force use Web UI", + "wslEnvironmentWebUiBrowser": "✅ WSL environment, will use Web UI with Windows browser launch support", + "localGuiEnvironmentQtGui": "ℹ️ Local GUI environment, will use Qt GUI", + "forceWebTestHint": "💡 Can set FORCE_WEB=true to force use Web UI for testing", + "autoWebUiRemoteOrNoGui": "ℹ️ Will automatically use Web UI (remote environment or GUI unavailable)", + "environmentVariableTestFailed": "❌ Environment variable test failed: {error}", + "webUiInteractiveTestMode": "🌐 Web UI Interactive Test Mode", + "serverAddress": "Server address: {url}", + "operationGuide": "📖 Operation Guide:", + "openServerInBrowser": " 1. Open the above server address in browser", + "tryFollowingFeatures": " 2. Try the following features:", + "clickShowCommandBlock": " - Click 'Show Command Block' button", + "inputCommandAndExecute": " - Input command like 'echo Hello World' and execute", + "inputTextInFeedbackArea": " - Input text in feedback area", + "useCtrlEnterSubmit": " - Use Ctrl+Enter to submit feedback", + "testWebSocketRealtime": " 3. Test WebSocket real-time communication functionality", + "testPagePersistence": " 4. Test page persistence (page doesn't close after feedback submission)", + "controlOptions": "⌨️ Control Options:", + "pressEnterContinue": " - Press Enter to continue running", + "inputQuitToStop": " - Input 'q' or 'quit' to stop server", + "stoppingServer": "🛑 Stopping server...", + "serverContinuesRunning": "🔄 Server continues running at: {url}", + "browserShouldStillAccess": " Browser should still be able to access normally", + "unknownCommand": "❓ Unknown command. Press Enter to continue running, or input 'q' to exit", + "interruptSignalReceived": "🛑 Interrupt signal received, stopping server...", + "webUiTestComplete": "✅ Web UI test complete", + "allTestsComplete": "🎊 All tests complete! Ready to use MCP Feedback Enhanced", + "usageInstructions": "📖 Usage Instructions:", + "configureMcpServer": " 1. Configure this MCP server in Cursor/Cline", + "aiAssistantAutoCall": " 2. AI assistant will automatically call interactive_feedback tool", + "autoSelectGuiOrWebUi": " 3. Automatically select GUI or Web UI based on environment", + "provideFeedbackContinue": " 4. Provide feedback and continue workflow", + "webUiNewFeatures": "✨ Web UI New Features:", + "sshRemoteSupport": " - Supports SSH remote development environment", + "modernDarkThemeInterface": " - Modern dark theme interface", + "webSocketRealtime": " - WebSocket real-time communication", + "autoBrowserLaunch": " - Automatic browser launch", + "commandExecutionRealtime": " - Command execution and real-time output", + "testCompleteSystemReady": "✅ Test complete - System ready!", + "canTestInBrowserNow": "💡 You can test in browser now: {url}", + "serverWillContinueRunning": " (Server will continue running for a short time)", + "someTestsFailed": "❌ Some tests failed, please check error messages", + "testingWebUi": "🧪 Testing MCP Feedback Enhanced Web UI", + "syncingLanguageSettings": "🔄 Syncing language settings...", + "currentLanguage": "📝 Current language: {language}", + "webUiModuleImportSuccess": "✅ Web UI module imported successfully", + "webUiModuleImportFailed": "❌ Web UI module import failed: {error}", + "webUiManagerCreateSuccess": "✅ WebUIManager created successfully", + "webUiManagerCreateFailed": "❌ WebUIManager creation failed: {error}", + "noLanguageInSettings": "⚠️ No language setting in ui_settings.json", + "settingsFileNotExists": "⚠️ ui_settings.json file does not exist, using default language", + "loadLanguageSettingsFailed": "⚠️ Failed to load language settings: {error}", + "loadingLanguageFromSettings": "🔄 Loading language setting from ui_settings.json: {language}", + "syncingLanguage": "🔄 Syncing language setting: {from} -> {to}", + "guiLanguageSynced": "✅ GUI language synced to: {language}", + "languageAlreadySynced": "✅ Language setting already synced: {language}", + "webUiTest": "MCP Feedback Enhanced - Web UI Test", + "languageSetFailed": "⚠️ Language setting failed, using default language: {language}", + "foundAvailablePort": "🔍 Found available port: {port}", + "findPortFailed": "❌ Failed to find available port: {error}" + } } } \ No newline at end of file diff --git a/src/mcp_feedback_enhanced/gui/locales/zh-CN/translations.json b/src/mcp_feedback_enhanced/gui/locales/zh-CN/translations.json index 505bcbb..2f30086 100644 --- a/src/mcp_feedback_enhanced/gui/locales/zh-CN/translations.json +++ b/src/mcp_feedback_enhanced/gui/locales/zh-CN/translations.json @@ -183,7 +183,121 @@ }, "test": { "qtGuiSummary": "🎯 图片预览和窗口调整测试\n\n这是一个测试会话,用于验证以下功能:\n\n✅ 功能测试项目:\n1. 图片上传和预览功能\n2. 图片右上角X删除按钮\n3. 窗口自由调整大小\n4. 分割器的灵活调整\n5. 各区域的动态布局\n6. 智能 Ctrl+V 图片粘贴功能\n\n📋 测试步骤:\n1. 尝试上传一些图片(拖拽、文件选择、剪贴板)\n2. 检查图片预览是否正常显示\n3. 点击图片右上角的X按钮删除图片\n4. 尝试调整窗口大小,检查是否可以自由调整\n5. 拖动分割器调整各区域大小\n6. 在文本框内按 Ctrl+V 测试智能粘贴功能\n7. 提供任何回馈或发现的问题\n\n请测试这些功能并提供回馈!", - "webUiSummary": "测试 Web UI 功能\n\n🎯 **功能测试项目:**\n- Web UI 服务器启动和运行\n- WebSocket 即时通讯\n- 回馈提交功能\n- 图片上传和预览\n- 命令执行功能\n- 智能 Ctrl+V 图片粘贴\n- 多语言界面切换\n\n📋 **测试步骤:**\n1. 测试图片上传(拖拽、选择文件、剪贴板)\n2. 在文本框内按 Ctrl+V 测试智能粘贴\n3. 尝试切换语言(繁中/简中/英文)\n4. 测试命令执行功能\n5. 提交回馈和图片\n\n请测试这些功能并提供回馈!" + "webUiSummary": "测试 Web UI 功能\n\n🎯 **功能测试项目:**\n- Web UI 服务器启动和运行\n- WebSocket 即时通讯\n- 回馈提交功能\n- 图片上传和预览\n- 命令执行功能\n- 智能 Ctrl+V 图片粘贴\n- 多语言界面切换\n\n📋 **测试步骤:**\n1. 测试图片上传(拖拽、选择文件、剪贴板)\n2. 在文本框内按 Ctrl+V 测试智能粘贴\n3. 尝试切换语言(繁中/简中/英文)\n4. 测试命令执行功能\n5. 提交回馈和图片\n\n请测试这些功能并提供回馈!", + "messages": { + "webModuleLoaded": "✅ 使用新的 web 模块", + "webModuleLoadFailed": "⚠️ 无法导入 Web UI 模块: {error}", + "startingWebServer": "🚀 启动 Web 服务器...", + "serverStartError": "服务器启动错误: {error}", + "webServerStartSuccess": "✅ Web 服务器启动成功", + "serverRunningAt": "🌐 服务器运行在: http://{host}:{port}", + "cannotConnectToPort": "❌ 无法连接到服务器端口 {port}", + "webServerStartFailed": "❌ Web 服务器启动失败: {error}", + "serverNotStarted": "❌ 服务器未能正常启动", + "testSessionCreated": "✅ 测试会话创建成功 (ID: {sessionId}...)", + "testUrl": "🔗 测试 URL: {url}", + "testingBrowserLaunch": "🌐 测试浏览器启动功能...", + "wslEnvironmentDetected": "✅ 检测到 WSL 环境,使用 WSL 专用浏览器启动", + "nonWslEnvironment": "ℹ️ 非 WSL 环境,使用标准浏览器启动", + "browserLaunchSuccess": "✅ 浏览器启动成功: {url}", + "browserLaunchFailed": "⚠️ 浏览器启动失败: {error}", + "browserLaunchNote": "💡 这可能是正常的,请手动在浏览器中开启上述 URL", + "sessionCreationFailed": "❌ 会话创建失败: {error}", + "allTestsPassed": "🎉 所有测试通过!Web UI 准备就绪", + "notes": "📝 注意事项:", + "webUiAutoEnabled": " - Web UI 会在 SSH remote 环境下自动启用", + "localEnvironmentGui": " - 本地环境会继续使用 Qt GUI", + "realtimeCommandSupport": " - 支持即时命令执行和 WebSocket 通讯", + "modernDarkTheme": " - 提供现代化的深色主题界面", + "smartCtrlVPaste": " - 支持智能 Ctrl+V 图片贴上功能", + "testingEnvironmentDetection": "🔍 测试环境检测功能", + "wslDetection": "WSL 环境检测: {result}", + "remoteDetection": "远端环境检测: {result}", + "guiAvailability": "GUI 可用性: {result}", + "yes": "是", + "no": "否", + "wslEnvironmentWebUi": "✅ 检测到 WSL 环境,将使用 Web UI 并支持 Windows 浏览器启动", + "remoteEnvironmentWebUi": "✅ 将使用 Web UI (适合远端开发环境)", + "localEnvironmentQtGui": "✅ 将使用 Qt GUI (本地环境)", + "environmentDetectionFailed": "❌ 环境检测失败: {error}", + "testingMcpIntegration": "🔧 测试 MCP 整合功能", + "mcpToolFunctionAvailable": "✅ MCP 工具函数可用", + "timeoutParameterSupported": "✅ 支持 timeout 参数", + "environmentBasedWebUiSupported": "✅ 支持基于环境变数的 Web UI 选择", + "readyForAiAssistantCalls": "✅ 准备接受来自 AI 助手的调用", + "mcpIntegrationTestFailed": "❌ MCP 整合测试失败: {error}", + "testingParameterFunctionality": "🆕 测试参数功能", + "timeoutParameterExists": "✅ timeout 参数存在,预设值: {default}", + "timeoutParameterMissing": "❌ timeout 参数不存在", + "forceWebDetected": "✅ 检测到 FORCE_WEB 环境变数: {value}", + "forceWebNotSet": "ℹ️ FORCE_WEB 环境变数未设定(将使用预设逻辑)", + "parameterFunctionalityNormal": "✅ 参数功能正常", + "parameterTestFailed": "❌ 参数测试失败: {error}", + "testingEnvironmentWebUiMode": "🌐 测试环境变数控制 Web UI 模式", + "currentEnvironment": "当前环境 - WSL: {wsl}, 远端: {remote}, GUI 可用: {gui}", + "forceWebVariable": "FORCE_WEB 环境变数: {value}", + "notSet": "未设定", + "forceWebEnabled": "✅ FORCE_WEB 已启用,将强制使用 Web UI", + "wslEnvironmentWebUiBrowser": "✅ WSL 环境,将使用 Web UI 并支持 Windows 浏览器启动", + "localGuiEnvironmentQtGui": "ℹ️ 本地 GUI 环境,将使用 Qt GUI", + "forceWebTestHint": "💡 可设定 FORCE_WEB=true 强制使用 Web UI 进行测试", + "autoWebUiRemoteOrNoGui": "ℹ️ 将自动使用 Web UI(远端环境或 GUI 不可用)", + "environmentVariableTestFailed": "❌ 环境变数测试失败: {error}", + "webUiInteractiveTestMode": "🌐 Web UI 互动测试模式", + "serverAddress": "服务器地址: {url}", + "operationGuide": "📖 操作指南:", + "openServerInBrowser": " 1. 在浏览器中开启上面的服务器地址", + "tryFollowingFeatures": " 2. 尝试以下功能:", + "clickShowCommandBlock": " - 点击 '显示命令区块' 按钮", + "inputCommandAndExecute": " - 输入命令如 'echo Hello World' 并执行", + "inputTextInFeedbackArea": " - 在回馈区域输入文字", + "useCtrlEnterSubmit": " - 使用 Ctrl+Enter 提交回馈", + "testWebSocketRealtime": " 3. 测试 WebSocket 即时通讯功能", + "testPagePersistence": " 4. 测试页面持久性(提交反馈后页面不关闭)", + "controlOptions": "⌨️ 控制选项:", + "pressEnterContinue": " - 按 Enter 继续运行", + "inputQuitToStop": " - 输入 'q' 或 'quit' 停止服务器", + "stoppingServer": "🛑 停止服务器...", + "serverContinuesRunning": "🔄 服务器持续运行在: {url}", + "browserShouldStillAccess": " 浏览器应该仍可正常访问", + "unknownCommand": "❓ 未知命令。按 Enter 继续运行,或输入 'q' 退出", + "interruptSignalReceived": "🛑 收到中断信号,停止服务器...", + "webUiTestComplete": "✅ Web UI 测试完成", + "allTestsComplete": "🎊 所有测试完成!准备使用 MCP Feedback Enhanced", + "usageInstructions": "📖 使用方法:", + "configureMcpServer": " 1. 在 Cursor/Cline 中配置此 MCP 服务器", + "aiAssistantAutoCall": " 2. AI 助手会自动调用 interactive_feedback 工具", + "autoSelectGuiOrWebUi": " 3. 根据环境自动选择 GUI 或 Web UI", + "provideFeedbackContinue": " 4. 提供回馈后继续工作流程", + "webUiNewFeatures": "✨ Web UI 新功能:", + "sshRemoteSupport": " - 支持 SSH remote 开发环境", + "modernDarkThemeInterface": " - 现代化深色主题界面", + "webSocketRealtime": " - WebSocket 即时通讯", + "autoBrowserLaunch": " - 自动浏览器启动", + "commandExecutionRealtime": " - 命令执行和即时输出", + "testCompleteSystemReady": "✅ 测试完成 - 系统已准备就绪!", + "canTestInBrowserNow": "💡 您可以现在就在浏览器中测试: {url}", + "serverWillContinueRunning": " (服务器会继续运行一小段时间)", + "someTestsFailed": "❌ 部分测试失败,请检查错误信息", + "testingWebUi": "🧪 测试 MCP Feedback Enhanced Web UI", + "syncingLanguageSettings": "🔄 同步语言设置...", + "currentLanguage": "📝 当前使用语言: {language}", + "webUiModuleImportSuccess": "✅ Web UI 模块导入成功", + "webUiModuleImportFailed": "❌ Web UI 模块导入失败: {error}", + "webUiManagerCreateSuccess": "✅ WebUIManager 创建成功", + "webUiManagerCreateFailed": "❌ WebUIManager 创建失败: {error}", + "noLanguageInSettings": "⚠️ ui_settings.json 中没有语言设置", + "settingsFileNotExists": "⚠️ ui_settings.json 文件不存在,使用默认语言", + "loadLanguageSettingsFailed": "⚠️ 加载语言设置失败: {error}", + "loadingLanguageFromSettings": "🔄 从 ui_settings.json 加载语言设置: {language}", + "syncingLanguage": "🔄 同步语言设置: {from} -> {to}", + "guiLanguageSynced": "✅ GUI 语言已同步到: {language}", + "languageAlreadySynced": "✅ 语言设置已同步: {language}", + "webUiTest": "MCP Feedback Enhanced - Web UI 测试", + "languageSetFailed": "⚠️ 语言设置失败,使用默认语言: {language}", + "foundAvailablePort": "🔍 找到可用端口: {port}", + "findPortFailed": "❌ 寻找可用端口失败: {error}" + } }, "about": { "appInfo": "应用程序信息", diff --git a/src/mcp_feedback_enhanced/gui/locales/zh-TW/translations.json b/src/mcp_feedback_enhanced/gui/locales/zh-TW/translations.json index 8257ce4..d134d75 100644 --- a/src/mcp_feedback_enhanced/gui/locales/zh-TW/translations.json +++ b/src/mcp_feedback_enhanced/gui/locales/zh-TW/translations.json @@ -197,6 +197,120 @@ }, "test": { "qtGuiSummary": "🎯 圖片預覽和視窗調整測試\n\n這是一個測試會話,用於驗證以下功能:\n\n✅ 功能測試項目:\n1. 圖片上傳和預覽功能\n2. 圖片右上角X刪除按鈕\n3. 視窗自由調整大小\n4. 分割器的靈活調整\n5. 各區域的動態佈局\n6. 智能 Ctrl+V 圖片貼上功能\n\n📋 測試步驟:\n1. 嘗試上傳一些圖片(拖拽、文件選擇、剪貼板)\n2. 檢查圖片預覽是否正常顯示\n3. 點擊圖片右上角的X按鈕刪除圖片\n4. 嘗試調整視窗大小,檢查是否可以自由調整\n5. 拖動分割器調整各區域大小\n6. 在文字框內按 Ctrl+V 測試智能貼上功能\n7. 提供任何回饋或發現的問題\n\n請測試這些功能並提供回饋!", - "webUiSummary": "測試 Web UI 功能\n\n🎯 **功能測試項目:**\n- Web UI 服務器啟動和運行\n- WebSocket 即時通訊\n- 回饋提交功能\n- 圖片上傳和預覽\n- 命令執行功能\n- 智能 Ctrl+V 圖片貼上\n- 多語言介面切換\n\n📋 **測試步驟:**\n1. 測試圖片上傳(拖拽、選擇檔案、剪貼簿)\n2. 在文字框內按 Ctrl+V 測試智能貼上\n3. 嘗試切換語言(繁中/簡中/英文)\n4. 測試命令執行功能\n5. 提交回饋和圖片\n\n請測試這些功能並提供回饋!" + "webUiSummary": "測試 Web UI 功能\n\n🎯 **功能測試項目:**\n- Web UI 服務器啟動和運行\n- WebSocket 即時通訊\n- 回饋提交功能\n- 圖片上傳和預覽\n- 命令執行功能\n- 智能 Ctrl+V 圖片貼上\n- 多語言介面切換\n\n📋 **測試步驟:**\n1. 測試圖片上傳(拖拽、選擇檔案、剪貼簿)\n2. 在文字框內按 Ctrl+V 測試智能貼上\n3. 嘗試切換語言(繁中/簡中/英文)\n4. 測試命令執行功能\n5. 提交回饋和圖片\n\n請測試這些功能並提供回饋!", + "messages": { + "webModuleLoaded": "✅ 使用新的 web 模組", + "webModuleLoadFailed": "⚠️ 無法導入 Web UI 模組: {error}", + "startingWebServer": "🚀 啟動 Web 服務器...", + "serverStartError": "服務器啟動錯誤: {error}", + "webServerStartSuccess": "✅ Web 服務器啟動成功", + "serverRunningAt": "🌐 服務器運行在: http://{host}:{port}", + "cannotConnectToPort": "❌ 無法連接到服務器端口 {port}", + "webServerStartFailed": "❌ Web 服務器啟動失敗: {error}", + "serverNotStarted": "❌ 服務器未能正常啟動", + "testSessionCreated": "✅ 測試會話創建成功 (ID: {sessionId}...)", + "testUrl": "🔗 測試 URL: {url}", + "testingBrowserLaunch": "🌐 測試瀏覽器啟動功能...", + "wslEnvironmentDetected": "✅ 檢測到 WSL 環境,使用 WSL 專用瀏覽器啟動", + "nonWslEnvironment": "ℹ️ 非 WSL 環境,使用標準瀏覽器啟動", + "browserLaunchSuccess": "✅ 瀏覽器啟動成功: {url}", + "browserLaunchFailed": "⚠️ 瀏覽器啟動失敗: {error}", + "browserLaunchNote": "💡 這可能是正常的,請手動在瀏覽器中開啟上述 URL", + "sessionCreationFailed": "❌ 會話創建失敗: {error}", + "allTestsPassed": "🎉 所有測試通過!Web UI 準備就緒", + "notes": "📝 注意事項:", + "webUiAutoEnabled": " - Web UI 會在 SSH remote 環境下自動啟用", + "localEnvironmentGui": " - 本地環境會繼續使用 Qt GUI", + "realtimeCommandSupport": " - 支援即時命令執行和 WebSocket 通訊", + "modernDarkTheme": " - 提供現代化的深色主題界面", + "smartCtrlVPaste": " - 支援智能 Ctrl+V 圖片貼上功能", + "testingEnvironmentDetection": "🔍 測試環境檢測功能", + "wslDetection": "WSL 環境檢測: {result}", + "remoteDetection": "遠端環境檢測: {result}", + "guiAvailability": "GUI 可用性: {result}", + "yes": "是", + "no": "否", + "wslEnvironmentWebUi": "✅ 檢測到 WSL 環境,將使用 Web UI 並支援 Windows 瀏覽器啟動", + "remoteEnvironmentWebUi": "✅ 將使用 Web UI (適合遠端開發環境)", + "localEnvironmentQtGui": "✅ 將使用 Qt GUI (本地環境)", + "environmentDetectionFailed": "❌ 環境檢測失敗: {error}", + "testingMcpIntegration": "🔧 測試 MCP 整合功能", + "mcpToolFunctionAvailable": "✅ MCP 工具函數可用", + "timeoutParameterSupported": "✅ 支援 timeout 參數", + "environmentBasedWebUiSupported": "✅ 支援基於環境變數的 Web UI 選擇", + "readyForAiAssistantCalls": "✅ 準備接受來自 AI 助手的調用", + "mcpIntegrationTestFailed": "❌ MCP 整合測試失敗: {error}", + "testingParameterFunctionality": "🆕 測試參數功能", + "timeoutParameterExists": "✅ timeout 參數存在,預設值: {default}", + "timeoutParameterMissing": "❌ timeout 參數不存在", + "forceWebDetected": "✅ 檢測到 FORCE_WEB 環境變數: {value}", + "forceWebNotSet": "ℹ️ FORCE_WEB 環境變數未設定(將使用預設邏輯)", + "parameterFunctionalityNormal": "✅ 參數功能正常", + "parameterTestFailed": "❌ 參數測試失敗: {error}", + "testingEnvironmentWebUiMode": "🌐 測試環境變數控制 Web UI 模式", + "currentEnvironment": "當前環境 - WSL: {wsl}, 遠端: {remote}, GUI 可用: {gui}", + "forceWebVariable": "FORCE_WEB 環境變數: {value}", + "notSet": "未設定", + "forceWebEnabled": "✅ FORCE_WEB 已啟用,將強制使用 Web UI", + "wslEnvironmentWebUiBrowser": "✅ WSL 環境,將使用 Web UI 並支援 Windows 瀏覽器啟動", + "localGuiEnvironmentQtGui": "ℹ️ 本地 GUI 環境,將使用 Qt GUI", + "forceWebTestHint": "💡 可設定 FORCE_WEB=true 強制使用 Web UI 進行測試", + "autoWebUiRemoteOrNoGui": "ℹ️ 將自動使用 Web UI(遠端環境或 GUI 不可用)", + "environmentVariableTestFailed": "❌ 環境變數測試失敗: {error}", + "webUiInteractiveTestMode": "🌐 Web UI 互動測試模式", + "serverAddress": "服務器地址: {url}", + "operationGuide": "📖 操作指南:", + "openServerInBrowser": " 1. 在瀏覽器中開啟上面的服務器地址", + "tryFollowingFeatures": " 2. 嘗試以下功能:", + "clickShowCommandBlock": " - 點擊 '顯示命令區塊' 按鈕", + "inputCommandAndExecute": " - 輸入命令如 'echo Hello World' 並執行", + "inputTextInFeedbackArea": " - 在回饋區域輸入文字", + "useCtrlEnterSubmit": " - 使用 Ctrl+Enter 提交回饋", + "testWebSocketRealtime": " 3. 測試 WebSocket 即時通訊功能", + "testPagePersistence": " 4. 測試頁面持久性(提交反饋後頁面不關閉)", + "controlOptions": "⌨️ 控制選項:", + "pressEnterContinue": " - 按 Enter 繼續運行", + "inputQuitToStop": " - 輸入 'q' 或 'quit' 停止服務器", + "stoppingServer": "🛑 停止服務器...", + "serverContinuesRunning": "🔄 服務器持續運行在: {url}", + "browserShouldStillAccess": " 瀏覽器應該仍可正常訪問", + "unknownCommand": "❓ 未知命令。按 Enter 繼續運行,或輸入 'q' 退出", + "interruptSignalReceived": "🛑 收到中斷信號,停止服務器...", + "webUiTestComplete": "✅ Web UI 測試完成", + "allTestsComplete": "🎊 所有測試完成!準備使用 MCP Feedback Enhanced", + "usageInstructions": "📖 使用方法:", + "configureMcpServer": " 1. 在 Cursor/Cline 中配置此 MCP 服務器", + "aiAssistantAutoCall": " 2. AI 助手會自動調用 interactive_feedback 工具", + "autoSelectGuiOrWebUi": " 3. 根據環境自動選擇 GUI 或 Web UI", + "provideFeedbackContinue": " 4. 提供回饋後繼續工作流程", + "webUiNewFeatures": "✨ Web UI 新功能:", + "sshRemoteSupport": " - 支援 SSH remote 開發環境", + "modernDarkThemeInterface": " - 現代化深色主題界面", + "webSocketRealtime": " - WebSocket 即時通訊", + "autoBrowserLaunch": " - 自動瀏覽器啟動", + "commandExecutionRealtime": " - 命令執行和即時輸出", + "testCompleteSystemReady": "✅ 測試完成 - 系統已準備就緒!", + "canTestInBrowserNow": "💡 您可以現在就在瀏覽器中測試: {url}", + "serverWillContinueRunning": " (服務器會繼續運行一小段時間)", + "someTestsFailed": "❌ 部分測試失敗,請檢查錯誤信息", + "testingWebUi": "🧪 測試 MCP Feedback Enhanced Web UI", + "syncingLanguageSettings": "🔄 同步語言設定...", + "currentLanguage": "📝 當前使用語言: {language}", + "webUiModuleImportSuccess": "✅ Web UI 模組匯入成功", + "webUiModuleImportFailed": "❌ Web UI 模組匯入失敗: {error}", + "webUiManagerCreateSuccess": "✅ WebUIManager 創建成功", + "webUiManagerCreateFailed": "❌ WebUIManager 創建失敗: {error}", + "noLanguageInSettings": "⚠️ ui_settings.json 中沒有語言設定", + "settingsFileNotExists": "⚠️ ui_settings.json 文件不存在,使用默認語言", + "loadLanguageSettingsFailed": "⚠️ 載入語言設定失敗: {error}", + "loadingLanguageFromSettings": "🔄 從 ui_settings.json 載入語言設定: {language}", + "syncingLanguage": "🔄 同步語言設定: {from} -> {to}", + "guiLanguageSynced": "✅ GUI 語言已同步到: {language}", + "languageAlreadySynced": "✅ 語言設定已同步: {language}", + "webUiTest": "MCP Feedback Enhanced - Web UI 測試", + "languageSetFailed": "⚠️ 語言設定失敗,使用默認語言: {language}", + "foundAvailablePort": "🔍 找到可用端口: {port}", + "findPortFailed": "❌ 尋找可用端口失敗: {error}" + } } } \ No newline at end of file diff --git a/src/mcp_feedback_enhanced/test_web_ui.py b/src/mcp_feedback_enhanced/test_web_ui.py index 320b456..5891ab3 100644 --- a/src/mcp_feedback_enhanced/test_web_ui.py +++ b/src/mcp_feedback_enhanced/test_web_ui.py @@ -27,6 +27,7 @@ import sys import os import socket import threading +import json from pathlib import Path from typing import Dict, Any, Optional @@ -34,7 +35,7 @@ from typing import Dict, Any, Optional sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..')) from .debug import debug_log -from .i18n import t +from .i18n import t, get_i18n_manager # 嘗試導入 Web UI 模組 try: @@ -42,11 +43,52 @@ try: from .web import WebUIManager, launch_web_feedback_ui, get_web_ui_manager from .web.utils.browser import smart_browser_open, is_wsl_environment WEB_UI_AVAILABLE = True - debug_log("✅ 使用新的 web 模組") + debug_log(t('test.messages.webModuleLoaded')) except ImportError as e: - debug_log(f"⚠️ 無法導入 Web UI 模組: {e}") + debug_log(t('test.messages.webModuleLoadFailed', error=str(e))) WEB_UI_AVAILABLE = False +def load_web_ui_language_setting(): + """載入 Web UI 的語言設定並同步到 GUI 國際化系統""" + try: + # 讀取 ui_settings.json 配置文件 + config_dir = Path.home() / ".config" / "mcp-feedback-enhanced" + settings_file = config_dir / "ui_settings.json" + + if settings_file.exists(): + with open(settings_file, 'r', encoding='utf-8') as f: + settings = json.load(f) + language = settings.get('language') + + if language: + debug_log(t('test.messages.loadingLanguageFromSettings', language=language)) + + # 獲取 GUI 國際化管理器並設定語言 + i18n_manager = get_i18n_manager() + current_language = i18n_manager.get_current_language() + + if language != current_language: + debug_log(t('test.messages.syncingLanguage', **{'from': current_language, 'to': language})) + success = i18n_manager.set_language(language) + if success: + debug_log(t('test.messages.guiLanguageSynced', language=language)) + else: + debug_log(t('test.messages.languageSetFailed', language=current_language)) + else: + debug_log(t('test.messages.languageAlreadySynced', language=language)) + + return language + else: + debug_log(t('test.messages.noLanguageInSettings')) + else: + debug_log(t('test.messages.settingsFileNotExists')) + + except Exception as e: + debug_log(t('test.messages.loadLanguageSettingsFailed', error=str(e))) + + # 返回當前語言作為回退 + return get_i18n_manager().get_current_language() + def get_test_summary(): """獲取測試摘要,使用國際化系統""" return t('test.webUiSummary') @@ -61,46 +103,52 @@ def find_free_port(): def test_web_ui(keep_running=False): """Test the Web UI functionality""" - - debug_log("🧪 測試 MCP Feedback Enhanced Web UI") + + debug_log(t('test.messages.testingWebUi')) debug_log("=" * 50) + + # 同步 Web UI 語言設定到 GUI 國際化系統 + debug_log(t('test.messages.syncingLanguageSettings')) + current_language = load_web_ui_language_setting() + debug_log(t('test.messages.currentLanguage', language=current_language)) + debug_log("-" * 30) # Test import try: # 使用新的 web 模組 from .web import WebUIManager, launch_web_feedback_ui - debug_log("✅ Web UI 模組匯入成功") + debug_log(t('test.messages.webUiModuleImportSuccess')) except ImportError as e: - debug_log(f"❌ Web UI 模組匯入失敗: {e}") + debug_log(t('test.messages.webUiModuleImportFailed', error=str(e))) return False, None # Find free port try: free_port = find_free_port() - debug_log(f"🔍 找到可用端口: {free_port}") + debug_log(t('test.messages.foundAvailablePort', port=free_port)) except Exception as e: - debug_log(f"❌ 尋找可用端口失敗: {e}") + debug_log(t('test.messages.findPortFailed', error=str(e))) return False, None # Test manager creation try: manager = WebUIManager(port=free_port) - debug_log("✅ WebUIManager 創建成功") + debug_log(t('test.messages.webUiManagerCreateSuccess')) except Exception as e: - debug_log(f"❌ WebUIManager 創建失敗: {e}") + debug_log(t('test.messages.webUiManagerCreateFailed', error=str(e))) return False, None # Test server start (with timeout) server_started = False try: - debug_log("🚀 啟動 Web 服務器...") - + debug_log(t('test.messages.startingWebServer')) + def start_server(): try: manager.start_server() return True except Exception as e: - debug_log(f"服務器啟動錯誤: {e}") + debug_log(t('test.messages.serverStartError', error=str(e))) return False # Start server in thread @@ -117,17 +165,17 @@ def test_web_ui(keep_running=False): result = s.connect_ex((manager.host, manager.port)) if result == 0: server_started = True - debug_log("✅ Web 服務器啟動成功") - debug_log(f"🌐 服務器運行在: http://{manager.host}:{manager.port}") + debug_log(t('test.messages.webServerStartSuccess')) + debug_log(t('test.messages.serverRunningAt', host=manager.host, port=manager.port)) else: - debug_log(f"❌ 無法連接到服務器端口 {manager.port}") - + debug_log(t('test.messages.cannotConnectToPort', port=manager.port)) + except Exception as e: - debug_log(f"❌ Web 服務器啟動失敗: {e}") + debug_log(t('test.messages.webServerStartFailed', error=str(e))) return False, None - + if not server_started: - debug_log("❌ 服務器未能正常啟動") + debug_log(t('test.messages.serverNotStarted')) return False, None # Test session creation @@ -142,41 +190,41 @@ def test_web_ui(keep_running=False): 'session_id': session_id, 'url': f"http://{manager.host}:{manager.port}" # 使用根路徑 } - debug_log(f"✅ 測試會話創建成功 (ID: {session_id[:8]}...)") - debug_log(f"🔗 測試 URL: {session_info['url']}") + debug_log(t('test.messages.testSessionCreated', sessionId=session_id[:8])) + debug_log(t('test.messages.testUrl', url=session_info['url'])) # 測試瀏覽器啟動功能 try: - debug_log("🌐 測試瀏覽器啟動功能...") + debug_log(t('test.messages.testingBrowserLaunch')) if is_wsl_environment(): - debug_log("✅ 檢測到 WSL 環境,使用 WSL 專用瀏覽器啟動") + debug_log(t('test.messages.wslEnvironmentDetected')) else: - debug_log("ℹ️ 非 WSL 環境,使用標準瀏覽器啟動") + debug_log(t('test.messages.nonWslEnvironment')) smart_browser_open(session_info['url']) - debug_log(f"✅ 瀏覽器啟動成功: {session_info['url']}") + debug_log(t('test.messages.browserLaunchSuccess', url=session_info['url'])) except Exception as browser_error: - debug_log(f"⚠️ 瀏覽器啟動失敗: {browser_error}") - debug_log("💡 這可能是正常的,請手動在瀏覽器中開啟上述 URL") + debug_log(t('test.messages.browserLaunchFailed', error=str(browser_error))) + debug_log(t('test.messages.browserLaunchNote')) except Exception as e: - debug_log(f"❌ 會話創建失敗: {e}") + debug_log(t('test.messages.sessionCreationFailed', error=str(e))) return False, None debug_log("\n" + "=" * 50) - debug_log("🎉 所有測試通過!Web UI 準備就緒") - debug_log("📝 注意事項:") - debug_log(" - Web UI 會在 SSH remote 環境下自動啟用") - debug_log(" - 本地環境會繼續使用 Qt GUI") - debug_log(" - 支援即時命令執行和 WebSocket 通訊") - debug_log(" - 提供現代化的深色主題界面") - debug_log(" - 支援智能 Ctrl+V 圖片貼上功能") + debug_log(t('test.messages.allTestsPassed')) + debug_log(t('test.messages.notes')) + debug_log(t('test.messages.webUiAutoEnabled')) + debug_log(t('test.messages.localEnvironmentGui')) + debug_log(t('test.messages.realtimeCommandSupport')) + debug_log(t('test.messages.modernDarkTheme')) + debug_log(t('test.messages.smartCtrlVPaste')) return True, session_info def test_environment_detection(): """Test environment detection logic""" - debug_log("🔍 測試環境檢測功能") + debug_log(t('test.messages.testingEnvironmentDetection')) debug_log("-" * 30) try: @@ -186,84 +234,84 @@ def test_environment_detection(): remote_detected = is_remote_environment() gui_available = can_use_gui() - debug_log(f"WSL 環境檢測: {'是' if wsl_detected else '否'}") - debug_log(f"遠端環境檢測: {'是' if remote_detected else '否'}") - debug_log(f"GUI 可用性: {'是' if gui_available else '否'}") + debug_log(t('test.messages.wslDetection', result=t('test.messages.yes') if wsl_detected else t('test.messages.no'))) + debug_log(t('test.messages.remoteDetection', result=t('test.messages.yes') if remote_detected else t('test.messages.no'))) + debug_log(t('test.messages.guiAvailability', result=t('test.messages.yes') if gui_available else t('test.messages.no'))) if wsl_detected: - debug_log("✅ 檢測到 WSL 環境,將使用 Web UI 並支援 Windows 瀏覽器啟動") + debug_log(t('test.messages.wslEnvironmentWebUi')) elif remote_detected: - debug_log("✅ 將使用 Web UI (適合遠端開發環境)") + debug_log(t('test.messages.remoteEnvironmentWebUi')) else: - debug_log("✅ 將使用 Qt GUI (本地環境)") + debug_log(t('test.messages.localEnvironmentQtGui')) return True except Exception as e: - debug_log(f"❌ 環境檢測失敗: {e}") + debug_log(t('test.messages.environmentDetectionFailed', error=str(e))) return False def test_mcp_integration(): """Test MCP server integration""" - debug_log("\n🔧 測試 MCP 整合功能") + debug_log(t('test.messages.testingMcpIntegration')) debug_log("-" * 30) - + try: from .server import interactive_feedback - debug_log("✅ MCP 工具函數可用") - + debug_log(t('test.messages.mcpToolFunctionAvailable')) + # Test timeout parameter - debug_log("✅ 支援 timeout 參數") - + debug_log(t('test.messages.timeoutParameterSupported')) + # Test environment-based Web UI selection - debug_log("✅ 支援基於環境變數的 Web UI 選擇") - + debug_log(t('test.messages.environmentBasedWebUiSupported')) + # Test would require actual MCP call, so just verify import - debug_log("✅ 準備接受來自 AI 助手的調用") + debug_log(t('test.messages.readyForAiAssistantCalls')) return True - + except Exception as e: - debug_log(f"❌ MCP 整合測試失敗: {e}") + debug_log(t('test.messages.mcpIntegrationTestFailed', error=str(e))) return False def test_new_parameters(): """Test timeout parameter and environment variable support""" - debug_log("\n🆕 測試參數功能") + debug_log(t('test.messages.testingParameterFunctionality')) debug_log("-" * 30) - + try: from .server import interactive_feedback - + # 測試參數是否存在 import inspect sig = inspect.signature(interactive_feedback) - + # 檢查 timeout 參數 if 'timeout' in sig.parameters: timeout_param = sig.parameters['timeout'] - debug_log(f"✅ timeout 參數存在,預設值: {timeout_param.default}") + debug_log(t('test.messages.timeoutParameterExists', default=timeout_param.default)) else: - debug_log("❌ timeout 參數不存在") + debug_log(t('test.messages.timeoutParameterMissing')) return False - + # 檢查環境變數支援 import os current_force_web = os.getenv("FORCE_WEB") if current_force_web: - debug_log(f"✅ 檢測到 FORCE_WEB 環境變數: {current_force_web}") + debug_log(t('test.messages.forceWebDetected', value=current_force_web)) else: - debug_log("ℹ️ FORCE_WEB 環境變數未設定(將使用預設邏輯)") - - debug_log("✅ 參數功能正常") + debug_log(t('test.messages.forceWebNotSet')) + + debug_log(t('test.messages.parameterFunctionalityNormal')) return True - + except Exception as e: - debug_log(f"❌ 參數測試失敗: {e}") + debug_log(t('test.messages.parameterTestFailed', error=str(e))) return False def test_environment_web_ui_mode(): """Test environment-based Web UI mode""" - debug_log("\n🌐 測試環境變數控制 Web UI 模式") + debug_log(t('test.messages.testingEnvironmentWebUiMode')) debug_log("-" * 30) try: @@ -276,62 +324,62 @@ def test_environment_web_ui_mode(): gui_available = can_use_gui() force_web_env = os.getenv("FORCE_WEB", "").lower() - debug_log(f"當前環境 - WSL: {is_wsl}, 遠端: {is_remote}, GUI 可用: {gui_available}") - debug_log(f"FORCE_WEB 環境變數: {force_web_env or '未設定'}") + debug_log(t('test.messages.currentEnvironment', wsl=is_wsl, remote=is_remote, gui=gui_available)) + debug_log(t('test.messages.forceWebVariable', value=force_web_env or t('test.messages.notSet'))) if force_web_env in ("true", "1", "yes", "on"): - debug_log("✅ FORCE_WEB 已啟用,將強制使用 Web UI") + debug_log(t('test.messages.forceWebEnabled')) elif is_wsl: - debug_log("✅ WSL 環境,將使用 Web UI 並支援 Windows 瀏覽器啟動") + debug_log(t('test.messages.wslEnvironmentWebUiBrowser')) elif not is_remote and gui_available: - debug_log("ℹ️ 本地 GUI 環境,將使用 Qt GUI") - debug_log("💡 可設定 FORCE_WEB=true 強制使用 Web UI 進行測試") + debug_log(t('test.messages.localGuiEnvironmentQtGui')) + debug_log(t('test.messages.forceWebTestHint')) else: - debug_log("ℹ️ 將自動使用 Web UI(遠端環境或 GUI 不可用)") + debug_log(t('test.messages.autoWebUiRemoteOrNoGui')) return True - + except Exception as e: - debug_log(f"❌ 環境變數測試失敗: {e}") + debug_log(t('test.messages.environmentVariableTestFailed', error=str(e))) return False def interactive_demo(session_info): """Run interactive demo with the Web UI""" - debug_log(f"\n🌐 Web UI 互動測試模式") + debug_log(t('test.messages.webUiInteractiveTestMode')) debug_log("=" * 50) - debug_log(f"服務器地址: {session_info['url']}") # 簡化輸出,只顯示服務器地址 - debug_log("\n📖 操作指南:") - debug_log(" 1. 在瀏覽器中開啟上面的服務器地址") - debug_log(" 2. 嘗試以下功能:") - debug_log(" - 點擊 '顯示命令區塊' 按鈕") - debug_log(" - 輸入命令如 'echo Hello World' 並執行") - debug_log(" - 在回饋區域輸入文字") - debug_log(" - 使用 Ctrl+Enter 提交回饋") - debug_log(" 3. 測試 WebSocket 即時通訊功能") - debug_log(" 4. 測試頁面持久性(提交反饋後頁面不關閉)") - debug_log("\n⌨️ 控制選項:") - debug_log(" - 按 Enter 繼續運行") - debug_log(" - 輸入 'q' 或 'quit' 停止服務器") + debug_log(t('test.messages.serverAddress', url=session_info['url'])) # 簡化輸出,只顯示服務器地址 + debug_log(t('test.messages.operationGuide')) + debug_log(t('test.messages.openServerInBrowser')) + debug_log(t('test.messages.tryFollowingFeatures')) + debug_log(t('test.messages.clickShowCommandBlock')) + debug_log(t('test.messages.inputCommandAndExecute')) + debug_log(t('test.messages.inputTextInFeedbackArea')) + debug_log(t('test.messages.useCtrlEnterSubmit')) + debug_log(t('test.messages.testWebSocketRealtime')) + debug_log(t('test.messages.testPagePersistence')) + debug_log(t('test.messages.controlOptions')) + debug_log(t('test.messages.pressEnterContinue')) + debug_log(t('test.messages.inputQuitToStop')) while True: try: user_input = input("\n>>> ").strip().lower() if user_input in ['q', 'quit', 'exit']: - debug_log("🛑 停止服務器...") + debug_log(t('test.messages.stoppingServer')) break elif user_input == '': - debug_log(f"🔄 服務器持續運行在: {session_info['url']}") - debug_log(" 瀏覽器應該仍可正常訪問") + debug_log(t('test.messages.serverContinuesRunning', url=session_info['url'])) + debug_log(t('test.messages.browserShouldStillAccess')) else: - debug_log("❓ 未知命令。按 Enter 繼續運行,或輸入 'q' 退出") + debug_log(t('test.messages.unknownCommand')) except KeyboardInterrupt: - debug_log("\n🛑 收到中斷信號,停止服務器...") + debug_log(t('test.messages.interruptSignalReceived')) break - - debug_log("✅ Web UI 測試完成") + + debug_log(t('test.messages.webUiTestComplete')) if __name__ == "__main__": - debug_log("MCP Feedback Enhanced - Web UI 測試") + debug_log(t('test.messages.webUiTest')) debug_log("=" * 60) # Test environment detection @@ -351,25 +399,25 @@ if __name__ == "__main__": debug_log("\n" + "=" * 60) if env_test and params_test and env_web_test and mcp_test and web_test: - debug_log("🎊 所有測試完成!準備使用 MCP Feedback Enhanced") - debug_log("\n📖 使用方法:") - debug_log(" 1. 在 Cursor/Cline 中配置此 MCP 服務器") - debug_log(" 2. AI 助手會自動調用 interactive_feedback 工具") - debug_log(" 3. 根據環境自動選擇 GUI 或 Web UI") - debug_log(" 4. 提供回饋後繼續工作流程") - - debug_log("\n✨ Web UI 新功能:") - debug_log(" - 支援 SSH remote 開發環境") - debug_log(" - 現代化深色主題界面") - debug_log(" - WebSocket 即時通訊") - debug_log(" - 自動瀏覽器啟動") - debug_log(" - 命令執行和即時輸出") - - debug_log("\n✅ 測試完成 - 系統已準備就緒!") + debug_log(t('test.messages.allTestsComplete')) + debug_log(t('test.messages.usageInstructions')) + debug_log(t('test.messages.configureMcpServer')) + debug_log(t('test.messages.aiAssistantAutoCall')) + debug_log(t('test.messages.autoSelectGuiOrWebUi')) + debug_log(t('test.messages.provideFeedbackContinue')) + + debug_log(t('test.messages.webUiNewFeatures')) + debug_log(t('test.messages.sshRemoteSupport')) + debug_log(t('test.messages.modernDarkThemeInterface')) + debug_log(t('test.messages.webSocketRealtime')) + debug_log(t('test.messages.autoBrowserLaunch')) + debug_log(t('test.messages.commandExecutionRealtime')) + + debug_log(t('test.messages.testCompleteSystemReady')) if session_info: - debug_log(f"💡 您可以現在就在瀏覽器中測試: {session_info['url']}") - debug_log(" (服務器會繼續運行一小段時間)") + debug_log(t('test.messages.canTestInBrowserNow', url=session_info['url'])) + debug_log(t('test.messages.serverWillContinueRunning')) time.sleep(10) # Keep running for a short time for immediate testing else: - debug_log("❌ 部分測試失敗,請檢查錯誤信息") - sys.exit(1) \ No newline at end of file + debug_log(t('test.messages.someTestsFailed')) + sys.exit(1) \ No newline at end of file diff --git a/src/mcp_feedback_enhanced/web/static/js/app.js b/src/mcp_feedback_enhanced/web/static/js/app.js index e49aa56..1fb3502 100644 --- a/src/mcp_feedback_enhanced/web/static/js/app.js +++ b/src/mcp_feedback_enhanced/web/static/js/app.js @@ -1319,6 +1319,24 @@ class FeedbackApp { } console.log('設定載入完成,應用設定...'); + + // 同步語言設定到 i18nManager(確保 ui_settings.json 優先於 localStorage) + if (settings.language && window.i18nManager) { + const currentI18nLanguage = window.i18nManager.getCurrentLanguage(); + console.log(`檢查語言設定: ui_settings.json=${settings.language}, i18nManager=${currentI18nLanguage}`); + if (settings.language !== currentI18nLanguage) { + console.log(`🔄 同步語言設定: ${currentI18nLanguage} -> ${settings.language}`); + window.i18nManager.setLanguage(settings.language); + // 同步到 localStorage,確保一致性 + localStorage.setItem('language', settings.language); + console.log(`✅ 語言同步完成: ${settings.language}`); + } else { + console.log(`✅ 語言設定已同步: ${settings.language}`); + } + } else { + console.log(`⚠️ 語言同步跳過: settings.language=${settings.language}, i18nManager=${!!window.i18nManager}`); + } + this.applySettings(); } else { console.log('沒有找到設定,使用預設值'); @@ -1380,6 +1398,15 @@ class FeedbackApp { autoCloseToggle.classList.toggle('active', this.autoClose); } + // 應用語言設定 + if (this.currentLanguage && window.i18nManager) { + const currentI18nLanguage = window.i18nManager.getCurrentLanguage(); + if (this.currentLanguage !== currentI18nLanguage) { + console.log(`應用語言設定: ${currentI18nLanguage} -> ${this.currentLanguage}`); + window.i18nManager.setLanguage(this.currentLanguage); + } + } + // 應用圖片設定 if (this.imageSizeLimitSelect) { this.imageSizeLimitSelect.value = this.imageSizeLimit.toString(); @@ -1612,7 +1639,13 @@ class FeedbackApp { window.i18nManager.setLanguage(lang); } + // 同步到 localStorage,確保一致性 + localStorage.setItem('language', lang); + + // 保存到 ui_settings.json this.saveSettings(); + + console.log(`語言已切換到: ${lang}`); } handleCombinedMode() { diff --git a/src/mcp_feedback_enhanced/web/static/js/i18n.js b/src/mcp_feedback_enhanced/web/static/js/i18n.js index 27ad8b4..9bd4d42 100644 --- a/src/mcp_feedback_enhanced/web/static/js/i18n.js +++ b/src/mcp_feedback_enhanced/web/static/js/i18n.js @@ -18,17 +18,20 @@ class I18nManager { const savedLanguage = localStorage.getItem('language'); if (savedLanguage) { this.currentLanguage = savedLanguage; + console.log(`i18nManager 從 localStorage 載入語言: ${savedLanguage}`); + } else { + console.log(`i18nManager 使用默認語言: ${this.currentLanguage}`); } // 載入翻譯數據 await this.loadTranslations(); - + // 應用翻譯 this.applyTranslations(); - + // 設置語言選擇器 this.setupLanguageSelectors(); - + // 延遲一點再更新動態內容,確保應用程式已初始化 setTimeout(() => { this.updateDynamicContent(); @@ -119,11 +122,12 @@ class I18nManager { } setLanguage(language) { + console.log(`🔄 i18nManager.setLanguage() 被調用: ${this.currentLanguage} -> ${language}`); if (this.translations[language]) { this.currentLanguage = language; localStorage.setItem('language', language); this.applyTranslations(); - + // 更新語言選擇器(只更新設定頁面的) const selector = document.getElementById('settingsLanguageSelect'); if (selector) { @@ -132,10 +136,10 @@ class I18nManager { // 更新 HTML lang 屬性 document.documentElement.lang = language; - - console.log('語言已切換到:', language); + + console.log(`✅ i18nManager 語言已切換到: ${language}`); } else { - console.warn('不支援的語言:', language); + console.warn(`❌ i18nManager 不支援的語言: ${language}`); } }