mirror of
https://github.com/Minidoracat/mcp-feedback-enhanced.git
synced 2025-07-27 02:22:26 +08:00
✨ Enhance auto-focus feature with settings configuration
• Added configurable auto-focus option in settings window • Auto-focus now defaults to enabled but can be toggled off • Added configuration management for auto_focus_enabled setting • Enhanced FeedbackWindow to respect auto-focus preference • Added UI controls in SettingsTab with modern switch component • Implemented proper configuration save/load with debug logging • Added i18n support for auto-focus setting in all languages: - English: 'Auto-focus input box when window opens' - 繁體中文: '窗口打開時自動聚焦到輸入框' - 简体中文: '窗口打开时自动聚焦到输入框' This enhancement makes the auto-focus feature more user-friendly by allowing users to choose their preferred input behavior.
This commit is contained in:
parent
747270b43a
commit
75cc0dbe8a
@ -1,321 +1,322 @@
|
||||
{
|
||||
"meta": {
|
||||
"language": "en",
|
||||
"displayName": "English",
|
||||
"author": "Minidoracat",
|
||||
"version": "1.0.0",
|
||||
"lastUpdate": "2025-01-31"
|
||||
},
|
||||
"app": {
|
||||
"title": "Interactive Feedback Collection",
|
||||
"projectDirectory": "Project Directory",
|
||||
"language": "Language",
|
||||
"settings": "Settings",
|
||||
"confirmCancel": "Confirm Cancel",
|
||||
"confirmCancelMessage": "Are you sure you want to cancel feedback? All input content will be lost.",
|
||||
"layoutChangeTitle": "Interface Layout Change",
|
||||
"layoutChangeMessage": "Layout mode has been changed and requires reloading the interface to take effect.\nReload now?"
|
||||
},
|
||||
"tabs": {
|
||||
"summary": "📋 AI Summary",
|
||||
"feedback": "💬 Feedback",
|
||||
"command": "⚡ Command",
|
||||
"language": "⚙️ Settings",
|
||||
"images": "🖼️ Images",
|
||||
"about": "ℹ️ About"
|
||||
},
|
||||
"about": {
|
||||
"appInfo": "Application Information",
|
||||
"version": "Version",
|
||||
"description": "A powerful MCP server that provides human-in-the-loop interactive feedback functionality for AI-assisted development tools. Supports dual interfaces (Qt GUI and Web UI) with rich features including image upload, command execution, and multi-language support.",
|
||||
"projectLinks": "Project Links",
|
||||
"githubProject": "GitHub Project",
|
||||
"visitGithub": "Visit GitHub",
|
||||
"contact": "Contact & Support",
|
||||
"discordSupport": "Discord Support",
|
||||
"joinDiscord": "Join Discord",
|
||||
"contactDescription": "For technical support, issue reports, or feature suggestions, feel free to contact us through Discord community or GitHub Issues.",
|
||||
"thanks": "Thanks & Contributions",
|
||||
"thanksText": "Special thanks to the original author Fábio Ferreira (@fabiomlferreira) for creating the original interactive-feedback-mcp project.\n\nThis enhanced version is developed and maintained by Minidoracat, who has significantly expanded the project with GUI interface, image support, multi-language capabilities, and many other improvements.\n\nAlso thanks to sanshao85's mcp-feedback-collector project for UI design inspiration.\n\nOpen source collaboration makes technology better!"
|
||||
},
|
||||
"feedback": {
|
||||
"title": "Your Feedback",
|
||||
"description": "Please describe your thoughts, suggestions, or modifications needed for the AI's work.",
|
||||
"placeholder": "Please enter your feedback, suggestions, or questions here...\n\n💡 Tips:\n• Press Ctrl+Enter (numpad supported) to submit quickly\n• Press Ctrl+V to paste images from clipboard",
|
||||
"emptyTitle": "Feedback Content Empty",
|
||||
"emptyMessage": "Please enter feedback content before submitting. You can describe your thoughts, suggestions, or areas that need modification.",
|
||||
"outputPlaceholder": "Command output will appear here..."
|
||||
},
|
||||
"summary": {
|
||||
"title": "AI Work Summary",
|
||||
"description": "Below is the work content that AI has just completed for you. Please review and provide feedback.",
|
||||
"testDescription": "Below is the message content replied by AI. Please review and provide feedback."
|
||||
},
|
||||
"command": {
|
||||
"title": "Command Execution",
|
||||
"description": "You can execute commands to verify results or gather more information.",
|
||||
"placeholder": "Enter command to execute...",
|
||||
"output": "Command Output",
|
||||
"outputPlaceholder": "Command output will appear here...",
|
||||
"run": "▶️ Run",
|
||||
"terminate": "⏹️ Stop"
|
||||
},
|
||||
"images": {
|
||||
"title": "🖼️ Image Attachments (Optional)",
|
||||
"select": "Select Files",
|
||||
"paste": "Clipboard",
|
||||
"clear": "Clear",
|
||||
"status": "{count} images selected",
|
||||
"statusWithSize": "{count} images selected (Total {size})",
|
||||
"dragHint": "🎯 Drag images here or press Ctrl+V/Cmd+V to paste from clipboard (PNG, JPG, JPEG, GIF, BMP, WebP)",
|
||||
"deleteConfirm": "Are you sure you want to remove image \"{filename}\"?",
|
||||
"deleteTitle": "Confirm Delete",
|
||||
"sizeWarning": "Image file size cannot exceed 1MB",
|
||||
"formatError": "Unsupported image format",
|
||||
"paste_images": "📋 Paste from Clipboard",
|
||||
"paste_failed": "Paste failed, no image in clipboard",
|
||||
"paste_no_image": "No image in clipboard to paste",
|
||||
"paste_image_from_textarea": "Image intelligently pasted from text area to image area",
|
||||
"images_clear": "Clear all images",
|
||||
"settings": {
|
||||
"title": "Image Settings",
|
||||
"sizeLimit": "Image Size Limit",
|
||||
"sizeLimitOptions": {
|
||||
"unlimited": "Unlimited",
|
||||
"1mb": "1MB",
|
||||
"3mb": "3MB",
|
||||
"5mb": "5MB"
|
||||
},
|
||||
"base64Detail": "Base64 Compatibility Mode",
|
||||
"base64DetailHelp": "When enabled, includes complete Base64 image data in text to improve compatibility with AI models ",
|
||||
"base64Warning": "⚠️ Increases transmission size",
|
||||
"compatibilityHint": "💡 Images not recognized correctly?",
|
||||
"enableBase64Hint": "Try enabling Base64 compatibility mode"
|
||||
"meta": {
|
||||
"language": "en",
|
||||
"displayName": "English",
|
||||
"author": "Minidoracat",
|
||||
"version": "1.0.0",
|
||||
"lastUpdate": "2025-01-31"
|
||||
},
|
||||
"app": {
|
||||
"title": "Interactive Feedback Collection",
|
||||
"projectDirectory": "Project Directory",
|
||||
"language": "Language",
|
||||
"settings": "Settings",
|
||||
"confirmCancel": "Confirm Cancel",
|
||||
"confirmCancelMessage": "Are you sure you want to cancel feedback? All input content will be lost.",
|
||||
"layoutChangeTitle": "Interface Layout Change",
|
||||
"layoutChangeMessage": "Layout mode has been changed and requires reloading the interface to take effect.\nReload now?"
|
||||
},
|
||||
"tabs": {
|
||||
"summary": "📋 AI Summary",
|
||||
"feedback": "💬 Feedback",
|
||||
"command": "⚡ Command",
|
||||
"language": "⚙️ Settings",
|
||||
"images": "🖼️ Images",
|
||||
"about": "ℹ️ About"
|
||||
},
|
||||
"about": {
|
||||
"appInfo": "Application Information",
|
||||
"version": "Version",
|
||||
"description": "A powerful MCP server that provides human-in-the-loop interactive feedback functionality for AI-assisted development tools. Supports dual interfaces (Qt GUI and Web UI) with rich features including image upload, command execution, and multi-language support.",
|
||||
"projectLinks": "Project Links",
|
||||
"githubProject": "GitHub Project",
|
||||
"visitGithub": "Visit GitHub",
|
||||
"contact": "Contact & Support",
|
||||
"discordSupport": "Discord Support",
|
||||
"joinDiscord": "Join Discord",
|
||||
"contactDescription": "For technical support, issue reports, or feature suggestions, feel free to contact us through Discord community or GitHub Issues.",
|
||||
"thanks": "Thanks & Contributions",
|
||||
"thanksText": "Special thanks to the original author Fábio Ferreira (@fabiomlferreira) for creating the original interactive-feedback-mcp project.\n\nThis enhanced version is developed and maintained by Minidoracat, who has significantly expanded the project with GUI interface, image support, multi-language capabilities, and many other improvements.\n\nAlso thanks to sanshao85's mcp-feedback-collector project for UI design inspiration.\n\nOpen source collaboration makes technology better!"
|
||||
},
|
||||
"feedback": {
|
||||
"title": "Your Feedback",
|
||||
"description": "Please describe your thoughts, suggestions, or modifications needed for the AI's work.",
|
||||
"placeholder": "Please enter your feedback, suggestions, or questions here...\n\n💡 Tips:\n• Press Ctrl+Enter (numpad supported) to submit quickly\n• Press Ctrl+V to paste images from clipboard",
|
||||
"emptyTitle": "Feedback Content Empty",
|
||||
"emptyMessage": "Please enter feedback content before submitting. You can describe your thoughts, suggestions, or areas that need modification.",
|
||||
"outputPlaceholder": "Command output will appear here..."
|
||||
},
|
||||
"summary": {
|
||||
"title": "AI Work Summary",
|
||||
"description": "Below is the work content that AI has just completed for you. Please review and provide feedback.",
|
||||
"testDescription": "Below is the message content replied by AI. Please review and provide feedback."
|
||||
},
|
||||
"command": {
|
||||
"title": "Command Execution",
|
||||
"description": "You can execute commands to verify results or gather more information.",
|
||||
"placeholder": "Enter command to execute...",
|
||||
"output": "Command Output",
|
||||
"outputPlaceholder": "Command output will appear here...",
|
||||
"run": "▶️ Run",
|
||||
"terminate": "⏹️ Stop"
|
||||
},
|
||||
"images": {
|
||||
"title": "🖼️ Image Attachments (Optional)",
|
||||
"select": "Select Files",
|
||||
"paste": "Clipboard",
|
||||
"clear": "Clear",
|
||||
"status": "{count} images selected",
|
||||
"statusWithSize": "{count} images selected (Total {size})",
|
||||
"dragHint": "🎯 Drag images here or press Ctrl+V/Cmd+V to paste from clipboard (PNG, JPG, JPEG, GIF, BMP, WebP)",
|
||||
"deleteConfirm": "Are you sure you want to remove image \"{filename}\"?",
|
||||
"deleteTitle": "Confirm Delete",
|
||||
"sizeWarning": "Image file size cannot exceed 1MB",
|
||||
"formatError": "Unsupported image format",
|
||||
"paste_images": "📋 Paste from Clipboard",
|
||||
"paste_failed": "Paste failed, no image in clipboard",
|
||||
"paste_no_image": "No image in clipboard to paste",
|
||||
"paste_image_from_textarea": "Image intelligently pasted from text area to image area",
|
||||
"images_clear": "Clear all images",
|
||||
"settings": {
|
||||
"title": "Image Settings",
|
||||
"sizeLimit": "Image Size Limit",
|
||||
"sizeLimitOptions": {
|
||||
"unlimited": "Unlimited",
|
||||
"1mb": "1MB",
|
||||
"3mb": "3MB",
|
||||
"5mb": "5MB"
|
||||
},
|
||||
"base64Detail": "Base64 Compatibility Mode",
|
||||
"base64DetailHelp": "When enabled, includes complete Base64 image data in text to improve compatibility with AI models ",
|
||||
"base64Warning": "⚠️ Increases transmission size",
|
||||
"compatibilityHint": "💡 Images not recognized correctly?",
|
||||
"enableBase64Hint": "Try enabling Base64 compatibility mode"
|
||||
},
|
||||
"sizeLimitExceeded": "Image {filename} size is {size}, exceeds {limit} limit!",
|
||||
"sizeLimitExceededAdvice": "Please compress the image using image editing software, or adjust the image size limit setting."
|
||||
},
|
||||
"sizeLimitExceeded": "Image {filename} size is {size}, exceeds {limit} limit!",
|
||||
"sizeLimitExceededAdvice": "Please compress the image using image editing software, or adjust the image size limit setting."
|
||||
},
|
||||
"language": {
|
||||
"settings": "Language Settings",
|
||||
"selector": "🌐 Language Selection",
|
||||
"description": "Choose your preferred interface language. Language changes take effect immediately."
|
||||
},
|
||||
"settings": {
|
||||
"title": "Application Settings",
|
||||
"language": {
|
||||
"title": "Language Settings",
|
||||
"selector": "🌐 Language Selection"
|
||||
"settings": "Language Settings",
|
||||
"selector": "🌐 Language Selection",
|
||||
"description": "Choose your preferred interface language. Language changes take effect immediately."
|
||||
},
|
||||
"layout": {
|
||||
"title": "Interface Layout",
|
||||
"separateMode": "Separate Mode",
|
||||
"separateModeDescription": "AI summary and feedback are in separate tabs",
|
||||
"combinedVertical": "Combined Mode (Vertical Layout)",
|
||||
"combinedVerticalDescription": "AI summary on top, feedback input below, both on the same page",
|
||||
"combinedHorizontal": "Combined Mode (Horizontal Layout)",
|
||||
"combinedHorizontalDescription": "AI summary on left, feedback input on right, expanding summary viewing area"
|
||||
},
|
||||
"window": {
|
||||
"title": "Window Positioning",
|
||||
"alwaysCenter": "Always show window at primary screen center"
|
||||
},
|
||||
"reset": {
|
||||
"title": "Reset Settings",
|
||||
"button": "Reset Settings",
|
||||
"confirmTitle": "Confirm Reset Settings",
|
||||
"confirmMessage": "Are you sure you want to reset all settings? This will clear all saved preferences and restore to default state.",
|
||||
"successTitle": "Reset Successful",
|
||||
"successMessage": "All settings have been successfully reset to default values.",
|
||||
"errorTitle": "Reset Failed",
|
||||
"errorMessage": "Error occurred while resetting settings: {error}"
|
||||
}
|
||||
},
|
||||
"timeout": {
|
||||
"enable": "Auto Close",
|
||||
"enableTooltip": "When enabled, the interface will automatically close after the specified time",
|
||||
"duration": {
|
||||
"label": "Timeout Duration",
|
||||
"description": "Set the auto-close time (30 seconds - 2 hours)"
|
||||
},
|
||||
"seconds": "seconds",
|
||||
"remaining": "Time Remaining",
|
||||
"expired": "Time Expired",
|
||||
"autoCloseMessage": "Interface will automatically close in {seconds} seconds",
|
||||
"settings": {
|
||||
"title": "Timeout Settings",
|
||||
"description": "When enabled, the interface will automatically close after the specified time. The countdown timer will be displayed in the header area."
|
||||
"title": "Application Settings",
|
||||
"language": {
|
||||
"title": "Language Settings",
|
||||
"selector": "🌐 Language Selection"
|
||||
},
|
||||
"layout": {
|
||||
"title": "Interface Layout",
|
||||
"separateMode": "Separate Mode",
|
||||
"separateModeDescription": "AI summary and feedback are in separate tabs",
|
||||
"combinedVertical": "Combined Mode (Vertical Layout)",
|
||||
"combinedVerticalDescription": "AI summary on top, feedback input below, both on the same page",
|
||||
"combinedHorizontal": "Combined Mode (Horizontal Layout)",
|
||||
"combinedHorizontalDescription": "AI summary on left, feedback input on right, expanding summary viewing area"
|
||||
},
|
||||
"window": {
|
||||
"title": "Window Positioning",
|
||||
"alwaysCenter": "Always show window at primary screen center",
|
||||
"autoFocus": "Auto-focus input box when window opens"
|
||||
},
|
||||
"reset": {
|
||||
"title": "Reset Settings",
|
||||
"button": "Reset Settings",
|
||||
"confirmTitle": "Confirm Reset Settings",
|
||||
"confirmMessage": "Are you sure you want to reset all settings? This will clear all saved preferences and restore to default state.",
|
||||
"successTitle": "Reset Successful",
|
||||
"successMessage": "All settings have been successfully reset to default values.",
|
||||
"errorTitle": "Reset Failed",
|
||||
"errorMessage": "Error occurred while resetting settings: {error}"
|
||||
}
|
||||
},
|
||||
"timeout": {
|
||||
"enable": "Auto Close",
|
||||
"enableTooltip": "When enabled, the interface will automatically close after the specified time",
|
||||
"duration": {
|
||||
"label": "Timeout Duration",
|
||||
"description": "Set the auto-close time (30 seconds - 2 hours)"
|
||||
},
|
||||
"seconds": "seconds",
|
||||
"remaining": "Time Remaining",
|
||||
"expired": "Time Expired",
|
||||
"autoCloseMessage": "Interface will automatically close in {seconds} seconds",
|
||||
"settings": {
|
||||
"title": "Timeout Settings",
|
||||
"description": "When enabled, the interface will automatically close after the specified time. The countdown timer will be displayed in the header area."
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"submit": "Submit Feedback",
|
||||
"cancel": "Cancel",
|
||||
"close": "Close",
|
||||
"clear": "Clear",
|
||||
"submitFeedback": "✅ Submit Feedback",
|
||||
"selectFiles": "📁 Select Files",
|
||||
"pasteClipboard": "📋 Clipboard",
|
||||
"clearAll": "✕ Clear",
|
||||
"runCommand": "▶️ Run"
|
||||
},
|
||||
"status": {
|
||||
"feedbackSubmitted": "Feedback submitted successfully!",
|
||||
"feedbackCancelled": "Feedback cancelled.",
|
||||
"timeoutMessage": "Feedback timeout",
|
||||
"errorOccurred": "Error occurred",
|
||||
"loading": "Loading...",
|
||||
"connecting": "Connecting...",
|
||||
"connected": "Connected",
|
||||
"disconnected": "Disconnected",
|
||||
"uploading": "Uploading...",
|
||||
"uploadSuccess": "Upload successful",
|
||||
"uploadFailed": "Upload failed",
|
||||
"commandRunning": "Command running...",
|
||||
"commandFinished": "Command finished",
|
||||
"pasteSuccess": "Image pasted from clipboard",
|
||||
"pasteFailed": "Failed to get image from clipboard",
|
||||
"invalidFileType": "Unsupported file type",
|
||||
"fileTooLarge": "File too large (max 1MB)"
|
||||
},
|
||||
"errors": {
|
||||
"title": "Error",
|
||||
"warning": "Warning",
|
||||
"info": "Information",
|
||||
"interfaceReloadError": "Error occurred while reloading interface: {error}",
|
||||
"imageSaveEmpty": "Saved image file is empty! Location: {path}",
|
||||
"imageSaveFailed": "Image save failed!",
|
||||
"clipboardSaveFailed": "Failed to save clipboard image!",
|
||||
"noValidImage": "No valid image in clipboard!",
|
||||
"noImageContent": "No image content in clipboard!",
|
||||
"emptyFile": "Image {filename} is an empty file!",
|
||||
"loadImageFailed": "Failed to load image {filename}:\n{error}",
|
||||
"dragInvalidFiles": "Please drag valid image files!",
|
||||
"confirmClearAll": "Are you sure you want to clear all {count} images?",
|
||||
"confirmClearTitle": "Confirm Clear",
|
||||
"fileSizeExceeded": "Image {filename} size is {size}MB, exceeding 1MB limit!\nRecommend using image editing software to compress before uploading.",
|
||||
"dataSizeExceeded": "Image {filename} data size exceeds 1MB limit!"
|
||||
},
|
||||
"languageSelector": "🌐 Language",
|
||||
"languageNames": {
|
||||
"zhTw": "繁體中文",
|
||||
"en": "English",
|
||||
"zhCn": "简体中文"
|
||||
},
|
||||
"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!",
|
||||
"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}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"submit": "Submit Feedback",
|
||||
"cancel": "Cancel",
|
||||
"close": "Close",
|
||||
"clear": "Clear",
|
||||
"submitFeedback": "✅ Submit Feedback",
|
||||
"selectFiles": "📁 Select Files",
|
||||
"pasteClipboard": "📋 Clipboard",
|
||||
"clearAll": "✕ Clear",
|
||||
"runCommand": "▶️ Run"
|
||||
},
|
||||
"status": {
|
||||
"feedbackSubmitted": "Feedback submitted successfully!",
|
||||
"feedbackCancelled": "Feedback cancelled.",
|
||||
"timeoutMessage": "Feedback timeout",
|
||||
"errorOccurred": "Error occurred",
|
||||
"loading": "Loading...",
|
||||
"connecting": "Connecting...",
|
||||
"connected": "Connected",
|
||||
"disconnected": "Disconnected",
|
||||
"uploading": "Uploading...",
|
||||
"uploadSuccess": "Upload successful",
|
||||
"uploadFailed": "Upload failed",
|
||||
"commandRunning": "Command running...",
|
||||
"commandFinished": "Command finished",
|
||||
"pasteSuccess": "Image pasted from clipboard",
|
||||
"pasteFailed": "Failed to get image from clipboard",
|
||||
"invalidFileType": "Unsupported file type",
|
||||
"fileTooLarge": "File too large (max 1MB)"
|
||||
},
|
||||
"errors": {
|
||||
"title": "Error",
|
||||
"warning": "Warning",
|
||||
"info": "Information",
|
||||
"interfaceReloadError": "Error occurred while reloading interface: {error}",
|
||||
"imageSaveEmpty": "Saved image file is empty! Location: {path}",
|
||||
"imageSaveFailed": "Image save failed!",
|
||||
"clipboardSaveFailed": "Failed to save clipboard image!",
|
||||
"noValidImage": "No valid image in clipboard!",
|
||||
"noImageContent": "No image content in clipboard!",
|
||||
"emptyFile": "Image {filename} is an empty file!",
|
||||
"loadImageFailed": "Failed to load image {filename}:\n{error}",
|
||||
"dragInvalidFiles": "Please drag valid image files!",
|
||||
"confirmClearAll": "Are you sure you want to clear all {count} images?",
|
||||
"confirmClearTitle": "Confirm Clear",
|
||||
"fileSizeExceeded": "Image {filename} size is {size}MB, exceeding 1MB limit!\nRecommend using image editing software to compress before uploading.",
|
||||
"dataSizeExceeded": "Image {filename} data size exceeds 1MB limit!"
|
||||
},
|
||||
"languageSelector": "🌐 Language",
|
||||
"languageNames": {
|
||||
"zhTw": "繁體中文",
|
||||
"en": "English",
|
||||
"zhCn": "简体中文"
|
||||
},
|
||||
"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!",
|
||||
"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}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,316 +1,317 @@
|
||||
{
|
||||
"meta": {
|
||||
"language": "zh-CN",
|
||||
"displayName": "简体中文",
|
||||
"author": "Minidoracat",
|
||||
"version": "1.0.0",
|
||||
"lastUpdate": "2025-01-31"
|
||||
},
|
||||
"app": {
|
||||
"title": "交互式反馈收集",
|
||||
"projectDirectory": "项目目录",
|
||||
"language": "语言",
|
||||
"settings": "设置",
|
||||
"confirmCancel": "确认取消",
|
||||
"confirmCancelMessage": "确定要取消反馈吗?所有输入的内容将会丢失。",
|
||||
"layoutChangeTitle": "界面布局变更",
|
||||
"layoutChangeMessage": "布局模式已变更,需要重新加载界面才能生效。\n是否现在重新加载?"
|
||||
},
|
||||
"tabs": {
|
||||
"summary": "📋 AI 摘要",
|
||||
"feedback": "💬 反馈",
|
||||
"command": "⚡ 命令",
|
||||
"language": "⚙️ 设置",
|
||||
"images": "🖼️ 图片",
|
||||
"about": "ℹ️ 关于"
|
||||
},
|
||||
"feedback": {
|
||||
"title": "您的反馈",
|
||||
"description": "请描述您对 AI 工作结果的想法、建议或需要修改的地方。",
|
||||
"placeholder": "请在这里输入您的反馈、建议或问题...\n\n💡 小提示:\n• 按 Ctrl+Enter(支持数字键盘)可快速提交反馈\n• 按 Ctrl+V 可直接粘贴剪贴板图片",
|
||||
"emptyTitle": "反馈内容为空",
|
||||
"emptyMessage": "请先输入反馈内容再提交。您可以描述想法、建议或需要修改的地方。"
|
||||
},
|
||||
"summary": {
|
||||
"title": "AI 工作摘要",
|
||||
"description": "以下是 AI 刚才为您完成的工作内容,请检视并提供反馈。",
|
||||
"testDescription": "以下是 AI 回复的消息内容,请检视并提供反馈。"
|
||||
},
|
||||
"command": {
|
||||
"title": "命令执行",
|
||||
"description": "您可以执行命令来验证结果或收集更多信息。",
|
||||
"placeholder": "输入要执行的命令...",
|
||||
"output": "命令输出",
|
||||
"outputPlaceholder": "命令输出将在这里显示...",
|
||||
"run": "▶️ 执行",
|
||||
"terminate": "⏹️ 停止"
|
||||
},
|
||||
"images": {
|
||||
"title": "🖼️ 图片附件(可选)",
|
||||
"select": "选择文件",
|
||||
"paste": "剪贴板",
|
||||
"clear": "清除",
|
||||
"status": "已选择 {count} 张图片",
|
||||
"statusWithSize": "已选择 {count} 张图片 (总计 {size})",
|
||||
"dragHint": "🎯 拖拽图片到这里 或 按 Ctrl+V/Cmd+V 粘贴剪贴板图片 (PNG、JPG、JPEG、GIF、BMP、WebP)",
|
||||
"deleteConfirm": "确定要移除图片 \"{filename}\" 吗?",
|
||||
"deleteTitle": "确认删除",
|
||||
"sizeWarning": "图片文件大小不能超过 1MB",
|
||||
"formatError": "不支持的图片格式",
|
||||
"paste_images": "📋 从剪贴板粘贴",
|
||||
"paste_failed": "粘贴失败,剪贴板中没有图片",
|
||||
"paste_no_image": "剪贴板中没有图片可粘贴",
|
||||
"paste_image_from_textarea": "已将图片从文本框智能贴到图片区域",
|
||||
"images_clear": "清除所有图片",
|
||||
"meta": {
|
||||
"language": "zh-CN",
|
||||
"displayName": "简体中文",
|
||||
"author": "Minidoracat",
|
||||
"version": "1.0.0",
|
||||
"lastUpdate": "2025-01-31"
|
||||
},
|
||||
"app": {
|
||||
"title": "交互式反馈收集",
|
||||
"projectDirectory": "项目目录",
|
||||
"language": "语言",
|
||||
"settings": "设置",
|
||||
"confirmCancel": "确认取消",
|
||||
"confirmCancelMessage": "确定要取消反馈吗?所有输入的内容将会丢失。",
|
||||
"layoutChangeTitle": "界面布局变更",
|
||||
"layoutChangeMessage": "布局模式已变更,需要重新加载界面才能生效。\n是否现在重新加载?"
|
||||
},
|
||||
"tabs": {
|
||||
"summary": "📋 AI 摘要",
|
||||
"feedback": "💬 反馈",
|
||||
"command": "⚡ 命令",
|
||||
"language": "⚙️ 设置",
|
||||
"images": "🖼️ 图片",
|
||||
"about": "ℹ️ 关于"
|
||||
},
|
||||
"feedback": {
|
||||
"title": "您的反馈",
|
||||
"description": "请描述您对 AI 工作结果的想法、建议或需要修改的地方。",
|
||||
"placeholder": "请在这里输入您的反馈、建议或问题...\n\n💡 小提示:\n• 按 Ctrl+Enter(支持数字键盘)可快速提交反馈\n• 按 Ctrl+V 可直接粘贴剪贴板图片",
|
||||
"emptyTitle": "反馈内容为空",
|
||||
"emptyMessage": "请先输入反馈内容再提交。您可以描述想法、建议或需要修改的地方。"
|
||||
},
|
||||
"summary": {
|
||||
"title": "AI 工作摘要",
|
||||
"description": "以下是 AI 刚才为您完成的工作内容,请检视并提供反馈。",
|
||||
"testDescription": "以下是 AI 回复的消息内容,请检视并提供反馈。"
|
||||
},
|
||||
"command": {
|
||||
"title": "命令执行",
|
||||
"description": "您可以执行命令来验证结果或收集更多信息。",
|
||||
"placeholder": "输入要执行的命令...",
|
||||
"output": "命令输出",
|
||||
"outputPlaceholder": "命令输出将在这里显示...",
|
||||
"run": "▶️ 执行",
|
||||
"terminate": "⏹️ 停止"
|
||||
},
|
||||
"images": {
|
||||
"title": "🖼️ 图片附件(可选)",
|
||||
"select": "选择文件",
|
||||
"paste": "剪贴板",
|
||||
"clear": "清除",
|
||||
"status": "已选择 {count} 张图片",
|
||||
"statusWithSize": "已选择 {count} 张图片 (总计 {size})",
|
||||
"dragHint": "🎯 拖拽图片到这里 或 按 Ctrl+V/Cmd+V 粘贴剪贴板图片 (PNG、JPG、JPEG、GIF、BMP、WebP)",
|
||||
"deleteConfirm": "确定要移除图片 \"{filename}\" 吗?",
|
||||
"deleteTitle": "确认删除",
|
||||
"sizeWarning": "图片文件大小不能超过 1MB",
|
||||
"formatError": "不支持的图片格式",
|
||||
"paste_images": "📋 从剪贴板粘贴",
|
||||
"paste_failed": "粘贴失败,剪贴板中没有图片",
|
||||
"paste_no_image": "剪贴板中没有图片可粘贴",
|
||||
"paste_image_from_textarea": "已将图片从文本框智能贴到图片区域",
|
||||
"images_clear": "清除所有图片",
|
||||
"settings": {
|
||||
"title": "图片设置",
|
||||
"sizeLimit": "图片大小限制",
|
||||
"sizeLimitOptions": {
|
||||
"unlimited": "无限制",
|
||||
"1mb": "1MB",
|
||||
"3mb": "3MB",
|
||||
"5mb": "5MB"
|
||||
},
|
||||
"base64Detail": "Base64 兼容模式",
|
||||
"base64DetailHelp": "启用后会在文本中包含完整的 Base64 图片数据,提升部分 AI 模型的兼容性",
|
||||
"base64Warning": "⚠️ 会增加传输量",
|
||||
"compatibilityHint": "💡 图片无法正确识别?",
|
||||
"enableBase64Hint": "尝试启用 Base64 兼容模式"
|
||||
},
|
||||
"sizeLimitExceeded": "图片 {filename} 大小为 {size},超过 {limit} 限制!",
|
||||
"sizeLimitExceededAdvice": "建议使用图片编辑软件压缩后再上传,或调整图片大小限制设置。"
|
||||
},
|
||||
"settings": {
|
||||
"title": "图片设置",
|
||||
"sizeLimit": "图片大小限制",
|
||||
"sizeLimitOptions": {
|
||||
"unlimited": "无限制",
|
||||
"1mb": "1MB",
|
||||
"3mb": "3MB",
|
||||
"5mb": "5MB"
|
||||
},
|
||||
"base64Detail": "Base64 兼容模式",
|
||||
"base64DetailHelp": "启用后会在文本中包含完整的 Base64 图片数据,提升部分 AI 模型的兼容性",
|
||||
"base64Warning": "⚠️ 会增加传输量",
|
||||
"compatibilityHint": "💡 图片无法正确识别?",
|
||||
"enableBase64Hint": "尝试启用 Base64 兼容模式"
|
||||
"title": "应用设置",
|
||||
"language": {
|
||||
"title": "语言设置",
|
||||
"selector": "🌐 语言选择"
|
||||
},
|
||||
"layout": {
|
||||
"title": "界面布局",
|
||||
"separateMode": "分离模式",
|
||||
"separateModeDescription": "AI 摘要和反馈分别在不同页签",
|
||||
"combinedVertical": "合并模式(垂直布局)",
|
||||
"combinedVerticalDescription": "AI 摘要在上,反馈输入在下,摘要和反馈在同一页面",
|
||||
"combinedHorizontal": "合并模式(水平布局)",
|
||||
"combinedHorizontalDescription": "AI 摘要在左,反馈输入在右,增大摘要可视区域"
|
||||
},
|
||||
"window": {
|
||||
"title": "窗口定位",
|
||||
"alwaysCenter": "总是在主屏幕中心显示窗口",
|
||||
"autoFocus": "窗口打开时自动聚焦到输入框"
|
||||
},
|
||||
"reset": {
|
||||
"title": "重置设置",
|
||||
"button": "重置设置",
|
||||
"confirmTitle": "确认重置设置",
|
||||
"confirmMessage": "确定要重置所有设置吗?这将清除所有已保存的偏好设置并恢复到默认状态。",
|
||||
"successTitle": "重置成功",
|
||||
"successMessage": "所有设置已成功重置为默认值。",
|
||||
"errorTitle": "重置失败",
|
||||
"errorMessage": "重置设置时发生错误:{error}"
|
||||
}
|
||||
},
|
||||
"sizeLimitExceeded": "图片 {filename} 大小为 {size},超过 {limit} 限制!",
|
||||
"sizeLimitExceededAdvice": "建议使用图片编辑软件压缩后再上传,或调整图片大小限制设置。"
|
||||
},
|
||||
"settings": {
|
||||
"title": "应用设置",
|
||||
"language": {
|
||||
"title": "语言设置",
|
||||
"selector": "🌐 语言选择"
|
||||
"timeout": {
|
||||
"enable": "自动关闭",
|
||||
"enableTooltip": "启用后将在指定时间后自动关闭界面",
|
||||
"duration": {
|
||||
"label": "超时时间",
|
||||
"description": "设置自动关闭的时间(30秒 - 2小时)"
|
||||
},
|
||||
"seconds": "秒",
|
||||
"remaining": "剩余时间",
|
||||
"expired": "时间已到",
|
||||
"autoCloseMessage": "界面将在 {seconds} 秒后自动关闭",
|
||||
"settings": {
|
||||
"title": "超时设置",
|
||||
"description": "启用后,界面将在指定时间后自动关闭。倒数计时器会显示在顶部区域。"
|
||||
}
|
||||
},
|
||||
"layout": {
|
||||
"title": "界面布局",
|
||||
"separateMode": "分离模式",
|
||||
"separateModeDescription": "AI 摘要和反馈分别在不同页签",
|
||||
"combinedVertical": "合并模式(垂直布局)",
|
||||
"combinedVerticalDescription": "AI 摘要在上,反馈输入在下,摘要和反馈在同一页面",
|
||||
"combinedHorizontal": "合并模式(水平布局)",
|
||||
"combinedHorizontalDescription": "AI 摘要在左,反馈输入在右,增大摘要可视区域"
|
||||
"buttons": {
|
||||
"submit": "提交反馈",
|
||||
"cancel": "取消",
|
||||
"close": "关闭",
|
||||
"clear": "清除",
|
||||
"submitFeedback": "✅ 提交反馈",
|
||||
"selectFiles": "📁 选择文件",
|
||||
"pasteClipboard": "📋 剪贴板",
|
||||
"clearAll": "✕ 清除",
|
||||
"runCommand": "▶️ 执行"
|
||||
},
|
||||
"window": {
|
||||
"title": "窗口定位",
|
||||
"alwaysCenter": "总是在主屏幕中心显示窗口"
|
||||
"status": {
|
||||
"feedbackSubmitted": "反馈已成功提交!",
|
||||
"feedbackCancelled": "已取消反馈。",
|
||||
"timeoutMessage": "等待反馈超时",
|
||||
"errorOccurred": "发生错误",
|
||||
"loading": "加载中...",
|
||||
"connecting": "连接中...",
|
||||
"connected": "已连接",
|
||||
"disconnected": "连接中断",
|
||||
"uploading": "上传中...",
|
||||
"uploadSuccess": "上传成功",
|
||||
"uploadFailed": "上传失败",
|
||||
"commandRunning": "命令执行中...",
|
||||
"commandFinished": "命令执行完成",
|
||||
"pasteSuccess": "已从剪贴板粘贴图片",
|
||||
"pasteFailed": "无法从剪贴板获取图片",
|
||||
"invalidFileType": "不支持的文件类型",
|
||||
"fileTooLarge": "文件过大(最大 1MB)"
|
||||
},
|
||||
"reset": {
|
||||
"title": "重置设置",
|
||||
"button": "重置设置",
|
||||
"confirmTitle": "确认重置设置",
|
||||
"confirmMessage": "确定要重置所有设置吗?这将清除所有已保存的偏好设置并恢复到默认状态。",
|
||||
"successTitle": "重置成功",
|
||||
"successMessage": "所有设置已成功重置为默认值。",
|
||||
"errorTitle": "重置失败",
|
||||
"errorMessage": "重置设置时发生错误:{error}"
|
||||
"errors": {
|
||||
"title": "错误",
|
||||
"warning": "警告",
|
||||
"info": "提示",
|
||||
"interfaceReloadError": "重新加载界面时发生错误: {error}",
|
||||
"imageSaveEmpty": "保存的图片文件为空!位置: {path}",
|
||||
"imageSaveFailed": "图片保存失败!",
|
||||
"clipboardSaveFailed": "无法保存剪贴板图片!",
|
||||
"noValidImage": "剪贴板中没有有效的图片!",
|
||||
"noImageContent": "剪贴板中没有图片内容!",
|
||||
"emptyFile": "图片 {filename} 是空文件!",
|
||||
"loadImageFailed": "无法加载图片 {filename}:\n{error}",
|
||||
"dragInvalidFiles": "请拖拽有效的图片文件!",
|
||||
"confirmClearAll": "确定要清除所有 {count} 张图片吗?",
|
||||
"confirmClearTitle": "确认清除",
|
||||
"fileSizeExceeded": "图片 {filename} 大小为 {size}MB,超过 1MB 限制!\n建议使用图片编辑软件压缩后再上传。",
|
||||
"dataSizeExceeded": "图片 {filename} 数据大小超过 1MB 限制!"
|
||||
},
|
||||
"aiSummary": "AI 工作摘要",
|
||||
"languageSelector": "🌐 语言选择",
|
||||
"languageNames": {
|
||||
"zhTw": "繁體中文",
|
||||
"en": "English",
|
||||
"zhCn": "简体中文"
|
||||
},
|
||||
"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请测试这些功能并提供回馈!",
|
||||
"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": "应用程序信息",
|
||||
"version": "版本",
|
||||
"description": "一个强大的 MCP 服务器,为 AI 辅助开发工具提供人在回路的交互反馈功能。支持 Qt GUI 和 Web UI 双界面,并具备图片上传、命令执行、多语言等丰富功能。",
|
||||
"projectLinks": "项目链接",
|
||||
"githubProject": "GitHub 项目",
|
||||
"visitGithub": "访问 GitHub",
|
||||
"contact": "联系与支持",
|
||||
"discordSupport": "Discord 支持",
|
||||
"joinDiscord": "加入 Discord",
|
||||
"contactDescription": "如需技术支持、问题反馈或功能建议,欢迎通过 Discord 社群或 GitHub Issues 与我们联系。",
|
||||
"thanks": "致谢与贡献",
|
||||
"thanksText": "感谢原作者 Fábio Ferreira (@fabiomlferreira) 创建了原始的 interactive-feedback-mcp 项目。\n\n本增强版本由 Minidoracat 开发和维护,大幅扩展了项目功能,新增了 GUI 界面、图片支持、多语言能力以及许多其他改进功能。\n\n同时感谢 sanshao85 的 mcp-feedback-collector 项目提供的 UI 设计灵感。\n\n开源协作让技术变得更美好!"
|
||||
}
|
||||
},
|
||||
"timeout": {
|
||||
"enable": "自动关闭",
|
||||
"enableTooltip": "启用后将在指定时间后自动关闭界面",
|
||||
"duration": {
|
||||
"label": "超时时间",
|
||||
"description": "设置自动关闭的时间(30秒 - 2小时)"
|
||||
},
|
||||
"seconds": "秒",
|
||||
"remaining": "剩余时间",
|
||||
"expired": "时间已到",
|
||||
"autoCloseMessage": "界面将在 {seconds} 秒后自动关闭",
|
||||
"settings": {
|
||||
"title": "超时设置",
|
||||
"description": "启用后,界面将在指定时间后自动关闭。倒数计时器会显示在顶部区域。"
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"submit": "提交反馈",
|
||||
"cancel": "取消",
|
||||
"close": "关闭",
|
||||
"clear": "清除",
|
||||
"submitFeedback": "✅ 提交反馈",
|
||||
"selectFiles": "📁 选择文件",
|
||||
"pasteClipboard": "📋 剪贴板",
|
||||
"clearAll": "✕ 清除",
|
||||
"runCommand": "▶️ 执行"
|
||||
},
|
||||
"status": {
|
||||
"feedbackSubmitted": "反馈已成功提交!",
|
||||
"feedbackCancelled": "已取消反馈。",
|
||||
"timeoutMessage": "等待反馈超时",
|
||||
"errorOccurred": "发生错误",
|
||||
"loading": "加载中...",
|
||||
"connecting": "连接中...",
|
||||
"connected": "已连接",
|
||||
"disconnected": "连接中断",
|
||||
"uploading": "上传中...",
|
||||
"uploadSuccess": "上传成功",
|
||||
"uploadFailed": "上传失败",
|
||||
"commandRunning": "命令执行中...",
|
||||
"commandFinished": "命令执行完成",
|
||||
"pasteSuccess": "已从剪贴板粘贴图片",
|
||||
"pasteFailed": "无法从剪贴板获取图片",
|
||||
"invalidFileType": "不支持的文件类型",
|
||||
"fileTooLarge": "文件过大(最大 1MB)"
|
||||
},
|
||||
"errors": {
|
||||
"title": "错误",
|
||||
"warning": "警告",
|
||||
"info": "提示",
|
||||
"interfaceReloadError": "重新加载界面时发生错误: {error}",
|
||||
"imageSaveEmpty": "保存的图片文件为空!位置: {path}",
|
||||
"imageSaveFailed": "图片保存失败!",
|
||||
"clipboardSaveFailed": "无法保存剪贴板图片!",
|
||||
"noValidImage": "剪贴板中没有有效的图片!",
|
||||
"noImageContent": "剪贴板中没有图片内容!",
|
||||
"emptyFile": "图片 {filename} 是空文件!",
|
||||
"loadImageFailed": "无法加载图片 {filename}:\n{error}",
|
||||
"dragInvalidFiles": "请拖拽有效的图片文件!",
|
||||
"confirmClearAll": "确定要清除所有 {count} 张图片吗?",
|
||||
"confirmClearTitle": "确认清除",
|
||||
"fileSizeExceeded": "图片 {filename} 大小为 {size}MB,超过 1MB 限制!\n建议使用图片编辑软件压缩后再上传。",
|
||||
"dataSizeExceeded": "图片 {filename} 数据大小超过 1MB 限制!"
|
||||
},
|
||||
"aiSummary": "AI 工作摘要",
|
||||
"languageSelector": "🌐 语言选择",
|
||||
"languageNames": {
|
||||
"zhTw": "繁體中文",
|
||||
"en": "English",
|
||||
"zhCn": "简体中文"
|
||||
},
|
||||
"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请测试这些功能并提供回馈!",
|
||||
"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": "应用程序信息",
|
||||
"version": "版本",
|
||||
"description": "一个强大的 MCP 服务器,为 AI 辅助开发工具提供人在回路的交互反馈功能。支持 Qt GUI 和 Web UI 双界面,并具备图片上传、命令执行、多语言等丰富功能。",
|
||||
"projectLinks": "项目链接",
|
||||
"githubProject": "GitHub 项目",
|
||||
"visitGithub": "访问 GitHub",
|
||||
"contact": "联系与支持",
|
||||
"discordSupport": "Discord 支持",
|
||||
"joinDiscord": "加入 Discord",
|
||||
"contactDescription": "如需技术支持、问题反馈或功能建议,欢迎通过 Discord 社群或 GitHub Issues 与我们联系。",
|
||||
"thanks": "致谢与贡献",
|
||||
"thanksText": "感谢原作者 Fábio Ferreira (@fabiomlferreira) 创建了原始的 interactive-feedback-mcp 项目。\n\n本增强版本由 Minidoracat 开发和维护,大幅扩展了项目功能,新增了 GUI 界面、图片支持、多语言能力以及许多其他改进功能。\n\n同时感谢 sanshao85 的 mcp-feedback-collector 项目提供的 UI 设计灵感。\n\n开源协作让技术变得更美好!"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,316 +1,317 @@
|
||||
{
|
||||
"meta": {
|
||||
"language": "zh-TW",
|
||||
"displayName": "繁體中文",
|
||||
"author": "Minidoracat",
|
||||
"version": "1.0.0",
|
||||
"lastUpdate": "2025-01-31"
|
||||
},
|
||||
"app": {
|
||||
"title": "互動式回饋收集",
|
||||
"projectDirectory": "專案目錄",
|
||||
"language": "語言",
|
||||
"settings": "設定",
|
||||
"confirmCancel": "確認取消",
|
||||
"confirmCancelMessage": "確定要取消回饋嗎?所有輸入的內容將會遺失。",
|
||||
"layoutChangeTitle": "界面佈局變更",
|
||||
"layoutChangeMessage": "佈局模式已變更,需要重新載入界面才能生效。\n是否現在重新載入?"
|
||||
},
|
||||
"tabs": {
|
||||
"summary": "📋 AI 摘要",
|
||||
"feedback": "💬 回饋",
|
||||
"command": "⚡ 命令",
|
||||
"language": "⚙️ 設置",
|
||||
"images": "🖼️ 圖片",
|
||||
"about": "ℹ️ 關於"
|
||||
},
|
||||
"about": {
|
||||
"appInfo": "應用程式資訊",
|
||||
"version": "版本",
|
||||
"description": "一個強大的 MCP 伺服器,為 AI 輔助開發工具提供人在回路的互動回饋功能。支援 Qt GUI 和 Web UI 雙介面,並具備圖片上傳、命令執行、多語言等豐富功能。",
|
||||
"projectLinks": "專案連結",
|
||||
"githubProject": "GitHub 專案",
|
||||
"visitGithub": "訪問 GitHub",
|
||||
"contact": "聯繫與支援",
|
||||
"discordSupport": "Discord 支援",
|
||||
"joinDiscord": "加入 Discord",
|
||||
"contactDescription": "如需技術支援、問題回報或功能建議,歡迎透過 Discord 社群或 GitHub Issues 與我們聯繫。",
|
||||
"thanks": "致謝與貢獻",
|
||||
"thanksText": "感謝原作者 Fábio Ferreira (@fabiomlferreira) 創建了原始的 interactive-feedback-mcp 專案。\n\n本增強版本由 Minidoracat 開發和維護,大幅擴展了專案功能,新增了 GUI 介面、圖片支援、多語言能力以及許多其他改進功能。\n\n同時感謝 sanshao85 的 mcp-feedback-collector 專案提供的 UI 設計靈感。\n\n開源協作讓技術變得更美好!"
|
||||
},
|
||||
"feedback": {
|
||||
"title": "您的回饋",
|
||||
"description": "請描述您對 AI 工作結果的想法、建議或需要修改的地方。",
|
||||
"placeholder": "請在這裡輸入您的回饋、建議或問題...\n\n💡 小提示:\n• 按 Ctrl+Enter(支援數字鍵盤)可快速提交回饋\n• 按 Ctrl+V 可直接貼上剪貼簿圖片",
|
||||
"emptyTitle": "回饋內容為空",
|
||||
"emptyMessage": "請先輸入回饋內容再提交。您可以描述想法、建議或需要修改的地方。",
|
||||
"input": "您的回饋"
|
||||
},
|
||||
"summary": {
|
||||
"title": "AI 工作摘要",
|
||||
"description": "以下是 AI 剛才為您完成的工作內容,請檢視並提供回饋。",
|
||||
"testDescription": "以下是 AI 回復的訊息內容,請檢視並提供回饋。"
|
||||
},
|
||||
"command": {
|
||||
"title": "命令執行",
|
||||
"description": "您可以執行命令來驗證結果或收集更多資訊。",
|
||||
"input": "命令",
|
||||
"placeholder": "輸入要執行的命令...",
|
||||
"output": "命令輸出",
|
||||
"outputPlaceholder": "命令輸出將顯示在這裡...",
|
||||
"run": "▶️ 執行",
|
||||
"terminate": "⏹️ 終止"
|
||||
},
|
||||
"images": {
|
||||
"title": "🖼️ 圖片附件(可選)",
|
||||
"select": "選擇文件",
|
||||
"paste": "剪貼板",
|
||||
"clear": "清除",
|
||||
"status": "已選擇 {count} 張圖片",
|
||||
"statusWithSize": "已選擇 {count} 張圖片 (總計 {size})",
|
||||
"dragHint": "🎯 拖拽圖片到這裡 或 按 Ctrl+V/Cmd+V 貼上剪貼簿圖片 (PNG、JPG、JPEG、GIF、BMP、WebP)",
|
||||
"deleteConfirm": "確定要移除圖片 \"{filename}\" 嗎?",
|
||||
"deleteTitle": "確認刪除",
|
||||
"sizeWarning": "圖片文件大小不能超過 1MB",
|
||||
"formatError": "不支援的圖片格式",
|
||||
"paste_images": "📋 從剪貼簿貼上",
|
||||
"paste_failed": "貼上失敗,剪貼簿中沒有圖片",
|
||||
"paste_no_image": "剪貼簿中沒有圖片可貼上",
|
||||
"paste_image_from_textarea": "已將圖片從文字框智能貼到圖片區域",
|
||||
"images_clear": "清除所有圖片",
|
||||
"meta": {
|
||||
"language": "zh-TW",
|
||||
"displayName": "繁體中文",
|
||||
"author": "Minidoracat",
|
||||
"version": "1.0.0",
|
||||
"lastUpdate": "2025-01-31"
|
||||
},
|
||||
"app": {
|
||||
"title": "互動式回饋收集",
|
||||
"projectDirectory": "專案目錄",
|
||||
"language": "語言",
|
||||
"settings": "設定",
|
||||
"confirmCancel": "確認取消",
|
||||
"confirmCancelMessage": "確定要取消回饋嗎?所有輸入的內容將會遺失。",
|
||||
"layoutChangeTitle": "界面佈局變更",
|
||||
"layoutChangeMessage": "佈局模式已變更,需要重新載入界面才能生效。\n是否現在重新載入?"
|
||||
},
|
||||
"tabs": {
|
||||
"summary": "📋 AI 摘要",
|
||||
"feedback": "💬 回饋",
|
||||
"command": "⚡ 命令",
|
||||
"language": "⚙️ 設置",
|
||||
"images": "🖼️ 圖片",
|
||||
"about": "ℹ️ 關於"
|
||||
},
|
||||
"about": {
|
||||
"appInfo": "應用程式資訊",
|
||||
"version": "版本",
|
||||
"description": "一個強大的 MCP 伺服器,為 AI 輔助開發工具提供人在回路的互動回饋功能。支援 Qt GUI 和 Web UI 雙介面,並具備圖片上傳、命令執行、多語言等豐富功能。",
|
||||
"projectLinks": "專案連結",
|
||||
"githubProject": "GitHub 專案",
|
||||
"visitGithub": "訪問 GitHub",
|
||||
"contact": "聯繫與支援",
|
||||
"discordSupport": "Discord 支援",
|
||||
"joinDiscord": "加入 Discord",
|
||||
"contactDescription": "如需技術支援、問題回報或功能建議,歡迎透過 Discord 社群或 GitHub Issues 與我們聯繫。",
|
||||
"thanks": "致謝與貢獻",
|
||||
"thanksText": "感謝原作者 Fábio Ferreira (@fabiomlferreira) 創建了原始的 interactive-feedback-mcp 專案。\n\n本增強版本由 Minidoracat 開發和維護,大幅擴展了專案功能,新增了 GUI 介面、圖片支援、多語言能力以及許多其他改進功能。\n\n同時感謝 sanshao85 的 mcp-feedback-collector 專案提供的 UI 設計靈感。\n\n開源協作讓技術變得更美好!"
|
||||
},
|
||||
"feedback": {
|
||||
"title": "您的回饋",
|
||||
"description": "請描述您對 AI 工作結果的想法、建議或需要修改的地方。",
|
||||
"placeholder": "請在這裡輸入您的回饋、建議或問題...\n\n💡 小提示:\n• 按 Ctrl+Enter(支援數字鍵盤)可快速提交回饋\n• 按 Ctrl+V 可直接貼上剪貼簿圖片",
|
||||
"emptyTitle": "回饋內容為空",
|
||||
"emptyMessage": "請先輸入回饋內容再提交。您可以描述想法、建議或需要修改的地方。",
|
||||
"input": "您的回饋"
|
||||
},
|
||||
"summary": {
|
||||
"title": "AI 工作摘要",
|
||||
"description": "以下是 AI 剛才為您完成的工作內容,請檢視並提供回饋。",
|
||||
"testDescription": "以下是 AI 回復的訊息內容,請檢視並提供回饋。"
|
||||
},
|
||||
"command": {
|
||||
"title": "命令執行",
|
||||
"description": "您可以執行命令來驗證結果或收集更多資訊。",
|
||||
"input": "命令",
|
||||
"placeholder": "輸入要執行的命令...",
|
||||
"output": "命令輸出",
|
||||
"outputPlaceholder": "命令輸出將顯示在這裡...",
|
||||
"run": "▶️ 執行",
|
||||
"terminate": "⏹️ 終止"
|
||||
},
|
||||
"images": {
|
||||
"title": "🖼️ 圖片附件(可選)",
|
||||
"select": "選擇文件",
|
||||
"paste": "剪貼板",
|
||||
"clear": "清除",
|
||||
"status": "已選擇 {count} 張圖片",
|
||||
"statusWithSize": "已選擇 {count} 張圖片 (總計 {size})",
|
||||
"dragHint": "🎯 拖拽圖片到這裡 或 按 Ctrl+V/Cmd+V 貼上剪貼簿圖片 (PNG、JPG、JPEG、GIF、BMP、WebP)",
|
||||
"deleteConfirm": "確定要移除圖片 \"{filename}\" 嗎?",
|
||||
"deleteTitle": "確認刪除",
|
||||
"sizeWarning": "圖片文件大小不能超過 1MB",
|
||||
"formatError": "不支援的圖片格式",
|
||||
"paste_images": "📋 從剪貼簿貼上",
|
||||
"paste_failed": "貼上失敗,剪貼簿中沒有圖片",
|
||||
"paste_no_image": "剪貼簿中沒有圖片可貼上",
|
||||
"paste_image_from_textarea": "已將圖片從文字框智能貼到圖片區域",
|
||||
"images_clear": "清除所有圖片",
|
||||
"settings": {
|
||||
"title": "圖片設定",
|
||||
"sizeLimit": "圖片大小限制",
|
||||
"sizeLimitOptions": {
|
||||
"unlimited": "無限制",
|
||||
"1mb": "1MB",
|
||||
"3mb": "3MB",
|
||||
"5mb": "5MB"
|
||||
},
|
||||
"base64Detail": "Base64 相容模式",
|
||||
"base64DetailHelp": "啟用後會在文字中包含完整的 Base64 圖片資料,提升部分 AI 模型的相容性",
|
||||
"base64Warning": "⚠️ 會增加傳輸量",
|
||||
"compatibilityHint": "💡 圖片無法正確識別?",
|
||||
"enableBase64Hint": "嘗試啟用 Base64 相容模式"
|
||||
},
|
||||
"sizeLimitExceeded": "圖片 {filename} 大小為 {size},超過 {limit} 限制!",
|
||||
"sizeLimitExceededAdvice": "建議使用圖片編輯軟體壓縮後再上傳,或調整圖片大小限制設定。"
|
||||
},
|
||||
"timeout": {
|
||||
"enable": "自動關閉",
|
||||
"enableTooltip": "啟用後將在指定時間後自動關閉介面",
|
||||
"duration": {
|
||||
"label": "超時時間",
|
||||
"description": "設置自動關閉的時間(30秒 - 2小時)"
|
||||
},
|
||||
"seconds": "秒",
|
||||
"remaining": "剩餘時間",
|
||||
"expired": "時間已到",
|
||||
"autoCloseMessage": "介面將在 {seconds} 秒後自動關閉",
|
||||
"settings": {
|
||||
"title": "超時設置",
|
||||
"description": "啟用後,介面將在指定時間後自動關閉。倒數計時器會顯示在頂部區域。"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"title": "圖片設定",
|
||||
"sizeLimit": "圖片大小限制",
|
||||
"sizeLimitOptions": {
|
||||
"unlimited": "無限制",
|
||||
"1mb": "1MB",
|
||||
"3mb": "3MB",
|
||||
"5mb": "5MB"
|
||||
},
|
||||
"base64Detail": "Base64 相容模式",
|
||||
"base64DetailHelp": "啟用後會在文字中包含完整的 Base64 圖片資料,提升部分 AI 模型的相容性",
|
||||
"base64Warning": "⚠️ 會增加傳輸量",
|
||||
"compatibilityHint": "💡 圖片無法正確識別?",
|
||||
"enableBase64Hint": "嘗試啟用 Base64 相容模式"
|
||||
"title": "應用設置",
|
||||
"language": {
|
||||
"title": "語言設置",
|
||||
"selector": "🌐 語言選擇"
|
||||
},
|
||||
"layout": {
|
||||
"title": "界面佈局",
|
||||
"separateMode": "分離模式",
|
||||
"separateModeDescription": "AI 摘要和回饋分別在不同頁籤",
|
||||
"combinedVertical": "合併模式(垂直布局)",
|
||||
"combinedVerticalDescription": "AI 摘要在上,回饋輸入在下,摘要和回饋在同一頁面",
|
||||
"combinedHorizontal": "合併模式(水平布局)",
|
||||
"combinedHorizontalDescription": "AI 摘要在左,回饋輸入在右,增大摘要可視區域"
|
||||
},
|
||||
"window": {
|
||||
"title": "視窗定位",
|
||||
"alwaysCenter": "總是在主螢幕中心顯示視窗",
|
||||
"autoFocus": "窗口打開時自動聚焦到輸入框"
|
||||
},
|
||||
"reset": {
|
||||
"title": "重置設定",
|
||||
"button": "重置設定",
|
||||
"confirmTitle": "確認重置設定",
|
||||
"confirmMessage": "確定要重置所有設定嗎?這將清除所有已保存的偏好設定並恢復到預設狀態。",
|
||||
"successTitle": "重置成功",
|
||||
"successMessage": "所有設定已成功重置為預設值。",
|
||||
"errorTitle": "重置失敗",
|
||||
"errorMessage": "重置設定時發生錯誤:{error}"
|
||||
}
|
||||
},
|
||||
"sizeLimitExceeded": "圖片 {filename} 大小為 {size},超過 {limit} 限制!",
|
||||
"sizeLimitExceededAdvice": "建議使用圖片編輯軟體壓縮後再上傳,或調整圖片大小限制設定。"
|
||||
},
|
||||
"timeout": {
|
||||
"enable": "自動關閉",
|
||||
"enableTooltip": "啟用後將在指定時間後自動關閉介面",
|
||||
"duration": {
|
||||
"label": "超時時間",
|
||||
"description": "設置自動關閉的時間(30秒 - 2小時)"
|
||||
"buttons": {
|
||||
"submit": "提交回饋",
|
||||
"cancel": "取消",
|
||||
"close": "關閉",
|
||||
"clear": "清除",
|
||||
"submitFeedback": "✅ 提交回饋",
|
||||
"selectFiles": "📁 選擇文件",
|
||||
"pasteClipboard": "📋 剪貼板",
|
||||
"clearAll": "✕ 清除",
|
||||
"runCommand": "▶️ 執行"
|
||||
},
|
||||
"seconds": "秒",
|
||||
"remaining": "剩餘時間",
|
||||
"expired": "時間已到",
|
||||
"autoCloseMessage": "介面將在 {seconds} 秒後自動關閉",
|
||||
"settings": {
|
||||
"title": "超時設置",
|
||||
"description": "啟用後,介面將在指定時間後自動關閉。倒數計時器會顯示在頂部區域。"
|
||||
"status": {
|
||||
"feedbackSubmitted": "回饋已成功提交!",
|
||||
"feedbackCancelled": "已取消回饋。",
|
||||
"timeoutMessage": "等待回饋超時",
|
||||
"errorOccurred": "發生錯誤",
|
||||
"loading": "載入中...",
|
||||
"connecting": "連接中...",
|
||||
"connected": "已連接",
|
||||
"disconnected": "連接中斷",
|
||||
"uploading": "上傳中...",
|
||||
"uploadSuccess": "上傳成功",
|
||||
"uploadFailed": "上傳失敗",
|
||||
"commandRunning": "命令執行中...",
|
||||
"commandFinished": "命令執行完成",
|
||||
"pasteSuccess": "已從剪貼板貼上圖片",
|
||||
"pasteFailed": "無法從剪貼板獲取圖片",
|
||||
"invalidFileType": "不支援的文件類型",
|
||||
"fileTooLarge": "文件過大(最大 1MB)"
|
||||
},
|
||||
"errors": {
|
||||
"title": "錯誤",
|
||||
"warning": "警告",
|
||||
"info": "提示",
|
||||
"interfaceReloadError": "重新載入界面時發生錯誤: {error}",
|
||||
"imageSaveEmpty": "保存的圖片文件為空!位置: {path}",
|
||||
"imageSaveFailed": "圖片保存失敗!",
|
||||
"clipboardSaveFailed": "無法保存剪貼板圖片!",
|
||||
"noValidImage": "剪貼板中沒有有效的圖片!",
|
||||
"noImageContent": "剪貼板中沒有圖片內容!",
|
||||
"emptyFile": "圖片 {filename} 是空文件!",
|
||||
"loadImageFailed": "無法載入圖片 {filename}:\n{error}",
|
||||
"dragInvalidFiles": "請拖拽有效的圖片文件!",
|
||||
"confirmClearAll": "確定要清除所有 {count} 張圖片嗎?",
|
||||
"confirmClearTitle": "確認清除",
|
||||
"fileSizeExceeded": "圖片 {filename} 大小為 {size}MB,超過 1MB 限制!\n建議使用圖片編輯軟體壓縮後再上傳。",
|
||||
"dataSizeExceeded": "圖片 {filename} 數據大小超過 1MB 限制!"
|
||||
},
|
||||
"languageNames": {
|
||||
"zhTw": "繁體中文",
|
||||
"en": "English",
|
||||
"zhCn": "简体中文"
|
||||
},
|
||||
"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請測試這些功能並提供回饋!",
|
||||
"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}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"title": "應用設置",
|
||||
"language": {
|
||||
"title": "語言設置",
|
||||
"selector": "🌐 語言選擇"
|
||||
},
|
||||
"layout": {
|
||||
"title": "界面佈局",
|
||||
"separateMode": "分離模式",
|
||||
"separateModeDescription": "AI 摘要和回饋分別在不同頁籤",
|
||||
"combinedVertical": "合併模式(垂直布局)",
|
||||
"combinedVerticalDescription": "AI 摘要在上,回饋輸入在下,摘要和回饋在同一頁面",
|
||||
"combinedHorizontal": "合併模式(水平布局)",
|
||||
"combinedHorizontalDescription": "AI 摘要在左,回饋輸入在右,增大摘要可視區域"
|
||||
},
|
||||
"window": {
|
||||
"title": "視窗定位",
|
||||
"alwaysCenter": "總是在主螢幕中心顯示視窗"
|
||||
},
|
||||
"reset": {
|
||||
"title": "重置設定",
|
||||
"button": "重置設定",
|
||||
"confirmTitle": "確認重置設定",
|
||||
"confirmMessage": "確定要重置所有設定嗎?這將清除所有已保存的偏好設定並恢復到預設狀態。",
|
||||
"successTitle": "重置成功",
|
||||
"successMessage": "所有設定已成功重置為預設值。",
|
||||
"errorTitle": "重置失敗",
|
||||
"errorMessage": "重置設定時發生錯誤:{error}"
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"submit": "提交回饋",
|
||||
"cancel": "取消",
|
||||
"close": "關閉",
|
||||
"clear": "清除",
|
||||
"submitFeedback": "✅ 提交回饋",
|
||||
"selectFiles": "📁 選擇文件",
|
||||
"pasteClipboard": "📋 剪貼板",
|
||||
"clearAll": "✕ 清除",
|
||||
"runCommand": "▶️ 執行"
|
||||
},
|
||||
"status": {
|
||||
"feedbackSubmitted": "回饋已成功提交!",
|
||||
"feedbackCancelled": "已取消回饋。",
|
||||
"timeoutMessage": "等待回饋超時",
|
||||
"errorOccurred": "發生錯誤",
|
||||
"loading": "載入中...",
|
||||
"connecting": "連接中...",
|
||||
"connected": "已連接",
|
||||
"disconnected": "連接中斷",
|
||||
"uploading": "上傳中...",
|
||||
"uploadSuccess": "上傳成功",
|
||||
"uploadFailed": "上傳失敗",
|
||||
"commandRunning": "命令執行中...",
|
||||
"commandFinished": "命令執行完成",
|
||||
"pasteSuccess": "已從剪貼板貼上圖片",
|
||||
"pasteFailed": "無法從剪貼板獲取圖片",
|
||||
"invalidFileType": "不支援的文件類型",
|
||||
"fileTooLarge": "文件過大(最大 1MB)"
|
||||
},
|
||||
"errors": {
|
||||
"title": "錯誤",
|
||||
"warning": "警告",
|
||||
"info": "提示",
|
||||
"interfaceReloadError": "重新載入界面時發生錯誤: {error}",
|
||||
"imageSaveEmpty": "保存的圖片文件為空!位置: {path}",
|
||||
"imageSaveFailed": "圖片保存失敗!",
|
||||
"clipboardSaveFailed": "無法保存剪貼板圖片!",
|
||||
"noValidImage": "剪貼板中沒有有效的圖片!",
|
||||
"noImageContent": "剪貼板中沒有圖片內容!",
|
||||
"emptyFile": "圖片 {filename} 是空文件!",
|
||||
"loadImageFailed": "無法載入圖片 {filename}:\n{error}",
|
||||
"dragInvalidFiles": "請拖拽有效的圖片文件!",
|
||||
"confirmClearAll": "確定要清除所有 {count} 張圖片嗎?",
|
||||
"confirmClearTitle": "確認清除",
|
||||
"fileSizeExceeded": "圖片 {filename} 大小為 {size}MB,超過 1MB 限制!\n建議使用圖片編輯軟體壓縮後再上傳。",
|
||||
"dataSizeExceeded": "圖片 {filename} 數據大小超過 1MB 限制!"
|
||||
},
|
||||
"languageNames": {
|
||||
"zhTw": "繁體中文",
|
||||
"en": "English",
|
||||
"zhCn": "简体中文"
|
||||
},
|
||||
"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請測試這些功能並提供回饋!",
|
||||
"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}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,65 +27,65 @@ class SettingsTab(QWidget):
|
||||
layout_change_requested = Signal(bool, str) # 佈局變更請求信號 (combined_mode, orientation)
|
||||
reset_requested = Signal() # 重置設定請求信號
|
||||
timeout_settings_changed = Signal(bool, int) # 超時設置變更信號 (enabled, duration)
|
||||
|
||||
|
||||
def __init__(self, combined_mode: bool, config_manager, parent=None):
|
||||
super().__init__(parent)
|
||||
self.combined_mode = combined_mode
|
||||
self.config_manager = config_manager
|
||||
self.layout_orientation = self.config_manager.get_layout_orientation()
|
||||
self.i18n = get_i18n_manager()
|
||||
|
||||
|
||||
# 保存需要更新的UI元素引用
|
||||
self.ui_elements = {}
|
||||
|
||||
|
||||
# 設置全域字體為微軟正黑體
|
||||
self._setup_font()
|
||||
self._setup_ui()
|
||||
|
||||
|
||||
# 在UI設置完成後,確保正確設置初始狀態
|
||||
self._set_initial_layout_state()
|
||||
|
||||
|
||||
def _setup_font(self) -> None:
|
||||
"""設置全域字體"""
|
||||
font = QFont("Microsoft JhengHei", 9) # 微軟正黑體,調整為 9pt
|
||||
self.setFont(font)
|
||||
|
||||
|
||||
# 設置整個控件的樣式表,確保中文字體正確
|
||||
self.setStyleSheet("""
|
||||
QWidget {
|
||||
font-family: "Microsoft JhengHei", "微軟正黑體", sans-serif;
|
||||
}
|
||||
""")
|
||||
|
||||
|
||||
def _setup_ui(self) -> None:
|
||||
"""設置用戶介面"""
|
||||
# 主容器
|
||||
main_layout = QHBoxLayout(self)
|
||||
main_layout.setContentsMargins(0, 0, 0, 0)
|
||||
main_layout.setSpacing(0)
|
||||
|
||||
|
||||
# 左側內容區域
|
||||
content_widget = QWidget()
|
||||
content_widget.setMaximumWidth(600)
|
||||
content_layout = QVBoxLayout(content_widget)
|
||||
content_layout.setContentsMargins(20, 20, 20, 20)
|
||||
content_layout.setSpacing(16)
|
||||
|
||||
|
||||
# === 語言設置 ===
|
||||
self._create_language_section(content_layout)
|
||||
|
||||
|
||||
# 添加分隔線
|
||||
self._add_separator(content_layout)
|
||||
|
||||
|
||||
# === 界面佈局 ===
|
||||
self._create_layout_section(content_layout)
|
||||
|
||||
|
||||
# 添加分隔線
|
||||
self._add_separator(content_layout)
|
||||
|
||||
|
||||
# === 視窗設置 ===
|
||||
self._create_window_section(content_layout)
|
||||
|
||||
|
||||
# 添加分隔線
|
||||
self._add_separator(content_layout)
|
||||
|
||||
@ -97,17 +97,17 @@ class SettingsTab(QWidget):
|
||||
|
||||
# === 重置設定 ===
|
||||
self._create_reset_section(content_layout)
|
||||
|
||||
|
||||
# 添加彈性空間
|
||||
content_layout.addStretch()
|
||||
|
||||
|
||||
# 添加到主布局
|
||||
main_layout.addWidget(content_widget)
|
||||
main_layout.addStretch() # 右側彈性空間
|
||||
|
||||
|
||||
# 設定初始狀態
|
||||
self._set_initial_layout_state()
|
||||
|
||||
|
||||
def _add_separator(self, layout: QVBoxLayout) -> None:
|
||||
"""添加分隔線"""
|
||||
separator = QFrame()
|
||||
@ -122,7 +122,7 @@ class SettingsTab(QWidget):
|
||||
}
|
||||
""")
|
||||
layout.addWidget(separator)
|
||||
|
||||
|
||||
def _create_section_header(self, title: str, emoji: str = "") -> QLabel:
|
||||
"""創建區塊標題"""
|
||||
text = f"{emoji} {title}" if emoji else title
|
||||
@ -138,7 +138,7 @@ class SettingsTab(QWidget):
|
||||
}
|
||||
""")
|
||||
return label
|
||||
|
||||
|
||||
def _create_description(self, text: str) -> QLabel:
|
||||
"""創建說明文字"""
|
||||
label = QLabel(text)
|
||||
@ -153,18 +153,18 @@ class SettingsTab(QWidget):
|
||||
""")
|
||||
label.setWordWrap(True)
|
||||
return label
|
||||
|
||||
|
||||
def _create_language_section(self, layout: QVBoxLayout) -> None:
|
||||
"""創建語言設置區域"""
|
||||
header = self._create_section_header(t('settings.language.title'), "🌐")
|
||||
layout.addWidget(header)
|
||||
# 保存引用以便更新
|
||||
self.ui_elements['language_header'] = header
|
||||
|
||||
|
||||
# 語言選擇器容器
|
||||
lang_container = QHBoxLayout()
|
||||
lang_container.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
|
||||
self.language_selector = QComboBox()
|
||||
self.language_selector.setMinimumHeight(28)
|
||||
self.language_selector.setMaximumWidth(140)
|
||||
@ -197,29 +197,29 @@ class SettingsTab(QWidget):
|
||||
min-width: 120px;
|
||||
}
|
||||
""")
|
||||
|
||||
|
||||
# 填充語言選項
|
||||
self._populate_language_selector()
|
||||
self.language_selector.currentIndexChanged.connect(self._on_language_changed)
|
||||
|
||||
|
||||
lang_container.addWidget(self.language_selector)
|
||||
lang_container.addStretch()
|
||||
layout.addLayout(lang_container)
|
||||
|
||||
|
||||
def _create_layout_section(self, layout: QVBoxLayout) -> None:
|
||||
"""創建界面佈局區域"""
|
||||
header = self._create_section_header(t('settings.layout.title'), "📐")
|
||||
layout.addWidget(header)
|
||||
# 保存引用以便更新
|
||||
self.ui_elements['layout_header'] = header
|
||||
|
||||
|
||||
# 選項容器
|
||||
options_layout = QVBoxLayout()
|
||||
options_layout.setSpacing(2)
|
||||
|
||||
|
||||
# 創建按鈕組
|
||||
self.layout_button_group = QButtonGroup()
|
||||
|
||||
|
||||
# 分離模式
|
||||
self.separate_mode_radio = QRadioButton(t('settings.layout.separateMode'))
|
||||
self.separate_mode_radio.setStyleSheet("""
|
||||
@ -251,7 +251,7 @@ class SettingsTab(QWidget):
|
||||
""")
|
||||
self.layout_button_group.addButton(self.separate_mode_radio, 0)
|
||||
options_layout.addWidget(self.separate_mode_radio)
|
||||
|
||||
|
||||
separate_hint = QLabel(f" {t('settings.layout.separateModeDescription')}")
|
||||
separate_hint.setStyleSheet("""
|
||||
QLabel {
|
||||
@ -265,53 +265,59 @@ class SettingsTab(QWidget):
|
||||
options_layout.addWidget(separate_hint)
|
||||
# 保存引用以便更新
|
||||
self.ui_elements['separate_hint'] = separate_hint
|
||||
|
||||
|
||||
# 合併模式(垂直)
|
||||
self.combined_vertical_radio = QRadioButton(t('settings.layout.combinedVertical'))
|
||||
self.combined_vertical_radio.setStyleSheet(self.separate_mode_radio.styleSheet())
|
||||
self.layout_button_group.addButton(self.combined_vertical_radio, 1)
|
||||
options_layout.addWidget(self.combined_vertical_radio)
|
||||
|
||||
|
||||
vertical_hint = QLabel(f" {t('settings.layout.combinedVerticalDescription')}")
|
||||
vertical_hint.setStyleSheet(separate_hint.styleSheet())
|
||||
options_layout.addWidget(vertical_hint)
|
||||
# 保存引用以便更新
|
||||
self.ui_elements['vertical_hint'] = vertical_hint
|
||||
|
||||
|
||||
# 合併模式(水平)
|
||||
self.combined_horizontal_radio = QRadioButton(t('settings.layout.combinedHorizontal'))
|
||||
self.combined_horizontal_radio.setStyleSheet(self.separate_mode_radio.styleSheet())
|
||||
self.layout_button_group.addButton(self.combined_horizontal_radio, 2)
|
||||
options_layout.addWidget(self.combined_horizontal_radio)
|
||||
|
||||
|
||||
horizontal_hint = QLabel(f" {t('settings.layout.combinedHorizontalDescription')}")
|
||||
horizontal_hint.setStyleSheet(separate_hint.styleSheet())
|
||||
options_layout.addWidget(horizontal_hint)
|
||||
# 保存引用以便更新
|
||||
self.ui_elements['horizontal_hint'] = horizontal_hint
|
||||
|
||||
|
||||
layout.addLayout(options_layout)
|
||||
|
||||
|
||||
# 連接佈局變更信號
|
||||
self.layout_button_group.buttonToggled.connect(self._on_layout_changed)
|
||||
|
||||
|
||||
def _create_window_section(self, layout: QVBoxLayout) -> None:
|
||||
"""創建視窗設置區域"""
|
||||
header = self._create_section_header(t('settings.window.title'), "🖥️")
|
||||
layout.addWidget(header)
|
||||
# 保存引用以便更新
|
||||
self.ui_elements['window_header'] = header
|
||||
|
||||
|
||||
# 選項容器
|
||||
options_layout = QVBoxLayout()
|
||||
options_layout.setSpacing(8)
|
||||
|
||||
|
||||
# 使用現代化的 Switch 組件
|
||||
self.always_center_switch = SwitchWithLabel(t('settings.window.alwaysCenter'))
|
||||
self.always_center_switch.setChecked(self.config_manager.get_always_center_window())
|
||||
self.always_center_switch.toggled.connect(self._on_always_center_changed)
|
||||
options_layout.addWidget(self.always_center_switch)
|
||||
|
||||
|
||||
# 自動聚焦開關
|
||||
self.auto_focus_switch = SwitchWithLabel(t('settings.window.autoFocus'))
|
||||
self.auto_focus_switch.setChecked(self.config_manager.get_auto_focus_enabled())
|
||||
self.auto_focus_switch.toggled.connect(self._on_auto_focus_changed)
|
||||
options_layout.addWidget(self.auto_focus_switch)
|
||||
|
||||
layout.addLayout(options_layout)
|
||||
|
||||
def _create_timeout_section(self, layout: QVBoxLayout) -> None:
|
||||
@ -376,10 +382,10 @@ class SettingsTab(QWidget):
|
||||
layout.addWidget(header)
|
||||
# 保存引用以便更新
|
||||
self.ui_elements['reset_header'] = header
|
||||
|
||||
|
||||
reset_container = QHBoxLayout()
|
||||
reset_container.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
|
||||
self.reset_button = QPushButton(t('settings.reset.button'))
|
||||
self.reset_button.setMinimumHeight(32)
|
||||
self.reset_button.setMaximumWidth(110)
|
||||
@ -402,7 +408,7 @@ class SettingsTab(QWidget):
|
||||
}
|
||||
""")
|
||||
self.reset_button.clicked.connect(self._on_reset_settings)
|
||||
|
||||
|
||||
reset_container.addWidget(self.reset_button)
|
||||
reset_container.addStretch()
|
||||
layout.addLayout(reset_container)
|
||||
@ -414,28 +420,28 @@ class SettingsTab(QWidget):
|
||||
('zh-CN', '简体中文'),
|
||||
('en', 'English')
|
||||
]
|
||||
|
||||
|
||||
current_language = self.i18n.get_current_language()
|
||||
|
||||
|
||||
# 暫時斷開信號連接以避免觸發變更事件
|
||||
self.language_selector.blockSignals(True)
|
||||
|
||||
|
||||
# 先清空現有選項
|
||||
self.language_selector.clear()
|
||||
|
||||
|
||||
for i, (code, name) in enumerate(languages):
|
||||
self.language_selector.addItem(name, code)
|
||||
if code == current_language:
|
||||
self.language_selector.setCurrentIndex(i)
|
||||
|
||||
|
||||
# 重新連接信號
|
||||
self.language_selector.blockSignals(False)
|
||||
|
||||
|
||||
def _on_language_changed(self, index: int) -> None:
|
||||
"""語言變更事件處理"""
|
||||
if index < 0:
|
||||
return
|
||||
|
||||
|
||||
language_code = self.language_selector.itemData(index)
|
||||
if language_code and language_code != self.i18n.get_current_language():
|
||||
# 先保存語言設定
|
||||
@ -444,14 +450,14 @@ class SettingsTab(QWidget):
|
||||
self.i18n.set_language(language_code)
|
||||
# 發出信號
|
||||
self.language_changed.emit()
|
||||
|
||||
|
||||
def _on_layout_changed(self, button, checked: bool) -> None:
|
||||
"""佈局變更事件處理"""
|
||||
if not checked:
|
||||
return
|
||||
|
||||
|
||||
button_id = self.layout_button_group.id(button)
|
||||
|
||||
|
||||
if button_id == 0: # 分離模式
|
||||
new_combined_mode = False
|
||||
new_orientation = 'vertical'
|
||||
@ -463,7 +469,7 @@ class SettingsTab(QWidget):
|
||||
new_orientation = 'horizontal'
|
||||
else:
|
||||
return
|
||||
|
||||
|
||||
# 檢查是否真的有變更
|
||||
if new_combined_mode != self.combined_mode or new_orientation != self.layout_orientation:
|
||||
# 批量保存配置(避免多次寫入文件)
|
||||
@ -471,20 +477,26 @@ class SettingsTab(QWidget):
|
||||
'combined_mode': new_combined_mode,
|
||||
'layout_orientation': new_orientation
|
||||
})
|
||||
|
||||
|
||||
# 更新內部狀態
|
||||
self.combined_mode = new_combined_mode
|
||||
self.layout_orientation = new_orientation
|
||||
|
||||
|
||||
# 發出佈局變更請求信號
|
||||
self.layout_change_requested.emit(new_combined_mode, new_orientation)
|
||||
|
||||
|
||||
def _on_always_center_changed(self, checked: bool) -> None:
|
||||
"""視窗定位選項變更事件處理"""
|
||||
# 立即保存設定
|
||||
self.config_manager.set_always_center_window(checked)
|
||||
debug_log(f"視窗定位設置已保存: {checked}") # 調試輸出
|
||||
|
||||
def _on_auto_focus_changed(self, checked: bool) -> None:
|
||||
"""自動聚焦選項變更事件處理"""
|
||||
# 立即保存設定
|
||||
self.config_manager.set_auto_focus_enabled(checked)
|
||||
debug_log(f"自動聚焦設置已保存: {checked}") # 調試輸出
|
||||
|
||||
def _on_timeout_enabled_changed(self, enabled: bool) -> None:
|
||||
"""超時啟用狀態變更事件處理"""
|
||||
# 立即保存設定
|
||||
@ -514,10 +526,10 @@ class SettingsTab(QWidget):
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
QMessageBox.No
|
||||
)
|
||||
|
||||
|
||||
if reply == QMessageBox.Yes:
|
||||
self.reset_requested.emit()
|
||||
|
||||
|
||||
def update_texts(self) -> None:
|
||||
"""更新界面文字(不重新創建界面)"""
|
||||
# 更新區塊標題
|
||||
@ -546,10 +558,12 @@ class SettingsTab(QWidget):
|
||||
# 更新按鈕文字
|
||||
if hasattr(self, 'reset_button'):
|
||||
self.reset_button.setText(t('settings.reset.button'))
|
||||
|
||||
|
||||
# 更新切換開關文字
|
||||
if hasattr(self, 'always_center_switch'):
|
||||
self.always_center_switch.setText(t('settings.window.alwaysCenter'))
|
||||
if hasattr(self, 'auto_focus_switch'):
|
||||
self.auto_focus_switch.setText(t('settings.window.autoFocus'))
|
||||
if hasattr(self, 'timeout_enabled_switch'):
|
||||
self.timeout_enabled_switch.setText(t('timeout.enable'))
|
||||
|
||||
@ -558,7 +572,7 @@ class SettingsTab(QWidget):
|
||||
self.ui_elements['timeout_duration_label'].setText(t('timeout.duration.label'))
|
||||
if hasattr(self, 'timeout_duration_spinbox'):
|
||||
self.timeout_duration_spinbox.setSuffix(" " + t('timeout.seconds'))
|
||||
|
||||
|
||||
# 更新單選按鈕文字
|
||||
if hasattr(self, 'separate_mode_radio'):
|
||||
self.separate_mode_radio.setText(t('settings.layout.separateMode'))
|
||||
@ -566,25 +580,29 @@ class SettingsTab(QWidget):
|
||||
self.combined_vertical_radio.setText(t('settings.layout.combinedVertical'))
|
||||
if hasattr(self, 'combined_horizontal_radio'):
|
||||
self.combined_horizontal_radio.setText(t('settings.layout.combinedHorizontal'))
|
||||
|
||||
|
||||
# 注意:不要重新填充語言選擇器,避免重複選項問題
|
||||
|
||||
|
||||
def reload_settings_from_config(self) -> None:
|
||||
"""從配置重新載入設定狀態"""
|
||||
# 重新載入語言設定
|
||||
if hasattr(self, 'language_selector'):
|
||||
self._populate_language_selector()
|
||||
|
||||
|
||||
# 重新載入佈局設定
|
||||
self.combined_mode = self.config_manager.get_layout_mode()
|
||||
self.layout_orientation = self.config_manager.get_layout_orientation()
|
||||
self._set_initial_layout_state()
|
||||
|
||||
|
||||
# 重新載入視窗設定
|
||||
if hasattr(self, 'always_center_switch'):
|
||||
always_center = self.config_manager.get_always_center_window()
|
||||
self.always_center_switch.setChecked(always_center)
|
||||
debug_log(f"重新載入視窗定位設置: {always_center}") # 調試輸出
|
||||
if hasattr(self, 'auto_focus_switch'):
|
||||
auto_focus = self.config_manager.get_auto_focus_enabled()
|
||||
self.auto_focus_switch.setChecked(auto_focus)
|
||||
debug_log(f"重新載入自動聚焦設置: {auto_focus}") # 調試輸出
|
||||
|
||||
# 重新載入超時設定
|
||||
if hasattr(self, 'timeout_enabled_switch'):
|
||||
@ -595,29 +613,29 @@ class SettingsTab(QWidget):
|
||||
timeout_duration = self.config_manager.get_timeout_duration()
|
||||
self.timeout_duration_spinbox.setValue(timeout_duration)
|
||||
debug_log(f"重新載入超時時間設置: {timeout_duration}") # 調試輸出
|
||||
|
||||
|
||||
def set_layout_mode(self, combined_mode: bool) -> None:
|
||||
"""設置佈局模式"""
|
||||
self.combined_mode = combined_mode
|
||||
self._set_initial_layout_state()
|
||||
|
||||
|
||||
def set_layout_orientation(self, orientation: str) -> None:
|
||||
"""設置佈局方向"""
|
||||
self.layout_orientation = orientation
|
||||
self._set_initial_layout_state()
|
||||
|
||||
|
||||
def _set_initial_layout_state(self) -> None:
|
||||
"""設置初始佈局狀態"""
|
||||
if hasattr(self, 'separate_mode_radio'):
|
||||
# 暫時斷開信號連接以避免觸發變更事件
|
||||
self.layout_button_group.blockSignals(True)
|
||||
|
||||
|
||||
if not self.combined_mode:
|
||||
self.separate_mode_radio.setChecked(True)
|
||||
elif self.layout_orientation == 'vertical':
|
||||
self.combined_vertical_radio.setChecked(True)
|
||||
else:
|
||||
self.combined_horizontal_radio.setChecked(True)
|
||||
|
||||
|
||||
# 重新連接信號
|
||||
self.layout_button_group.blockSignals(False)
|
||||
self.layout_button_group.blockSignals(False)
|
||||
|
@ -16,18 +16,18 @@ from ...debug import gui_debug_log as debug_log
|
||||
|
||||
class ConfigManager:
|
||||
"""配置管理器"""
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self._config_file = self._get_config_file_path()
|
||||
self._config_cache = {}
|
||||
self._load_config()
|
||||
|
||||
|
||||
def _get_config_file_path(self) -> Path:
|
||||
"""獲取配置文件路徑"""
|
||||
config_dir = Path.home() / ".config" / "mcp-feedback-enhanced"
|
||||
config_dir.mkdir(parents=True, exist_ok=True)
|
||||
return config_dir / "ui_settings.json"
|
||||
|
||||
|
||||
def _load_config(self) -> None:
|
||||
"""載入配置"""
|
||||
try:
|
||||
@ -41,7 +41,7 @@ class ConfigManager:
|
||||
except Exception as e:
|
||||
debug_log(f"載入配置失敗: {e}")
|
||||
self._config_cache = {}
|
||||
|
||||
|
||||
def _save_config(self) -> None:
|
||||
"""保存配置"""
|
||||
try:
|
||||
@ -50,16 +50,16 @@ class ConfigManager:
|
||||
debug_log("配置文件保存成功")
|
||||
except Exception as e:
|
||||
debug_log(f"保存配置失敗: {e}")
|
||||
|
||||
|
||||
def get(self, key: str, default: Any = None) -> Any:
|
||||
"""獲取配置值"""
|
||||
return self._config_cache.get(key, default)
|
||||
|
||||
|
||||
def set(self, key: str, value: Any) -> None:
|
||||
"""設置配置值"""
|
||||
self._config_cache[key] = value
|
||||
self._save_config()
|
||||
|
||||
|
||||
def update_partial_config(self, updates: Dict[str, Any]) -> None:
|
||||
"""批量更新配置項目,只保存指定的設定而不影響其他參數"""
|
||||
try:
|
||||
@ -68,84 +68,84 @@ class ConfigManager:
|
||||
if self._config_file.exists():
|
||||
with open(self._config_file, 'r', encoding='utf-8') as f:
|
||||
current_config = json.load(f)
|
||||
|
||||
|
||||
# 只更新指定的項目
|
||||
for key, value in updates.items():
|
||||
current_config[key] = value
|
||||
# 同時更新內存緩存
|
||||
self._config_cache[key] = value
|
||||
|
||||
|
||||
# 保存到文件
|
||||
with open(self._config_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(current_config, f, ensure_ascii=False, indent=2)
|
||||
|
||||
|
||||
debug_log(f"部分配置已更新: {list(updates.keys())}")
|
||||
|
||||
|
||||
except Exception as e:
|
||||
debug_log(f"更新部分配置失敗: {e}")
|
||||
|
||||
|
||||
def get_layout_mode(self) -> bool:
|
||||
"""獲取佈局模式(False=分離模式,True=合併模式)"""
|
||||
return self.get('combined_mode', False)
|
||||
|
||||
|
||||
def set_layout_mode(self, combined_mode: bool) -> None:
|
||||
"""設置佈局模式"""
|
||||
self.update_partial_config({'combined_mode': combined_mode})
|
||||
debug_log(f"佈局模式設置: {'合併模式' if combined_mode else '分離模式'}")
|
||||
|
||||
|
||||
def get_layout_orientation(self) -> str:
|
||||
"""獲取佈局方向(vertical=垂直(上下),horizontal=水平(左右))"""
|
||||
return self.get('layout_orientation', 'vertical')
|
||||
|
||||
|
||||
def set_layout_orientation(self, orientation: str) -> None:
|
||||
"""設置佈局方向"""
|
||||
if orientation not in ['vertical', 'horizontal']:
|
||||
orientation = 'vertical'
|
||||
self.update_partial_config({'layout_orientation': orientation})
|
||||
debug_log(f"佈局方向設置: {'垂直(上下)' if orientation == 'vertical' else '水平(左右)'}")
|
||||
|
||||
|
||||
def get_language(self) -> str:
|
||||
"""獲取語言設置"""
|
||||
return self.get('language', 'zh-TW')
|
||||
|
||||
|
||||
def set_language(self, language: str) -> None:
|
||||
"""設置語言"""
|
||||
self.update_partial_config({'language': language})
|
||||
debug_log(f"語言設置: {language}")
|
||||
|
||||
|
||||
def get_splitter_sizes(self, splitter_name: str) -> list:
|
||||
"""獲取分割器尺寸"""
|
||||
sizes = self.get(f'splitter_sizes.{splitter_name}', [])
|
||||
if sizes:
|
||||
debug_log(f"載入分割器 {splitter_name} 尺寸: {sizes}")
|
||||
return sizes
|
||||
|
||||
|
||||
def set_splitter_sizes(self, splitter_name: str, sizes: list) -> None:
|
||||
"""設置分割器尺寸"""
|
||||
self.update_partial_config({f'splitter_sizes.{splitter_name}': sizes})
|
||||
debug_log(f"保存分割器 {splitter_name} 尺寸: {sizes}")
|
||||
|
||||
|
||||
def get_window_geometry(self) -> dict:
|
||||
"""獲取窗口幾何信息"""
|
||||
geometry = self.get('window_geometry', {})
|
||||
if geometry:
|
||||
debug_log(f"載入窗口幾何信息: {geometry}")
|
||||
return geometry
|
||||
|
||||
|
||||
def set_window_geometry(self, geometry: dict) -> None:
|
||||
"""設置窗口幾何信息(使用部分更新避免覆蓋其他設定)"""
|
||||
self.update_partial_config({'window_geometry': geometry})
|
||||
debug_log(f"保存窗口幾何信息: {geometry}")
|
||||
|
||||
|
||||
def get_always_center_window(self) -> bool:
|
||||
"""獲取總是在主螢幕中心顯示視窗的設置"""
|
||||
return self.get('always_center_window', False)
|
||||
|
||||
|
||||
def set_always_center_window(self, always_center: bool) -> None:
|
||||
"""設置總是在主螢幕中心顯示視窗"""
|
||||
self.update_partial_config({'always_center_window': always_center})
|
||||
debug_log(f"視窗定位設置: {'總是中心顯示' if always_center else '智能定位'}")
|
||||
|
||||
|
||||
def get_image_size_limit(self) -> int:
|
||||
"""獲取圖片大小限制(bytes),0 表示無限制"""
|
||||
return self.get('image_size_limit', 0)
|
||||
@ -199,6 +199,15 @@ class ConfigManager:
|
||||
})
|
||||
debug_log(f"超時設置: {'啟用' if enabled else '停用'}, {seconds} 秒")
|
||||
|
||||
def get_auto_focus_enabled(self) -> bool:
|
||||
"""獲取是否啟用自動聚焦到輸入框"""
|
||||
return self.get('auto_focus_enabled', True) # 預設啟用
|
||||
|
||||
def set_auto_focus_enabled(self, enabled: bool) -> None:
|
||||
"""設置是否啟用自動聚焦到輸入框"""
|
||||
self.update_partial_config({'auto_focus_enabled': enabled})
|
||||
debug_log(f"自動聚焦設置: {'啟用' if enabled else '停用'}")
|
||||
|
||||
def reset_settings(self) -> None:
|
||||
"""重置所有設定到預設值"""
|
||||
try:
|
||||
@ -214,4 +223,4 @@ class ConfigManager:
|
||||
|
||||
except Exception as e:
|
||||
debug_log(f"重置設定失敗: {e}")
|
||||
raise
|
||||
raise
|
||||
|
@ -61,11 +61,14 @@ class FeedbackWindow(QMainWindow):
|
||||
# 如果啟用了超時,自動開始倒數計時
|
||||
self.start_timeout_if_enabled()
|
||||
|
||||
# 設置定時器在窗口顯示後自動聚焦到輸入框
|
||||
self._focus_timer = QTimer()
|
||||
self._focus_timer.setSingleShot(True)
|
||||
self._focus_timer.timeout.connect(self._auto_focus_input)
|
||||
self._focus_timer.start(300) # 延遲300ms確保窗口和UI元素完全加載
|
||||
# 設置定時器在窗口顯示後自動聚焦到輸入框(如果啟用)
|
||||
if self.config_manager.get_auto_focus_enabled():
|
||||
self._focus_timer = QTimer()
|
||||
self._focus_timer.setSingleShot(True)
|
||||
self._focus_timer.timeout.connect(self._auto_focus_input)
|
||||
self._focus_timer.start(300) # 延遲300ms確保窗口和UI元素完全加載
|
||||
else:
|
||||
debug_log("自動聚焦已停用")
|
||||
|
||||
def _setup_ui(self) -> None:
|
||||
"""設置用戶介面"""
|
||||
|
Loading…
x
Reference in New Issue
Block a user