mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-04 01:40:45 +08:00
- Updated Phase 1 and Phase 2 documentation to include next phase links and data flow details. - Expanded Phase 5 documentation to include comprehensive validation and README generation steps, along with validation report structure. - Added purpose and usage context sections to various action and script templates (e.g., autonomous-action, llm-action, script-bash). - Improved commands management by simplifying the command scanning logic and enabling/disabling commands through renaming files. - Enhanced dashboard command manager to format group names and display nested groups with appropriate icons and colors. - Updated LiteLLM executor to allow model overrides during execution. - Added action reference guide and template reference sections to the skill-tuning SKILL.md for better navigation and understanding.
5559 lines
254 KiB
JavaScript
5559 lines
254 KiB
JavaScript
// ============================================
|
||
// I18N - Internationalization Module
|
||
// ============================================
|
||
// Supports English and Chinese (Simplified)
|
||
|
||
// Current language (default: detect from browser or use 'en')
|
||
let currentLang = 'en';
|
||
|
||
// Translation dictionaries
|
||
const i18n = {
|
||
en: {
|
||
// App title and brand
|
||
'app.title': 'CCW Dashboard',
|
||
'app.brand': 'Claude Code Workflow',
|
||
|
||
// Common
|
||
'common.view': 'View',
|
||
'common.edit': 'Edit',
|
||
'common.delete': 'Delete',
|
||
'common.cancel': 'Cancel',
|
||
'common.save': 'Save',
|
||
'common.include': 'Include',
|
||
'common.close': 'Close',
|
||
'common.loading': 'Loading...',
|
||
'common.error': 'Error',
|
||
'common.success': 'Success',
|
||
'common.deleteSuccess': 'Deleted successfully',
|
||
'common.deleteFailed': 'Delete failed',
|
||
'common.retry': 'Retry',
|
||
'common.refresh': 'Refresh',
|
||
'common.format': 'Format',
|
||
'common.back': 'Back',
|
||
'common.search': 'Search...',
|
||
'common.minutes': 'minutes',
|
||
'common.enabled': 'Enabled',
|
||
'common.disabled': 'Disabled',
|
||
'common.yes': 'Yes',
|
||
'common.no': 'No',
|
||
'common.na': 'N/A',
|
||
|
||
// Header
|
||
'header.project': 'Project:',
|
||
'header.recentProjects': 'Recent Projects',
|
||
'header.browse': 'Browse...',
|
||
'header.refreshWorkspace': 'Refresh workspace',
|
||
'header.checkUpdateNow': 'Check for updates now',
|
||
'header.autoUpdate': 'Auto-update check',
|
||
'header.toggleTheme': 'Toggle theme',
|
||
'header.language': 'Language',
|
||
'header.cliStream': 'CLI Stream Viewer',
|
||
|
||
// CLI Stream Viewer
|
||
'cliStream.title': 'CLI Stream',
|
||
'cliStream.clearCompleted': 'Clear Completed',
|
||
'cliStream.noStreams': 'No active CLI executions',
|
||
'cliStream.noStreamsHint': 'Start a CLI command to see streaming output',
|
||
'cliStream.running': 'Running',
|
||
'cliStream.completed': 'Completed',
|
||
'cliStream.error': 'Error',
|
||
'cliStream.autoScroll': 'Auto-scroll',
|
||
'cliStream.close': 'Close',
|
||
'cliStream.cannotCloseRunning': 'Cannot close running execution',
|
||
'cliStream.lines': 'lines',
|
||
'cliStream.searchPlaceholder': 'Search output...',
|
||
'cliStream.filterResults': 'results',
|
||
|
||
// Sidebar - Project section
|
||
'nav.project': 'Project',
|
||
'nav.overview': 'Overview',
|
||
'nav.explorer': 'Explorer',
|
||
'nav.status': 'Status',
|
||
'nav.history': 'History',
|
||
'nav.codexLensManager': 'CodexLens',
|
||
'nav.memory': 'Memory',
|
||
'nav.contextMemory': 'Context',
|
||
'nav.coreMemory': 'Core Memory',
|
||
'nav.promptHistory': 'Prompts',
|
||
|
||
// Sidebar - Sessions section
|
||
'nav.sessions': 'Sessions',
|
||
'nav.all': 'All',
|
||
'nav.active': 'Active',
|
||
'nav.archived': 'Archived',
|
||
|
||
// Sidebar - Lite Tasks section
|
||
'nav.liteTasks': 'Lite Tasks',
|
||
'nav.litePlan': 'Lite Plan',
|
||
'nav.liteFix': 'Lite Fix',
|
||
'nav.multiCliPlan': 'Multi-CLI Plan',
|
||
|
||
// Sidebar - Loops section
|
||
'nav.loops': 'Loops',
|
||
'nav.loopMonitor': 'Monitor',
|
||
'nav.inDevelopment': 'In Dev',
|
||
|
||
// Sidebar - MCP section
|
||
'nav.mcpServers': 'MCP Servers',
|
||
'nav.manage': 'Manage',
|
||
|
||
// Sidebar - Hooks section
|
||
'nav.hooks': 'Hooks',
|
||
|
||
// Sidebar - Footer
|
||
'nav.collapse': 'Collapse',
|
||
'nav.expand': 'Expand',
|
||
|
||
// Stats cards
|
||
'stats.totalSessions': 'Total Sessions',
|
||
'stats.activeSessions': 'Active Sessions',
|
||
'stats.totalTasks': 'Total Tasks',
|
||
'stats.completedTasks': 'Completed Tasks',
|
||
|
||
// Carousel
|
||
'carousel.noActiveSessions': 'No active sessions',
|
||
'carousel.previous': 'Previous',
|
||
'carousel.next': 'Next',
|
||
'carousel.pause': 'Pause auto-play',
|
||
|
||
// Content titles
|
||
'title.allSessions': 'All Sessions',
|
||
'title.activeSessions': 'Active Sessions',
|
||
'title.archivedSessions': 'Archived Sessions',
|
||
'title.sessions': 'Sessions',
|
||
'title.projectOverview': 'Project Overview',
|
||
'title.mcpManagement': 'MCP Server Management',
|
||
'title.fileExplorer': 'File Explorer',
|
||
'title.cliTools': 'CLI Tools & CCW',
|
||
'title.cliHistory': 'CLI Execution History',
|
||
'title.litePlanSessions': 'Lite Plan Sessions',
|
||
'title.liteFixSessions': 'Lite Fix Sessions',
|
||
'title.multiCliPlanSessions': 'Multi-CLI Plan Sessions',
|
||
'title.liteTasks': 'Lite Tasks',
|
||
'title.sessionDetail': 'Session Detail',
|
||
'title.liteTaskDetail': 'Lite Task Detail',
|
||
'title.multiCliDetail': 'Multi-CLI Discussion Detail',
|
||
'title.hookManager': 'Hook Manager',
|
||
'title.memoryModule': 'Memory Module',
|
||
'title.promptHistory': 'Prompt History',
|
||
'title.codexLensManager': 'CodexLens Manager',
|
||
|
||
// Search
|
||
'search.placeholder': 'Search...',
|
||
|
||
// Session cards - 3 states: planning, active, completed (archived location)
|
||
'session.status.active': 'ACTIVE',
|
||
'session.status.archived': 'ARCHIVED',
|
||
'session.status.planning': 'PLANNING',
|
||
'session.tasks': 'tasks',
|
||
'session.findings': 'findings',
|
||
'session.dimensions': 'dimensions',
|
||
'session.progress': 'Progress',
|
||
|
||
// Empty states
|
||
'empty.noSessions': 'No Sessions Found',
|
||
'empty.noSessionsText': 'No workflow sessions match your current filter.',
|
||
'empty.noTasks': 'No Tasks',
|
||
'empty.noTasksText': 'This session has no tasks defined.',
|
||
'empty.noTaskFiles': 'No Task Files',
|
||
'empty.noTaskFilesText': 'No IMPL-*.json files found in .task/',
|
||
'empty.noLiteSessions': 'No {type} Sessions',
|
||
'empty.noLiteSessionsText': 'No sessions found in .workflow/.{type}/',
|
||
'empty.noMcpServers': 'No MCP servers configured for this project',
|
||
'empty.addMcpServersHint': 'Add servers from the available list below',
|
||
'empty.noGlobalMcpServers': 'No global MCP servers configured',
|
||
'empty.globalServersHint': 'Global servers are available to all projects from ~/.claude.json',
|
||
'empty.noAdditionalMcp': 'No additional MCP servers found in other projects',
|
||
'empty.noHooks': 'No hooks configured for this project',
|
||
'empty.createHookHint': 'Create a hook to automate actions on tool usage',
|
||
'empty.noGlobalHooks': 'No global hooks configured',
|
||
'empty.globalHooksHint': 'Global hooks apply to all Claude Code sessions',
|
||
'empty.noDiagnoses': 'No Diagnoses',
|
||
'empty.noDiagnosesText': 'No diagnosis-*.json files found for this session.',
|
||
|
||
// Session detail tabs
|
||
'tab.tasks': 'Tasks',
|
||
'tab.context': 'Context',
|
||
'tab.summary': 'Summary',
|
||
'tab.implPlan': 'IMPL Plan',
|
||
'tab.conflict': 'Conflict',
|
||
'tab.review': 'Review',
|
||
'tab.plan': 'Plan',
|
||
'tab.diagnoses': 'Diagnoses',
|
||
|
||
// Session detail
|
||
'detail.backToSessions': 'Back to Sessions',
|
||
'detail.backToLiteTasks': 'Back to {type}',
|
||
'detail.created': 'Created:',
|
||
'detail.archived': 'Archived:',
|
||
'detail.project': 'Project:',
|
||
'detail.tasks': 'Tasks:',
|
||
'detail.completed': 'completed',
|
||
|
||
// Task status
|
||
'task.status.pending': 'Pending',
|
||
'task.status.inProgress': 'In Progress',
|
||
'task.status.completed': 'Completed',
|
||
'task.completed': 'completed',
|
||
'task.inProgress': 'in progress',
|
||
'task.pending': 'pending',
|
||
|
||
// Task actions
|
||
'task.quickActions': 'Quick Actions:',
|
||
'task.allPending': 'All Pending',
|
||
'task.allInProgress': 'All In Progress',
|
||
'task.allCompleted': 'All Completed',
|
||
'task.setAllConfirm': 'Set all {count} tasks to "{status}"?',
|
||
'task.statusUpdated': 'Task {id} status updated',
|
||
'task.tasksUpdated': 'All {count} tasks updated',
|
||
'task.noPendingTasks': 'No pending tasks to start',
|
||
'task.noInProgressTasks': 'No in-progress tasks to complete',
|
||
'task.movedToInProgress': '{count} tasks moved to In Progress',
|
||
'task.tasksCompleted': '{count} tasks completed',
|
||
|
||
// Context tab
|
||
'context.description': 'description:',
|
||
'context.requirements': 'requirements:',
|
||
'context.focusPaths': 'focus_paths:',
|
||
'context.modificationPoints': 'modification_points:',
|
||
'context.acceptance': 'acceptance:',
|
||
'context.noData': 'No context data',
|
||
'context.loading': 'Loading context data...',
|
||
'context.loadError': 'Failed to load context: {error}',
|
||
|
||
// Flow control
|
||
'flow.implementationApproach': 'implementation_approach:',
|
||
'flow.preAnalysis': 'pre_analysis:',
|
||
'flow.targetFiles': 'target_files:',
|
||
'flow.noData': 'No flow control data',
|
||
|
||
// Summary tab
|
||
'summary.loading': 'Loading summaries...',
|
||
'summary.title': 'Summaries',
|
||
'summary.hint': 'Session summaries will be loaded from .summaries/',
|
||
'summary.noSummaries': 'No Summaries',
|
||
'summary.noSummariesText': 'No summaries found in .summaries/',
|
||
|
||
// IMPL Plan tab
|
||
'implPlan.loading': 'Loading IMPL plan...',
|
||
'implPlan.title': 'IMPL Plan',
|
||
'implPlan.hint': 'IMPL plan will be loaded from IMPL_PLAN.md',
|
||
|
||
// Review tab
|
||
'review.loading': 'Loading review data...',
|
||
'review.title': 'Review Data',
|
||
'review.hint': 'Review data will be loaded from review files',
|
||
|
||
// CLI Manager
|
||
'cli.tools': 'CLI Tools',
|
||
'cli.available': 'available',
|
||
'cli.refreshStatus': 'Refresh Status',
|
||
'cli.ready': 'Ready',
|
||
'cli.notInstalled': 'Not Installed',
|
||
'cli.setDefault': 'Set Default',
|
||
'cli.default': 'Default',
|
||
'cli.install': 'Install',
|
||
'cli.uninstall': 'Uninstall',
|
||
'cli.openManager': 'Manager',
|
||
'cli.initIndex': 'Init Index',
|
||
'cli.geminiDesc': 'Google AI for code analysis',
|
||
'cli.qwenDesc': 'Alibaba AI assistant',
|
||
'cli.codexDesc': 'OpenAI code generation',
|
||
'cli.codexLensDesc': 'Code indexing & FTS search',
|
||
'cli.codexLensDescFull': 'Full-text code search engine',
|
||
'cli.semanticDesc': 'AI-powered code understanding',
|
||
'cli.semanticDescFull': 'Natural language code search',
|
||
'cli.apiEndpoints': 'API Endpoints',
|
||
'cli.configured': 'configured',
|
||
'cli.addToCli': 'Add to CLI',
|
||
'cli.enabled': 'Enabled',
|
||
'cli.disabled': 'Disabled',
|
||
'cli.cliWrapper': 'CLI Wrapper',
|
||
'cli.wrapper': 'Wrapper',
|
||
'cli.customClaudeSettings': 'Custom Claude CLI settings',
|
||
'cli.updateFailed': 'Failed to update',
|
||
|
||
// CLI Tool Config - Environment File
|
||
'cli.envFile': 'Environment File',
|
||
'cli.envFileOptional': '(optional)',
|
||
'cli.envFilePlaceholder': 'Path to .env file (e.g., ~/.gemini-env or C:/Users/xxx/.env)',
|
||
'cli.envFileHint': 'Load environment variables (e.g., API keys) before CLI execution. Supports ~ for home directory.',
|
||
'cli.envFileBrowse': 'Browse',
|
||
'cli.envFilePathHint': 'Please verify or complete the file path (e.g., ~/.gemini-env)',
|
||
'cli.fileBrowser': 'File Browser',
|
||
'cli.fileBrowserSelect': 'Select',
|
||
'cli.fileBrowserCancel': 'Cancel',
|
||
'cli.fileBrowserUp': 'Parent Directory',
|
||
'cli.fileBrowserHome': 'Home',
|
||
'cli.fileBrowserShowHidden': 'Show hidden files',
|
||
'cli.fileBrowserApiError': 'Server restart required to enable file browser',
|
||
'cli.fileBrowserManualHint': 'Type the full path above and click Select (e.g., C:\\Users\\name\\.gemini)',
|
||
|
||
// CLI History & Execution
|
||
'cli.executionHistory': 'Execution History',
|
||
'cli.conversationDetail': 'Conversation Detail',
|
||
'cli.nativeSessionDetail': 'Native Session Detail',
|
||
'cli.viewFullConversation': 'View Full Process Conversation',
|
||
'cli.perTurnView': 'Per-Turn View',
|
||
'cli.concatenatedView': 'Concatenated View',
|
||
'cli.userPrompt': 'User Prompt',
|
||
'cli.assistantResponse': 'Assistant Response',
|
||
'cli.user': 'User',
|
||
'cli.assistant': 'Assistant',
|
||
'cli.latest': 'Latest',
|
||
'cli.turn': 'Turn',
|
||
'cli.thinkingProcess': 'Thinking Process',
|
||
'cli.thoughts': 'thoughts',
|
||
'cli.toolCalls': 'Tool Calls',
|
||
'cli.totalTokens': 'Total Tokens',
|
||
'cli.input': 'Input',
|
||
'cli.output': 'Output',
|
||
'cli.cached': 'Cached',
|
||
'cli.concatenatedPrompt': 'Concatenated Prompt (sent to CLI)',
|
||
'cli.sessionId': 'Session ID',
|
||
|
||
// CLI History Actions & Buttons
|
||
'cli.refresh': 'Refresh',
|
||
'cli.copyId': 'Copy ID',
|
||
'cli.copyFullPrompt': 'Copy Full Prompt',
|
||
'cli.delete': 'Delete',
|
||
'cli.exportJson': 'Export JSON',
|
||
'cli.copyFilePath': 'Copy File Path',
|
||
'cli.copySessionId': 'Copy Session ID',
|
||
'cli.viewNativeSession': 'View Native Session',
|
||
'cli.viewDetails': 'View Details',
|
||
'cli.searchHistory': 'Search history...',
|
||
'cli.allTools': 'All Tools',
|
||
'cli.noExecutions': 'No executions yet',
|
||
'cli.noMatchingResults': 'No matching results',
|
||
|
||
// CLI History Messages
|
||
'cli.conversationNotFound': 'Conversation not found',
|
||
'cli.nativeSessionNotFound': 'Native session not found',
|
||
'cli.historyRefreshed': 'History refreshed',
|
||
'cli.executionDeleted': 'Execution deleted',
|
||
'cli.deleteFailed': 'Delete failed',
|
||
'cli.idCopied': 'ID copied',
|
||
'cli.promptCopied': 'Prompt copied to clipboard',
|
||
'cli.fullPromptCopied': 'Full prompt copied to clipboard',
|
||
'cli.sessionIdCopied': 'Session ID copied',
|
||
'cli.filePathCopied': 'File path copied',
|
||
'cli.pathNotAvailable': 'Path not available',
|
||
'cli.noSessionData': 'No session data',
|
||
'cli.sessionExported': 'Session exported',
|
||
'cli.failedToCopy': 'Failed to copy',
|
||
'cli.executionNotFound': 'Execution not found',
|
||
|
||
// CLI History Confirm Dialog
|
||
'cli.confirmDelete': 'Delete this execution record? This action cannot be undone.',
|
||
'cli.nativeSessionBadge': 'Native session',
|
||
|
||
// CodexLens Configuration
|
||
'codexlens.config': 'CodexLens Configuration',
|
||
'codexlens.configDesc': 'Manage code indexing, semantic search, and embedding models',
|
||
'codexlens.status': 'Status',
|
||
'codexlens.installed': 'Installed',
|
||
'codexlens.notInstalled': 'Not Installed',
|
||
'codexlens.installFirst': 'Install CodexLens to access semantic search and model management features',
|
||
'codexlens.indexes': 'Indexes',
|
||
'codexlens.currentWorkspace': 'Current Workspace',
|
||
'codexlens.indexStoragePath': 'Index Storage Path',
|
||
'codexlens.whereIndexesStored': 'where indexes are stored',
|
||
'codexlens.currentPath': 'Current Path',
|
||
'codexlens.newStoragePath': 'New Storage Path',
|
||
'codexlens.pathPlaceholder': 'e.g., /path/to/indexes or ~/.codexlens/indexes',
|
||
'codexlens.pathInfo': 'Supports ~ for home directory. Changes take effect immediately.',
|
||
'codexlens.pathUnchanged': 'Path unchanged',
|
||
'codexlens.pathEmpty': 'Path cannot be empty',
|
||
'codexlens.migrationRequired': 'Migration Required',
|
||
'codexlens.migrationWarning': 'After changing the path, existing indexes will need to be re-initialized for each workspace.',
|
||
'codexlens.actions': 'Actions',
|
||
'codexlens.initializeIndex': 'Initialize Index',
|
||
'codexlens.cleanCurrentWorkspace': 'Clean Current Workspace',
|
||
'codexlens.cleanAllIndexes': 'Clean All Indexes',
|
||
'codexlens.installCodexLens': 'Install CodexLens',
|
||
'codexlens.createIndex': 'Create Index',
|
||
'codexlens.indexManagement': 'Management',
|
||
'codexlens.incrementalUpdate': 'Incremental Update',
|
||
'codexlens.environmentVariables': 'Environment Variables',
|
||
'codexlens.envGroup.embedding': 'Embedding Configuration',
|
||
'codexlens.envGroup.reranker': 'Reranker Configuration',
|
||
'codexlens.envGroup.concurrency': 'Concurrency Settings',
|
||
'codexlens.envGroup.cascade': 'Cascade Search Settings',
|
||
'codexlens.envGroup.chunking': 'Chunking Options',
|
||
'codexlens.envGroup.llm': 'LLM Features',
|
||
// Environment variable field labels
|
||
'codexlens.envField.backend': 'Backend',
|
||
'codexlens.envField.model': 'Model',
|
||
'codexlens.envField.useGpu': 'Use GPU',
|
||
'codexlens.envField.highAvailability': 'High Availability',
|
||
'codexlens.envField.loadBalanceStrategy': 'Load Balance Strategy',
|
||
'codexlens.envField.rateLimitCooldown': 'Rate Limit Cooldown (s)',
|
||
'codexlens.envField.enabled': 'Enabled',
|
||
'codexlens.envField.topKResults': 'Top K Results',
|
||
'codexlens.envField.maxWorkers': 'Max Workers',
|
||
'codexlens.envField.batchSize': 'Batch Size (Static)',
|
||
'codexlens.envField.dynamicBatchSize': 'Dynamic Batch Size',
|
||
'codexlens.envField.batchSizeUtilization': 'Utilization Factor',
|
||
'codexlens.envField.batchSizeMax': 'Max Batch Size',
|
||
'codexlens.envField.charsPerToken': 'Chars per Token',
|
||
'codexlens.envField.searchStrategy': 'Search Strategy',
|
||
'codexlens.envField.coarseK': 'Coarse K (1st stage)',
|
||
'codexlens.envField.fineK': 'Fine K (final)',
|
||
'codexlens.envField.stripComments': 'Strip Comments',
|
||
'codexlens.envField.stripDocstrings': 'Strip Docstrings',
|
||
'codexlens.envField.testFilePenalty': 'Test File Penalty',
|
||
'codexlens.envField.docstringWeight': 'Docstring Weight',
|
||
'codexlens.usingApiReranker': 'Using API Reranker',
|
||
'codexlens.currentModel': 'Current Model',
|
||
'codexlens.localModels': 'Local Models',
|
||
'codexlens.active': 'Active',
|
||
'codexlens.useLocal': 'Use Local',
|
||
'codexlens.select': 'Select',
|
||
'codexlens.switchedToLocal': 'Switched to local',
|
||
'codexlens.configuredInApiSettings': 'Configured in API Settings',
|
||
'codexlens.commonModels': 'Common Models',
|
||
'codexlens.selectApiModel': 'Select API model...',
|
||
'codexlens.selectLocalModel': 'Select local model...',
|
||
'codexlens.noConfiguredModels': 'No models configured in API Settings',
|
||
'codexlens.autoDownloadHint': 'Models are auto-downloaded on first use',
|
||
'codexlens.embeddingBackend': 'Embedding Backend',
|
||
'codexlens.localFastembed': 'Local (FastEmbed)',
|
||
'codexlens.apiLitellm': 'API (LiteLLM)',
|
||
'codexlens.backendHint': 'Select local model or remote API endpoint',
|
||
'codexlens.noApiModels': 'No API embedding models configured',
|
||
'codexlens.embeddingModel': 'Embedding Model',
|
||
'codexlens.modelHint': 'Select embedding model for vector search (models with ✓ are installed)',
|
||
'codexlens.concurrency': 'API Concurrency',
|
||
'codexlens.concurrencyHint': 'Number of parallel API calls. Higher values speed up indexing but may hit rate limits.',
|
||
'codexlens.concurrencyCustom': 'Custom',
|
||
'codexlens.rotation': 'Multi-Provider Rotation',
|
||
'codexlens.rotationDesc': 'Aggregate multiple API providers and keys for parallel embedding generation',
|
||
'codexlens.rotationEnabled': 'Enable Rotation',
|
||
'codexlens.rotationStrategy': 'Rotation Strategy',
|
||
'codexlens.strategyRoundRobin': 'Round Robin',
|
||
'codexlens.strategyLatencyAware': 'Latency Aware',
|
||
'codexlens.strategyWeightedRandom': 'Weighted Random',
|
||
'codexlens.targetModel': 'Target Model',
|
||
'codexlens.targetModelHint': 'Model name that all providers should support (e.g., qwen3-embedding)',
|
||
'codexlens.cooldownSeconds': 'Cooldown (seconds)',
|
||
'codexlens.cooldownHint': 'Default cooldown after rate limit (60s recommended)',
|
||
'codexlens.rotationProviders': 'Rotation Providers',
|
||
'codexlens.addProvider': 'Add Provider',
|
||
'codexlens.noRotationProviders': 'No providers configured for rotation',
|
||
'codexlens.providerWeight': 'Weight',
|
||
'codexlens.maxConcurrentPerKey': 'Max Concurrent/Key',
|
||
'codexlens.useAllKeys': 'Use All Keys',
|
||
'codexlens.selectKeys': 'Select Keys',
|
||
'codexlens.configureRotation': 'Configure Rotation',
|
||
'codexlens.configureInApiSettings': 'Configure in API Settings',
|
||
'codexlens.rotationSaved': 'Rotation config saved successfully',
|
||
'codexlens.endpointsSynced': 'endpoints synced to CodexLens',
|
||
'codexlens.syncFailed': 'Sync failed',
|
||
'codexlens.rotationDeleted': 'Rotation config deleted',
|
||
'codexlens.totalEndpoints': 'Total Endpoints',
|
||
'codexlens.fullIndex': 'Full',
|
||
'codexlens.vectorIndex': 'Vector',
|
||
'codexlens.ftsIndex': 'FTS',
|
||
'codexlens.fullIndexDesc': 'FTS + Semantic search (recommended)',
|
||
'codexlens.vectorIndexDesc': 'Semantic search with embeddings only',
|
||
'codexlens.ftsIndexDesc': 'Fast full-text search only',
|
||
'codexlens.indexTypeHint': 'Full index includes FTS + semantic search. FTS only is faster but without AI-powered search.',
|
||
'codexlens.maintenance': 'Maintenance',
|
||
'codexlens.testSearch': 'Test Search',
|
||
'codexlens.testFunctionality': 'test CodexLens functionality',
|
||
'codexlens.textSearch': 'Text Search',
|
||
'codexlens.fileSearch': 'File Search',
|
||
'codexlens.symbolSearch': 'Symbol Search',
|
||
'codexlens.exactMode': 'Exact',
|
||
'codexlens.fuzzyMode': 'Fuzzy (Trigram)',
|
||
'codexlens.hybridMode': 'Hybrid (RRF)',
|
||
'codexlens.vectorMode': 'Vector (Semantic)',
|
||
'codexlens.searchPlaceholder': 'Enter search query (e.g., function name, file path, code snippet)',
|
||
'codexlens.runSearch': 'Run Search',
|
||
'codexlens.results': 'Results',
|
||
'codexlens.resultsCount': 'results',
|
||
'codexlens.resultLimit': 'Limit',
|
||
'codexlens.contentLength': 'Content Length',
|
||
'codexlens.extraFiles': 'Extra Files',
|
||
'codexlens.saveConfig': 'Save Configuration',
|
||
'codexlens.searching': 'Searching...',
|
||
'codexlens.searchCompleted': 'Search completed',
|
||
'codexlens.searchFailed': 'Search failed',
|
||
'codexlens.enterQuery': 'Please enter a search query',
|
||
'codexlens.configSaved': 'Configuration saved successfully',
|
||
'codexlens.pathEmpty': 'Index directory path cannot be empty',
|
||
'codexlens.cleanConfirm': 'Are you sure you want to clean all CodexLens indexes? This cannot be undone.',
|
||
'codexlens.cleanCurrentWorkspaceConfirm': 'Are you sure you want to clean the current workspace index? This cannot be undone.',
|
||
'codexlens.cleaning': 'Cleaning indexes...',
|
||
'codexlens.cleanSuccess': 'All indexes cleaned successfully',
|
||
'codexlens.cleanCurrentWorkspaceSuccess': 'Current workspace index cleaned successfully',
|
||
'codexlens.cleanFailed': 'Failed to clean indexes',
|
||
'codexlens.loadingConfig': 'Loading configuration...',
|
||
|
||
// Workspace Index Status
|
||
'codexlens.workspaceStatus': 'Workspace Index Status',
|
||
'codexlens.noIndexFound': 'No index found for current workspace',
|
||
'codexlens.filesIndexed': 'files indexed',
|
||
'codexlens.filesWithEmbeddings': 'files with embeddings',
|
||
'codexlens.vectorSearchEnabled': 'Vector search enabled',
|
||
'codexlens.vectorSearchPartial': 'Vector search requires ≥50% coverage',
|
||
|
||
// Model Management
|
||
'codexlens.semanticDeps': 'Semantic Dependencies',
|
||
'codexlens.checkingDeps': 'Checking dependencies...',
|
||
'codexlens.semanticInstalled': 'Semantic dependencies installed',
|
||
'codexlens.semanticNotInstalled': 'Semantic dependencies not installed',
|
||
'codexlens.installDeps': 'Install Dependencies',
|
||
'codexlens.installDepsPrompt': 'Would you like to install them now? (This may take a few minutes)\n\nClick "Cancel" to create FTS index only.',
|
||
'codexlens.installingDeps': 'Installing dependencies...',
|
||
'codexlens.installingMode': 'Installing with',
|
||
'codexlens.depsInstalled': 'Dependencies installed successfully',
|
||
'codexlens.depsInstallFailed': 'Failed to install dependencies',
|
||
|
||
// SPLADE Dependencies
|
||
'codexlens.spladeDeps': 'SPLADE Sparse Retrieval',
|
||
'codexlens.spladeInstalled': 'SPLADE Available',
|
||
'codexlens.spladeNotInstalled': 'SPLADE Not Installed',
|
||
'codexlens.spladeInstallHint': 'Install for improved synonym matching in code search',
|
||
'codexlens.installingSpladePackage': 'Installing SPLADE package',
|
||
'codexlens.spladeInstallSuccess': 'SPLADE installed successfully',
|
||
'codexlens.spladeInstallFailed': 'SPLADE installation failed',
|
||
'codexlens.spladeModel': 'Model',
|
||
'codexlens.spladeIndexStatus': 'SPLADE Index',
|
||
'codexlens.spladeIndexExists': 'Index available',
|
||
'codexlens.spladeIndexMissing': 'No SPLADE index',
|
||
'codexlens.spladeRebuild': 'Rebuild SPLADE Index',
|
||
'codexlens.spladeRebuilding': 'Rebuilding SPLADE index...',
|
||
'codexlens.spladeRebuildSuccess': 'SPLADE index rebuilt',
|
||
'codexlens.spladeRebuildFailed': 'SPLADE index rebuild failed',
|
||
'codexlens.spladeChunks': 'Chunks',
|
||
'codexlens.spladePostings': 'Postings',
|
||
|
||
// GPU Mode Selection
|
||
'codexlens.selectGpuMode': 'Select acceleration mode',
|
||
'codexlens.cpuModeDesc': 'Standard CPU processing',
|
||
'codexlens.directmlModeDesc': 'Windows GPU (NVIDIA/AMD/Intel)',
|
||
'codexlens.cudaModeDesc': 'NVIDIA GPU (requires CUDA Toolkit)',
|
||
'common.recommended': 'Recommended',
|
||
'common.unavailable': 'Unavailable',
|
||
'common.auto': 'Auto',
|
||
|
||
// GPU Device Selection
|
||
'codexlens.selectGpuDevice': 'Select GPU Device',
|
||
'codexlens.discrete': 'Discrete',
|
||
'codexlens.integrated': 'Integrated',
|
||
'codexlens.selectingGpu': 'Selecting GPU...',
|
||
'codexlens.gpuSelected': 'GPU selected',
|
||
'codexlens.resettingGpu': 'Resetting GPU selection...',
|
||
'codexlens.gpuReset': 'GPU selection reset to auto',
|
||
'codexlens.resetToAuto': 'Reset to Auto',
|
||
'codexlens.modelManagement': 'Model Management',
|
||
'codexlens.loadingModels': 'Loading models...',
|
||
'codexlens.downloadModel': 'Download',
|
||
'codexlens.deleteModel': 'Delete',
|
||
'codexlens.downloading': 'Downloading...',
|
||
'codexlens.deleting': 'Deleting...',
|
||
'codexlens.modelDownloaded': 'Model downloaded',
|
||
'codexlens.modelDownloadFailed': 'Model download failed',
|
||
'codexlens.modelDeleted': 'Model deleted',
|
||
'codexlens.modelDeleteFailed': 'Model deletion failed',
|
||
'codexlens.deleteModelConfirm': 'Are you sure you want to delete model',
|
||
'codexlens.modelListError': 'Failed to load models',
|
||
'codexlens.noModelsAvailable': 'No models available',
|
||
|
||
// FastEmbed Installation
|
||
'codexlens.fastembedNotInstalled': 'FastEmbed not installed',
|
||
'codexlens.fastembedDesc': 'FastEmbed provides local embedding models for semantic search',
|
||
'codexlens.selectMode': 'Select Mode',
|
||
'codexlens.cpuModeShort': 'Standard',
|
||
'codexlens.directmlModeShort': 'Windows GPU',
|
||
'codexlens.cudaModeShort': 'NVIDIA GPU',
|
||
'codexlens.installFastembed': 'Install FastEmbed',
|
||
'codexlens.installingFastembed': 'Installing FastEmbed...',
|
||
'codexlens.installMayTakeTime': 'This may take several minutes...',
|
||
'codexlens.fastembedInstalled': 'FastEmbed Installed',
|
||
'codexlens.fastembedInstallFailed': 'FastEmbed installation failed',
|
||
'codexlens.installFastembedFirst': 'Install FastEmbed above to manage local embedding models',
|
||
'codexlens.detectedGpus': 'Detected GPUs',
|
||
'codexlens.reinstallOptions': 'Reinstall Options',
|
||
'codexlens.reinstallDesc': 'Reinstall with a different GPU mode:',
|
||
'codexlens.confirmReinstall': 'This will reinstall FastEmbed. Continue?',
|
||
'codexlens.fastembedReinstalled': 'FastEmbed reinstalled',
|
||
'codexlens.reinstallingFastembed': 'Reinstalling FastEmbed...',
|
||
'codexlens.activeAccelerator': 'Active Accelerator',
|
||
'codexlens.active': 'Active',
|
||
'codexlens.downloadedModels': 'Downloaded Models',
|
||
'codexlens.noLocalModels': 'No models downloaded',
|
||
'codexlens.configuredModels': 'Configured in API Settings',
|
||
'codexlens.commonModels': 'Common Models',
|
||
|
||
// Model Download Progress
|
||
'codexlens.downloadingModel': 'Downloading',
|
||
'codexlens.connectingToHuggingFace': 'Connecting to Hugging Face...',
|
||
'codexlens.downloadTimeEstimate': 'Estimated time',
|
||
'codexlens.manualDownloadHint': 'Manual download',
|
||
'codexlens.downloadingModelFiles': 'Downloading model files...',
|
||
'codexlens.downloadingWeights': 'Downloading model weights...',
|
||
'codexlens.downloadingTokenizer': 'Downloading tokenizer...',
|
||
'codexlens.verifyingModel': 'Verifying model...',
|
||
'codexlens.finalizingDownload': 'Finalizing...',
|
||
'codexlens.downloadComplete': 'Download complete!',
|
||
'codexlens.downloadFailed': 'Download failed',
|
||
'codexlens.manualDownloadOptions': 'Manual download options',
|
||
'codexlens.cliDownload': 'CLI',
|
||
'codexlens.huggingfaceDownload': 'Hugging Face',
|
||
'codexlens.downloadCanceled': 'Download canceled',
|
||
|
||
// Manual Download Guide
|
||
'codexlens.manualDownloadGuide': 'Manual Download Guide',
|
||
'codexlens.cliMethod': 'Command Line (Recommended)',
|
||
'codexlens.cliMethodDesc': 'Run in terminal with progress display:',
|
||
'codexlens.pythonMethod': 'Python Script',
|
||
'codexlens.pythonMethodDesc': 'Pre-download model using Python:',
|
||
'codexlens.hfHubMethod': 'Hugging Face Hub CLI',
|
||
'codexlens.hfHubMethodDesc': 'Download using huggingface-cli with resume support:',
|
||
'codexlens.modelLinks': 'Direct Model Links',
|
||
'codexlens.cacheLocation': 'Model Storage Location',
|
||
'common.copied': 'Copied to clipboard',
|
||
|
||
// CodexLens Indexing Progress
|
||
'codexlens.indexing': 'Indexing',
|
||
'codexlens.indexingDesc': 'Building code index for workspace',
|
||
'codexlens.preparingIndex': 'Preparing index...',
|
||
'codexlens.filesProcessed': 'Files processed',
|
||
'codexlens.indexComplete': 'Index complete',
|
||
'codexlens.indexSuccess': 'Index created successfully',
|
||
'codexlens.indexFailed': 'Indexing failed',
|
||
'codexlens.embeddingsFailed': 'Embeddings generation failed',
|
||
'codexlens.ftsSuccessEmbeddingsFailed': 'FTS index created, but embeddings failed',
|
||
|
||
// CodexLens Install
|
||
'codexlens.installDesc': 'Python-based code indexing engine',
|
||
'codexlens.whatWillBeInstalled': 'What will be installed:',
|
||
'codexlens.pythonVenv': 'Python virtual environment',
|
||
'codexlens.pythonVenvDesc': 'Isolated Python environment',
|
||
'codexlens.codexlensPackage': 'CodexLens package',
|
||
'codexlens.codexlensPackageDesc': 'Code indexing and search engine',
|
||
'codexlens.sqliteFtsDesc': 'Full-text search database',
|
||
'codexlens.installLocation': 'Installation Location',
|
||
'codexlens.installTime': 'First installation may take 2-3 minutes to download and setup Python packages.',
|
||
'codexlens.startingInstall': 'Starting installation...',
|
||
'codexlens.installing': 'Installing...',
|
||
'codexlens.creatingVenv': 'Creating virtual environment...',
|
||
'codexlens.installingPip': 'Installing pip packages...',
|
||
'codexlens.installingPackage': 'Installing CodexLens package...',
|
||
'codexlens.settingUpDeps': 'Setting up Python dependencies...',
|
||
'codexlens.installComplete': 'Installation complete!',
|
||
'codexlens.installSuccess': 'CodexLens installed successfully!',
|
||
'codexlens.installNow': 'Install Now',
|
||
'codexlens.accelerator': 'Accelerator',
|
||
|
||
// CodexLens Uninstall
|
||
'codexlens.uninstall': 'Uninstall',
|
||
'codexlens.uninstallDesc': 'Remove CodexLens and all data',
|
||
'codexlens.whatWillBeRemoved': 'What will be removed:',
|
||
'codexlens.removeVenv': 'Virtual environment at ~/.codexlens/venv',
|
||
'codexlens.removeData': 'All CodexLens indexed data and databases',
|
||
'codexlens.removeConfig': 'Configuration and semantic search models',
|
||
'codexlens.removing': 'Removing files...',
|
||
'codexlens.uninstalling': 'Uninstalling...',
|
||
'codexlens.removingVenv': 'Removing virtual environment...',
|
||
'codexlens.removingData': 'Deleting indexed data...',
|
||
'codexlens.removingConfig': 'Cleaning up configuration...',
|
||
'codexlens.finalizing': 'Finalizing removal...',
|
||
'codexlens.uninstallComplete': 'Uninstallation complete!',
|
||
'codexlens.uninstallSuccess': 'CodexLens uninstalled successfully!',
|
||
|
||
// Ignore Patterns
|
||
'codexlens.ignorePatterns': 'Ignore Patterns',
|
||
'codexlens.ignorePatternsDesc': 'Configure directories and files to exclude from indexing. Changes apply to new indexes only.',
|
||
'codexlens.directoryPatterns': 'Directory Patterns',
|
||
'codexlens.extensionFilters': 'Extension Filters',
|
||
'codexlens.directoryPatternsHint': 'One pattern per line (e.g., node_modules, .git)',
|
||
'codexlens.extensionFiltersHint': 'Files skipped for embedding (e.g., *.min.js)',
|
||
'codexlens.ignorePatternsSaved': 'Ignore patterns saved',
|
||
'codexlens.ignorePatternReset': 'Reset to defaults (click Save to apply)',
|
||
'common.patterns': 'patterns',
|
||
'common.resetToDefaults': 'Reset to Defaults',
|
||
|
||
// Index Manager
|
||
'index.manager': 'Index Manager',
|
||
'index.projects': 'Projects',
|
||
'index.totalSize': 'Total Size',
|
||
'index.vectorIndexes': 'Vector',
|
||
'index.ftsIndexes': 'FTS',
|
||
'index.projectId': 'Project ID',
|
||
'index.size': 'Size',
|
||
'index.type': 'Type',
|
||
'index.lastModified': 'Modified',
|
||
'index.vector': 'Vector',
|
||
'index.fts': 'FTS',
|
||
'index.noIndexes': 'No indexes yet',
|
||
'index.notConfigured': 'Not configured',
|
||
'index.initCurrent': 'Init Current Project',
|
||
'index.cleanAll': 'Clean All',
|
||
'index.cleanProject': 'Clean Index',
|
||
'index.cleanProjectConfirm': 'Clean index for',
|
||
'index.cleaning': 'Cleaning index...',
|
||
'index.cleanSuccess': 'Index cleaned successfully',
|
||
'index.cleanFailed': 'Clean failed',
|
||
'index.cleanAllConfirm': 'Are you sure you want to clean ALL indexes? This cannot be undone.',
|
||
'index.cleanAllSuccess': 'All indexes cleaned',
|
||
'index.vectorIndex': 'Vector',
|
||
'index.normalIndex': 'FTS',
|
||
'index.fullIndex': 'Full Index',
|
||
'index.vectorDesc': 'Semantic search with embeddings',
|
||
'index.normalDesc': 'Fast full-text search only',
|
||
'index.fullDesc': 'FTS + Semantic search (recommended)',
|
||
'index.selectModel': 'Select embedding model',
|
||
'index.modelCode': 'Code (768d)',
|
||
'index.modelBase': 'Base (768d)',
|
||
'index.modelFast': 'Fast (384d)',
|
||
'index.modelMinilm': 'MiniLM (384d)',
|
||
'index.modelMultilingual': 'Multilingual (1024d) ⚠️',
|
||
'index.modelBalanced': 'Balanced (1024d) ⚠️',
|
||
'index.dimensionWarning': '1024d models require more resources',
|
||
|
||
// Semantic Search Configuration
|
||
'semantic.settings': 'Semantic Search Settings',
|
||
'semantic.testSearch': 'Test Semantic Search',
|
||
'semantic.searchPlaceholder': 'Enter semantic query (e.g., authentication logic, error handling)',
|
||
'semantic.runSearch': 'Run Semantic Search',
|
||
'semantic.close': 'Close',
|
||
|
||
'cli.settings': 'Settings',
|
||
|
||
// Language Settings
|
||
'lang.settings': 'Response Language',
|
||
'lang.settingsDesc': 'Configure Claude response language preference',
|
||
'lang.chinese': 'Chinese Response',
|
||
'lang.chineseDesc': 'Enable Chinese response guidelines in global CLAUDE.md',
|
||
'lang.chineseDescClaude': 'Enable in ~/.claude/CLAUDE.md',
|
||
'lang.chineseDescCodex': 'Enable in ~/.codex/AGENTS.md',
|
||
'lang.enabled': 'Enabled',
|
||
'lang.disabled': 'Disabled',
|
||
'lang.enableSuccess': 'Chinese response enabled',
|
||
'lang.disableSuccess': 'Chinese response disabled',
|
||
'lang.enableFailed': 'Failed to enable Chinese response',
|
||
'lang.disableFailed': 'Failed to disable Chinese response',
|
||
'lang.windows': 'Windows Platform',
|
||
'lang.windowsDesc': 'Enable Windows path format guidelines in global CLAUDE.md',
|
||
'lang.windowsEnableSuccess': 'Windows platform guidelines enabled',
|
||
'lang.windowsDisableSuccess': 'Windows platform guidelines disabled',
|
||
'lang.windowsEnableFailed': 'Failed to enable Windows platform guidelines',
|
||
'lang.windowsDisableFailed': 'Failed to disable Windows platform guidelines',
|
||
'lang.installRequired': 'Run "ccw install" to enable this feature',
|
||
|
||
// CCW Installation Status
|
||
'status.installed': 'Installed',
|
||
'status.incomplete': 'Incomplete',
|
||
'status.notInstalled': 'Not Installed',
|
||
'status.ccwInstall': 'CCW Workflows',
|
||
'status.ccwInstallDesc': 'Required workflow files for full functionality',
|
||
'status.required': 'Required',
|
||
'status.filesMissing': 'files missing',
|
||
'status.missingFiles': 'Missing files',
|
||
'status.runToFix': 'Run to fix',
|
||
|
||
'cli.promptFormat': 'Prompt Format',
|
||
'cli.promptFormatDesc': 'Format for multi-turn conversation concatenation',
|
||
'cli.storageBackend': 'Storage Backend',
|
||
'cli.storageBackendDesc': 'CLI history stored in SQLite with FTS search',
|
||
'cli.smartContext': 'Smart Context',
|
||
'cli.smartContextDesc': 'Auto-analyze prompt and add relevant file paths',
|
||
'cli.nativeResume': 'Native Resume',
|
||
'cli.nativeResumeDesc': 'Use native tool resume (gemini -r, qwen --resume, codex resume)',
|
||
'cli.recursiveQuery': 'Recursive Query',
|
||
'cli.recursiveQueryDesc': 'Aggregate CLI history and memory data from parent and child projects',
|
||
'cli.maxContextFiles': 'Max Context Files',
|
||
'cli.maxContextFilesDesc': 'Maximum files to include in smart context',
|
||
|
||
// CCW Install
|
||
'ccw.install': 'CCW Install',
|
||
'ccw.installations': 'installation',
|
||
'ccw.installationsPlural': 'installations',
|
||
'ccw.noInstallations': 'No installations found',
|
||
'ccw.installCcw': 'Install CCW',
|
||
'ccw.upgrade': 'Upgrade',
|
||
'ccw.uninstall': 'Uninstall',
|
||
'ccw.files': 'files',
|
||
'ccw.globalInstall': 'Global Installation',
|
||
'ccw.globalInstallDesc': 'Install to user home directory (~/.claude)',
|
||
'ccw.pathInstall': 'Path Installation',
|
||
'ccw.pathInstallDesc': 'Install to a specific project folder',
|
||
'ccw.installPath': 'Installation Path',
|
||
'ccw.installToPath': 'Install to Path',
|
||
'ccw.uninstallConfirm': 'Uninstall CCW from this location?',
|
||
'ccw.upgradeStarting': 'Starting upgrade...',
|
||
'ccw.upgradeCompleted': 'Upgrade completed! Refreshing...',
|
||
'ccw.upgradeFailed': 'Upgrade failed: {error}',
|
||
|
||
// CCW Endpoint Tools
|
||
'ccw.endpointTools': 'CCW Endpoint Tools',
|
||
'ccw.tool': 'tool',
|
||
'ccw.tools': 'tools',
|
||
'ccw.noEndpointTools': 'No endpoint tools found',
|
||
'ccw.parameters': 'Parameters',
|
||
'ccw.required': 'required',
|
||
'ccw.optional': 'optional',
|
||
'ccw.default': 'Default:',
|
||
'ccw.options': 'Options:',
|
||
'ccw.noParams': 'This tool has no parameters',
|
||
'ccw.usageExample': 'Usage Example',
|
||
'ccw.endpointTool': 'endpoint tool',
|
||
|
||
// Explorer
|
||
'explorer.title': 'Explorer',
|
||
'explorer.refresh': 'Refresh',
|
||
'explorer.selectFile': 'Select a file to preview',
|
||
'explorer.selectFileHint': 'Select a file from the tree to preview its contents',
|
||
'explorer.loading': 'Loading file tree...',
|
||
'explorer.loadingFile': 'Loading file...',
|
||
'explorer.emptyDir': 'Empty directory',
|
||
'explorer.loadError': 'Failed to load: {error}',
|
||
'explorer.preview': 'Preview',
|
||
'explorer.source': 'Source',
|
||
'explorer.lines': 'lines',
|
||
'explorer.updateClaudeMd': 'Update CLAUDE.md',
|
||
'explorer.currentFolderOnly': 'Update CLAUDE.md (current folder only)',
|
||
'explorer.withSubdirs': 'Update CLAUDE.md (with subdirectories)',
|
||
|
||
// Task Queue
|
||
'taskQueue.title': 'Update Tasks',
|
||
'taskQueue.cli': 'CLI:',
|
||
'taskQueue.addTask': 'Add update task',
|
||
'taskQueue.startAll': 'Start all tasks',
|
||
'taskQueue.clearCompleted': 'Clear completed',
|
||
'taskQueue.noTasks': 'No tasks in queue',
|
||
'taskQueue.noTasksHint': 'Hover folder and click icons to add tasks',
|
||
'taskQueue.processing': 'Processing...',
|
||
'taskQueue.updated': 'Updated successfully',
|
||
'taskQueue.failed': 'Update failed',
|
||
'taskQueue.currentOnly': 'Current only',
|
||
'taskQueue.withSubdirs': 'With subdirs',
|
||
'taskQueue.startingTasks': 'Starting {count} task(s) in parallel...',
|
||
'taskQueue.queueCompleted': 'Queue completed: {success} succeeded, {failed} failed',
|
||
|
||
// Update CLAUDE.md Modal
|
||
'updateClaudeMd.title': 'Update CLAUDE.md',
|
||
'updateClaudeMd.targetDir': 'Target Directory',
|
||
'updateClaudeMd.cliTool': 'CLI Tool',
|
||
'updateClaudeMd.strategy': 'Strategy',
|
||
'updateClaudeMd.singleLayer': 'Single Layer - Current dir + child CLAUDE.md refs',
|
||
'updateClaudeMd.multiLayer': 'Multi Layer - Generate CLAUDE.md in all subdirs',
|
||
'updateClaudeMd.running': 'Running update...',
|
||
'updateClaudeMd.execute': 'Execute',
|
||
'updateClaudeMd.addToQueue': 'Add to Queue',
|
||
'updateClaudeMd.cancel': 'Cancel',
|
||
|
||
// MCP Manager
|
||
'mcp.currentAvailable': 'Current Available MCP',
|
||
'mcp.projectAvailable': 'Current Available MCP',
|
||
'mcp.newProjectServer': 'New Project Server',
|
||
'mcp.newServer': 'New Server',
|
||
'mcp.newGlobalServer': 'New Global Server',
|
||
'mcp.installToProject': 'Install to Project',
|
||
'mcp.installToGlobal': 'Install to Global',
|
||
'mcp.installToWorkspace': 'Install to Workspace',
|
||
'mcp.updateInWorkspace': 'Update in Workspace',
|
||
'mcp.updateInGlobal': 'Update in Global',
|
||
'mcp.serversConfigured': 'servers configured',
|
||
'mcp.serversAvailable': 'servers available',
|
||
'mcp.globalAvailable': '全局可用 MCP',
|
||
'mcp.globalServersFrom': '个服务器来自 ~/.claude.json',
|
||
'mcp.enterprise': 'Enterprise MCP Servers',
|
||
'mcp.enterpriseManaged': 'Managed',
|
||
'mcp.enterpriseReadOnly': 'servers (read-only)',
|
||
'mcp.user': 'User MCP Servers',
|
||
'mcp.userServersFrom': 'servers from ~/.claude.json',
|
||
'mcp.availableOther': 'Available from Other Projects',
|
||
'mcp.serversAvailable': 'servers available',
|
||
'mcp.allProjects': 'All Projects MCP Overview',
|
||
'mcp.projects': 'projects',
|
||
'mcp.project': 'Project',
|
||
'mcp.servers': 'MCP Servers',
|
||
'mcp.status': 'Status',
|
||
'mcp.current': '(Current)',
|
||
'mcp.noMcpServers': 'No MCP servers',
|
||
'mcp.add': 'Add',
|
||
'mcp.addToProject': 'Add to Project',
|
||
'mcp.installToProject': 'Install to project',
|
||
'mcp.installToGlobal': 'Install to global',
|
||
'mcp.removeFromProject': 'Remove from project',
|
||
'mcp.removeConfirm': 'Remove MCP server "{name}" from this project?',
|
||
'mcp.removeGlobal': 'Remove from global scope',
|
||
'mcp.removeGlobalConfirm': 'Remove global MCP server "{name}"? This will affect all projects.',
|
||
'mcp.readOnly': 'Read-only',
|
||
'mcp.usedIn': 'Used in {count} project',
|
||
'mcp.usedInPlural': 'Used in {count} projects',
|
||
'mcp.availableToAll': 'Available to all projects from ~/.claude.json',
|
||
'mcp.managedByOrg': 'Managed by organization (highest priority)',
|
||
'mcp.variables': 'variables',
|
||
'mcp.cmd': 'Command',
|
||
'mcp.url': 'URL',
|
||
'mcp.args': 'Arguments',
|
||
'mcp.env': 'Environment',
|
||
'mcp.usedInCount': 'Used in {count} project{s}',
|
||
'mcp.from': 'from',
|
||
'mcp.variant': 'variant',
|
||
'mcp.sourceEnterprise': 'Enterprise',
|
||
'mcp.sourceGlobal': 'Global',
|
||
'mcp.sourceProject': 'Project',
|
||
'mcp.viewDetails': 'View Details',
|
||
'mcp.clickToViewDetails': 'Click to view details',
|
||
|
||
// MCP Details Modal
|
||
'mcp.detailsModal.title': 'MCP Server Details',
|
||
'mcp.detailsModal.close': 'Close',
|
||
'mcp.detailsModal.serverName': 'Server Name',
|
||
'mcp.detailsModal.source': 'Source',
|
||
'mcp.detailsModal.configuration': 'Configuration',
|
||
'mcp.detailsModal.noEnv': 'No environment variables',
|
||
|
||
// MCP Create Modal
|
||
'mcp.createTitle': 'Create MCP Server',
|
||
'mcp.form': 'Form',
|
||
'mcp.json': 'JSON',
|
||
'mcp.serverName': 'Server Name',
|
||
'mcp.serverNamePlaceholder': 'e.g., my-mcp-server',
|
||
'mcp.scope': 'Scope',
|
||
'mcp.scopeProject': 'Project - Only this project',
|
||
'mcp.scopeGlobal': 'Global - All projects (~/.claude.json)',
|
||
'mcp.command': 'Command',
|
||
'mcp.commandPlaceholder': 'e.g., npx, uvx, node, python',
|
||
'mcp.arguments': 'Arguments (one per line)',
|
||
'mcp.envVars': 'Environment Variables (KEY=VALUE per line)',
|
||
'mcp.pasteJson': 'Paste MCP Server JSON Configuration',
|
||
'mcp.jsonFormatsHint': 'Supports {"servers": {...}}, {"mcpServers": {...}}, and direct server config formats.',
|
||
'mcp.previewServers': 'Preview (servers to be added):',
|
||
'mcp.create': 'Create',
|
||
'mcp.chooseInstallLocation': 'Choose Installation Location',
|
||
'mcp.installToClaudeJson': 'Install to .claude.json',
|
||
'mcp.installToMcpJson': 'Install to .mcp.json (Recommended)',
|
||
'mcp.claudeJsonDesc': 'Save in root .claude.json projects section (shared config)',
|
||
'mcp.mcpJsonDesc': 'Save in project .mcp.json file (recommended for version control)',
|
||
|
||
// New MCP Manager UI
|
||
'mcp.title': 'MCP Server Management',
|
||
'mcp.subtitle': 'Manage MCP servers for Claude, Codex, and project-level configurations',
|
||
'mcp.createNew': 'Create New',
|
||
'mcp.createFirst': 'Create Your First Server',
|
||
'mcp.noServers': 'No MCP Servers Configured',
|
||
'mcp.noServersDesc': 'Get started by creating a new MCP server or installing from templates',
|
||
'mcp.totalServers': 'Total Servers',
|
||
'mcp.enabled': 'Enabled',
|
||
'mcp.viewServer': 'View Server',
|
||
'mcp.editServer': 'Edit Server',
|
||
'mcp.createServer': 'Create Server',
|
||
'mcp.updateServer': 'Update Server',
|
||
'mcp.close': 'Close',
|
||
'mcp.cancel': 'Cancel',
|
||
'mcp.update': 'Update',
|
||
'mcp.install': 'Install',
|
||
'mcp.save': 'Save',
|
||
'mcp.delete': 'Delete',
|
||
'mcp.optional': 'Optional',
|
||
'mcp.description': 'Description',
|
||
'mcp.category': 'Category',
|
||
'mcp.installTo': 'Install To',
|
||
'mcp.configTarget': 'Config Target',
|
||
'mcp.clickToSwitch': 'Click to switch',
|
||
'mcp.usingMcpJson': 'Using .mcp.json',
|
||
'mcp.usingClaudeJson': 'Using claude.json',
|
||
'mcp.cwd': 'Working Directory',
|
||
'mcp.httpHeaders': 'HTTP Headers',
|
||
'mcp.error': 'Error',
|
||
'mcp.success': 'Success',
|
||
'mcp.nameRequired': 'Server name is required',
|
||
'mcp.commandRequired': 'Command is required',
|
||
'mcp.urlRequired': 'URL is required',
|
||
'mcp.invalidArgsJson': 'Invalid JSON format for arguments',
|
||
'mcp.invalidEnvJson': 'Invalid JSON format for environment variables',
|
||
'mcp.invalidHeadersJson': 'Invalid JSON format for HTTP headers',
|
||
'mcp.serverInstalled': 'Server installed successfully',
|
||
'mcp.serverEnabled': 'Server enabled successfully',
|
||
'mcp.serverDisabled': 'Server disabled successfully',
|
||
'mcp.serverDeleted': 'Server deleted successfully',
|
||
'mcp.backToManager': 'Back to Manager',
|
||
'mcp.noTemplates': 'No Templates Available',
|
||
'mcp.noTemplatesDesc': 'Create templates from existing servers or add new ones',
|
||
'mcp.templatesDesc': 'Browse and install pre-configured MCP server templates',
|
||
|
||
// MCP Templates
|
||
'mcp.templates': 'MCP Templates',
|
||
'mcp.savedTemplates': 'saved templates',
|
||
'mcp.saveAsTemplate': 'Save as Template',
|
||
'mcp.enterTemplateName': 'Enter template name',
|
||
'mcp.enterTemplateDesc': 'Enter template description (optional)',
|
||
'mcp.enterServerName': 'Enter server name',
|
||
'mcp.templateSaved': 'Template "{name}" saved successfully',
|
||
'mcp.templateSaveFailed': 'Failed to save template: {error}',
|
||
'mcp.templateNotFound': 'Template "{name}" not found',
|
||
'mcp.templateInstalled': 'Server "{name}" installed successfully',
|
||
'mcp.templateInstallFailed': 'Failed to install template: {error}',
|
||
'mcp.deleteTemplate': 'Delete Template',
|
||
'mcp.deleteTemplateConfirm': 'Delete template "{name}"?',
|
||
'mcp.templateDeleted': 'Template "{name}" deleted successfully',
|
||
'mcp.templateDeleteFailed': 'Failed to delete template: {error}',
|
||
'mcp.toProject': 'To Project',
|
||
'mcp.toGlobal': 'To Global',
|
||
|
||
// Recommended MCP
|
||
'mcp.recommended': 'Recommended MCP',
|
||
'mcp.quickSetup': 'Quick Setup',
|
||
'mcp.configRequired': 'config required',
|
||
'mcp.noConfigNeeded': 'No config needed',
|
||
'mcp.reconfigure': 'Configure',
|
||
'mcp.wizard.install': 'Install',
|
||
'mcp.wizard.noConfig': 'No configuration required. Ready to install!',
|
||
'mcp.wizard.installTo': 'Install to',
|
||
'mcp.wizard.project': 'Project',
|
||
'mcp.wizard.global': 'Global',
|
||
// Recommended MCP Server Definitions
|
||
'mcp.ace-tool.name': 'ACE Tool',
|
||
'mcp.ace-tool.desc': 'Augment Context Engine - Semantic code search with real-time codebase indexing',
|
||
'mcp.ace-tool.field.baseUrl': 'Base URL',
|
||
'mcp.ace-tool.field.baseUrl.desc': 'ACE MCP relay server URL',
|
||
'mcp.ace-tool.field.token': 'API Token',
|
||
'mcp.ace-tool.field.token.desc': 'Your ACE API token (get from ACE dashboard)',
|
||
'mcp.chrome-devtools.name': 'Chrome DevTools',
|
||
'mcp.chrome-devtools.desc': 'Browser automation and DevTools integration for web development',
|
||
'mcp.exa.name': 'Exa Search',
|
||
'mcp.exa.desc': 'AI-powered web search with real-time crawling and content extraction',
|
||
'mcp.exa.field.apiKey': 'EXA API Key',
|
||
'mcp.exa.field.apiKey.desc': 'Optional - Free tier has rate limits. Get key from exa.ai for higher limits',
|
||
'mcp.codexLens.name': 'CodexLens Tools',
|
||
'mcp.codexLens.desc': 'Code intelligence tools for symbol search, navigation, and reference finding',
|
||
'mcp.codexLens.field.tools': 'Enabled Tools',
|
||
'mcp.codexLens.field.tools.desc': 'Select the code intelligence tools to enable for this MCP server',
|
||
'mcp.wizard.selectAtLeastOne': 'Please select at least one option',
|
||
|
||
// MCP CLI Mode
|
||
'mcp.cliMode': 'CLI Mode',
|
||
'mcp.claudeMode': 'Claude Mode',
|
||
'mcp.codexMode': 'Codex Mode',
|
||
|
||
// CCW Tools Path Settings
|
||
'mcp.pathSettings': 'Path Settings',
|
||
'mcp.useCurrentDir': 'Use current directory',
|
||
'mcp.useCurrentProject': 'Use current project',
|
||
'mcp.allowedDirsPlaceholder': 'Comma-separated paths (optional)',
|
||
'mcp.disableSandboxDesc': 'Allow access to any directory',
|
||
|
||
// Codex MCP
|
||
'mcp.codex.globalServers': 'Codex Global MCP Servers',
|
||
'mcp.codex.newServer': 'New Server',
|
||
'mcp.codex.noServers': 'No Codex MCP servers configured',
|
||
'mcp.codex.noServersHint': 'Add servers via "codex mcp add" or create one here',
|
||
'mcp.codex.infoTitle': 'About Codex MCP',
|
||
'mcp.codex.infoDesc': 'Codex MCP servers are global only (stored in ~/.codex/config.toml). Use TOML format for configuration.',
|
||
'mcp.codex.serverAdded': 'Codex MCP server "{name}" added',
|
||
'mcp.codex.addFailed': 'Failed to add Codex MCP server',
|
||
'mcp.codex.serverRemoved': 'Codex MCP server "{name}" removed',
|
||
'mcp.codex.removeFailed': 'Failed to remove Codex MCP server',
|
||
'mcp.codex.serverToggled': 'Codex MCP server "{name}" {state}',
|
||
'mcp.codex.toggleFailed': 'Failed to toggle Codex MCP server',
|
||
'mcp.codex.remove': 'Remove',
|
||
'mcp.codex.removeConfirm': 'Remove Codex MCP server "{name}"?',
|
||
'mcp.codex.copyToClaude': 'Copy to Claude',
|
||
'mcp.codex.copyToCodex': 'Copy to Codex',
|
||
'mcp.codex.install': 'Install to Codex',
|
||
'mcp.codex.copyFromClaude': 'Copy Claude Servers to Codex',
|
||
'mcp.codex.alreadyAdded': 'Already in Codex',
|
||
'mcp.codex.scopeCodex': 'Codex - Global (~/.codex/config.toml)',
|
||
'mcp.codex.enabledTools': 'Tools',
|
||
'mcp.codex.tools': 'tools enabled',
|
||
|
||
// Claude to Codex copy
|
||
'mcp.claude.copyFromCodex': 'Copy Codex Servers to Claude',
|
||
'mcp.claude.alreadyAdded': 'Already in Claude',
|
||
'mcp.claude.copyToClaude': 'Copy to Claude Global',
|
||
'mcp.claude.copyToCodex': 'Copy to Codex',
|
||
|
||
// MCP Edit Modal
|
||
'mcp.editModal.title': 'Edit MCP Server',
|
||
'mcp.editModal.serverNamePlaceholder': 'server-name',
|
||
'mcp.editModal.onePerLine': 'one per line',
|
||
'mcp.editModal.save': 'Save Changes',
|
||
'mcp.editModal.delete': 'Delete',
|
||
'mcp.editModal.nameRequired': 'Server name is required',
|
||
'mcp.editModal.commandRequired': 'Command or URL is required',
|
||
'mcp.editModal.saved': 'MCP server "{name}" updated',
|
||
'mcp.editModal.saveFailed': 'Failed to save MCP server',
|
||
'mcp.editModal.deleteConfirm': 'Delete MCP server "{name}"?',
|
||
'mcp.editModal.deleted': 'MCP server "{name}" deleted',
|
||
'mcp.editModal.deleteFailed': 'Failed to delete MCP server',
|
||
'mcp.clickToEdit': 'Click to edit',
|
||
'mcp.clickToViewDetails': 'Click to view details',
|
||
|
||
// Windows MCP Compatibility
|
||
'mcp.windows.title': 'Windows Compatibility Warning',
|
||
'mcp.windows.compatibilityWarning': 'The MCP server "{name}" uses "{command}" which requires "cmd /c" wrapper on Windows to work properly with Claude Code.',
|
||
'mcp.windows.autoFix': 'Auto-fix (Recommended)',
|
||
'mcp.windows.keepOriginal': 'Keep Original',
|
||
|
||
// Hook Manager
|
||
'hook.projectHooks': 'Project Hooks',
|
||
'hook.projectFile': '.claude/settings.json',
|
||
'hook.newHook': 'New Hook',
|
||
'hook.hooksConfigured': 'hooks configured',
|
||
'hook.globalHooks': 'Global Hooks',
|
||
'hook.globalFile': '~/.claude/settings.json',
|
||
'hook.wizards': 'Hook Wizards',
|
||
'hook.guidedSetup': 'Guided Setup',
|
||
'hook.wizardsDesc': 'Configure complex hooks with guided wizards',
|
||
'hook.quickInstall': 'Quick Install Templates',
|
||
'hook.oneClick': 'One-click hook installation',
|
||
'hook.envVarsRef': 'Environment Variables Reference',
|
||
'hook.filePaths': 'Space-separated file paths affected',
|
||
'hook.toolName': 'Name of the tool being executed',
|
||
'hook.toolInput': 'JSON input passed to the tool',
|
||
'hook.sessionId': 'Current Claude session ID',
|
||
'hook.projectDir': 'Current project directory path',
|
||
'hook.workingDir': 'Current working directory',
|
||
'hook.openWizard': 'Open Wizard',
|
||
'hook.installed': 'Installed',
|
||
'hook.installProject': 'Install (Project)',
|
||
'hook.installGlobal': 'Global',
|
||
'hook.uninstall': 'Uninstall',
|
||
'hook.viewDetails': 'View template details',
|
||
'hook.edit': 'Edit hook',
|
||
'hook.delete': 'Delete hook',
|
||
'hook.deleteConfirm': 'Remove this {event} hook?',
|
||
|
||
// Hook Create Modal
|
||
'hook.createTitle': 'Create Hook',
|
||
'hook.event': 'Hook Event',
|
||
'hook.selectEvent': 'Select an event...',
|
||
'hook.preToolUse': 'PreToolUse - Before a tool is executed',
|
||
'hook.postToolUse': 'PostToolUse - After a tool completes',
|
||
'hook.notification': 'Notification - On notifications',
|
||
'hook.stop': 'Stop - When agent stops',
|
||
'hook.matcher': 'Matcher (optional)',
|
||
'hook.matcherPlaceholder': 'e.g., Write, Edit, Bash (leave empty for all)',
|
||
'hook.matcherHint': 'Tool name to match. Leave empty to match all tools.',
|
||
'hook.commandLabel': 'Command',
|
||
'hook.commandPlaceholder': 'e.g., curl, bash, node',
|
||
'hook.argsLabel': 'Arguments (one per line)',
|
||
'hook.scope': 'Scope',
|
||
'hook.scopeProject': 'Project (.claude/settings.json)',
|
||
'hook.scopeGlobal': 'Global (~/.claude/settings.json)',
|
||
'hook.quickTemplates': 'Quick Templates',
|
||
|
||
// Hook templates
|
||
'hook.template.ccwNotify': 'CCW Notify',
|
||
'hook.template.ccwNotifyDesc': 'Notify dashboard on Write',
|
||
'hook.template.logTool': 'Log Tool Usage',
|
||
'hook.template.logToolDesc': 'Log all tool executions',
|
||
'hook.template.lintCheck': 'Lint Check',
|
||
'hook.template.lintCheckDesc': 'Run eslint on file changes',
|
||
'hook.template.gitAdd': 'Git Add',
|
||
'hook.template.gitAddDesc': 'Auto stage written files',
|
||
|
||
// Hook Quick Install Templates
|
||
'hook.tpl.sessionContext': 'Session Context',
|
||
'hook.tpl.sessionContextDesc': 'Load cluster overview once at session start',
|
||
'hook.tpl.codexlensSync': 'CodexLens Auto-Sync',
|
||
'hook.tpl.codexlensSyncDesc': 'Auto-update code index when files are written or edited',
|
||
'hook.tpl.ccwDashboardNotify': 'CCW Dashboard Notify',
|
||
'hook.tpl.ccwDashboardNotifyDesc': 'Notify CCW dashboard when files are written',
|
||
'hook.tpl.toolLogger': 'Tool Usage Logger',
|
||
'hook.tpl.toolLoggerDesc': 'Log all tool executions to a file',
|
||
'hook.tpl.autoLint': 'Auto Lint Check',
|
||
'hook.tpl.autoLintDesc': 'Run ESLint on JavaScript/TypeScript files after write',
|
||
'hook.tpl.autoGitStage': 'Auto Git Stage',
|
||
'hook.tpl.autoGitStageDesc': 'Automatically stage written files to git',
|
||
|
||
// Hook Template Categories
|
||
'hook.category.indexing': 'indexing',
|
||
'hook.category.notification': 'notification',
|
||
'hook.category.logging': 'logging',
|
||
'hook.category.quality': 'quality',
|
||
'hook.category.git': 'git',
|
||
'hook.category.memory': 'memory',
|
||
'hook.category.skill': 'skill',
|
||
'hook.category.context': 'context',
|
||
|
||
// Hook Wizard Templates
|
||
'hook.wizard.memoryUpdate': 'Memory Update Hook',
|
||
'hook.wizard.memoryUpdateDesc': 'Queue-based CLAUDE.md updates with configurable threshold and timeout',
|
||
'hook.wizard.queueBasedUpdate': 'Queue-Based Update',
|
||
'hook.wizard.queueBasedUpdateDesc': 'Batch updates when threshold reached or timeout expires',
|
||
'hook.wizard.cliTool': 'CLI Tool',
|
||
'hook.wizard.cliToolDesc': 'CLI tool for CLAUDE.md generation',
|
||
'hook.wizard.thresholdPaths': 'Threshold (paths)',
|
||
'hook.wizard.thresholdPathsDesc': 'Number of paths to trigger batch update',
|
||
'hook.wizard.timeoutSeconds': 'Timeout (seconds)',
|
||
'hook.wizard.timeoutSecondsDesc': 'Auto-flush queue after this time',
|
||
// Legacy keys (kept for compatibility)
|
||
'hook.wizard.onSessionEnd': 'On Session End',
|
||
'hook.wizard.onSessionEndDesc': 'Update documentation when Claude session ends',
|
||
'hook.wizard.periodicUpdate': 'Periodic Update',
|
||
'hook.wizard.periodicUpdateDesc': 'Update documentation at regular intervals during session',
|
||
'hook.wizard.countBasedUpdate': 'Count-Based Update',
|
||
'hook.wizard.countBasedUpdateDesc': 'Update documentation when file changes reach threshold',
|
||
'hook.wizard.fileCountThreshold': 'File Count Threshold',
|
||
'hook.wizard.fileCountThresholdDesc': 'Number of file changes to trigger update',
|
||
'hook.wizard.skillContext': 'SKILL Context Loader',
|
||
'hook.wizard.skillContextDesc': 'Automatically load SKILL packages based on keywords in user prompts',
|
||
'hook.wizard.keywordMatching': 'Keyword Matching',
|
||
'hook.wizard.keywordMatchingDesc': 'Load specific SKILLs when keywords are detected in prompt',
|
||
'hook.wizard.autoDetection': 'Auto Detection',
|
||
'hook.wizard.autoDetectionDesc': 'Automatically detect and load SKILLs by name in prompt',
|
||
'hook.wizard.memorySetup': 'Memory Module Setup',
|
||
'hook.wizard.memorySetupDesc': 'Configure automatic context tracking (lightweight metadata recording)',
|
||
'hook.wizard.fileReadTracker': 'File Read Tracker',
|
||
'hook.wizard.fileReadTrackerDesc': 'Track file reads to build context heatmap',
|
||
'hook.wizard.fileWriteTracker': 'File Write Tracker',
|
||
'hook.wizard.fileWriteTrackerDesc': 'Track file modifications to identify core modules',
|
||
'hook.wizard.promptTracker': 'Prompt Tracker',
|
||
'hook.wizard.promptTrackerDesc': 'Record user prompts for pattern analysis',
|
||
'hook.wizard.selectTrackers': 'Select Trackers',
|
||
|
||
// Danger Protection Wizard
|
||
'hook.wizard.dangerProtection': 'Danger Protection',
|
||
'hook.wizard.dangerProtectionDesc': 'Protect against dangerous operations with confirmation dialogs',
|
||
'hook.wizard.dangerBashConfirm': 'Dangerous Commands',
|
||
'hook.wizard.dangerBashConfirmDesc': 'Confirm before rm -rf, shutdown, kill, format, etc.',
|
||
'hook.wizard.dangerFileProtection': 'Sensitive Files',
|
||
'hook.wizard.dangerFileProtectionDesc': 'Block modifications to .env, .git/, secrets, keys',
|
||
'hook.wizard.dangerGitDestructive': 'Git Operations',
|
||
'hook.wizard.dangerGitDestructiveDesc': 'Confirm force push, hard reset, branch delete',
|
||
'hook.wizard.dangerNetworkConfirm': 'Network Access',
|
||
'hook.wizard.dangerNetworkConfirmDesc': 'Confirm curl, wget, ssh, WebFetch requests',
|
||
'hook.wizard.dangerSystemPaths': 'System Paths',
|
||
'hook.wizard.dangerSystemPathsDesc': 'Block/confirm operations on /etc, /usr, C:\\Windows',
|
||
'hook.wizard.dangerPermissionChange': 'Permission Changes',
|
||
'hook.wizard.dangerPermissionChangeDesc': 'Confirm chmod, chown, icacls operations',
|
||
'hook.wizard.selectProtections': 'Select Protections',
|
||
|
||
// Hook Wizard Labels
|
||
'hook.wizard.cliTools': 'CLI Tools:',
|
||
'hook.wizard.event': 'Event:',
|
||
'hook.wizard.availableSkills': 'Available SKILLs:',
|
||
'hook.wizard.loading': 'Loading...',
|
||
'hook.wizard.matches': 'Matches:',
|
||
'hook.wizard.whenToTrigger': 'When to Trigger',
|
||
'hook.wizard.configuration': 'Configuration',
|
||
'hook.wizard.commandPreview': 'Generated Command Preview',
|
||
'hook.wizard.installTo': 'Install To',
|
||
'hook.wizard.installHook': 'Install Hook',
|
||
'hook.wizard.noSkillsConfigured': 'No SKILLs configured yet',
|
||
'hook.wizard.clickAddSkill': 'Click "Add SKILL" to configure keyword triggers',
|
||
'hook.wizard.configureSkills': 'Configure SKILLs',
|
||
'hook.wizard.addSkill': 'Add SKILL',
|
||
'hook.wizard.selectSkill': 'Select SKILL...',
|
||
'hook.wizard.triggerKeywords': 'Trigger Keywords (comma-separated)',
|
||
'hook.wizard.autoDetectionMode': 'Auto Detection Mode',
|
||
'hook.wizard.autoDetectionInfo': 'SKILLs will be automatically loaded when their name appears in your prompt.',
|
||
'hook.wizard.noSkillsFound': 'No SKILLs found. Create SKILL packages in .claude/skills/',
|
||
'hook.wizard.noSkillConfigs': '# No SKILL configurations yet',
|
||
'hook.wizard.cliTool': 'CLI Tool',
|
||
'hook.wizard.intervalSeconds': 'Interval (seconds)',
|
||
'hook.wizard.updateStrategy': 'Update Strategy',
|
||
'hook.wizard.toolForDocGen': 'Tool for documentation generation',
|
||
'hook.wizard.timeBetweenUpdates': 'Time between updates',
|
||
'hook.wizard.relatedStrategy': 'Related: changed modules, Single-layer: current directory',
|
||
|
||
// Lite Tasks
|
||
'lite.plan': 'PLAN',
|
||
'lite.fix': 'FIX',
|
||
'lite.summary': 'Summary',
|
||
'lite.rootCause': 'Root Cause',
|
||
'lite.fixStrategy': 'Fix Strategy',
|
||
'lite.approach': 'Approach',
|
||
'lite.userRequirements': 'User Requirements',
|
||
'lite.focusPaths': 'Focus Paths',
|
||
'lite.metadata': 'Metadata',
|
||
'lite.severity': 'Severity:',
|
||
'lite.riskLevel': 'Risk Level:',
|
||
'lite.estimatedTime': 'Estimated Time:',
|
||
'lite.complexity': 'Complexity:',
|
||
'lite.execution': 'Execution:',
|
||
'lite.fixTasks': 'Fix Tasks',
|
||
'lite.modificationPoints': 'Modification Points:',
|
||
'lite.implementationSteps': 'Implementation Steps:',
|
||
'lite.verification': 'Verification:',
|
||
'lite.rawJson': 'Raw JSON',
|
||
'lite.noPlanData': 'No Plan Data',
|
||
'lite.noPlanDataText': 'No {file} found for this session.',
|
||
'lite.diagnosisSummary': 'Diagnosis Summary',
|
||
'lite.diagnosisDetails': 'Diagnosis Details',
|
||
'lite.totalDiagnoses': 'Total Diagnoses:',
|
||
'lite.angles': 'Angles:',
|
||
'lite.multiCli': 'Multi-CLI',
|
||
|
||
// Multi-CLI Plan
|
||
'multiCli.rounds': 'rounds',
|
||
'multiCli.backToList': 'Back to Multi-CLI Plan',
|
||
'multiCli.roundCount': 'Rounds',
|
||
'multiCli.topic': 'Topic',
|
||
'multiCli.tab.topic': 'Discussion Topic',
|
||
'multiCli.tab.files': 'Related Files',
|
||
'multiCli.tab.planning': 'Planning',
|
||
'multiCli.tab.decision': 'Decision',
|
||
'multiCli.tab.timeline': 'Timeline',
|
||
'multiCli.tab.rounds': 'Rounds',
|
||
'multiCli.tab.discussion': 'Discussion',
|
||
'multiCli.tab.association': 'Association',
|
||
'multiCli.scope': 'Scope',
|
||
'multiCli.scope.included': 'Included',
|
||
'multiCli.scope.excluded': 'Excluded',
|
||
'multiCli.keyQuestions': 'Key Questions',
|
||
'multiCli.fileTree': 'File Tree',
|
||
'multiCli.impactSummary': 'Impact Summary',
|
||
'multiCli.dependencies': 'Dependencies',
|
||
'multiCli.functional': 'Functional Requirements',
|
||
'multiCli.nonFunctional': 'Non-Functional Requirements',
|
||
'multiCli.acceptanceCriteria': 'Acceptance Criteria',
|
||
'multiCli.source': 'Source',
|
||
'multiCli.confidence': 'Confidence',
|
||
'multiCli.selectedSolution': 'Selected Solution',
|
||
'multiCli.rejectedAlternatives': 'Rejected Alternatives',
|
||
'multiCli.rejectionReason': 'Reason',
|
||
'multiCli.pros': 'Pros',
|
||
'multiCli.cons': 'Cons',
|
||
'multiCli.effort': 'Effort',
|
||
'multiCli.sources': 'Sources',
|
||
'multiCli.currentRound': 'Current',
|
||
'multiCli.singleRoundInfo': 'This is a single-round discussion. View other tabs for details.',
|
||
'multiCli.noRoundData': 'No data for this round.',
|
||
'multiCli.roundId': 'Round',
|
||
'multiCli.timestamp': 'Time',
|
||
'multiCli.duration': 'Duration',
|
||
'multiCli.contributors': 'Contributors',
|
||
'multiCli.convergence': 'Convergence',
|
||
'multiCli.newInsights': 'New Insights',
|
||
'multiCli.crossVerification': 'Cross-Verification',
|
||
'multiCli.agreements': 'Agreements',
|
||
'multiCli.disagreements': 'Disagreements',
|
||
'multiCli.resolution': 'Resolution',
|
||
'multiCli.empty.topic': 'No Discussion Topic',
|
||
'multiCli.empty.topicText': 'No discussion topic data available for this session.',
|
||
'multiCli.empty.files': 'No Related Files',
|
||
'multiCli.empty.filesText': 'No file analysis data available for this session.',
|
||
'multiCli.empty.planning': 'No Planning Data',
|
||
'multiCli.empty.planningText': 'No planning requirements available for this session.',
|
||
'multiCli.empty.decision': 'No Decision Yet',
|
||
'multiCli.empty.decisionText': 'No decision has been made for this discussion yet.',
|
||
'multiCli.empty.timeline': 'No Timeline Events',
|
||
'multiCli.empty.timelineText': 'No decision timeline available for this session.',
|
||
'multiCli.empty.association': 'No Association Data',
|
||
'multiCli.empty.associationText': 'No context package or related files available for this session.',
|
||
'multiCli.round': 'Round',
|
||
'multiCli.solutionSummary': 'Solution Summary',
|
||
'multiCli.feasibility': 'Feasibility',
|
||
'multiCli.effort': 'Effort',
|
||
'multiCli.risk': 'Risk',
|
||
'multiCli.consensus': 'Consensus',
|
||
'multiCli.resolvedConflicts': 'Resolved Conflicts',
|
||
|
||
// Toolbar
|
||
'multiCli.toolbar.title': 'Task Navigator',
|
||
'multiCli.toolbar.tasks': 'Tasks',
|
||
'multiCli.toolbar.refresh': 'Refresh',
|
||
'multiCli.toolbar.exportJson': 'Export JSON',
|
||
'multiCli.toolbar.viewRaw': 'View Raw Data',
|
||
'multiCli.toolbar.noTasks': 'No tasks available',
|
||
'multiCli.toolbar.scrollToTask': 'Click to scroll to task',
|
||
|
||
// Context Tab
|
||
'multiCli.context.taskDescription': 'Task Description',
|
||
'multiCli.context.constraints': 'Constraints',
|
||
'multiCli.context.focusPaths': 'Focus Paths',
|
||
'multiCli.context.relevantFiles': 'Relevant Files',
|
||
'multiCli.context.dependencies': 'Dependencies',
|
||
'multiCli.context.conflictRisks': 'Conflict Risks',
|
||
'multiCli.context.sessionId': 'Session ID',
|
||
'multiCli.context.rawJson': 'Raw JSON',
|
||
|
||
// Summary Tab
|
||
'multiCli.summary.title': 'Summary',
|
||
'multiCli.summary.convergence': 'Convergence',
|
||
'multiCli.summary.solutions': 'Solutions',
|
||
'multiCli.summary.solution': 'Solution',
|
||
|
||
// Task Overview
|
||
'multiCli.task.description': 'Description',
|
||
'multiCli.task.keyPoint': 'Key Point',
|
||
'multiCli.task.scope': 'Scope',
|
||
'multiCli.task.dependencies': 'Dependencies',
|
||
'multiCli.task.targetFiles': 'Target Files',
|
||
'multiCli.task.acceptanceCriteria': 'Acceptance Criteria',
|
||
'multiCli.task.reference': 'Reference',
|
||
'multiCli.task.pattern': 'PATTERN',
|
||
'multiCli.task.files': 'FILES',
|
||
'multiCli.task.examples': 'EXAMPLES',
|
||
'multiCli.task.noOverviewData': 'No overview data available',
|
||
|
||
// Task Implementation
|
||
'multiCli.task.implementationSteps': 'Implementation Steps',
|
||
'multiCli.task.modificationPoints': 'Modification Points',
|
||
'multiCli.task.verification': 'Verification',
|
||
'multiCli.task.noImplementationData': 'No implementation details available',
|
||
'multiCli.task.noFilesSpecified': 'No files specified',
|
||
|
||
// Discussion Tab
|
||
'multiCli.discussion.title': 'Discussion',
|
||
'multiCli.discussion.discussionTopic': 'Discussion Topic',
|
||
'multiCli.solutions': 'Solutions',
|
||
'multiCli.decision': 'Decision',
|
||
|
||
// Plan
|
||
'multiCli.plan.objective': 'Objective',
|
||
'multiCli.plan.solution': 'Solution',
|
||
'multiCli.plan.approach': 'Approach',
|
||
'multiCli.plan.risk': 'risk',
|
||
|
||
// Modals
|
||
'modal.contentPreview': 'Content Preview',
|
||
'modal.raw': 'Raw',
|
||
'modal.preview': 'Preview',
|
||
'modal.templateDetails': 'Template Details',
|
||
'modal.sessionJson': 'Session JSON',
|
||
'modal.copyToClipboard': 'Copy to Clipboard',
|
||
|
||
// Toast messages
|
||
'toast.workspaceRefreshed': 'Workspace refreshed',
|
||
'toast.refreshFailed': 'Refresh failed: {error}',
|
||
'toast.statusUpdateRequires': 'Status update requires server mode',
|
||
'toast.bulkUpdateRequires': 'Bulk update requires server mode',
|
||
'toast.failedToUpdate': 'Failed to update status',
|
||
'toast.errorUpdating': 'Error updating status: {error}',
|
||
'toast.failedToBulkUpdate': 'Failed to bulk update',
|
||
'toast.errorInBulk': 'Error in bulk update: {error}',
|
||
'toast.enterPrompt': 'Please enter a prompt',
|
||
'toast.enterPath': 'Please enter a path',
|
||
'toast.commandCopied': 'Command copied: {command}',
|
||
'toast.runCommand': 'Run: {command}',
|
||
'toast.completed': 'Completed',
|
||
'toast.failed': 'Failed',
|
||
'toast.error': 'Error: {error}',
|
||
'toast.templateNotFound': 'Template not found',
|
||
|
||
// Footer
|
||
'footer.generated': 'Generated:',
|
||
'footer.version': 'CCW Dashboard v1.0',
|
||
|
||
// Prompt History
|
||
'prompt.timeline': 'Prompt Timeline',
|
||
'prompt.searchPlaceholder': 'Search prompts...',
|
||
'prompt.allProjects': 'All Projects',
|
||
'prompt.currentProject': 'Current Project',
|
||
'prompt.noPromptsFound': 'No Prompts Found',
|
||
'prompt.noPromptsText': 'No prompts found matching your search criteria.',
|
||
'prompt.insights': 'Insights & Suggestions',
|
||
'prompt.analyze': 'Analyze',
|
||
'prompt.analyzing': 'Analyzing...',
|
||
'prompt.selectTool': 'Select Tool',
|
||
'prompt.quality': 'Quality',
|
||
'prompt.intent': 'Intent',
|
||
'prompt.project': 'Project',
|
||
'prompt.session': 'Session',
|
||
'prompt.noInsights': 'No insights yet',
|
||
'prompt.noInsightsText': 'Select a CLI tool and click Analyze to generate insights.',
|
||
'prompt.loadingInsights': 'Generating insights...',
|
||
'prompt.insightsError': 'Failed to generate insights',
|
||
'prompt.intent.implement': 'Implement',
|
||
'prompt.intent.fix': 'Fix',
|
||
'prompt.intent.explore': 'Explore',
|
||
'prompt.intent.debug': 'Debug',
|
||
'prompt.intent.refactor': 'Refactor',
|
||
'prompt.intent.test': 'Test',
|
||
'prompt.intent.document': 'Document',
|
||
'prompt.intent.general': 'General',
|
||
'prompt.timeJustNow': 'Just now',
|
||
'prompt.timeMinutesAgo': '{count} min ago',
|
||
'prompt.timeHoursAgo': '{count} hours ago',
|
||
'prompt.timeDaysAgo': '{count} days ago',
|
||
|
||
// Memory Module
|
||
'memory.contextHotspots': 'Context Hotspots',
|
||
'memory.mostRead': 'Most Read Files',
|
||
'memory.mostEdited': 'Most Edited Files',
|
||
'memory.mostMentioned': 'Most Mentioned Topics',
|
||
'memory.today': 'Today',
|
||
'memory.week': 'Week',
|
||
'memory.allTime': 'All Time',
|
||
'memory.noData': 'No data available',
|
||
'memory.memoryGraph': 'Memory Graph',
|
||
'memory.nodes': 'nodes',
|
||
'memory.resetView': 'Reset View',
|
||
'memory.zoomIn': 'Zoom In',
|
||
'memory.zoomOut': 'Zoom Out',
|
||
'memory.fitView': 'Fit to View',
|
||
'memory.file': 'File',
|
||
'memory.module': 'Module',
|
||
'memory.component': 'Component',
|
||
'memory.noGraphData': 'No graph data available',
|
||
'memory.d3NotLoaded': 'D3.js not loaded',
|
||
'memory.recentContext': 'Recent Context',
|
||
'memory.activities': 'activities',
|
||
'memory.searchContext': 'Search context...',
|
||
'memory.noRecentActivity': 'No recent activity',
|
||
'memory.reads': 'Reads',
|
||
'memory.edits': 'Edits',
|
||
'memory.mentions': 'Mentions',
|
||
'memory.prompts': 'Prompts',
|
||
'memory.nodeDetails': 'Node Details',
|
||
'memory.heat': 'Heat',
|
||
'memory.associations': 'Associations',
|
||
'memory.type': 'Type',
|
||
'memory.relatedNodes': 'Related Nodes',
|
||
'memory.noAssociations': 'No associations found',
|
||
'memory.justNow': 'Just now',
|
||
'memory.minutesAgo': 'minutes ago',
|
||
'memory.hoursAgo': 'hours ago',
|
||
'memory.title': 'Memory',
|
||
'memory.activeMemory': 'Active Memory',
|
||
'memory.active': 'Active',
|
||
'memory.inactive': 'Inactive',
|
||
'memory.syncNow': 'Sync Now',
|
||
'memory.syncComplete': 'Sync complete',
|
||
'memory.syncError': 'Sync failed',
|
||
'memory.filesAnalyzed': 'files analyzed',
|
||
'memory.activeMemoryEnabled': 'Active Memory enabled',
|
||
'memory.activeMemoryDisabled': 'Active Memory disabled',
|
||
'memory.activeMemoryError': 'Failed to toggle Active Memory',
|
||
'memory.interval': 'Interval',
|
||
'memory.intervalManual': 'Manual',
|
||
'memory.minutes': 'min',
|
||
'memory.cliTool': 'CLI',
|
||
'memory.lastSync': 'Last sync',
|
||
'memory.autoSyncActive': 'Auto-sync',
|
||
'memory.configUpdated': 'Configuration updated',
|
||
'memory.configError': 'Failed to update configuration',
|
||
'memory.insightsHistory': 'Insights History',
|
||
'memory.insightsEmpty': 'No insights yet. Run an analysis to generate insights.',
|
||
'memory.insightPatterns': 'Patterns',
|
||
'memory.insightSuggestions': 'Suggestions',
|
||
'memory.insightDetail': 'Insight Detail',
|
||
'memory.insightDelete': 'Delete',
|
||
'memory.insightDeleteConfirm': 'Are you sure you want to delete this insight?',
|
||
'memory.insightDeleted': 'Insight deleted',
|
||
'memory.prompts': 'prompts',
|
||
'memory.refreshInsights': 'Refresh',
|
||
|
||
// Skills
|
||
'nav.skills': 'Skills',
|
||
'title.skillsManager': 'Skills Manager',
|
||
'skills.title': 'Skills Manager',
|
||
'skills.description': 'Manage Claude Code skills and capabilities',
|
||
'skills.create': 'Create Skill',
|
||
'skills.projectSkills': 'Project Skills',
|
||
'skills.userSkills': 'User Skills',
|
||
'skills.skillsCount': 'skills',
|
||
'skills.noProjectSkills': 'No project skills found',
|
||
'skills.createHint': 'Create a skill in .claude/skills/ to add capabilities',
|
||
'skills.noUserSkills': 'No user skills found',
|
||
'skills.userSkillsHint': 'User skills apply to all your projects',
|
||
'skills.noDescription': 'No description provided',
|
||
'skills.tools': 'tools',
|
||
'skills.files': 'files',
|
||
'skills.descriptionLabel': 'Description',
|
||
'skills.metadata': 'Metadata',
|
||
'skills.location': 'Location',
|
||
'skills.version': 'Version',
|
||
'skills.allowedTools': 'Allowed Tools',
|
||
'skills.supportingFiles': 'Supporting Files',
|
||
'skills.path': 'Path',
|
||
'skills.loadError': 'Failed to load skill details',
|
||
'skills.deleteConfirm': 'Are you sure you want to delete the skill "{name}"?',
|
||
'skills.deleted': 'Skill deleted successfully',
|
||
'skills.deleteError': 'Failed to delete skill',
|
||
'skills.editNotImplemented': 'Edit feature coming soon',
|
||
'skills.createNotImplemented': 'Create feature coming soon',
|
||
'skills.createSkill': 'Create Skill', 'skills.sourceFolder': 'Source Folder', 'skills.sourceFolderPlaceholder': 'Path to skill folder', 'skills.sourceFolderHint': 'Select a folder containing a valid SKILL.md file', 'skills.sourceFolderRequired': 'Source folder path is required', 'skills.customName': 'Custom Name', 'skills.customNamePlaceholder': 'Leave empty to use skill name from SKILL.md', 'skills.customNameHint': 'Optional: Override the skill name', 'skills.validate': 'Validate', 'skills.import': 'Import', 'skills.validating': 'Validating...', 'skills.validSkill': 'Valid Skill', 'skills.invalidSkill': 'Invalid Skill', 'skills.validateFirst': 'Please validate the skill folder first', 'skills.created': 'Skill "{name}" created successfully', 'skills.createError': 'Failed to create skill', 'skills.validationError': 'Validation failed', 'skills.enterFolderPath': 'Enter skill folder path', 'skills.name': 'Name',
|
||
'skills.createMode': 'Creation Mode',
|
||
'skills.importFolder': 'Import Folder',
|
||
'skills.importFolderHint': 'Import existing skill folder',
|
||
'skills.cliGenerate': 'CLI Generate',
|
||
'skills.cliGenerateHint': 'Generate using AI',
|
||
'skills.generationType': 'Generation Type',
|
||
'skills.fromDescription': 'From Description',
|
||
'skills.fromDescriptionHint': 'Describe what you need',
|
||
'skills.fromTemplate': 'From Template',
|
||
'skills.comingSoon': 'Coming soon',
|
||
'skills.skillName': 'Skill Name',
|
||
'skills.skillNamePlaceholder': 'e.g., code-review, testing-helper',
|
||
'skills.skillNameHint': 'Choose a descriptive name for the skill',
|
||
'skills.skillNameRequired': 'Skill name is required',
|
||
'skills.descriptionPlaceholder': 'Describe what this skill should help with...\nExample: Help review code for security vulnerabilities and best practices',
|
||
'skills.descriptionRequired': 'Description is required',
|
||
'skills.descriptionGenerateHint': 'Be specific about what the skill should do',
|
||
'skills.generating': 'Generating skill via CLI... This may take a few minutes.',
|
||
'skills.generated': 'Skill "{name}" generated successfully',
|
||
'skills.generateError': 'Failed to generate skill',
|
||
'skills.generate': 'Generate',
|
||
'skills.cliGenerateInfo': 'AI will generate a complete skill based on your description',
|
||
'skills.cliGenerateTimeHint': 'Generation may take a few minutes depending on complexity',
|
||
'skills.disable': 'Disable',
|
||
'skills.enable': 'Enable',
|
||
'skills.disabled': 'Disabled',
|
||
'skills.enabled': 'Enabled',
|
||
'skills.disabledSkills': 'Disabled Skills',
|
||
'skills.disabledAt': 'Disabled at',
|
||
'skills.enableConfirm': 'Are you sure you want to enable the skill "{name}"?',
|
||
'skills.disableConfirm': 'Are you sure you want to disable the skill "{name}"?',
|
||
'skills.noDisabledSkills': 'No disabled skills',
|
||
'skills.toggleError': 'Failed to toggle skill status',
|
||
'skills.enableSuccess': 'Skill "{name}" enabled successfully',
|
||
'skills.disableSuccess': 'Skill "{name}" disabled successfully',
|
||
|
||
// Rules
|
||
'nav.rules': 'Rules',
|
||
'nav.commands': 'Commands',
|
||
'title.commandsManager': 'Commands Manager',
|
||
'commands.title': 'Commands Manager',
|
||
'commands.description': 'Manage Claude Code commands - enable, disable, and organize by group',
|
||
'commands.totalCommands': 'Total Commands',
|
||
'commands.enabledCommands': 'Enabled Commands',
|
||
'commands.disabledCommands': 'Disabled Commands',
|
||
'commands.showDisabled': 'Show Disabled',
|
||
'commands.hideDisabled': 'Hide Disabled',
|
||
'commands.noDescription': 'No description',
|
||
'commands.disabledAt': 'Disabled at',
|
||
'commands.enableConfirm': 'Enable command "{name}"?',
|
||
'commands.disableConfirm': 'Disable command "{name}"?',
|
||
'commands.enableSuccess': 'Command "{name}" enabled successfully',
|
||
'commands.disableSuccess': 'Command "{name}" disabled successfully',
|
||
'commands.toggleError': 'Failed to toggle command status',
|
||
'commands.enabled': 'enabled',
|
||
'commands.disabled': 'disabled',
|
||
'commands.name': 'Name',
|
||
'commands.description': 'Description',
|
||
'commands.scope': 'Scope',
|
||
'commands.status': 'Status',
|
||
'commands.group.cli': 'CLI',
|
||
'commands.group.workflow': 'Workflow',
|
||
'commands.group.memory': 'Memory',
|
||
'commands.group.task': 'Task',
|
||
'commands.group.issue': 'Issue',
|
||
'commands.group.other': 'Other',
|
||
'commands.group.review': 'Review',
|
||
'commands.group.execute': 'Execute',
|
||
'commands.group.plan': 'Plan',
|
||
'commands.group.test': 'Test',
|
||
'commands.group.debug': 'Debug',
|
||
'commands.group.tools': 'Tools',
|
||
'commands.enableAll': 'Enable All',
|
||
'commands.disableAll': 'Disable All',
|
||
'commands.enableGroupConfirm': 'Enable all commands in "{group}" group?',
|
||
'commands.disableGroupConfirm': 'Disable all commands in "{group}" group?',
|
||
'commands.enableGroupSuccess': 'Group "{group}" enabled successfully',
|
||
'commands.disableGroupSuccess': 'Group "{group}" disabled successfully',
|
||
'commands.locationProject': 'Project',
|
||
'commands.locationUser': 'Global',
|
||
'commands.clickToEnableAll': 'Click to enable all commands in this group',
|
||
'commands.clickToDisableAll': 'Click to disable all commands in this group',
|
||
|
||
// Rules
|
||
'title.rulesManager': 'Rules Manager',
|
||
'rules.title': 'Rules Manager',
|
||
'rules.description': 'Manage project and user rules for Claude Code',
|
||
'rules.create': 'Create Rule',
|
||
'rules.projectRules': 'Project Rules',
|
||
'rules.userRules': 'User Rules',
|
||
'rules.rulesCount': 'rules',
|
||
'rules.noProjectRules': 'No project rules found',
|
||
'rules.createHint': 'Create rules in .claude/rules/ for project-specific instructions',
|
||
'rules.noUserRules': 'No user rules found',
|
||
'rules.userRulesHint': 'User rules apply to all your projects',
|
||
'rules.typeLabel': 'Type',
|
||
'rules.conditional': 'Conditional',
|
||
'rules.global': 'Global',
|
||
'rules.pathConditions': 'Path Conditions',
|
||
'rules.content': 'Content',
|
||
'rules.filePath': 'File Path',
|
||
'rules.loadError': 'Failed to load rule details',
|
||
'rules.deleteConfirm': 'Are you sure you want to delete the rule "{name}"?',
|
||
'rules.deleted': 'Rule deleted successfully',
|
||
'rules.deleteError': 'Failed to delete rule',
|
||
'rules.editNotImplemented': 'Edit feature coming soon',
|
||
'rules.createNotImplemented': 'Create feature coming soon',
|
||
'rules.createRule': 'Create Rule',
|
||
'rules.location': 'Location',
|
||
'rules.fileName': 'File Name',
|
||
'rules.fileNameHint': 'Must end with .md',
|
||
'rules.fileNameRequired': 'File name is required',
|
||
'rules.fileNameMustEndMd': 'File name must end with .md',
|
||
'rules.subdirectory': 'Subdirectory',
|
||
'rules.subdirectoryHint': 'Optional: Organize rules into subdirectories',
|
||
'rules.conditionalRule': 'Conditional Rule',
|
||
'rules.conditionalHint': 'Apply this rule only to specific file paths',
|
||
'rules.addPath': 'Add Path',
|
||
'rules.contentPlaceholder': 'Enter rule content in Markdown format...',
|
||
'rules.contentHint': 'Use Markdown to write rule instructions for Claude',
|
||
'rules.contentRequired': 'Content is required',
|
||
'rules.created': 'Rule "{name}" created successfully',
|
||
'rules.createError': 'Failed to create rule',
|
||
'rules.createMode': 'Creation Mode',
|
||
'rules.manualInput': 'Manual Input',
|
||
'rules.manualInputHint': 'Write content directly',
|
||
'rules.cliGenerate': 'CLI Generate',
|
||
'rules.cliGenerateHint': 'Auto-generate via AI',
|
||
'rules.generationType': 'Generation Type',
|
||
'rules.fromDescription': 'From Description',
|
||
'rules.fromTemplate': 'From Template',
|
||
'rules.fromCodeExtract': 'Extract from Code',
|
||
'rules.description': 'Description',
|
||
'rules.descriptionPlaceholder': 'Describe the rule purpose and instructions...',
|
||
'rules.descriptionHint': 'AI will generate rule content based on your description',
|
||
'rules.descriptionRequired': 'Description is required',
|
||
'rules.extractScope': 'Analysis Scope',
|
||
'rules.extractScopeHint': 'File patterns to analyze (e.g., src/**/*.ts)',
|
||
'rules.extractScopeRequired': 'Analysis scope is required',
|
||
'rules.extractFocus': 'Focus Areas',
|
||
'rules.extractFocusHint': 'Comma-separated aspects to focus on (e.g., naming, error-handling)',
|
||
'rules.enableReview': 'Enable Quality Review',
|
||
'rules.enableReviewHint': 'AI will verify the generated rule for clarity, actionability, and proper formatting',
|
||
'rules.cliGenerating': 'Generating rule via CLI (this may take a few minutes)...',
|
||
|
||
// CLAUDE.md Manager
|
||
'nav.claudeManager': 'CLAUDE.md',
|
||
'title.claudeManager': 'CLAUDE.md Manager',
|
||
'claudeManager.title': 'CLAUDE.md Files',
|
||
'claudeManager.files': 'files',
|
||
'claudeManager.userLevel': 'User Level',
|
||
'claudeManager.projectLevel': 'Project Level',
|
||
'claudeManager.moduleLevel': 'Module Level',
|
||
'claudeManager.noFile': 'No CLAUDE.md file',
|
||
'claudeManager.noModules': 'No module CLAUDE.md files',
|
||
'claudeManager.selectFile': 'Select a file to view',
|
||
'claudeManager.noMetadata': 'Select a file to see metadata',
|
||
'claudeManager.fileInfo': 'File Information',
|
||
'claudeManager.level': 'Level',
|
||
'claudeManager.level_user': 'User (~/.claude/)',
|
||
'claudeManager.level_project': 'Project (.claude/)',
|
||
'claudeManager.level_module': 'Module',
|
||
'claudeManager.path': 'Path',
|
||
'claudeManager.size': 'Size',
|
||
'claudeManager.modified': 'Modified',
|
||
'claudeManager.statistics': 'Statistics',
|
||
'claudeManager.lines': 'Lines',
|
||
'claudeManager.words': 'Words',
|
||
'claudeManager.characters': 'Characters',
|
||
'claudeManager.actions': 'Actions',
|
||
'claudeManager.loadError': 'Failed to load CLAUDE.md files',
|
||
'claudeManager.refreshed': 'Files refreshed successfully',
|
||
'claudeManager.unsavedChanges': 'You have unsaved changes. Discard them?',
|
||
'claudeManager.saved': 'File saved successfully',
|
||
'claudeManager.saveError': 'Failed to save file',
|
||
'claudeManager.freshness': 'Freshness',
|
||
'claudeManager.lastContentUpdate': 'Last Content Update',
|
||
'claudeManager.changedFiles': 'Changed Files',
|
||
'claudeManager.filesSinceUpdate': 'files since update',
|
||
'claudeManager.updateReminder': 'This file may need updating',
|
||
'claudeManager.markAsUpdated': 'Mark as Updated',
|
||
'claudeManager.markedAsUpdated': 'Marked as updated successfully',
|
||
'claudeManager.markUpdateError': 'Failed to mark as updated',
|
||
'claudeManager.never': 'Never tracked',
|
||
|
||
// Graph Explorer
|
||
'nav.graphExplorer': 'Graph',
|
||
'title.graphExplorer': 'Code Graph Explorer',
|
||
'graph.codeRelations': 'Code Relations',
|
||
'graph.searchProcess': 'Search Process',
|
||
'graph.nodeTypes': 'Node Types',
|
||
'graph.edgeTypes': 'Edge Types',
|
||
'graph.noProject': 'No project selected',
|
||
'graph.selectProject': 'Select a project to view its code graph',
|
||
'graph.loading': 'Loading graph data...',
|
||
'graph.noData': 'No graph data available',
|
||
'graph.indexProject': 'Please index this project with codex-lens first',
|
||
'graph.nodeDetails': 'Node Details',
|
||
'graph.selectNode': 'Select a node to view details',
|
||
'graph.impactAnalysis': 'Impact Analysis',
|
||
'graph.directDependents': 'Direct Dependents',
|
||
'graph.affectedFiles': 'Affected Files',
|
||
'graph.fitView': 'Fit View',
|
||
'graph.zoomIn': 'Zoom In',
|
||
'graph.zoomOut': 'Zoom Out',
|
||
'graph.resetLayout': 'Reset Layout',
|
||
'graph.title': 'Code Graph',
|
||
'graph.filters': 'Filters',
|
||
'graph.legend': 'Legend',
|
||
'graph.nodes': 'nodes',
|
||
'graph.edges': 'edges',
|
||
'graph.noGraphData': 'No graph data available. Index this project with codex-lens first.',
|
||
'graph.noSearchData': 'No search process data available.',
|
||
'graph.center': 'Center',
|
||
'graph.resetFilters': 'Reset Filters',
|
||
|
||
// Help & Guide
|
||
'nav.help': 'Help',
|
||
'title.helpGuide': 'Help & Guide',
|
||
'graph.cytoscapeNotLoaded': 'Graph library not loaded',
|
||
'graph.impactAnalysisError': 'Failed to load impact analysis',
|
||
'graph.searchProcessDesc': 'Visualize how search queries flow through the system',
|
||
'graph.searchProcessTitle': 'Search Pipeline',
|
||
'graph.resultsFound': 'results found',
|
||
'graph.coreMemory': 'Core Memory',
|
||
'graph.dataSourceSwitched': 'Data source switched',
|
||
'graph.type': 'Type',
|
||
'graph.symbolType': 'Symbol Type',
|
||
'graph.path': 'Path',
|
||
'graph.line': 'Line',
|
||
'graph.imports': 'imports',
|
||
'graph.exports': 'exports',
|
||
'graph.references': 'references',
|
||
'graph.affectedSymbols': 'Affected Symbols',
|
||
'graph.depth': 'Depth',
|
||
'graph.scope': 'Scope',
|
||
'graph.allFiles': 'All Files',
|
||
'graph.byModule': 'By Module',
|
||
'graph.byFile': 'By File',
|
||
'graph.selectModule': 'Select a module...',
|
||
'graph.selectFile': 'Select a file...',
|
||
|
||
// CLI Sync (used in claude-manager.js)
|
||
'claude.cliSync': 'CLI Auto-Sync',
|
||
'claude.tool': 'Tool',
|
||
'claude.mode': 'Mode',
|
||
'claude.syncButton': 'Sync with CLI',
|
||
'claude.syncing': 'Analyzing with {tool}...',
|
||
'claude.syncSuccess': '{file} synced successfully',
|
||
'claude.syncError': 'Sync failed: {error}',
|
||
'claude.modeUpdate': 'Update (Smart Merge)',
|
||
'claude.modeGenerate': 'Generate (Full Replace)',
|
||
'claude.modeAppend': 'Append',
|
||
'claude.searchPlaceholder': 'Search files...',
|
||
'claude.viewModeClaude': 'CLAUDE.md Only',
|
||
'claude.viewModeAll': 'All Files',
|
||
'claude.createFile': 'Create File',
|
||
'claude.createDialogTitle': 'Create CLAUDE.md File',
|
||
'claude.selectLevel': 'Level',
|
||
'claude.levelUser': 'User (~/.claude/)',
|
||
'claude.levelProject': 'Project (.claude/)',
|
||
'claude.levelModule': 'Module (custom path)',
|
||
'claude.modulePath': 'Module Path',
|
||
'claude.selectTemplate': 'Template',
|
||
'claude.templateDefault': 'Default',
|
||
'claude.templateMinimal': 'Minimal',
|
||
'claude.templateComprehensive': 'Comprehensive',
|
||
'claude.deleteFile': 'Delete File',
|
||
'claude.deleteConfirm': 'Are you sure you want to delete {file}?',
|
||
'claude.deleteWarning': 'This action cannot be undone.',
|
||
'claude.batchDeleteProject': 'Delete Project Files',
|
||
'claude.batchDeleteTitle': 'Delete Project Workspace Files',
|
||
'claude.batchDeleteWarning': 'This will delete all CLAUDE.md files in the project workspace (excluding user-level files)',
|
||
'claude.noProjectFiles': 'No project workspace files to delete',
|
||
'claude.filesToDelete': 'Files to delete:',
|
||
'claude.totalSize': 'Total size:',
|
||
'claude.fileList': 'File List',
|
||
'claude.confirmDelete': 'Confirm Delete',
|
||
'claude.deletingFiles': 'Deleting {count} files...',
|
||
'claude.batchDeleteSuccess': 'Successfully deleted {deleted} of {total} files',
|
||
'claude.batchDeleteError': 'Failed to delete files',
|
||
'claude.removeFromList': 'Remove from list',
|
||
'claude.noFilesInList': 'No files in the list',
|
||
'claude.copyContent': 'Copy Content',
|
||
'claude.contentCopied': 'Content copied to clipboard',
|
||
'claude.copyError': 'Failed to copy content',
|
||
'claude.modulePathRequired': 'Module path is required',
|
||
'claude.fileCreated': 'File created successfully',
|
||
'claude.createFileError': 'Failed to create file',
|
||
'claude.fileDeleted': 'File deleted successfully',
|
||
'claude.deleteFileError': 'Failed to delete file',
|
||
'claude.loadAllFilesError': 'Failed to load all files',
|
||
'claude.unsupportedFileType': 'Unsupported file type',
|
||
'claude.loadFileError': 'Failed to load file',
|
||
|
||
|
||
// API Settings
|
||
'nav.apiSettings': 'API Settings',
|
||
'title.apiSettings': 'API Settings',
|
||
'apiSettings.providers': 'Providers',
|
||
'apiSettings.customEndpoints': 'Custom Endpoints',
|
||
'apiSettings.cacheSettings': 'Cache Settings',
|
||
'apiSettings.addProvider': 'Add Provider',
|
||
'apiSettings.editProvider': 'Edit Provider',
|
||
'apiSettings.deleteProvider': 'Delete Provider',
|
||
'apiSettings.addEndpoint': 'Add Endpoint',
|
||
'apiSettings.editEndpoint': 'Edit Endpoint',
|
||
'apiSettings.deleteEndpoint': 'Delete Endpoint',
|
||
'apiSettings.providerType': 'Provider Type',
|
||
'apiSettings.apiFormat': 'API Format',
|
||
'apiSettings.compatible': 'Compatible',
|
||
'apiSettings.customFormat': 'Custom Format',
|
||
'apiSettings.apiFormatHint': 'Most providers (DeepSeek, Ollama, etc.) use OpenAI-compatible format',
|
||
'apiSettings.displayName': 'Display Name',
|
||
'apiSettings.apiKey': 'API Key',
|
||
'apiSettings.apiBaseUrl': 'API Base URL',
|
||
'apiSettings.useEnvVar': 'Use environment variable',
|
||
'apiSettings.enableProvider': 'Enable provider',
|
||
'apiSettings.advancedSettings': 'Advanced Settings',
|
||
'apiSettings.basicInfo': 'Basic Info',
|
||
'apiSettings.endpointSettings': 'Endpoint Settings',
|
||
'apiSettings.timeout': 'Timeout (seconds)',
|
||
'apiSettings.seconds': 'seconds',
|
||
'apiSettings.timeoutHint': 'Request timeout in seconds (default: 300)',
|
||
'apiSettings.maxRetries': 'Max Retries',
|
||
'apiSettings.maxRetriesHint': 'Maximum retry attempts on failure',
|
||
'apiSettings.organization': 'Organization ID',
|
||
'apiSettings.organizationHint': 'OpenAI organization ID (org-...)',
|
||
'apiSettings.apiVersion': 'API Version',
|
||
'apiSettings.apiVersionHint': 'Azure API version (e.g., 2024-02-01)',
|
||
'apiSettings.rpm': 'RPM Limit',
|
||
'apiSettings.tpm': 'TPM Limit',
|
||
'apiSettings.unlimited': 'Unlimited',
|
||
'apiSettings.proxy': 'Proxy Server',
|
||
'apiSettings.proxyHint': 'HTTP proxy server URL',
|
||
'apiSettings.customHeaders': 'Custom Headers',
|
||
'apiSettings.customHeadersHint': 'JSON object with custom HTTP headers',
|
||
'apiSettings.invalidJsonHeaders': 'Invalid JSON in custom headers',
|
||
'apiSettings.searchProviders': 'Search providers...',
|
||
'apiSettings.selectProvider': 'Select a Provider',
|
||
'apiSettings.selectProviderHint': 'Select a provider from the list to view and manage its settings',
|
||
'apiSettings.noProvidersFound': 'No providers found',
|
||
'apiSettings.llmModels': 'LLM Models',
|
||
'apiSettings.embeddingModels': 'Embedding Models',
|
||
'apiSettings.rerankerModels': 'Reranker Models',
|
||
'apiSettings.addRerankerModel': 'Add Reranker Model',
|
||
'apiSettings.rerankerTopK': 'Default Top K',
|
||
'apiSettings.rerankerTopKHint': 'Number of top results to return (default: 10)',
|
||
'apiSettings.manageModels': 'Manage',
|
||
'apiSettings.addModel': 'Add Model',
|
||
'apiSettings.multiKeySettings': 'Multi-Key Settings',
|
||
'apiSettings.noModels': 'No models configured',
|
||
'apiSettings.previewModel': 'Preview',
|
||
'apiSettings.modelSettings': 'Model Settings',
|
||
'apiSettings.deleteModel': 'Delete Model',
|
||
'apiSettings.endpointPreview': 'Endpoint Preview',
|
||
'apiSettings.modelBaseUrlOverride': 'Base URL Override',
|
||
'apiSettings.modelBaseUrlHint': 'Override the provider base URL for this specific model (leave empty to use provider default)',
|
||
'apiSettings.providerUpdated': 'Provider updated',
|
||
'apiSettings.syncToCodexLens': 'Sync to CodexLens',
|
||
'apiSettings.configSynced': 'Config synced to CodexLens',
|
||
'apiSettings.sdkAutoAppends': 'SDK auto-appends',
|
||
'apiSettings.preview': 'Preview',
|
||
'apiSettings.used': 'used',
|
||
'apiSettings.total': 'total',
|
||
'apiSettings.testConnection': 'Test Connection',
|
||
'apiSettings.endpointId': 'Endpoint ID',
|
||
'apiSettings.endpointIdHint': 'Usage: ccw cli -p "..." --tool custom --model <endpoint-id> --mode analysis',
|
||
'apiSettings.endpoints': 'Endpoints',
|
||
'apiSettings.addEndpointHint': 'Create custom endpoint aliases for CLI usage',
|
||
'apiSettings.endpointModel': 'Model',
|
||
'apiSettings.selectEndpoint': 'Select an endpoint',
|
||
'apiSettings.selectEndpointHint': 'Choose an endpoint from the list to view or edit its settings',
|
||
'apiSettings.provider': 'Provider',
|
||
'apiSettings.model': 'Model',
|
||
'apiSettings.selectModel': 'Select model',
|
||
'apiSettings.noModelsConfigured': 'No models configured for this provider',
|
||
'apiSettings.cacheStrategy': 'Cache Strategy',
|
||
'apiSettings.enableContextCaching': 'Enable Context Caching',
|
||
'apiSettings.cacheTTL': 'TTL (minutes)',
|
||
'apiSettings.cacheMaxSize': 'Max Size (KB)',
|
||
'apiSettings.autoCachePatterns': 'Auto-cache file patterns',
|
||
'apiSettings.enableGlobalCaching': 'Enable Global Caching',
|
||
'apiSettings.cacheUsed': 'Used',
|
||
'apiSettings.cacheEntries': 'Entries',
|
||
'apiSettings.clearCache': 'Clear Cache',
|
||
'apiSettings.noProviders': 'No providers configured',
|
||
'apiSettings.noEndpoints': 'No endpoints configured',
|
||
'apiSettings.enabled': 'Enabled',
|
||
'apiSettings.disabled': 'Disabled',
|
||
'apiSettings.cacheEnabled': 'Cache Enabled',
|
||
'apiSettings.cacheDisabled': 'Cache Disabled',
|
||
'apiSettings.providerSaved': 'Provider saved successfully',
|
||
'apiSettings.providerDeleted': 'Provider deleted successfully',
|
||
'apiSettings.apiBaseUpdated': 'API Base URL updated successfully',
|
||
'apiSettings.endpointSaved': 'Endpoint saved successfully',
|
||
'apiSettings.endpointDeleted': 'Endpoint deleted successfully',
|
||
'apiSettings.cacheCleared': 'Cache cleared successfully',
|
||
'apiSettings.cacheSettingsUpdated': 'Cache settings updated',
|
||
'apiSettings.embeddingPool': 'Embedding Pool',
|
||
'apiSettings.embeddingPoolDesc': 'Auto-rotate between providers with same model',
|
||
'apiSettings.targetModel': 'Target Model',
|
||
'apiSettings.discoveredProviders': 'Discovered Providers',
|
||
'apiSettings.autoDiscover': 'Auto-discover providers',
|
||
'apiSettings.excludeProvider': 'Exclude',
|
||
'apiSettings.defaultCooldown': 'Cooldown (seconds)',
|
||
'apiSettings.defaultConcurrent': 'Concurrent per key',
|
||
'apiSettings.poolEnabled': 'Enable Embedding Pool',
|
||
'apiSettings.noProvidersFound': 'No providers found for this model',
|
||
'apiSettings.poolSaved': 'Embedding pool config saved',
|
||
'apiSettings.strategy': 'Strategy',
|
||
'apiSettings.providerKeys': 'keys',
|
||
'apiSettings.selectTargetModel': 'Select target model',
|
||
'apiSettings.confirmDeleteProvider': 'Are you sure you want to delete this provider?',
|
||
'apiSettings.confirmDeleteEndpoint': 'Are you sure you want to delete this endpoint?',
|
||
'apiSettings.confirmClearCache': 'Are you sure you want to clear the cache?',
|
||
'apiSettings.connectionSuccess': 'Connection successful',
|
||
'apiSettings.connectionFailed': 'Connection failed',
|
||
'apiSettings.saveProviderFirst': 'Please save the provider first',
|
||
'apiSettings.addProviderFirst': 'Please add a provider first',
|
||
'apiSettings.failedToLoad': 'Failed to load API settings',
|
||
'apiSettings.toggleVisibility': 'Toggle visibility',
|
||
'apiSettings.noProvidersHint': 'Add an API provider to get started',
|
||
'apiSettings.noEndpointsHint': 'Create custom endpoints for quick access to models',
|
||
'apiSettings.cache': 'Cache',
|
||
'apiSettings.off': 'Off',
|
||
'apiSettings.used': 'used',
|
||
'apiSettings.total': 'total',
|
||
'apiSettings.cacheUsage': 'Usage',
|
||
'apiSettings.cacheSize': 'Size',
|
||
'apiSettings.endpointsDescription': 'Manage custom API endpoints for quick model access',
|
||
'apiSettings.totalEndpoints': 'Total Endpoints',
|
||
'apiSettings.cachedEndpoints': 'Cached Endpoints',
|
||
'apiSettings.cacheTabHint': 'Configure global cache settings and view statistics in the main panel',
|
||
'apiSettings.cacheDescription': 'Manage response caching to improve performance and reduce costs',
|
||
'apiSettings.cachedEntries': 'Cached Entries',
|
||
'apiSettings.storageUsed': 'Storage Used',
|
||
'apiSettings.cacheActions': 'Cache Actions',
|
||
'apiSettings.cacheStatistics': 'Cache Statistics',
|
||
'apiSettings.globalCache': 'Global Cache',
|
||
|
||
// Multi-key management
|
||
'apiSettings.apiKeys': 'API Keys',
|
||
'apiSettings.addKey': 'Add Key',
|
||
'apiSettings.keyLabel': 'Label',
|
||
'apiSettings.keyValue': 'API Key',
|
||
'apiSettings.keyWeight': 'Weight',
|
||
'apiSettings.removeKey': 'Remove',
|
||
'apiSettings.noKeys': 'No API keys configured',
|
||
'apiSettings.primaryKey': 'Primary Key',
|
||
|
||
// Routing strategy
|
||
'apiSettings.routingStrategy': 'Routing Strategy',
|
||
'apiSettings.simpleShuffleRouting': 'Simple Shuffle (Random)',
|
||
'apiSettings.weightedRouting': 'Weighted Distribution',
|
||
'apiSettings.latencyRouting': 'Latency-Based',
|
||
'apiSettings.costRouting': 'Cost-Based',
|
||
'apiSettings.leastBusyRouting': 'Least Busy',
|
||
'apiSettings.routingHint': 'How to distribute requests across multiple API keys',
|
||
|
||
// Health check
|
||
'apiSettings.healthCheck': 'Health Check',
|
||
'apiSettings.enableHealthCheck': 'Enable Health Check',
|
||
'apiSettings.healthInterval': 'Check Interval (seconds)',
|
||
'apiSettings.healthCooldown': 'Cooldown (seconds)',
|
||
'apiSettings.failureThreshold': 'Failure Threshold',
|
||
'apiSettings.healthStatus': 'Status',
|
||
'apiSettings.healthy': 'Healthy',
|
||
'apiSettings.unhealthy': 'Unhealthy',
|
||
'apiSettings.unknown': 'Unknown',
|
||
'apiSettings.lastCheck': 'Last Check',
|
||
'apiSettings.testKey': 'Test Key',
|
||
'apiSettings.testingKey': 'Testing...',
|
||
'apiSettings.keyValid': 'Key is valid',
|
||
'apiSettings.keyInvalid': 'Key is invalid',
|
||
|
||
// Embedding models
|
||
'apiSettings.embeddingDimensions': 'Dimensions',
|
||
'apiSettings.embeddingMaxTokens': 'Max Tokens',
|
||
'apiSettings.rerankerTopK': 'Top K',
|
||
'apiSettings.selectEmbeddingModel': 'Select Embedding Model',
|
||
|
||
// Model modal
|
||
'apiSettings.addLlmModel': 'Add LLM Model',
|
||
'apiSettings.addEmbeddingModel': 'Add Embedding Model',
|
||
'apiSettings.modelId': 'Model ID',
|
||
'apiSettings.modelName': 'Display Name',
|
||
'apiSettings.modelSeries': 'Series',
|
||
'apiSettings.selectFromPresets': 'Select from Presets',
|
||
'apiSettings.customModel': 'Custom Model',
|
||
'apiSettings.capabilities': 'Capabilities',
|
||
'apiSettings.streaming': 'Streaming',
|
||
'apiSettings.functionCalling': 'Function Calling',
|
||
'apiSettings.vision': 'Vision',
|
||
'apiSettings.contextWindow': 'Context Window',
|
||
'apiSettings.description': 'Description',
|
||
'apiSettings.optional': 'Optional',
|
||
'apiSettings.modelIdExists': 'Model ID already exists',
|
||
'apiSettings.useModelTreeToManage': 'Use the model tree to manage individual models',
|
||
|
||
// CLI Settings
|
||
'apiSettings.cliSettings': 'CLI Wrapper',
|
||
'apiSettings.addCliSettings': 'Add CLI Wrapper',
|
||
'apiSettings.editCliSettings': 'Edit CLI Wrapper',
|
||
'apiSettings.noCliSettings': 'No CLI wrapper configured',
|
||
'apiSettings.noCliSettingsSelected': 'No CLI Wrapper Selected',
|
||
'apiSettings.cliSettingsHint': 'Select a CLI wrapper endpoint or create a new one',
|
||
'apiSettings.showToken': 'Show',
|
||
'apiSettings.hideToken': 'Hide',
|
||
'apiSettings.syncFromJson': 'Parse JSON',
|
||
'apiSettings.cliProviderHint': 'Select an Anthropic provider to use its API key and base URL',
|
||
'apiSettings.noAnthropicProviders': 'No Anthropic providers configured. Please add one in the Providers tab first.',
|
||
'apiSettings.selectProviderFirst': 'Select a provider first',
|
||
'apiSettings.providerRequired': 'Provider is required',
|
||
'apiSettings.modelRequired': 'Model is required',
|
||
'apiSettings.providerNotFound': 'Provider not found',
|
||
'apiSettings.settingsSaved': 'Settings saved successfully',
|
||
'apiSettings.settingsDeleted': 'Settings deleted successfully',
|
||
'apiSettings.confirmDeleteSettings': 'Are you sure you want to delete this CLI settings?',
|
||
'apiSettings.endpointName': 'Endpoint Name',
|
||
'apiSettings.envSettings': 'Environment Settings',
|
||
'apiSettings.settingsFilePath': 'Settings File Path',
|
||
'apiSettings.nameRequired': 'Name is required',
|
||
'apiSettings.nameInvalidFormat': 'Name must start with a letter and contain only letters, numbers, hyphens, and underscores',
|
||
'apiSettings.nameTooLong': 'Name must be 32 characters or less',
|
||
'apiSettings.nameConflict': 'Name conflicts with built-in tool',
|
||
'apiSettings.nameFormatHint': 'Letters, numbers, hyphens, underscores only. Used as: ccw cli --tool [name]',
|
||
'apiSettings.status': 'Status',
|
||
'apiSettings.providerBinding': 'Provider Binding',
|
||
'apiSettings.directConfig': 'Direct Configuration',
|
||
'apiSettings.modelConfig': 'Model Configuration',
|
||
'apiSettings.configJson': 'Configuration JSON',
|
||
'apiSettings.syncToJson': 'Sync to JSON',
|
||
'apiSettings.jsonEditorHint': 'Edit JSON directly to add advanced settings',
|
||
'apiSettings.jsonValid': 'Valid JSON',
|
||
'apiSettings.jsonInvalid': 'Invalid JSON',
|
||
|
||
// Model Pools (High Availability)
|
||
'apiSettings.modelPools': 'Model Pools',
|
||
'apiSettings.addModelPool': 'Add Model Pool',
|
||
'apiSettings.editModelPool': 'Edit Model Pool',
|
||
'apiSettings.poolName': 'Pool Name',
|
||
'apiSettings.modelType': 'Model Type',
|
||
'apiSettings.embedding': 'Embedding',
|
||
'apiSettings.llm': 'LLM',
|
||
'apiSettings.reranker': 'Reranker',
|
||
'apiSettings.embeddingPools': 'Embedding Pools',
|
||
'apiSettings.llmPools': 'LLM Pools',
|
||
'apiSettings.rerankerPools': 'Reranker Pools',
|
||
'apiSettings.cooldown': 'Cooldown',
|
||
'apiSettings.maxConcurrent': 'Max Concurrent',
|
||
'apiSettings.enablePool': 'Enable Pool',
|
||
'apiSettings.autoDiscoverProviders': 'Auto-discover Providers',
|
||
'apiSettings.excludedProviders': 'Excluded Providers',
|
||
'apiSettings.noPoolSelected': 'No Pool Selected',
|
||
'apiSettings.selectPoolFromList': 'Select a pool from the list to view details',
|
||
'apiSettings.noPoolsConfigured': 'No model pools configured',
|
||
'apiSettings.poolCreated': 'Pool created successfully',
|
||
'apiSettings.poolDeleted': 'Pool deleted successfully',
|
||
'apiSettings.poolUpdated': 'Pool updated successfully',
|
||
'apiSettings.confirmDeletePool': 'Are you sure you want to delete this pool?',
|
||
'apiSettings.legacyPool': 'Legacy',
|
||
'apiSettings.pool': 'Pool',
|
||
|
||
// Common
|
||
'common.cancel': 'Cancel',
|
||
'common.optional': '(Optional)',
|
||
'common.create': 'Create',
|
||
'common.save': 'Save',
|
||
'common.delete': 'Delete',
|
||
'common.edit': 'Edit',
|
||
'common.close': 'Close',
|
||
'common.refresh': 'Refresh',
|
||
'common.refreshed': 'Refreshed',
|
||
'common.refreshing': 'Refreshing...',
|
||
'common.loading': 'Loading...',
|
||
'common.error': 'Error',
|
||
'common.success': 'Success',
|
||
'common.warning': 'Warning',
|
||
'common.info': 'Info',
|
||
'common.remove': 'Remove',
|
||
'common.removeFromRecent': 'Remove from recent',
|
||
'common.noDescription': 'No description',
|
||
'common.saving': 'Saving...',
|
||
'common.saveSuccess': 'Saved successfully',
|
||
'common.saveFailed': 'Failed to save',
|
||
'common.unknownError': 'Unknown error',
|
||
'common.exception': 'Exception',
|
||
'common.status': 'Status',
|
||
|
||
// Core Memory
|
||
'title.coreMemory': 'Core Memory',
|
||
'coreMemory.createNew': 'Create Memory',
|
||
'coreMemory.showArchived': 'Show Archived',
|
||
'coreMemory.showActive': 'Show Active',
|
||
'coreMemory.totalMemories': 'Total Memories',
|
||
'coreMemory.noMemories': 'No memories found',
|
||
'coreMemory.noArchivedMemories': 'No archived memories',
|
||
'coreMemory.content': 'Content',
|
||
'coreMemory.contentPlaceholder': 'Enter strategic context, insights, or important information...',
|
||
'coreMemory.contentRequired': 'Content is required',
|
||
'coreMemory.summary': 'Summary',
|
||
'coreMemory.summaryPlaceholder': 'Optional: Brief summary of this memory...',
|
||
'coreMemory.metadata': 'Metadata',
|
||
'coreMemory.invalidMetadata': 'Invalid JSON metadata',
|
||
'coreMemory.rawOutput': 'Raw Output',
|
||
'coreMemory.created': 'Memory created successfully',
|
||
'coreMemory.updated': 'Memory updated successfully',
|
||
'coreMemory.archived': 'Memory archived successfully',
|
||
'coreMemory.unarchived': 'Memory unarchived successfully',
|
||
'coreMemory.deleted': 'Memory deleted successfully',
|
||
'coreMemory.confirmArchive': 'Archive this memory?',
|
||
'coreMemory.confirmDelete': 'Permanently delete this memory?',
|
||
'coreMemory.fetchError': 'Failed to fetch memories',
|
||
'coreMemory.saveError': 'Failed to save memory',
|
||
'coreMemory.archiveError': 'Failed to archive memory',
|
||
'coreMemory.unarchiveError': 'Failed to unarchive memory',
|
||
'coreMemory.deleteError': 'Failed to delete memory',
|
||
'coreMemory.edit': 'Edit Memory',
|
||
'coreMemory.unarchive': 'Unarchive',
|
||
'coreMemory.generateSummary': 'Generate Summary',
|
||
'coreMemory.generatingSummary': 'Generating summary...',
|
||
'coreMemory.summaryGenerated': 'Summary generated successfully',
|
||
'coreMemory.summaryError': 'Failed to generate summary',
|
||
'coreMemory.knowledgeGraph': 'Knowledge Graph',
|
||
'coreMemory.graph': 'Graph',
|
||
'coreMemory.entities': 'Entities',
|
||
'coreMemory.noEntities': 'No entities found',
|
||
'coreMemory.relationships': 'Relationships',
|
||
'coreMemory.noRelationships': 'No relationships found',
|
||
'coreMemory.graphError': 'Failed to load knowledge graph',
|
||
'coreMemory.evolution': 'Evolution',
|
||
'coreMemory.evolutionHistory': 'Evolution History',
|
||
'coreMemory.noHistory': 'No evolution history',
|
||
'coreMemory.noReason': 'No reason provided',
|
||
'coreMemory.current': 'Current',
|
||
'coreMemory.evolutionError': 'Failed to load evolution history',
|
||
'coreMemory.created': 'Created',
|
||
'coreMemory.updated': 'Updated',
|
||
|
||
// View toggle
|
||
'coreMemory.memories': 'Memories',
|
||
'coreMemory.clusters': 'Clusters',
|
||
'coreMemory.clustersList': 'Cluster List',
|
||
'coreMemory.selectCluster': 'Select a cluster to view details',
|
||
'coreMemory.openSession': 'Open Session',
|
||
'coreMemory.clickToPreview': 'Click to preview',
|
||
'coreMemory.previewError': 'Failed to load preview',
|
||
'coreMemory.unknownSessionType': 'Unknown session type',
|
||
|
||
// Clustering features
|
||
'coreMemory.noClusters': 'No clusters yet',
|
||
'coreMemory.autoCluster': 'Auto Cluster',
|
||
'coreMemory.clusterLoadError': 'Failed to load clusters',
|
||
'coreMemory.clusterDetailError': 'Failed to load cluster details',
|
||
'coreMemory.intent': 'Intent',
|
||
'coreMemory.sessionTimeline': 'Session Timeline',
|
||
'coreMemory.relatedClusters': 'Related Clusters',
|
||
'coreMemory.noSessions': 'No sessions in this cluster',
|
||
'coreMemory.clusteringInProgress': 'Clustering in progress...',
|
||
'coreMemory.clusteringComplete': 'Created {created} clusters with {sessions} sessions',
|
||
'coreMemory.clusteringError': 'Auto-clustering failed',
|
||
'coreMemory.embeddingNotAvailable': 'Semantic search not installed. Install to improve clustering accuracy.',
|
||
'coreMemory.installGuide': 'Go to Settings',
|
||
'coreMemory.embeddingProgress': 'Embeddings: {pct}% ({pending} pending)',
|
||
'coreMemory.generateEmbeddings': 'Generate',
|
||
'coreMemory.noChunksYet': 'No memories chunked yet. Run "ccw memory embed" to enable semantic clustering.',
|
||
'coreMemory.embeddingInProgress': 'Generating embeddings...',
|
||
'coreMemory.embeddingComplete': 'Generated embeddings for {count} chunks',
|
||
'coreMemory.embeddingError': 'Failed to generate embeddings',
|
||
'coreMemory.enterClusterName': 'Enter cluster name:',
|
||
'coreMemory.clusterCreated': 'Cluster created',
|
||
'coreMemory.clusterCreateError': 'Failed to create cluster',
|
||
'coreMemory.confirmDeleteCluster': 'Delete this cluster?',
|
||
'coreMemory.clusterDeleted': 'Cluster deleted',
|
||
'coreMemory.clusterDeleteError': 'Failed to delete cluster',
|
||
'coreMemory.clusterUpdated': 'Cluster updated',
|
||
'coreMemory.clusterUpdateError': 'Failed to update cluster',
|
||
'coreMemory.memberRemoved': 'Member removed',
|
||
'coreMemory.memberRemoveError': 'Failed to remove member',
|
||
'coreMemory.favorites': 'Favorites',
|
||
'coreMemory.totalFavorites': 'Total Favorites',
|
||
'coreMemory.noFavorites': 'No favorites yet',
|
||
'coreMemory.toggleFavorite': 'Toggle Favorite',
|
||
'coreMemory.addedToFavorites': 'Added to favorites',
|
||
'coreMemory.removedFromFavorites': 'Removed from favorites',
|
||
'coreMemory.favoriteError': 'Failed to update favorite',
|
||
'coreMemory.relations': 'Relations',
|
||
'coreMemory.showRelations': 'Show Relations',
|
||
'coreMemory.relationsFor': 'Relations',
|
||
'coreMemory.noRelations': 'No cluster relations found',
|
||
'coreMemory.noRelationsHint': 'Use Auto Cluster in the Clusters tab to create relations',
|
||
'coreMemory.belongsToClusters': 'Belongs to Clusters',
|
||
'coreMemory.relationsError': 'Failed to load relations',
|
||
|
||
// Issue Manager
|
||
'nav.issues': 'Issues',
|
||
'nav.issueManager': 'Manager',
|
||
'nav.issueDiscovery': 'Discovery',
|
||
'title.issueManager': 'Issue Manager',
|
||
'title.issueDiscovery': 'Issue Discovery',
|
||
|
||
// Loop Monitor
|
||
'title.loopMonitor': 'Loop Monitor',
|
||
'loop.title': 'Loop Monitor',
|
||
'loop.status.created': 'Created',
|
||
'loop.status.running': 'Running',
|
||
'loop.status.paused': 'Paused',
|
||
'loop.status.completed': 'Completed',
|
||
'loop.status.failed': 'Failed',
|
||
'loop.tabs.timeline': 'Timeline',
|
||
'loop.tabs.logs': 'Logs',
|
||
'loop.tabs.variables': 'Variables',
|
||
'loop.buttons.pause': 'Pause',
|
||
'loop.buttons.resume': 'Resume',
|
||
'loop.buttons.stop': 'Stop',
|
||
'loop.buttons.retry': 'Retry',
|
||
'loop.buttons.newLoop': 'New Loop',
|
||
'loop.empty': 'No active loops',
|
||
'loop.metric.iteration': 'Iteration',
|
||
'loop.metric.step': 'Step',
|
||
'loop.metric.duration': 'Duration',
|
||
'loop.task.id': 'Task',
|
||
'loop.created': 'Created',
|
||
'loop.updated': 'Updated',
|
||
'loop.progress': 'Progress',
|
||
'loop.cliSequence': 'CLI Sequence',
|
||
'loop.stateVariables': 'State Variables',
|
||
'loop.executionHistory': 'Execution History',
|
||
'loop.failureReason': 'Failure Reason',
|
||
'loop.noLoopsFound': 'No loops found',
|
||
'loop.selectLoop': 'Select a loop to view details',
|
||
'loop.tasks': 'Tasks',
|
||
'loop.createTaskTitle': 'Create Loop Task',
|
||
'loop.loopsCount': 'loops',
|
||
'loop.paused': 'Loop paused',
|
||
'loop.resumed': 'Loop resumed',
|
||
'loop.stopped': 'Loop stopped',
|
||
'loop.startedSuccess': 'Loop started',
|
||
'loop.taskDescription': 'Description',
|
||
'loop.maxIterations': 'Max Iterations',
|
||
'loop.errorPolicy': 'Error Policy',
|
||
'loop.pauseOnError': 'Pause on error',
|
||
'loop.retryAutomatically': 'Retry automatically',
|
||
'loop.failImmediate': 'Fail immediately',
|
||
'loop.successCondition': 'Success Condition',
|
||
|
||
// Kanban Board
|
||
'loop.kanban.title': 'Tasks Board',
|
||
'loop.kanban.byStatus': 'By Status',
|
||
'loop.kanban.byPriority': 'By Priority',
|
||
'loop.kanban.noBoardData': 'No tasks to display',
|
||
'loop.listView': 'List View',
|
||
'loop.addTask': 'Add Task',
|
||
'loop.add': 'Add',
|
||
'loop.save': 'Save',
|
||
'loop.cancel': 'Cancel',
|
||
'loop.loadToolsError': 'Failed to load available tools. Please try again.',
|
||
|
||
// Navigation & Grouping
|
||
'loop.nav.groupBy': 'Group By',
|
||
'loop.nav.allLoops': 'All Loops',
|
||
'loop.nav.activeOnly': 'Active Only',
|
||
'loop.nav.recentlyActive': 'Recently Active',
|
||
|
||
// Task Status Details
|
||
'loop.taskStatus.pending': 'Pending',
|
||
'loop.taskStatus.inProgress': 'In Progress',
|
||
'loop.taskStatus.blocked': 'Blocked',
|
||
'loop.taskStatus.done': 'Done',
|
||
|
||
// Status Management
|
||
'loop.updateStatus': 'Update Status',
|
||
'loop.updatedAt': 'Updated at',
|
||
'loop.updateSuccess': 'Status updated successfully',
|
||
'loop.updateError': 'Failed to update status',
|
||
'loop.priority': 'Priority',
|
||
'loop.priority.low': 'Low',
|
||
'loop.priority.medium': 'Medium',
|
||
'loop.priority.high': 'High',
|
||
'loop.tags': 'Tags',
|
||
'loop.notes': 'Notes',
|
||
|
||
// Issue Discovery
|
||
'discovery.title': 'Issue Discovery',
|
||
'discovery.description': 'Discover potential issues from multiple perspectives',
|
||
'discovery.noSessions': 'No discovery sessions',
|
||
'discovery.noDiscoveries': 'No discoveries yet',
|
||
'discovery.runHint': 'Run /issue:discover to start discovering issues',
|
||
'discovery.runCommand': 'Run /issue:discover to start discovering issues',
|
||
'discovery.sessions': 'Sessions',
|
||
'discovery.findings': 'Findings',
|
||
'discovery.phase': 'Phase',
|
||
'discovery.perspectives': 'Perspectives',
|
||
'discovery.progress': 'Progress',
|
||
'discovery.total': 'Total',
|
||
'discovery.exported': 'Exported',
|
||
'discovery.dismissed': 'Dismissed',
|
||
'discovery.pending': 'Pending',
|
||
'discovery.external': 'External Research',
|
||
'discovery.selectAll': 'Select All',
|
||
'discovery.deselectAll': 'Deselect All',
|
||
'discovery.exportSelected': 'Export Selected',
|
||
'discovery.dismissSelected': 'Dismiss Selected',
|
||
'discovery.exportAsIssue': 'Export as Issue',
|
||
'discovery.dismiss': 'Dismiss',
|
||
'discovery.keep': 'Keep',
|
||
'discovery.priority.critical': 'Critical',
|
||
'discovery.priority.high': 'High',
|
||
'discovery.priority.medium': 'Medium',
|
||
'discovery.priority.low': 'Low',
|
||
'discovery.perspective.bug': 'Bug',
|
||
'discovery.perspective.ux': 'UX',
|
||
'discovery.perspective.test': 'Test',
|
||
'discovery.perspective.quality': 'Quality',
|
||
'discovery.perspective.security': 'Security',
|
||
'discovery.perspective.performance': 'Performance',
|
||
'discovery.perspective.maintainability': 'Maintainability',
|
||
'discovery.perspective.best-practices': 'Best Practices',
|
||
'discovery.file': 'File',
|
||
'discovery.line': 'Line',
|
||
'discovery.confidence': 'Confidence',
|
||
'discovery.suggestedIssue': 'Suggested Issue',
|
||
'discovery.externalRef': 'External Reference',
|
||
'discovery.noFindings': 'No findings match your filters',
|
||
'discovery.filterPerspective': 'Filter by Perspective',
|
||
'discovery.filterPriority': 'Filter by Priority',
|
||
'discovery.filterAll': 'All',
|
||
'discovery.allPerspectives': 'All Perspectives',
|
||
'discovery.allPriorities': 'All Priorities',
|
||
'discovery.selectFinding': 'Select a finding to preview',
|
||
'discovery.location': 'Location',
|
||
'discovery.code': 'Code',
|
||
'discovery.impact': 'Impact',
|
||
'discovery.recommendation': 'Recommendation',
|
||
'discovery.exportAsIssues': 'Export as Issues',
|
||
'discovery.selectAll': 'Select All',
|
||
'discovery.deselectAll': 'Deselect All',
|
||
'discovery.deleteSession': 'Delete Session',
|
||
'discovery.confirmDelete': 'Are you sure you want to delete this discovery session?',
|
||
'discovery.deleted': 'Discovery session deleted',
|
||
'discovery.exportSuccess': 'Findings exported as issues',
|
||
'discovery.dismissSuccess': 'Findings dismissed',
|
||
'discovery.backToList': 'Back to Sessions',
|
||
'discovery.viewDetails': 'View Details',
|
||
'discovery.inProgress': 'In Progress',
|
||
'discovery.completed': 'Completed',
|
||
// issues.* keys (used by issue-manager.js)
|
||
'issues.title': 'Issue Manager',
|
||
'issues.description': 'Manage issues, solutions, and execution queue',
|
||
'issues.viewIssues': 'Issues',
|
||
'issues.viewQueue': 'Queue',
|
||
'issues.filterStatus': 'Status',
|
||
'issues.filterAll': 'All',
|
||
'issues.noIssues': 'No issues found',
|
||
'issues.createHint': 'Click "Create" to add your first issue',
|
||
'issues.priority': 'Priority',
|
||
'issues.tasks': 'tasks',
|
||
'issues.solutions': 'solutions',
|
||
'issues.boundSolution': 'Bound',
|
||
'issues.queueEmpty': 'Queue is empty',
|
||
'issues.reorderHint': 'Drag items within a group to reorder',
|
||
'issues.parallelGroup': 'Parallel',
|
||
'issues.sequentialGroup': 'Sequential',
|
||
'issues.dependsOn': 'Depends on',
|
||
// Create & Search
|
||
'issues.create': 'Create',
|
||
'issues.createTitle': 'Create New Issue',
|
||
'issues.issueId': 'Issue ID',
|
||
'issues.issueTitle': 'Title',
|
||
'issues.issueContext': 'Context',
|
||
'issues.issuePriority': 'Priority',
|
||
'issues.titlePlaceholder': 'Brief description of the issue',
|
||
'issues.contextPlaceholder': 'Detailed description, requirements, etc.',
|
||
'issues.priorityLowest': 'Lowest',
|
||
'issues.priorityLow': 'Low',
|
||
'issues.priorityMedium': 'Medium',
|
||
'issues.priorityHigh': 'High',
|
||
'issues.priorityCritical': 'Critical',
|
||
'issues.searchPlaceholder': 'Search issues...',
|
||
'issues.showing': 'Showing',
|
||
'issues.of': 'of',
|
||
'issues.issues': 'issues',
|
||
'issues.tryDifferentFilter': 'Try adjusting your search or filters',
|
||
'issues.createFirst': 'Create First Issue',
|
||
'issues.idRequired': 'Issue ID is required',
|
||
'issues.titleRequired': 'Title is required',
|
||
'issues.created': 'Issue created successfully',
|
||
'issues.confirmDelete': 'Are you sure you want to delete this issue?',
|
||
'issues.deleted': 'Issue deleted',
|
||
'issues.idAutoGenerated': 'Auto-generated',
|
||
'issues.regenerateId': 'Regenerate ID',
|
||
// Solution detail
|
||
'issues.solutionDetail': 'Solution Details',
|
||
'issues.bind': 'Bind',
|
||
'issues.unbind': 'Unbind',
|
||
'issues.bound': 'Bound',
|
||
'issues.totalTasks': 'Total Tasks',
|
||
'issues.bindStatus': 'Bind Status',
|
||
'issues.createdAt': 'Created',
|
||
'issues.taskList': 'Task List',
|
||
'issues.noTasks': 'No tasks in this solution',
|
||
'issues.noSolutions': 'No solutions',
|
||
'issues.viewJson': 'View Raw JSON',
|
||
'issues.scope': 'Scope',
|
||
'issues.modificationPoints': 'Modification Points',
|
||
'issues.implementationSteps': 'Implementation Steps',
|
||
'issues.acceptanceCriteria': 'Acceptance Criteria',
|
||
'issues.dependencies': 'Dependencies',
|
||
'issues.solutionBound': 'Solution bound successfully',
|
||
'issues.solutionUnbound': 'Solution unbound',
|
||
// Queue operations
|
||
'issues.queueEmptyHint': 'Generate execution queue from bound solutions',
|
||
'issues.createQueue': 'Create Queue',
|
||
'issues.regenerate': 'Regenerate',
|
||
'issues.regenerateQueue': 'Regenerate Queue',
|
||
'issues.refreshQueue': 'Refresh',
|
||
'issues.executionGroups': 'groups',
|
||
'issues.totalItems': 'items',
|
||
'issues.queueRefreshed': 'Queue refreshed',
|
||
'issues.confirmCreateQueue': 'This will execute /issue:queue command via Claude Code CLI to generate execution queue from bound solutions.\n\nContinue?',
|
||
'issues.creatingQueue': 'Creating execution queue...',
|
||
'issues.queueExecutionStarted': 'Queue generation started',
|
||
'issues.queueCreated': 'Queue created successfully',
|
||
'issues.queueCreationFailed': 'Queue creation failed',
|
||
'issues.queueCommandHint': 'Run one of the following commands in your terminal to generate the execution queue from bound solutions:',
|
||
'issues.queueCommandInfo': 'After running the command, click "Refresh" to see the updated queue.',
|
||
'issues.alternative': 'Alternative',
|
||
'issues.refreshAfter': 'Refresh Queue',
|
||
'issues.activate': 'Activate',
|
||
'issues.deactivate': 'Deactivate',
|
||
'issues.queueActivated': 'Queue activated',
|
||
'issues.queueDeactivated': 'Queue deactivated',
|
||
'issues.deleteQueue': 'Delete queue',
|
||
'issues.confirmDeleteQueue': 'Are you sure you want to delete this queue? This action cannot be undone.',
|
||
'issues.queueDeleted': 'Queue deleted successfully',
|
||
'issues.actions': 'Actions',
|
||
'issues.archive': 'Archive',
|
||
'issues.delete': 'Delete',
|
||
'issues.confirmDeleteIssue': 'Are you sure you want to delete this issue? This action cannot be undone.',
|
||
'issues.confirmArchiveIssue': 'Archive this issue? It will be moved to history.',
|
||
'issues.issueDeleted': 'Issue deleted successfully',
|
||
'issues.issueArchived': 'Issue archived successfully',
|
||
'issues.executionQueues': 'Execution Queues',
|
||
'issues.queues': 'queues',
|
||
'issues.noQueues': 'No queues found',
|
||
'issues.queueEmptyHint': 'Generate execution queue from bound solutions',
|
||
'issues.refresh': 'Refresh',
|
||
// issue.* keys (legacy)
|
||
'issue.viewIssues': 'Issues',
|
||
'issue.viewQueue': 'Queue',
|
||
'issue.filterAll': 'All',
|
||
'issue.filterStatus': 'Status',
|
||
'issue.filterPriority': 'Priority',
|
||
'issue.noIssues': 'No issues found',
|
||
'issue.noIssuesHint': 'Issues will appear here when created via /issue:plan command',
|
||
'issue.noQueue': 'No tasks in queue',
|
||
'issue.noQueueHint': 'Run /issue:queue to form execution queue from bound solutions',
|
||
'issue.tasks': 'tasks',
|
||
'issue.solutions': 'solutions',
|
||
'issue.parallel': 'Parallel',
|
||
'issue.sequential': 'Sequential',
|
||
'issue.status.registered': 'Registered',
|
||
'issue.status.planned': 'Planned',
|
||
'issue.status.queued': 'Queued',
|
||
'issue.status.executing': 'Executing',
|
||
'issue.status.completed': 'Completed',
|
||
'issue.status.failed': 'Failed',
|
||
'issue.priority.critical': 'Critical',
|
||
'issue.priority.high': 'High',
|
||
'issue.priority.medium': 'Medium',
|
||
'issue.priority.low': 'Low',
|
||
'issue.detail.context': 'Context',
|
||
'issue.detail.solutions': 'Solutions',
|
||
'issue.detail.tasks': 'Tasks',
|
||
'issue.detail.noSolutions': 'No solutions available',
|
||
'issue.detail.noTasks': 'No tasks available',
|
||
'issue.detail.bound': 'Bound',
|
||
'issue.detail.modificationPoints': 'Modification Points',
|
||
'issue.detail.implementation': 'Implementation Steps',
|
||
'issue.detail.acceptance': 'Acceptance Criteria',
|
||
'issue.queue.reordered': 'Queue reordered',
|
||
'issue.queue.reorderFailed': 'Failed to reorder queue',
|
||
'issue.saved': 'Issue saved',
|
||
'issue.saveFailed': 'Failed to save issue',
|
||
'issue.taskUpdated': 'Task updated',
|
||
'issue.taskUpdateFailed': 'Failed to update task',
|
||
'issue.conflicts': 'Conflicts',
|
||
'issue.noConflicts': 'No conflicts detected',
|
||
'issue.conflict.resolved': 'Resolved',
|
||
'issue.conflict.pending': 'Pending',
|
||
|
||
// Common additions
|
||
'common.copyId': 'Copy ID',
|
||
'common.copied': 'Copied!',
|
||
'common.copyError': 'Failed to copy',
|
||
|
||
// Loop Monitor
|
||
'loop.title': 'Loop Monitor',
|
||
'loop.loops': 'Loops',
|
||
'loop.all': 'All',
|
||
'loop.running': 'Running',
|
||
'loop.paused': 'Paused',
|
||
'loop.completed': 'Completed',
|
||
'loop.failed': 'Failed',
|
||
'loop.tasks': 'Tasks',
|
||
'loop.newLoop': 'New Loop',
|
||
'loop.loading': 'Loading loops...',
|
||
'loop.noLoops': 'No loops found',
|
||
'loop.noLoopsHint': 'Create a loop task to get started',
|
||
'loop.selectLoop': 'Select a loop to view details',
|
||
'loop.selectLoopHint': 'Click on a loop from the list to see its details',
|
||
'loop.loopNotFound': 'Loop not found',
|
||
'loop.selectAnotherLoop': 'Select another loop from the list',
|
||
'loop.task': 'Task',
|
||
'loop.steps': 'steps',
|
||
'loop.taskInfo': 'Task Info',
|
||
'loop.edit': 'Edit',
|
||
'loop.taskId': 'Task ID',
|
||
'loop.step': 'Step',
|
||
'loop.updated': 'Updated',
|
||
'loop.created': 'Created',
|
||
'loop.progress': 'Progress',
|
||
'loop.iteration': 'Iteration',
|
||
'loop.currentStep': 'Current Step',
|
||
'loop.cliSequence': 'CLI Sequence',
|
||
'loop.stateVariables': 'State Variables',
|
||
'loop.executionHistory': 'Execution History',
|
||
'loop.failureReason': 'Failure Reason',
|
||
'loop.pause': 'Pause',
|
||
'loop.resume': 'Resume',
|
||
'loop.stop': 'Stop',
|
||
'loop.confirmStop': 'Stop loop {loopId}?\n\nIteration: {currentIteration}/{maxIterations}\nThis action cannot be undone.',
|
||
'loop.loopPaused': 'Loop paused',
|
||
'loop.loopResumed': 'Loop resumed',
|
||
'loop.loopStopped': 'Loop stopped',
|
||
'loop.failedToPause': 'Failed to pause',
|
||
'loop.failedToResume': 'Failed to resume',
|
||
'loop.failedToStop': 'Failed to stop',
|
||
'loop.failedToLoad': 'Failed to load loops',
|
||
'loop.justNow': 'just now',
|
||
'loop.minutesAgo': '{m}m ago',
|
||
'loop.hoursAgo': '{h}h ago',
|
||
'loop.daysAgo': '{d}d ago',
|
||
'loop.tasksCount': '{count} task(s) with loop enabled',
|
||
'loop.noLoopTasks': 'No loop-enabled tasks found',
|
||
'loop.createLoopTask': 'Create Loop Task',
|
||
'loop.backToLoops': 'Back to Loops',
|
||
'loop.startLoop': 'Start Loop',
|
||
'loop.loopStarted': 'Loop started',
|
||
'loop.failedToStart': 'Failed to start loop',
|
||
'loop.createTaskFailed': 'Failed to create task',
|
||
'loop.createLoopModal': 'Create Loop Task',
|
||
'loop.basicInfo': 'Basic Information',
|
||
'loop.importFromIssue': 'Import from Issue',
|
||
'loop.selectIssue': 'Select an Issue',
|
||
'loop.noIssuesFound': 'No issues found',
|
||
'loop.fetchIssuesFailed': 'Failed to fetch issues',
|
||
'loop.fetchIssueFailed': 'Failed to fetch issue',
|
||
'loop.issueImported': 'Issue imported',
|
||
'loop.taskTitle': 'Task Title',
|
||
'loop.taskTitlePlaceholder': 'e.g., Auto Test Fix Loop',
|
||
'loop.description': 'Description',
|
||
'loop.descriptionPlaceholder': 'Describe what this loop does...',
|
||
'loop.loopConfig': 'Loop Configuration',
|
||
'loop.maxIterations': 'Max Iterations',
|
||
'loop.errorPolicy': 'Error Policy',
|
||
'loop.pauseOnError': 'Pause on error',
|
||
'loop.retryAutomatically': 'Retry automatically',
|
||
'loop.failImmediately': 'Fail immediately',
|
||
'loop.maxRetries': 'Max Retries (for retry policy)',
|
||
'loop.successCondition': 'Success Condition (JavaScript expression)',
|
||
'loop.successConditionPlaceholder': 'e.g., state_variables.test_stdout.includes(\'passed\')',
|
||
'loop.availableVars': 'Available: state_variables, current_iteration',
|
||
'loop.cliSequence': 'CLI Sequence',
|
||
'loop.addStep': 'Add Step',
|
||
'loop.stepNumber': 'Step {number}',
|
||
'loop.stepLabel': 'Step',
|
||
'loop.removeStep': 'Remove step',
|
||
'loop.stepId': 'Step ID',
|
||
'loop.stepIdPlaceholder': 'e.g., run_tests',
|
||
'loop.tool': 'Tool',
|
||
'loop.mode': 'Mode',
|
||
'loop.command': 'Command',
|
||
'loop.commandPlaceholder': 'e.g., npm test',
|
||
'loop.promptTemplate': 'Prompt Template (supports [variable_name] substitution)',
|
||
'loop.promptPlaceholder': 'Enter prompt template...',
|
||
'loop.onError': 'On Error',
|
||
'loop.continue': 'Continue',
|
||
'loop.pause': 'Pause',
|
||
'loop.failFast': 'Fail Fast',
|
||
'loop.cancel': 'Cancel',
|
||
'loop.createAndStart': 'Create Loop',
|
||
'loop.created': 'Created',
|
||
'loop.createFailed': 'Create Loop Failed',
|
||
'loop.taskCreated': 'Task created',
|
||
'loop.taskCreatedFailedStart': 'Task created but failed to start loop',
|
||
// V2 Simplified Loop
|
||
'loop.create': 'Create',
|
||
'loop.loopCreated': 'Loop created successfully',
|
||
'loop.titleRequired': 'Title is required',
|
||
'loop.invalidMaxIterations': 'Max iterations must be between 1 and 100',
|
||
'loop.loopInfo': 'Loop Info',
|
||
'loop.v2LoopInfo': 'This is a simplified loop. Tasks are managed independently in the detail view.',
|
||
'loop.manageTasks': 'Manage Tasks',
|
||
'loop.taskManagement': 'Task Management',
|
||
'loop.taskManagementPlaceholder': 'Task management will be available in the next update. Use the v1 loops for full task configuration.',
|
||
'loop.noTasksYet': 'No tasks configured yet',
|
||
'loop.back': 'Back',
|
||
'loop.loopNotFound': 'Loop not found',
|
||
'loop.selectAnotherLoop': 'Please select another loop from the list',
|
||
'loop.start': 'Start',
|
||
'loop.loopStarted': 'Loop started',
|
||
'loop.failedToStart': 'Failed to start loop',
|
||
// Task List Management
|
||
'loop.taskList': 'Task List',
|
||
'loop.addTask': 'Add Task',
|
||
'loop.taskDescription': 'Task Description',
|
||
'loop.taskDescriptionPlaceholder': 'Describe what this task should do...',
|
||
'loop.modeAnalysis': 'Analysis',
|
||
'loop.modeWrite': 'Write',
|
||
'loop.modeReview': 'Review',
|
||
'loop.save': 'Save',
|
||
'loop.taskAdded': 'Task added successfully',
|
||
'loop.addTaskFailed': 'Failed to add task',
|
||
'loop.editTask': 'Edit Task',
|
||
'loop.taskUpdated': 'Task updated successfully',
|
||
'loop.updateTaskFailed': 'Failed to update task',
|
||
'loop.confirmDeleteTask': 'Are you sure you want to delete this task? This action cannot be undone.',
|
||
'loop.taskDeleted': 'Task deleted successfully',
|
||
'loop.deleteTaskFailed': 'Failed to delete task',
|
||
'loop.deleteTaskError': 'Error deleting task',
|
||
'loop.loadTasksFailed': 'Failed to load tasks',
|
||
'loop.loadTasksError': 'Error loading tasks',
|
||
'loop.tasksReordered': 'Tasks reordered',
|
||
'loop.saveOrderFailed': 'Failed to save order',
|
||
'loop.noTasksHint': 'Add your first task to get started',
|
||
'loop.noDescription': 'No description',
|
||
'loop.descriptionRequired': 'Description is required',
|
||
'loop.loadTaskFailed': 'Failed to load task',
|
||
'loop.loadTaskError': 'Error loading task',
|
||
'loop.taskTitleHint': 'Enter a descriptive title for your loop',
|
||
'loop.descriptionHint': 'Optional context about what this loop does',
|
||
'loop.maxIterationsHint': 'Maximum number of iterations to run (1-100)',
|
||
},
|
||
|
||
zh: {
|
||
// App title and brand
|
||
'app.title': 'CCW 控制面板',
|
||
'app.brand': 'Claude Code Workflow',
|
||
|
||
// Common
|
||
'common.view': '查看',
|
||
'common.edit': '编辑',
|
||
'common.delete': '删除',
|
||
'common.cancel': '取消',
|
||
'common.save': '保存',
|
||
'common.include': '包含',
|
||
'common.close': '关闭',
|
||
'common.loading': '加载中...',
|
||
'common.error': '错误',
|
||
'common.success': '成功',
|
||
'common.deleteSuccess': '删除成功',
|
||
'common.deleteFailed': '删除失败',
|
||
'common.retry': '重试',
|
||
'common.refresh': '刷新',
|
||
'common.format': '格式化',
|
||
'common.back': '返回',
|
||
'common.search': '搜索...',
|
||
'common.minutes': '分钟',
|
||
'common.enabled': '已启用',
|
||
'common.disabled': '已禁用',
|
||
'common.yes': '是',
|
||
'common.no': '否',
|
||
'common.na': '无',
|
||
|
||
// Header
|
||
'header.project': '项目:',
|
||
'header.recentProjects': '最近项目',
|
||
'header.browse': '浏览...',
|
||
'header.refreshWorkspace': '刷新工作区',
|
||
'header.checkUpdateNow': '立即检查更新',
|
||
'header.autoUpdate': '自动更新检查',
|
||
'header.toggleTheme': '切换主题',
|
||
'header.language': '语言',
|
||
'header.cliStream': 'CLI 流式输出',
|
||
|
||
// CLI Stream Viewer
|
||
'cliStream.title': 'CLI 流式输出',
|
||
'cliStream.clearCompleted': '清除已完成',
|
||
'cliStream.noStreams': '没有活动的 CLI 执行',
|
||
'cliStream.noStreamsHint': '启动 CLI 命令以查看流式输出',
|
||
'cliStream.running': '运行中',
|
||
'cliStream.completed': '已完成',
|
||
'cliStream.error': '错误',
|
||
'cliStream.autoScroll': '自动滚动',
|
||
'cliStream.close': '关闭',
|
||
'cliStream.cannotCloseRunning': '无法关闭运行中的执行',
|
||
'cliStream.lines': '行',
|
||
'cliStream.searchPlaceholder': '搜索输出...',
|
||
'cliStream.filterResults': '条结果',
|
||
|
||
// Sidebar - Project section
|
||
'nav.project': '项目',
|
||
'nav.overview': '概览',
|
||
'nav.explorer': '文件浏览器',
|
||
'nav.status': '状态',
|
||
'nav.history': '历史',
|
||
'nav.codexLensManager': 'CodexLens',
|
||
'nav.memory': '记忆',
|
||
'nav.contextMemory': '活动',
|
||
'nav.coreMemory': '核心记忆',
|
||
'nav.promptHistory': '洞察',
|
||
|
||
// Sidebar - Sessions section
|
||
'nav.sessions': '会话',
|
||
'nav.all': '全部',
|
||
'nav.active': '活跃',
|
||
'nav.archived': '已归档',
|
||
|
||
// Sidebar - Lite Tasks section
|
||
'nav.liteTasks': '轻量任务',
|
||
'nav.litePlan': '轻量规划',
|
||
'nav.liteFix': '轻量修复',
|
||
'nav.multiCliPlan': '多CLI规划',
|
||
|
||
// Sidebar - Loops section
|
||
'nav.loops': '循环',
|
||
'nav.loopMonitor': '监控器',
|
||
'nav.inDevelopment': '开发中',
|
||
|
||
// Sidebar - MCP section
|
||
'nav.mcpServers': 'MCP 服务器',
|
||
'nav.manage': '管理',
|
||
|
||
// Sidebar - Hooks section
|
||
'nav.hooks': '钩子',
|
||
|
||
// Sidebar - Footer
|
||
'nav.collapse': '收起',
|
||
'nav.expand': '展开',
|
||
|
||
// Stats cards
|
||
'stats.totalSessions': '总会话数',
|
||
'stats.activeSessions': '活跃会话',
|
||
'stats.totalTasks': '总任务数',
|
||
'stats.completedTasks': '已完成任务',
|
||
|
||
// Carousel
|
||
'carousel.noActiveSessions': '暂无活跃会话',
|
||
'carousel.previous': '上一个',
|
||
'carousel.next': '下一个',
|
||
'carousel.pause': '暂停自动播放',
|
||
|
||
// Content titles
|
||
'title.allSessions': '所有会话',
|
||
'title.activeSessions': '活跃会话',
|
||
'title.archivedSessions': '已归档会话',
|
||
'title.sessions': '会话',
|
||
'title.projectOverview': '项目概览',
|
||
'title.mcpManagement': 'MCP 服务器管理',
|
||
'title.fileExplorer': '文件浏览器',
|
||
'title.cliTools': 'CLI 工具 & CCW',
|
||
'title.cliHistory': 'CLI 执行历史',
|
||
'title.litePlanSessions': '轻量规划会话',
|
||
'title.liteFixSessions': '轻量修复会话',
|
||
'title.multiCliPlanSessions': '多CLI规划会话',
|
||
'title.liteTasks': '轻量任务',
|
||
'title.sessionDetail': '会话详情',
|
||
'title.liteTaskDetail': '轻量任务详情',
|
||
'title.multiCliDetail': '多CLI讨论详情',
|
||
'title.hookManager': '钩子管理',
|
||
'title.memoryModule': '记忆模块',
|
||
'title.promptHistory': '提示历史',
|
||
'title.codexLensManager': 'CodexLens 管理',
|
||
|
||
// Search
|
||
'search.placeholder': '搜索...',
|
||
|
||
// Session cards
|
||
'session.status.active': '活跃',
|
||
'session.status.archived': '已归档',
|
||
'session.status.planning': '规划中',
|
||
'session.tasks': '个任务',
|
||
'session.findings': '个发现',
|
||
'session.dimensions': '个维度',
|
||
'session.progress': '进度',
|
||
|
||
// Empty states
|
||
'empty.noSessions': '未找到会话',
|
||
'empty.noSessionsText': '没有符合当前筛选条件的工作流会话。',
|
||
'empty.noTasks': '暂无任务',
|
||
'empty.noTasksText': '该会话没有定义任务。',
|
||
'empty.noTaskFiles': '未找到任务文件',
|
||
'empty.noTaskFilesText': '在 .task/ 目录中未找到 IMPL-*.json 文件',
|
||
'empty.noLiteSessions': '暂无 {type} 会话',
|
||
'empty.noLiteSessionsText': '在 .workflow/.{type}/ 目录中未找到会话',
|
||
'empty.noMcpServers': '该项目未配置 MCP 服务器',
|
||
'empty.addMcpServersHint': '从下方可用列表中添加服务器',
|
||
'empty.noGlobalMcpServers': '未配置全局 MCP 服务器',
|
||
'empty.globalServersHint': '全局服务器对所有项目可用,来自 ~/.claude.json',
|
||
'empty.noAdditionalMcp': '其他项目中未找到其他 MCP 服务器',
|
||
'empty.noHooks': '该项目未配置钩子',
|
||
'empty.createHookHint': '创建钩子以自动化工具使用时的操作',
|
||
'empty.noGlobalHooks': '未配置全局钩子',
|
||
'empty.globalHooksHint': '全局钩子适用于所有 Claude Code 会话',
|
||
'empty.noDiagnoses': '暂无诊断',
|
||
'empty.noDiagnosesText': '未找到该会话的 diagnosis-*.json 文件。',
|
||
|
||
// Session detail tabs
|
||
'tab.tasks': '任务',
|
||
'tab.context': '上下文',
|
||
'tab.summary': '摘要',
|
||
'tab.implPlan': '实现计划',
|
||
'tab.conflict': '冲突',
|
||
'tab.review': '审查',
|
||
'tab.plan': '计划',
|
||
'tab.diagnoses': '诊断',
|
||
|
||
// Session detail
|
||
'detail.backToSessions': '返回会话列表',
|
||
'detail.backToLiteTasks': '返回 {type}',
|
||
'detail.created': '创建时间:',
|
||
'detail.archived': '归档时间:',
|
||
'detail.project': '项目:',
|
||
'detail.tasks': '任务:',
|
||
'detail.completed': '已完成',
|
||
|
||
// Task status
|
||
'task.status.pending': '待处理',
|
||
'task.status.inProgress': '进行中',
|
||
'task.status.completed': '已完成',
|
||
'task.completed': '已完成',
|
||
'task.inProgress': '进行中',
|
||
'task.pending': '待处理',
|
||
|
||
// Task actions
|
||
'task.quickActions': '快捷操作:',
|
||
'task.allPending': '全部待处理',
|
||
'task.allInProgress': '全部进行中',
|
||
'task.allCompleted': '全部完成',
|
||
'task.setAllConfirm': '将所有 {count} 个任务设置为"{status}"?',
|
||
'task.statusUpdated': '任务 {id} 状态已更新',
|
||
'task.tasksUpdated': '所有 {count} 个任务已更新',
|
||
'task.noPendingTasks': '没有待处理的任务',
|
||
'task.noInProgressTasks': '没有进行中的任务',
|
||
'task.movedToInProgress': '{count} 个任务已移至进行中',
|
||
'task.tasksCompleted': '{count} 个任务已完成',
|
||
|
||
// Context tab
|
||
'context.description': '描述:',
|
||
'context.requirements': '需求:',
|
||
'context.focusPaths': '关注路径:',
|
||
'context.modificationPoints': '修改点:',
|
||
'context.acceptance': '验收标准:',
|
||
'context.noData': '暂无上下文数据',
|
||
'context.loading': '正在加载上下文数据...',
|
||
'context.loadError': '加载上下文失败: {error}',
|
||
|
||
// Flow control
|
||
'flow.implementationApproach': '实现方案:',
|
||
'flow.preAnalysis': '预分析:',
|
||
'flow.targetFiles': '目标文件:',
|
||
'flow.noData': '暂无流程控制数据',
|
||
|
||
// Summary tab
|
||
'summary.loading': '正在加载摘要...',
|
||
'summary.title': '摘要',
|
||
'summary.hint': '会话摘要将从 .summaries/ 加载',
|
||
'summary.noSummaries': '暂无摘要',
|
||
'summary.noSummariesText': '在 .summaries/ 中未找到摘要',
|
||
|
||
// IMPL Plan tab
|
||
'implPlan.loading': '正在加载实现计划...',
|
||
'implPlan.title': '实现计划',
|
||
'implPlan.hint': '实现计划将从 IMPL_PLAN.md 加载',
|
||
|
||
// Review tab
|
||
'review.loading': '正在加载审查数据...',
|
||
'review.title': '审查数据',
|
||
'review.hint': '审查数据将从审查文件加载',
|
||
|
||
// CLI Manager
|
||
'cli.tools': 'CLI 工具',
|
||
'cli.available': '可用',
|
||
'cli.refreshStatus': '刷新状态',
|
||
'cli.ready': '就绪',
|
||
'cli.notInstalled': '未安装',
|
||
'cli.setDefault': '设为默认',
|
||
'cli.default': '默认',
|
||
'cli.install': '安装',
|
||
'cli.uninstall': '卸载',
|
||
'cli.openManager': '管理',
|
||
'cli.initIndex': '初始化索引',
|
||
'cli.geminiDesc': 'Google AI 代码分析',
|
||
'cli.qwenDesc': '阿里通义 AI 助手',
|
||
'cli.codexDesc': 'OpenAI 代码生成',
|
||
'cli.codexLensDesc': '代码索引 & 全文搜索',
|
||
'cli.codexLensDescFull': '全文代码搜索引擎',
|
||
'cli.semanticDesc': 'AI 驱动的代码理解',
|
||
'cli.semanticDescFull': '自然语言代码搜索',
|
||
'cli.apiEndpoints': 'API 端点',
|
||
'cli.configured': '已配置',
|
||
'cli.addToCli': '添加到 CLI',
|
||
'cli.enabled': '已启用',
|
||
'cli.disabled': '已禁用',
|
||
'cli.cliWrapper': 'CLI 封装',
|
||
'cli.wrapper': '封装',
|
||
'cli.customClaudeSettings': '自定义 Claude CLI 配置',
|
||
'cli.updateFailed': '更新失败',
|
||
|
||
// CLI 工具配置 - 环境文件
|
||
'cli.envFile': '环境文件',
|
||
'cli.envFileOptional': '(可选)',
|
||
'cli.envFilePlaceholder': '.env 文件路径(如 ~/.gemini-env 或 C:/Users/xxx/.env)',
|
||
'cli.envFileHint': '在 CLI 执行前加载环境变量(如 API 密钥)。支持 ~ 表示用户目录。',
|
||
'cli.envFileBrowse': '浏览',
|
||
'cli.envFilePathHint': '请确认或补全文件路径(如 ~/.gemini-env)',
|
||
'cli.fileBrowser': '文件浏览器',
|
||
'cli.fileBrowserSelect': '选择',
|
||
'cli.fileBrowserCancel': '取消',
|
||
'cli.fileBrowserUp': '上级目录',
|
||
'cli.fileBrowserHome': '主目录',
|
||
'cli.fileBrowserShowHidden': '显示隐藏文件',
|
||
'cli.fileBrowserApiError': '需要重启服务器以启用文件浏览器',
|
||
'cli.fileBrowserManualHint': '请在上方输入完整路径后点击选择(如 C:\\Users\\用户名\\.gemini)',
|
||
|
||
// CLI 历史与执行
|
||
'cli.executionHistory': '执行历史',
|
||
'cli.conversationDetail': '对话详情',
|
||
'cli.nativeSessionDetail': '原生会话详情',
|
||
'cli.viewFullConversation': '查看完整过程对话',
|
||
'cli.perTurnView': '按轮次查看',
|
||
'cli.concatenatedView': '合并视图',
|
||
'cli.userPrompt': '用户提示词',
|
||
'cli.assistantResponse': '助手回复',
|
||
'cli.user': '用户',
|
||
'cli.assistant': '助手',
|
||
'cli.latest': '最新',
|
||
'cli.turn': '轮次',
|
||
'cli.thinkingProcess': '思考过程',
|
||
'cli.thoughts': '个思考',
|
||
'cli.toolCalls': '工具调用',
|
||
'cli.totalTokens': '总令牌数',
|
||
'cli.input': '输入',
|
||
'cli.output': '输出',
|
||
'cli.cached': '已缓存',
|
||
'cli.concatenatedPrompt': '合并提示词(发送至 CLI)',
|
||
'cli.sessionId': '会话 ID',
|
||
|
||
// CLI 历史操作与按钮
|
||
'cli.refresh': '刷新',
|
||
'cli.copyId': '复制 ID',
|
||
'cli.copyFullPrompt': '复制完整提示词',
|
||
'cli.delete': '删除',
|
||
'cli.exportJson': '导出 JSON',
|
||
'cli.copyFilePath': '复制文件路径',
|
||
'cli.copySessionId': '复制会话 ID',
|
||
'cli.viewNativeSession': '查看原生会话',
|
||
'cli.viewDetails': '查看详情',
|
||
'cli.searchHistory': '搜索历史...',
|
||
'cli.allTools': '所有工具',
|
||
'cli.noExecutions': '暂无执行记录',
|
||
'cli.noMatchingResults': '无匹配结果',
|
||
|
||
// CLI 历史消息
|
||
'cli.conversationNotFound': '未找到对话',
|
||
'cli.nativeSessionNotFound': '未找到原生会话',
|
||
'cli.historyRefreshed': '历史已刷新',
|
||
'cli.executionDeleted': '执行记录已删除',
|
||
'cli.deleteFailed': '删除失败',
|
||
'cli.idCopied': 'ID 已复制',
|
||
'cli.promptCopied': '提示词已复制到剪贴板',
|
||
'cli.fullPromptCopied': '完整提示词已复制到剪贴板',
|
||
'cli.sessionIdCopied': '会话 ID 已复制',
|
||
'cli.filePathCopied': '文件路径已复制',
|
||
'cli.pathNotAvailable': '路径不可用',
|
||
'cli.noSessionData': '无会话数据',
|
||
'cli.sessionExported': '会话已导出',
|
||
'cli.failedToCopy': '复制失败',
|
||
'cli.executionNotFound': '未找到执行记录',
|
||
|
||
// CLI 历史确认对话框
|
||
'cli.confirmDelete': '删除此执行记录?此操作无法撤销。',
|
||
'cli.nativeSessionBadge': '原生会话',
|
||
|
||
// CodexLens 配置
|
||
'codexlens.config': 'CodexLens 配置',
|
||
'codexlens.configDesc': '管理代码索引、语义搜索和嵌入模型',
|
||
'codexlens.status': '状态',
|
||
'codexlens.installed': '已安装',
|
||
'codexlens.notInstalled': '未安装',
|
||
'codexlens.installFirst': '安装 CodexLens 以访问语义搜索和模型管理功能',
|
||
'codexlens.indexes': '索引',
|
||
'codexlens.currentWorkspace': '当前工作区',
|
||
'codexlens.indexStoragePath': '索引存储路径',
|
||
'codexlens.whereIndexesStored': '索引存储位置',
|
||
'codexlens.currentPath': '当前路径',
|
||
'codexlens.newStoragePath': '新存储路径',
|
||
'codexlens.pathPlaceholder': '例如:/path/to/indexes 或 ~/.codexlens/indexes',
|
||
'codexlens.pathInfo': '支持 ~ 表示用户目录。更改立即生效。',
|
||
'codexlens.pathUnchanged': '路径未变更',
|
||
'codexlens.pathEmpty': '路径不能为空',
|
||
'codexlens.migrationRequired': '需要迁移',
|
||
'codexlens.migrationWarning': '更改路径后,需要为每个工作区重新初始化索引。',
|
||
'codexlens.actions': '操作',
|
||
'codexlens.initializeIndex': '初始化索引',
|
||
'codexlens.cleanCurrentWorkspace': '清理当前工作空间',
|
||
'codexlens.cleanAllIndexes': '清理所有索引',
|
||
'codexlens.installCodexLens': '安装 CodexLens',
|
||
'codexlens.createIndex': '创建索引',
|
||
'codexlens.indexManagement': '管理',
|
||
'codexlens.incrementalUpdate': '增量更新',
|
||
'codexlens.environmentVariables': '环境变量',
|
||
'codexlens.envGroup.embedding': '嵌入配置',
|
||
'codexlens.envGroup.reranker': '重排序配置',
|
||
'codexlens.envGroup.concurrency': '并发设置',
|
||
'codexlens.envGroup.cascade': '级联搜索设置',
|
||
'codexlens.envGroup.chunking': '分块选项',
|
||
'codexlens.envGroup.llm': 'LLM 功能',
|
||
// 环境变量字段标签
|
||
'codexlens.envField.backend': '后端',
|
||
'codexlens.envField.model': '模型',
|
||
'codexlens.envField.useGpu': '使用 GPU',
|
||
'codexlens.envField.highAvailability': '高可用',
|
||
'codexlens.envField.loadBalanceStrategy': '负载均衡策略',
|
||
'codexlens.envField.rateLimitCooldown': '限流冷却 (秒)',
|
||
'codexlens.envField.enabled': '启用',
|
||
'codexlens.envField.topKResults': 'Top K 结果数',
|
||
'codexlens.envField.maxWorkers': '最大工作线程数',
|
||
'codexlens.envField.batchSize': '批处理大小 (固定)',
|
||
'codexlens.envField.dynamicBatchSize': '动态批处理大小',
|
||
'codexlens.envField.batchSizeUtilization': '容量利用率',
|
||
'codexlens.envField.batchSizeMax': '最大批处理大小',
|
||
'codexlens.envField.charsPerToken': '字符/Token比',
|
||
'codexlens.envField.searchStrategy': '搜索策略',
|
||
'codexlens.envField.coarseK': '粗筛 K (第一阶段)',
|
||
'codexlens.envField.fineK': '精筛 K (最终)',
|
||
'codexlens.envField.stripComments': '去除注释',
|
||
'codexlens.envField.stripDocstrings': '去除文档字符串',
|
||
'codexlens.envField.testFilePenalty': '测试文件惩罚',
|
||
'codexlens.envField.docstringWeight': '文档字符串权重',
|
||
'codexlens.usingApiReranker': '使用 API 重排序',
|
||
'codexlens.currentModel': '当前模型',
|
||
'codexlens.localModels': '本地模型',
|
||
'codexlens.active': '已激活',
|
||
'codexlens.useLocal': '切换本地',
|
||
'codexlens.select': '选择',
|
||
'codexlens.switchedToLocal': '已切换到本地',
|
||
'codexlens.configuredInApiSettings': '已在 API 设置中配置',
|
||
'codexlens.commonModels': '常用模型',
|
||
'codexlens.selectApiModel': '选择 API 模型...',
|
||
'codexlens.selectLocalModel': '选择本地模型...',
|
||
'codexlens.noConfiguredModels': '未在 API 设置中配置模型',
|
||
'codexlens.autoDownloadHint': '模型会在首次使用时自动下载',
|
||
'codexlens.embeddingBackend': '嵌入后端',
|
||
'codexlens.localFastembed': '本地 (FastEmbed)',
|
||
'codexlens.apiLitellm': 'API (LiteLLM)',
|
||
'codexlens.backendHint': '选择本地模型或远程 API 端点',
|
||
'codexlens.noApiModels': '未配置 API 嵌入模型',
|
||
'codexlens.embeddingModel': '嵌入模型',
|
||
'codexlens.modelHint': '选择向量搜索的嵌入模型(带 ✓ 的已安装)',
|
||
'codexlens.concurrency': 'API 并发数',
|
||
'codexlens.concurrencyHint': '并行 API 调用数量。较高的值可加速索引但可能触发速率限制。',
|
||
'codexlens.concurrencyCustom': '自定义',
|
||
'codexlens.rotation': '多供应商轮训',
|
||
'codexlens.rotationDesc': '聚合多个 API 供应商和密钥进行并行嵌入生成',
|
||
'codexlens.rotationEnabled': '启用轮训',
|
||
'codexlens.rotationStrategy': '轮训策略',
|
||
'codexlens.strategyRoundRobin': '轮询',
|
||
'codexlens.strategyLatencyAware': '延迟感知',
|
||
'codexlens.strategyWeightedRandom': '加权随机',
|
||
'codexlens.targetModel': '目标模型',
|
||
'codexlens.targetModelHint': '所有供应商应支持的模型名称(例如 qwen3-embedding)',
|
||
'codexlens.cooldownSeconds': '冷却时间(秒)',
|
||
'codexlens.cooldownHint': '速率限制后的默认冷却时间(推荐 60 秒)',
|
||
'codexlens.rotationProviders': '轮训供应商',
|
||
'codexlens.addProvider': '添加供应商',
|
||
'codexlens.noRotationProviders': '未配置轮训供应商',
|
||
'codexlens.providerWeight': '权重',
|
||
'codexlens.maxConcurrentPerKey': '每密钥最大并发',
|
||
'codexlens.useAllKeys': '使用所有密钥',
|
||
'codexlens.selectKeys': '选择密钥',
|
||
'codexlens.configureRotation': '配置轮训',
|
||
'codexlens.configureInApiSettings': '在 API 设置中配置',
|
||
'codexlens.rotationSaved': '轮训配置保存成功',
|
||
'codexlens.endpointsSynced': '个端点已同步到 CodexLens',
|
||
'codexlens.syncFailed': '同步失败',
|
||
'codexlens.rotationDeleted': '轮训配置已删除',
|
||
'codexlens.totalEndpoints': '总端点数',
|
||
'codexlens.fullIndex': '全部',
|
||
'codexlens.vectorIndex': '向量',
|
||
'codexlens.ftsIndex': 'FTS',
|
||
'codexlens.fullIndexDesc': 'FTS + 语义搜索(推荐)',
|
||
'codexlens.vectorIndexDesc': '仅语义嵌入搜索',
|
||
'codexlens.ftsIndexDesc': '仅快速全文搜索',
|
||
'codexlens.indexTypeHint': '完整索引包含 FTS + 语义搜索。仅 FTS 更快但无 AI 搜索功能。',
|
||
'codexlens.maintenance': '维护',
|
||
'codexlens.testSearch': '测试搜索',
|
||
'codexlens.testFunctionality': '测试 CodexLens 功能',
|
||
'codexlens.textSearch': '文本搜索',
|
||
'codexlens.fileSearch': '文件搜索',
|
||
'codexlens.symbolSearch': '符号搜索',
|
||
'codexlens.exactMode': '精确模式',
|
||
'codexlens.fuzzyMode': '模糊模式 (Trigram)',
|
||
'codexlens.hybridMode': '混合模式 (RRF)',
|
||
'codexlens.vectorMode': '向量模式 (语义搜索)',
|
||
'codexlens.searchPlaceholder': '输入搜索查询(例如:函数名、文件路径、代码片段)',
|
||
'codexlens.runSearch': '运行搜索',
|
||
'codexlens.results': '结果',
|
||
'codexlens.resultsCount': '个结果',
|
||
'codexlens.resultLimit': '数量限制',
|
||
'codexlens.contentLength': '内容长度',
|
||
'codexlens.extraFiles': '额外文件',
|
||
'codexlens.saveConfig': '保存配置',
|
||
'codexlens.searching': '搜索中...',
|
||
'codexlens.searchCompleted': '搜索完成',
|
||
'codexlens.searchFailed': '搜索失败',
|
||
'codexlens.enterQuery': '请输入搜索查询',
|
||
'codexlens.configSaved': '配置保存成功',
|
||
'codexlens.pathEmpty': '索引目录路径不能为空',
|
||
'codexlens.cleanConfirm': '确定要清理所有 CodexLens 索引吗?此操作无法撤销。',
|
||
'codexlens.cleanCurrentWorkspaceConfirm': '确定要清理当前工作空间的索引吗?此操作无法撤销。',
|
||
'codexlens.cleaning': '清理索引中...',
|
||
'codexlens.cleanSuccess': '所有索引已成功清理',
|
||
'codexlens.cleanCurrentWorkspaceSuccess': '当前工作空间索引已成功清理',
|
||
'codexlens.cleanFailed': '清理索引失败',
|
||
'codexlens.loadingConfig': '加载配置中...',
|
||
|
||
// 工作空间索引状态
|
||
'codexlens.workspaceStatus': '工作空间索引状态',
|
||
'codexlens.noIndexFound': '当前工作空间未找到索引',
|
||
'codexlens.filesIndexed': '个文件已索引',
|
||
'codexlens.filesWithEmbeddings': '个文件已嵌入',
|
||
'codexlens.vectorSearchEnabled': '向量搜索已启用',
|
||
'codexlens.vectorSearchPartial': '向量搜索需要≥50%覆盖率',
|
||
|
||
// 模型管理
|
||
'codexlens.semanticDeps': '语义搜索依赖',
|
||
'codexlens.checkingDeps': '检查依赖中...',
|
||
'codexlens.semanticInstalled': '语义搜索依赖已安装',
|
||
'codexlens.semanticNotInstalled': '语义搜索依赖未安装',
|
||
'codexlens.installDeps': '安装依赖',
|
||
'codexlens.installDepsPrompt': '是否立即安装?(可能需要几分钟)\n\n点击"取消"将只创建 FTS 索引。',
|
||
'codexlens.installingDeps': '安装依赖中...',
|
||
'codexlens.installingMode': '正在安装',
|
||
'codexlens.depsInstalled': '依赖安装成功',
|
||
'codexlens.depsInstallFailed': '依赖安装失败',
|
||
|
||
// SPLADE 依赖
|
||
'codexlens.spladeDeps': 'SPLADE 稀疏检索',
|
||
'codexlens.spladeInstalled': 'SPLADE 已安装',
|
||
'codexlens.spladeNotInstalled': 'SPLADE 未安装',
|
||
'codexlens.spladeInstallHint': '安装后可改进代码搜索的同义词匹配',
|
||
'codexlens.installingSpladePackage': '正在安装 SPLADE 包',
|
||
'codexlens.spladeInstallSuccess': 'SPLADE 安装成功',
|
||
'codexlens.spladeInstallFailed': 'SPLADE 安装失败',
|
||
'codexlens.spladeModel': '模型',
|
||
'codexlens.spladeIndexStatus': 'SPLADE 索引',
|
||
'codexlens.spladeIndexExists': '索引可用',
|
||
'codexlens.spladeIndexMissing': '无 SPLADE 索引',
|
||
'codexlens.spladeRebuild': '重建 SPLADE 索引',
|
||
'codexlens.spladeRebuilding': '正在重建 SPLADE 索引...',
|
||
'codexlens.spladeRebuildSuccess': 'SPLADE 索引重建完成',
|
||
'codexlens.spladeRebuildFailed': 'SPLADE 索引重建失败',
|
||
'codexlens.spladeChunks': '分块数',
|
||
'codexlens.spladePostings': '词条数',
|
||
|
||
// GPU 模式选择
|
||
'codexlens.selectGpuMode': '选择加速模式',
|
||
'codexlens.cpuModeDesc': '标准 CPU 处理',
|
||
'codexlens.directmlModeDesc': 'Windows GPU(NVIDIA/AMD/Intel)',
|
||
'codexlens.cudaModeDesc': 'NVIDIA GPU(需要 CUDA Toolkit)',
|
||
'common.recommended': '推荐',
|
||
'common.unavailable': '不可用',
|
||
'common.auto': '自动',
|
||
|
||
// GPU 设备选择
|
||
'codexlens.selectGpuDevice': '选择 GPU 设备',
|
||
'codexlens.discrete': '独立显卡',
|
||
'codexlens.integrated': '集成显卡',
|
||
'codexlens.selectingGpu': '选择 GPU 中...',
|
||
'codexlens.gpuSelected': 'GPU 已选择',
|
||
'codexlens.resettingGpu': '重置 GPU 选择中...',
|
||
'codexlens.gpuReset': 'GPU 选择已重置为自动',
|
||
'codexlens.resetToAuto': '重置为自动',
|
||
|
||
'codexlens.modelManagement': '模型管理',
|
||
'codexlens.loadingModels': '加载模型中...',
|
||
'codexlens.downloadModel': '下载',
|
||
'codexlens.deleteModel': '删除',
|
||
'codexlens.downloading': '下载中...',
|
||
'codexlens.deleting': '删除中...',
|
||
'codexlens.modelDownloaded': '模型已下载',
|
||
'codexlens.modelDownloadFailed': '模型下载失败',
|
||
'codexlens.modelDeleted': '模型已删除',
|
||
'codexlens.modelDeleteFailed': '模型删除失败',
|
||
'codexlens.deleteModelConfirm': '确定要删除模型',
|
||
'codexlens.modelListError': '加载模型列表失败',
|
||
'codexlens.noModelsAvailable': '没有可用模型',
|
||
|
||
// FastEmbed 安装
|
||
'codexlens.fastembedNotInstalled': 'FastEmbed 未安装',
|
||
'codexlens.fastembedDesc': 'FastEmbed 提供本地嵌入模型用于语义搜索',
|
||
'codexlens.selectMode': '选择模式',
|
||
'codexlens.cpuModeShort': '标准',
|
||
'codexlens.directmlModeShort': 'Windows GPU',
|
||
'codexlens.cudaModeShort': 'NVIDIA GPU',
|
||
'codexlens.installFastembed': '安装 FastEmbed',
|
||
'codexlens.installingFastembed': '正在安装 FastEmbed...',
|
||
'codexlens.installMayTakeTime': '这可能需要几分钟...',
|
||
'codexlens.fastembedInstalled': 'FastEmbed 已安装',
|
||
'codexlens.fastembedInstallFailed': 'FastEmbed 安装失败',
|
||
'codexlens.installFastembedFirst': '请先在上方安装 FastEmbed 以管理本地嵌入模型',
|
||
'codexlens.detectedGpus': '检测到的 GPU',
|
||
'codexlens.reinstallOptions': '重新安装选项',
|
||
'codexlens.reinstallDesc': '使用不同的 GPU 模式重新安装:',
|
||
'codexlens.confirmReinstall': '这将重新安装 FastEmbed。是否继续?',
|
||
'codexlens.fastembedReinstalled': 'FastEmbed 已重新安装',
|
||
'codexlens.reinstallingFastembed': '正在重新安装 FastEmbed...',
|
||
'codexlens.activeAccelerator': '当前加速器',
|
||
'codexlens.active': '使用中',
|
||
'codexlens.downloadedModels': '已下载模型',
|
||
'codexlens.noLocalModels': '暂无已下载模型',
|
||
'codexlens.configuredModels': '已配置的 API 模型',
|
||
'codexlens.commonModels': '常用模型',
|
||
|
||
// 模型下载进度
|
||
'codexlens.downloadingModel': '正在下载',
|
||
'codexlens.connectingToHuggingFace': '正在连接 Hugging Face...',
|
||
'codexlens.downloadTimeEstimate': '预计时间',
|
||
'codexlens.manualDownloadHint': '手动下载',
|
||
'codexlens.downloadingModelFiles': '正在下载模型文件...',
|
||
'codexlens.downloadingWeights': '正在下载模型权重...',
|
||
'codexlens.downloadingTokenizer': '正在下载分词器...',
|
||
'codexlens.verifyingModel': '正在验证模型...',
|
||
'codexlens.finalizingDownload': '正在完成...',
|
||
'codexlens.downloadComplete': '下载完成!',
|
||
'codexlens.downloadFailed': '下载失败',
|
||
'codexlens.manualDownloadOptions': '手动下载选项',
|
||
'codexlens.cliDownload': '命令行',
|
||
'codexlens.huggingfaceDownload': 'Hugging Face',
|
||
'codexlens.downloadCanceled': '下载已取消',
|
||
|
||
// 手动下载指南
|
||
'codexlens.manualDownloadGuide': '手动下载指南',
|
||
'codexlens.cliMethod': '命令行(推荐)',
|
||
'codexlens.cliMethodDesc': '在终端运行,显示下载进度:',
|
||
'codexlens.pythonMethod': 'Python 脚本',
|
||
'codexlens.pythonMethodDesc': '使用 Python 预下载模型:',
|
||
'codexlens.hfHubMethod': 'Hugging Face Hub CLI',
|
||
'codexlens.hfHubMethodDesc': '使用 huggingface-cli 下载,支持断点续传:',
|
||
'codexlens.modelLinks': '模型直链',
|
||
'codexlens.cacheLocation': '模型存储位置',
|
||
'common.copied': '已复制到剪贴板',
|
||
|
||
// CodexLens 索引进度
|
||
'codexlens.indexing': '索引中',
|
||
'codexlens.indexingDesc': '正在为工作区构建代码索引',
|
||
'codexlens.preparingIndex': '准备索引...',
|
||
'codexlens.filesProcessed': '已处理文件',
|
||
'codexlens.indexComplete': '索引完成',
|
||
'codexlens.indexSuccess': '索引创建成功',
|
||
'codexlens.indexFailed': '索引失败',
|
||
'codexlens.embeddingsFailed': '嵌入生成失败',
|
||
'codexlens.ftsSuccessEmbeddingsFailed': 'FTS 索引已创建,但嵌入生成失败',
|
||
|
||
// CodexLens 安装
|
||
'codexlens.installDesc': '基于 Python 的代码索引引擎',
|
||
'codexlens.whatWillBeInstalled': '将安装的内容:',
|
||
'codexlens.pythonVenv': 'Python 虚拟环境',
|
||
'codexlens.pythonVenvDesc': '隔离的 Python 环境',
|
||
'codexlens.codexlensPackage': 'CodexLens 包',
|
||
'codexlens.codexlensPackageDesc': '代码索引和搜索引擎',
|
||
'codexlens.sqliteFtsDesc': '全文搜索数据库',
|
||
'codexlens.installLocation': '安装位置',
|
||
'codexlens.installTime': '首次安装可能需要 2-3 分钟下载和配置 Python 包。',
|
||
'codexlens.startingInstall': '正在启动安装...',
|
||
'codexlens.installing': '安装中...',
|
||
'codexlens.creatingVenv': '正在创建虚拟环境...',
|
||
'codexlens.installingPip': '正在安装 pip 包...',
|
||
'codexlens.installingPackage': '正在安装 CodexLens 包...',
|
||
'codexlens.settingUpDeps': '正在配置 Python 依赖...',
|
||
'codexlens.installComplete': '安装完成!',
|
||
'codexlens.installSuccess': 'CodexLens 安装成功!',
|
||
'codexlens.installNow': '立即安装',
|
||
'codexlens.accelerator': '加速器',
|
||
|
||
// CodexLens 卸载
|
||
'codexlens.uninstall': '卸载',
|
||
'codexlens.uninstallDesc': '移除 CodexLens 及所有数据',
|
||
'codexlens.whatWillBeRemoved': '将被移除的内容:',
|
||
'codexlens.removeVenv': '虚拟环境 ~/.codexlens/venv',
|
||
'codexlens.removeData': '所有 CodexLens 索引数据和数据库',
|
||
'codexlens.removeConfig': '配置文件和语义搜索模型',
|
||
'codexlens.removing': '正在删除文件...',
|
||
'codexlens.uninstalling': '正在卸载...',
|
||
'codexlens.removingVenv': '正在删除虚拟环境...',
|
||
'codexlens.removingData': '正在删除索引数据...',
|
||
'codexlens.removingConfig': '正在清理配置文件...',
|
||
'codexlens.finalizing': '正在完成卸载...',
|
||
'codexlens.uninstallComplete': '卸载完成!',
|
||
'codexlens.uninstallSuccess': 'CodexLens 卸载成功!',
|
||
|
||
// 忽略规则
|
||
'codexlens.ignorePatterns': '忽略规则',
|
||
'codexlens.ignorePatternsDesc': '配置索引时要排除的目录和文件。更改仅对新索引生效。',
|
||
'codexlens.directoryPatterns': '目录规则',
|
||
'codexlens.extensionFilters': '文件过滤',
|
||
'codexlens.directoryPatternsHint': '每行一个规则(如 node_modules, .git)',
|
||
'codexlens.extensionFiltersHint': '跳过 embedding 的文件(如 *.min.js)',
|
||
'codexlens.ignorePatternsSaved': '忽略规则已保存',
|
||
'codexlens.ignorePatternReset': '已重置为默认值(点击保存应用)',
|
||
'common.patterns': '条规则',
|
||
'common.resetToDefaults': '重置为默认',
|
||
|
||
// 索引管理器
|
||
'index.manager': '索引管理器',
|
||
'index.projects': '项目数',
|
||
'index.totalSize': '总大小',
|
||
'index.vectorIndexes': '向量',
|
||
'index.ftsIndexes': 'FTS',
|
||
'index.projectId': '项目 ID',
|
||
'index.size': '大小',
|
||
'index.type': '类型',
|
||
'index.lastModified': '修改时间',
|
||
'index.vector': '向量',
|
||
'index.fts': 'FTS',
|
||
'index.noIndexes': '暂无索引',
|
||
'index.notConfigured': '未配置',
|
||
'index.initCurrent': '索引当前项目',
|
||
'index.cleanAll': '清理全部',
|
||
'index.cleanProject': '清理索引',
|
||
'index.cleanProjectConfirm': '清理索引:',
|
||
'index.cleaning': '清理索引中...',
|
||
'index.cleanSuccess': '索引清理成功',
|
||
'index.cleanFailed': '清理失败',
|
||
'index.cleanAllConfirm': '确定要清理所有索引吗?此操作无法撤销。',
|
||
'index.cleanAllSuccess': '所有索引已清理',
|
||
'index.vectorIndex': '向量索引',
|
||
'index.normalIndex': 'FTS索引',
|
||
'index.fullIndex': '全部索引',
|
||
'index.vectorDesc': '语义搜索(含嵌入向量)',
|
||
'index.normalDesc': '快速全文搜索',
|
||
'index.fullDesc': 'FTS + 语义搜索(推荐)',
|
||
'index.selectModel': '选择嵌入模型',
|
||
'index.modelCode': '代码优化 (768维)',
|
||
'index.modelBase': '通用基础 (768维)',
|
||
'index.modelFast': '快速轻量 (384维)',
|
||
'index.modelMinilm': 'MiniLM (384维)',
|
||
'index.modelMultilingual': '多语言 (1024维) ⚠️',
|
||
'index.modelBalanced': '高精度 (1024维) ⚠️',
|
||
'index.dimensionWarning': '1024维模型需要更多资源',
|
||
|
||
// Semantic Search 配置
|
||
'semantic.settings': '语义搜索设置',
|
||
'semantic.testSearch': '测试语义搜索',
|
||
'semantic.searchPlaceholder': '输入语义查询(例如:身份验证逻辑、错误处理)',
|
||
'semantic.runSearch': '运行语义搜索',
|
||
'semantic.close': '关闭',
|
||
|
||
'cli.settings': '设置',
|
||
|
||
// 语言设置
|
||
'lang.settings': '回复语言',
|
||
'lang.settingsDesc': '配置 Claude 回复语言偏好',
|
||
'lang.chinese': '中文回复',
|
||
'lang.chineseDesc': '在全局 CLAUDE.md 中启用中文回复准则',
|
||
'lang.chineseDescClaude': '在 ~/.claude/CLAUDE.md 中启用',
|
||
'lang.chineseDescCodex': '在 ~/.codex/AGENTS.md 中启用',
|
||
'lang.enabled': '已启用',
|
||
'lang.disabled': '已禁用',
|
||
'lang.enableSuccess': '中文回复已启用',
|
||
'lang.disableSuccess': '中文回复已禁用',
|
||
'lang.enableFailed': '启用中文回复失败',
|
||
'lang.disableFailed': '禁用中文回复失败',
|
||
'lang.windows': 'Windows 平台规范',
|
||
'lang.windowsDesc': '在全局 CLAUDE.md 中启用 Windows 路径格式规范',
|
||
'lang.windowsEnableSuccess': 'Windows 平台规范已启用',
|
||
'lang.windowsDisableSuccess': 'Windows 平台规范已禁用',
|
||
'lang.windowsEnableFailed': '启用 Windows 平台规范失败',
|
||
'lang.windowsDisableFailed': '禁用 Windows 平台规范失败',
|
||
'lang.installRequired': '请运行 "ccw install" 以启用此功能',
|
||
|
||
// CCW 安装状态
|
||
'status.installed': '已安装',
|
||
'status.incomplete': '不完整',
|
||
'status.notInstalled': '未安装',
|
||
'status.ccwInstall': 'CCW 工作流',
|
||
'status.ccwInstallDesc': '完整功能所需的工作流文件',
|
||
'status.required': '必需',
|
||
'status.filesMissing': '个文件缺失',
|
||
'status.missingFiles': '缺失文件',
|
||
'status.runToFix': '修复命令',
|
||
|
||
'cli.promptFormat': '提示词格式',
|
||
'cli.promptFormatDesc': '多轮对话拼接格式',
|
||
'cli.storageBackend': '存储后端',
|
||
'cli.storageBackendDesc': 'CLI 历史使用 SQLite 存储,支持全文搜索',
|
||
'cli.smartContext': '智能上下文',
|
||
'cli.smartContextDesc': '自动分析提示词并添加相关文件路径',
|
||
'cli.nativeResume': '原生恢复',
|
||
'cli.nativeResumeDesc': '使用工具原生恢复命令 (gemini -r, qwen --resume, codex resume)',
|
||
'cli.recursiveQuery': '递归查询',
|
||
'cli.recursiveQueryDesc': '聚合显示父项目和子项目的 CLI 历史与内存数据',
|
||
'cli.maxContextFiles': '最大上下文文件数',
|
||
'cli.maxContextFilesDesc': '智能上下文包含的最大文件数',
|
||
|
||
// CCW Install
|
||
'ccw.install': 'CCW 安装',
|
||
'ccw.installations': '个安装',
|
||
'ccw.installationsPlural': '个安装',
|
||
'ccw.noInstallations': '未找到安装',
|
||
'ccw.installCcw': '安装 CCW',
|
||
'ccw.upgrade': '升级',
|
||
'ccw.uninstall': '卸载',
|
||
'ccw.files': '个文件',
|
||
'ccw.globalInstall': '全局安装',
|
||
'ccw.globalInstallDesc': '安装到用户主目录 (~/.claude)',
|
||
'ccw.pathInstall': '路径安装',
|
||
'ccw.pathInstallDesc': '安装到指定项目文件夹',
|
||
'ccw.installPath': '安装路径',
|
||
'ccw.installToPath': '安装到路径',
|
||
'ccw.uninstallConfirm': '从此位置卸载 CCW?',
|
||
'ccw.upgradeStarting': '开始升级...',
|
||
'ccw.upgradeCompleted': '升级完成!正在刷新...',
|
||
'ccw.upgradeFailed': '升级失败: {error}',
|
||
|
||
// CCW Endpoint Tools
|
||
'ccw.endpointTools': 'CCW 端点工具',
|
||
'ccw.tool': '个工具',
|
||
'ccw.tools': '个工具',
|
||
'ccw.noEndpointTools': '未找到端点工具',
|
||
'ccw.parameters': '参数',
|
||
'ccw.required': '必填',
|
||
'ccw.optional': '可选',
|
||
'ccw.default': '默认值:',
|
||
'ccw.options': '选项:',
|
||
'ccw.noParams': '此工具没有参数',
|
||
'ccw.usageExample': '使用示例',
|
||
'ccw.endpointTool': '端点工具',
|
||
|
||
// Explorer
|
||
'explorer.title': '浏览器',
|
||
'explorer.refresh': '刷新',
|
||
'explorer.selectFile': '选择文件预览',
|
||
'explorer.selectFileHint': '从树中选择文件以预览其内容',
|
||
'explorer.loading': '正在加载文件树...',
|
||
'explorer.loadingFile': '正在加载文件...',
|
||
'explorer.emptyDir': '空目录',
|
||
'explorer.loadError': '加载失败: {error}',
|
||
'explorer.preview': '预览',
|
||
'explorer.source': '源码',
|
||
'explorer.lines': '行',
|
||
'explorer.updateClaudeMd': '更新 CLAUDE.md',
|
||
'explorer.currentFolderOnly': '更新 CLAUDE.md(仅当前文件夹)',
|
||
'explorer.withSubdirs': '更新 CLAUDE.md(包含子目录)',
|
||
|
||
// Task Queue
|
||
'taskQueue.title': '更新任务',
|
||
'taskQueue.cli': 'CLI:',
|
||
'taskQueue.addTask': '添加更新任务',
|
||
'taskQueue.startAll': '开始所有任务',
|
||
'taskQueue.clearCompleted': '清除已完成',
|
||
'taskQueue.noTasks': '队列中没有任务',
|
||
'taskQueue.noTasksHint': '悬停文件夹并点击图标添加任务',
|
||
'taskQueue.processing': '处理中...',
|
||
'taskQueue.updated': '更新成功',
|
||
'taskQueue.failed': '更新失败',
|
||
'taskQueue.currentOnly': '仅当前',
|
||
'taskQueue.withSubdirs': '含子目录',
|
||
'taskQueue.startingTasks': '正在并行启动 {count} 个任务...',
|
||
'taskQueue.queueCompleted': '队列完成: {success} 个成功, {failed} 个失败',
|
||
|
||
// Update CLAUDE.md Modal
|
||
'updateClaudeMd.title': '更新 CLAUDE.md',
|
||
'updateClaudeMd.targetDir': '目标目录',
|
||
'updateClaudeMd.cliTool': 'CLI 工具',
|
||
'updateClaudeMd.strategy': '策略',
|
||
'updateClaudeMd.singleLayer': '单层 - 仅当前目录 + 子 CLAUDE.md 引用',
|
||
'updateClaudeMd.multiLayer': '多层 - 在所有子目录生成 CLAUDE.md',
|
||
'updateClaudeMd.running': '正在更新...',
|
||
'updateClaudeMd.execute': '执行',
|
||
'updateClaudeMd.addToQueue': '添加到队列',
|
||
'updateClaudeMd.cancel': '取消',
|
||
|
||
// MCP Manager
|
||
'mcp.currentAvailable': '当前可用 MCP',
|
||
'mcp.installToProject': '安装到项目',
|
||
'mcp.installToGlobal': '安装到全局',
|
||
'mcp.installToWorkspace': '安装到工作空间',
|
||
'mcp.updateInWorkspace': '在工作空间更新',
|
||
'mcp.updateInGlobal': '在全局更新',
|
||
'mcp.projectAvailable': '当前可用 MCP',
|
||
'mcp.newServer': '新建服务器',
|
||
'mcp.newGlobalServer': '新建全局服务器',
|
||
'mcp.newProjectServer': '新建项目服务器',
|
||
'mcp.serversConfigured': '个服务器已配置',
|
||
'mcp.serversAvailable': 'servers available',
|
||
'mcp.globalAvailable': '全局可用 MCP',
|
||
'mcp.globalServersFrom': '个服务器来自 ~/.claude.json',
|
||
'mcp.enterprise': '企业 MCP 服务器',
|
||
'mcp.enterpriseManaged': '托管',
|
||
'mcp.enterpriseReadOnly': '个服务器(只读)',
|
||
'mcp.user': '用户 MCP 服务器',
|
||
'mcp.userServersFrom': '个服务器来自 ~/.claude.json',
|
||
'mcp.availableOther': '其他项目可用',
|
||
'mcp.serversAvailable': '个服务器可用',
|
||
'mcp.allProjects': '所有项目 MCP 概览',
|
||
'mcp.projects': '个项目',
|
||
'mcp.project': '项目',
|
||
'mcp.servers': 'MCP 服务器',
|
||
'mcp.status': '状态',
|
||
'mcp.current': '(当前)',
|
||
'mcp.noMcpServers': '无 MCP 服务器',
|
||
'mcp.add': '添加',
|
||
'mcp.addToProject': '添加到项目',
|
||
'mcp.installToProject': '安装到项目',
|
||
'mcp.installToGlobal': '安装到全局',
|
||
'mcp.installToProject': 'Install to project',
|
||
'mcp.installToGlobal': 'Install to global',
|
||
'mcp.removeFromProject': '从项目移除',
|
||
'mcp.removeConfirm': '从此项目移除 MCP 服务器 "{name}"?',
|
||
'mcp.readOnly': '只读',
|
||
'mcp.usedIn': '用于 {count} 个项目',
|
||
'mcp.usedInPlural': '用于 {count} 个项目',
|
||
'mcp.availableToAll': '可用于所有项目,来自 ~/.claude.json',
|
||
'mcp.managedByOrg': '由组织管理(最高优先级)',
|
||
'mcp.variables': '个变量',
|
||
'mcp.cmd': '命令',
|
||
'mcp.url': '地址',
|
||
'mcp.args': '参数',
|
||
'mcp.env': '环境变量',
|
||
'mcp.usedInCount': '用于 {count} 个项目',
|
||
'mcp.from': '来自',
|
||
'mcp.variant': '变体',
|
||
'mcp.sourceEnterprise': '企业级',
|
||
'mcp.sourceGlobal': '全局',
|
||
'mcp.sourceProject': '项目级',
|
||
'mcp.viewDetails': '查看详情',
|
||
'mcp.clickToViewDetails': '点击查看详情',
|
||
|
||
// MCP Details Modal
|
||
'mcp.detailsModal.title': 'MCP 服务器详情',
|
||
'mcp.detailsModal.close': '关闭',
|
||
'mcp.detailsModal.serverName': '服务器名称',
|
||
'mcp.detailsModal.source': '来源',
|
||
'mcp.detailsModal.configuration': '配置',
|
||
'mcp.detailsModal.noEnv': '无环境变量',
|
||
|
||
// MCP Create Modal
|
||
'mcp.createTitle': '创建 MCP 服务器',
|
||
'mcp.form': '表单',
|
||
'mcp.json': 'JSON',
|
||
'mcp.serverName': '服务器名称',
|
||
'mcp.serverNamePlaceholder': '例如: my-mcp-server',
|
||
'mcp.command': '命令',
|
||
'mcp.commandPlaceholder': '例如: npx, uvx, node, python',
|
||
'mcp.arguments': '参数(每行一个)',
|
||
'mcp.envVars': '环境变量(每行 KEY=VALUE)',
|
||
'mcp.pasteJson': '粘贴 MCP 服务器 JSON 配置',
|
||
'mcp.jsonFormatsHint': '支持 {"servers": {...}}、{"mcpServers": {...}} 和直接服务器配置格式。',
|
||
'mcp.previewServers': '预览(将添加的服务器):',
|
||
'mcp.create': '创建',
|
||
'mcp.chooseInstallLocation': '选择安装位置',
|
||
'mcp.installToClaudeJson': '安装到 .claude.json',
|
||
'mcp.installToMcpJson': '安装到 .mcp.json(推荐)',
|
||
'mcp.claudeJsonDesc': '保存在根目录 .claude.json projects 字段下(共享配置)',
|
||
'mcp.mcpJsonDesc': '保存在项目 .mcp.json 文件中(推荐用于版本控制)',
|
||
|
||
// New MCP Manager UI
|
||
'mcp.title': 'MCP 服务器管理',
|
||
'mcp.subtitle': '管理 Claude、Codex 和项目级别的 MCP 服务器配置',
|
||
'mcp.createNew': '创建新服务器',
|
||
'mcp.createFirst': '创建第一个服务器',
|
||
'mcp.noServers': '未配置 MCP 服务器',
|
||
'mcp.noServersDesc': '开始创建新的 MCP 服务器或从模板安装',
|
||
'mcp.totalServers': '总服务器数',
|
||
'mcp.enabled': '已启用',
|
||
'mcp.viewServer': '查看服务器',
|
||
'mcp.editServer': '编辑服务器',
|
||
'mcp.createServer': '创建服务器',
|
||
'mcp.updateServer': '更新服务器',
|
||
'mcp.close': '关闭',
|
||
'mcp.cancel': '取消',
|
||
'mcp.update': '更新',
|
||
'mcp.install': '安装',
|
||
'mcp.save': '保存',
|
||
'mcp.delete': '删除',
|
||
'mcp.optional': '可选',
|
||
'mcp.description': '描述',
|
||
'mcp.category': '分类',
|
||
'mcp.installTo': '安装到',
|
||
'mcp.configTarget': '配置目标',
|
||
'mcp.clickToSwitch': '点击切换',
|
||
'mcp.usingMcpJson': '使用 .mcp.json',
|
||
'mcp.usingClaudeJson': '使用 claude.json',
|
||
'mcp.cwd': '工作目录',
|
||
'mcp.httpHeaders': 'HTTP 头',
|
||
'mcp.error': '错误',
|
||
'mcp.success': '成功',
|
||
'mcp.nameRequired': '服务器名称为必填项',
|
||
'mcp.commandRequired': '命令为必填项',
|
||
'mcp.urlRequired': 'URL 为必填项',
|
||
'mcp.invalidArgsJson': '参数 JSON 格式无效',
|
||
'mcp.invalidEnvJson': '环境变量 JSON 格式无效',
|
||
'mcp.invalidHeadersJson': 'HTTP 头 JSON 格式无效',
|
||
'mcp.serverInstalled': '服务器安装成功',
|
||
'mcp.serverEnabled': '服务器启用成功',
|
||
'mcp.serverDisabled': '服务器禁用成功',
|
||
'mcp.serverDeleted': '服务器删除成功',
|
||
'mcp.backToManager': '返回管理器',
|
||
'mcp.noTemplates': '无可用模板',
|
||
'mcp.noTemplatesDesc': '从现有服务器创建模板或添加新模板',
|
||
'mcp.templatesDesc': '浏览并安装预配置的 MCP 服务器模板',
|
||
|
||
// Recommended MCP
|
||
'mcp.recommended': '推荐 MCP',
|
||
'mcp.quickSetup': '快速安装',
|
||
'mcp.configRequired': '需配置',
|
||
'mcp.noConfigNeeded': '无需配置',
|
||
'mcp.reconfigure': '配置',
|
||
'mcp.wizard.install': '安装',
|
||
'mcp.wizard.noConfig': '无需配置,可直接安装!',
|
||
'mcp.wizard.installTo': '安装到',
|
||
'mcp.wizard.project': '项目',
|
||
'mcp.wizard.global': '全局',
|
||
// Recommended MCP Server Definitions
|
||
'mcp.ace-tool.name': 'ACE 工具',
|
||
'mcp.ace-tool.desc': 'Augment 上下文引擎 - 实时代码库索引的语义代码搜索',
|
||
'mcp.ace-tool.field.baseUrl': '服务器地址',
|
||
'mcp.ace-tool.field.baseUrl.desc': 'ACE MCP 中继服务器 URL',
|
||
'mcp.ace-tool.field.token': 'API 令牌',
|
||
'mcp.ace-tool.field.token.desc': '从 ACE 控制台获取您的 API 令牌',
|
||
'mcp.chrome-devtools.name': 'Chrome 开发工具',
|
||
'mcp.chrome-devtools.desc': '浏览器自动化和开发者工具集成,用于 Web 开发',
|
||
'mcp.exa.name': 'Exa 搜索',
|
||
'mcp.exa.desc': 'AI 驱动的网络搜索,支持实时爬取和内容提取',
|
||
'mcp.exa.field.apiKey': 'EXA API 密钥',
|
||
'mcp.exa.field.apiKey.desc': '可选 - 免费版有速率限制,从 exa.ai 获取密钥可提高配额',
|
||
'mcp.codexLens.name': 'CodexLens 工具',
|
||
'mcp.codexLens.desc': '代码智能工具,提供符号搜索、代码导航和引用查找功能',
|
||
'mcp.codexLens.field.tools': '启用的工具',
|
||
'mcp.codexLens.field.tools.desc': '选择要启用的代码智能工具',
|
||
'mcp.wizard.selectAtLeastOne': '请至少选择一个选项',
|
||
|
||
// MCP CLI Mode
|
||
'mcp.cliMode': 'CLI 模式',
|
||
'mcp.claudeMode': 'Claude 模式',
|
||
'mcp.codexMode': 'Codex 模式',
|
||
|
||
// CCW Tools Path Settings
|
||
'mcp.pathSettings': '路径设置',
|
||
'mcp.useCurrentDir': '使用当前目录',
|
||
'mcp.useCurrentProject': '使用当前项目',
|
||
'mcp.allowedDirsPlaceholder': '逗号分隔的路径列表(可选)',
|
||
'mcp.disableSandboxDesc': '允许访问任意目录',
|
||
|
||
// Codex MCP
|
||
'mcp.codex.globalServers': 'Codex 全局 MCP 服务器',
|
||
'mcp.codex.newServer': '新建服务器',
|
||
'mcp.codex.noServers': '未配置 Codex MCP 服务器',
|
||
'mcp.codex.noServersHint': '使用 "codex mcp add" 命令或在此处创建',
|
||
'mcp.codex.infoTitle': '关于 Codex MCP',
|
||
'mcp.codex.infoDesc': 'Codex MCP 服务器仅支持全局配置(存储在 ~/.codex/config.toml)。使用 TOML 格式配置。',
|
||
'mcp.codex.serverAdded': 'Codex MCP 服务器 "{name}" 已添加',
|
||
'mcp.codex.addFailed': '添加 Codex MCP 服务器失败',
|
||
'mcp.codex.serverRemoved': 'Codex MCP 服务器 "{name}" 已移除',
|
||
'mcp.codex.removeFailed': '移除 Codex MCP 服务器失败',
|
||
'mcp.codex.serverToggled': 'Codex MCP 服务器 "{name}" 已{state}',
|
||
'mcp.codex.toggleFailed': '切换 Codex MCP 服务器失败',
|
||
'mcp.codex.remove': '移除',
|
||
'mcp.codex.removeConfirm': '移除 Codex MCP 服务器 "{name}"?',
|
||
'mcp.codex.copyToClaude': '复制到 Claude',
|
||
'mcp.codex.copyToCodex': '复制到 Codex',
|
||
'mcp.codex.install': '安装到 Codex',
|
||
'mcp.codex.copyFromClaude': '从 Claude 复制服务器到 Codex',
|
||
'mcp.codex.alreadyAdded': '已在 Codex 中',
|
||
'mcp.codex.scopeCodex': 'Codex - 全局 (~/.codex/config.toml)',
|
||
'mcp.codex.enabledTools': '工具',
|
||
'mcp.codex.tools': '个工具已启用',
|
||
|
||
// Claude to Codex copy
|
||
'mcp.claude.copyFromCodex': '从 Codex 复制服务器到 Claude',
|
||
'mcp.claude.alreadyAdded': '已在 Claude 中',
|
||
'mcp.claude.copyToClaude': '复制到 Claude 全局',
|
||
'mcp.claude.copyToCodex': '复制到 Codex',
|
||
|
||
// MCP Edit Modal
|
||
'mcp.editModal.title': '编辑 MCP 服务器',
|
||
'mcp.editModal.serverNamePlaceholder': 'server-name',
|
||
'mcp.editModal.onePerLine': '每行一个',
|
||
'mcp.editModal.save': '保存更改',
|
||
'mcp.editModal.delete': '删除',
|
||
'mcp.editModal.nameRequired': '服务器名称必填',
|
||
'mcp.editModal.commandRequired': '命令或 URL 必填',
|
||
'mcp.editModal.saved': 'MCP 服务器 "{name}" 已更新',
|
||
'mcp.editModal.saveFailed': '保存 MCP 服务器失败',
|
||
'mcp.editModal.deleteConfirm': '删除 MCP 服务器 "{name}"?',
|
||
'mcp.editModal.deleted': 'MCP 服务器 "{name}" 已删除',
|
||
'mcp.editModal.deleteFailed': '删除 MCP 服务器失败',
|
||
'mcp.clickToEdit': '点击编辑',
|
||
'mcp.clickToViewDetails': '点击查看详情',
|
||
|
||
// Windows MCP 兼容性
|
||
'mcp.windows.title': 'Windows 兼容性警告',
|
||
'mcp.windows.compatibilityWarning': 'MCP 服务器 "{name}" 使用的 "{command}" 命令需要在 Windows 上添加 "cmd /c" 包装才能与 Claude Code 正常工作。',
|
||
'mcp.windows.autoFix': '自动修复(推荐)',
|
||
'mcp.windows.keepOriginal': '保持原样',
|
||
|
||
// Hook Manager
|
||
'hook.projectHooks': '项目钩子',
|
||
'hook.projectFile': '.claude/settings.json',
|
||
'hook.newHook': '新建钩子',
|
||
'hook.hooksConfigured': '个钩子已配置',
|
||
'hook.globalHooks': '全局钩子',
|
||
'hook.globalFile': '~/.claude/settings.json',
|
||
'hook.wizards': '钩子向导',
|
||
'hook.guidedSetup': '引导设置',
|
||
'hook.wizardsDesc': '通过向导配置复杂钩子',
|
||
'hook.quickInstall': '快速安装模板',
|
||
'hook.oneClick': '一键安装钩子',
|
||
'hook.envVarsRef': '环境变量参考',
|
||
'hook.filePaths': '受影响文件的空格分隔路径',
|
||
'hook.toolName': '正在执行的工具名称',
|
||
'hook.toolInput': '传递给工具的 JSON 输入',
|
||
'hook.sessionId': '当前 Claude 会话 ID',
|
||
'hook.projectDir': '当前项目目录路径',
|
||
'hook.workingDir': '当前工作目录',
|
||
'hook.openWizard': '打开向导',
|
||
'hook.installed': '已安装',
|
||
'hook.installProject': '安装(项目)',
|
||
'hook.installGlobal': '全局',
|
||
'hook.uninstall': '卸载',
|
||
'hook.viewDetails': '查看模板详情',
|
||
'hook.edit': '编辑钩子',
|
||
'hook.delete': '删除钩子',
|
||
'hook.deleteConfirm': '删除此 {event} 钩子?',
|
||
|
||
// Hook Create Modal
|
||
'hook.createTitle': '创建钩子',
|
||
'hook.event': '钩子事件',
|
||
'hook.selectEvent': '选择事件...',
|
||
'hook.preToolUse': 'PreToolUse - 工具执行前',
|
||
'hook.postToolUse': 'PostToolUse - 工具完成后',
|
||
'hook.notification': 'Notification - 通知时',
|
||
'hook.stop': 'Stop - 代理停止时',
|
||
'hook.matcher': '匹配器(可选)',
|
||
'hook.matcherPlaceholder': '例如: Write, Edit, Bash(留空匹配所有)',
|
||
'hook.matcherHint': '要匹配的工具名称。留空匹配所有工具。',
|
||
'hook.commandLabel': '命令',
|
||
'hook.commandPlaceholder': '例如: curl, bash, node',
|
||
'hook.argsLabel': '参数(每行一个)',
|
||
'hook.scope': '作用域',
|
||
'hook.scopeProject': '项目(.claude/settings.json)',
|
||
'hook.scopeGlobal': '全局(~/.claude/settings.json)',
|
||
'hook.quickTemplates': '快速模板',
|
||
|
||
// Hook templates
|
||
'hook.template.ccwNotify': 'CCW 通知',
|
||
'hook.template.ccwNotifyDesc': '写入时通知控制面板',
|
||
'hook.template.logTool': '工具使用日志',
|
||
'hook.template.logToolDesc': '记录所有工具执行',
|
||
'hook.template.lintCheck': 'Lint 检查',
|
||
'hook.template.lintCheckDesc': '文件更改时运行 eslint',
|
||
'hook.template.gitAdd': 'Git 暂存',
|
||
'hook.template.gitAddDesc': '自动暂存写入的文件',
|
||
|
||
// Hook Quick Install Templates
|
||
'hook.tpl.sessionContext': 'Session 上下文',
|
||
'hook.tpl.sessionContextDesc': '会话启动时加载集群概览(仅触发一次)',
|
||
'hook.tpl.codexlensSync': 'CodexLens 自动同步',
|
||
'hook.tpl.codexlensSyncDesc': '文件写入或编辑时自动更新代码索引',
|
||
'hook.tpl.ccwDashboardNotify': 'CCW 控制面板通知',
|
||
'hook.tpl.ccwDashboardNotifyDesc': '文件写入时通知 CCW 控制面板',
|
||
'hook.tpl.toolLogger': '工具使用记录器',
|
||
'hook.tpl.toolLoggerDesc': '将所有工具执行记录到文件',
|
||
'hook.tpl.autoLint': '自动 Lint 检查',
|
||
'hook.tpl.autoLintDesc': '写入后对 JavaScript/TypeScript 文件运行 ESLint',
|
||
'hook.tpl.autoGitStage': '自动 Git 暂存',
|
||
'hook.tpl.autoGitStageDesc': '自动将写入的文件添加到 Git 暂存区',
|
||
|
||
// Hook Template Categories
|
||
'hook.category.indexing': '索引',
|
||
'hook.category.notification': '通知',
|
||
'hook.category.logging': '日志',
|
||
'hook.category.quality': '质量',
|
||
'hook.category.git': 'Git',
|
||
'hook.category.memory': '记忆',
|
||
'hook.category.skill': '技能',
|
||
'hook.category.context': '上下文',
|
||
|
||
// Hook Wizard Templates
|
||
'hook.wizard.memoryUpdate': '记忆更新钩子',
|
||
'hook.wizard.memoryUpdateDesc': '基于队列的 CLAUDE.md 更新,支持阈值和超时配置',
|
||
'hook.wizard.queueBasedUpdate': '队列批量更新',
|
||
'hook.wizard.queueBasedUpdateDesc': '达到路径数量阈值或超时时批量更新',
|
||
'hook.wizard.cliTool': 'CLI 工具',
|
||
'hook.wizard.cliToolDesc': '用于生成 CLAUDE.md 的 CLI 工具',
|
||
'hook.wizard.thresholdPaths': '阈值(路径数)',
|
||
'hook.wizard.thresholdPathsDesc': '触发批量更新的路径数量',
|
||
'hook.wizard.timeoutSeconds': '超时(秒)',
|
||
'hook.wizard.timeoutSecondsDesc': '超过此时间自动刷新队列',
|
||
// 保留旧键以兼容
|
||
'hook.wizard.onSessionEnd': '会话结束时',
|
||
'hook.wizard.onSessionEndDesc': 'Claude 会话结束时更新文档',
|
||
'hook.wizard.periodicUpdate': '定期更新',
|
||
'hook.wizard.periodicUpdateDesc': '会话期间定期更新文档',
|
||
'hook.wizard.countBasedUpdate': '累计数量更新',
|
||
'hook.wizard.countBasedUpdateDesc': '文件变动达到阈值时更新文档',
|
||
'hook.wizard.fileCountThreshold': '文件数量阈值',
|
||
'hook.wizard.fileCountThresholdDesc': '触发更新的文件变动数量',
|
||
'hook.wizard.skillContext': 'SKILL 上下文加载器',
|
||
'hook.wizard.skillContextDesc': '根据用户提示中的关键词自动加载 SKILL 包',
|
||
'hook.wizard.keywordMatching': '关键词匹配',
|
||
'hook.wizard.keywordMatchingDesc': '当提示中检测到关键词时加载特定 SKILL',
|
||
'hook.wizard.autoDetection': '自动检测',
|
||
'hook.wizard.autoDetectionDesc': '根据提示中的名称自动检测并加载 SKILL',
|
||
'hook.wizard.memorySetup': '记忆模块设置',
|
||
'hook.wizard.memorySetupDesc': '配置自动上下文跟踪(轻量级元数据记录)',
|
||
'hook.wizard.fileReadTracker': '文件读取追踪器',
|
||
'hook.wizard.fileReadTrackerDesc': '追踪文件读取以构建上下文热图',
|
||
'hook.wizard.fileWriteTracker': '文件写入追踪器',
|
||
'hook.wizard.fileWriteTrackerDesc': '追踪文件修改以识别核心模块',
|
||
'hook.wizard.promptTracker': '提示追踪器',
|
||
'hook.wizard.promptTrackerDesc': '记录用户提示用于模式分析',
|
||
'hook.wizard.selectTrackers': '选择追踪器',
|
||
|
||
// 危险保护向导
|
||
'hook.wizard.dangerProtection': '危险操作保护',
|
||
'hook.wizard.dangerProtectionDesc': '通过确认对话框保护危险操作',
|
||
'hook.wizard.dangerBashConfirm': '危险命令',
|
||
'hook.wizard.dangerBashConfirmDesc': '执行 rm -rf、shutdown、kill、format 等命令前确认',
|
||
'hook.wizard.dangerFileProtection': '敏感文件',
|
||
'hook.wizard.dangerFileProtectionDesc': '阻止修改 .env、.git/、密钥等敏感文件',
|
||
'hook.wizard.dangerGitDestructive': 'Git 操作',
|
||
'hook.wizard.dangerGitDestructiveDesc': '强制推送、硬重置、删除分支前确认',
|
||
'hook.wizard.dangerNetworkConfirm': '网络访问',
|
||
'hook.wizard.dangerNetworkConfirmDesc': '执行 curl、wget、ssh、WebFetch 请求前确认',
|
||
'hook.wizard.dangerSystemPaths': '系统路径',
|
||
'hook.wizard.dangerSystemPathsDesc': '阻止/确认对 /etc、/usr、C:\\Windows 的操作',
|
||
'hook.wizard.dangerPermissionChange': '权限更改',
|
||
'hook.wizard.dangerPermissionChangeDesc': '执行 chmod、chown、icacls 操作前确认',
|
||
'hook.wizard.selectProtections': '选择保护项',
|
||
|
||
// Hook Wizard Labels
|
||
'hook.wizard.cliTools': 'CLI 工具:',
|
||
'hook.wizard.event': '事件:',
|
||
'hook.wizard.availableSkills': '可用 SKILL:',
|
||
'hook.wizard.loading': '加载中...',
|
||
'hook.wizard.matches': '匹配:',
|
||
'hook.wizard.whenToTrigger': '触发时机',
|
||
'hook.wizard.configuration': '配置',
|
||
'hook.wizard.commandPreview': '生成的命令预览',
|
||
'hook.wizard.installTo': '安装到',
|
||
'hook.wizard.installHook': '安装钩子',
|
||
'hook.wizard.noSkillsConfigured': '尚未配置任何 SKILL',
|
||
'hook.wizard.clickAddSkill': '点击"添加 SKILL"配置关键词触发器',
|
||
'hook.wizard.configureSkills': '配置 SKILL',
|
||
'hook.wizard.addSkill': '添加 SKILL',
|
||
'hook.wizard.selectSkill': '选择 SKILL...',
|
||
'hook.wizard.triggerKeywords': '触发关键词(逗号分隔)',
|
||
'hook.wizard.autoDetectionMode': '自动检测模式',
|
||
'hook.wizard.autoDetectionInfo': '当 SKILL 名称出现在提示中时将自动加载。',
|
||
'hook.wizard.noSkillsFound': '未找到 SKILL。请在 .claude/skills/ 中创建 SKILL 包',
|
||
'hook.wizard.noSkillConfigs': '# 尚未配置 SKILL',
|
||
'hook.wizard.cliTool': 'CLI 工具',
|
||
'hook.wizard.intervalSeconds': '间隔(秒)',
|
||
'hook.wizard.updateStrategy': '更新策略',
|
||
'hook.wizard.toolForDocGen': '用于生成文档的工具',
|
||
'hook.wizard.timeBetweenUpdates': '更新之间的时间间隔',
|
||
'hook.wizard.relatedStrategy': 'related: 已更改的模块, single-layer: 当前目录',
|
||
|
||
// Lite Tasks
|
||
'lite.plan': '规划',
|
||
'lite.fix': '修复',
|
||
'lite.summary': '摘要',
|
||
'lite.rootCause': '根本原因',
|
||
'lite.fixStrategy': '修复策略',
|
||
'lite.approach': '方法',
|
||
'lite.userRequirements': '用户需求',
|
||
'lite.focusPaths': '关注路径',
|
||
'lite.metadata': '元数据',
|
||
'lite.severity': '严重性:',
|
||
'lite.riskLevel': '风险等级:',
|
||
'lite.estimatedTime': '预计时间:',
|
||
'lite.complexity': '复杂度:',
|
||
'lite.execution': '执行:',
|
||
'lite.fixTasks': '修复任务',
|
||
'lite.modificationPoints': '修改点:',
|
||
'lite.implementationSteps': '实现步骤:',
|
||
'lite.verification': '验证:',
|
||
'lite.rawJson': '原始 JSON',
|
||
'lite.noPlanData': '暂无计划数据',
|
||
'lite.noPlanDataText': '未找到该会话的 {file}。',
|
||
'lite.diagnosisSummary': '诊断摘要',
|
||
'lite.diagnosisDetails': '诊断详情',
|
||
'lite.totalDiagnoses': '总诊断数:',
|
||
'lite.angles': '分析角度:',
|
||
'lite.multiCli': '多CLI',
|
||
|
||
// Multi-CLI Plan
|
||
'multiCli.rounds': '轮',
|
||
'multiCli.backToList': '返回多CLI计划',
|
||
'multiCli.roundCount': '轮数',
|
||
'multiCli.topic': '主题',
|
||
'multiCli.tab.topic': '讨论主题',
|
||
'multiCli.tab.files': '相关文件',
|
||
'multiCli.tab.planning': '规划',
|
||
'multiCli.tab.decision': '决策',
|
||
'multiCli.tab.timeline': '时间线',
|
||
'multiCli.tab.rounds': '轮次',
|
||
'multiCli.tab.discussion': '讨论',
|
||
'multiCli.tab.association': '关联',
|
||
'multiCli.scope': '范围',
|
||
'multiCli.scope.included': '包含',
|
||
'multiCli.scope.excluded': '排除',
|
||
'multiCli.keyQuestions': '关键问题',
|
||
'multiCli.fileTree': '文件树',
|
||
'multiCli.impactSummary': '影响摘要',
|
||
'multiCli.dependencies': '依赖关系',
|
||
'multiCli.functional': '功能需求',
|
||
'multiCli.nonFunctional': '非功能需求',
|
||
'multiCli.acceptanceCriteria': '验收标准',
|
||
'multiCli.source': '来源',
|
||
'multiCli.confidence': '置信度',
|
||
'multiCli.selectedSolution': '选定方案',
|
||
'multiCli.rejectedAlternatives': '被拒绝的备选方案',
|
||
'multiCli.rejectionReason': '原因',
|
||
'multiCli.pros': '优点',
|
||
'multiCli.cons': '缺点',
|
||
'multiCli.effort': '工作量',
|
||
'multiCli.sources': '来源',
|
||
'multiCli.currentRound': '当前',
|
||
'multiCli.singleRoundInfo': '这是单轮讨论。查看其他标签页获取详情。',
|
||
'multiCli.noRoundData': '此轮无数据。',
|
||
'multiCli.roundId': '轮次',
|
||
'multiCli.timestamp': '时间',
|
||
'multiCli.duration': '持续时间',
|
||
'multiCli.contributors': '贡献者',
|
||
'multiCli.convergence': '收敛度',
|
||
'multiCli.newInsights': '新发现',
|
||
'multiCli.crossVerification': '交叉验证',
|
||
'multiCli.agreements': '一致意见',
|
||
'multiCli.disagreements': '分歧',
|
||
'multiCli.resolution': '决议',
|
||
'multiCli.empty.topic': '无讨论主题',
|
||
'multiCli.empty.topicText': '此会话无可用的讨论主题数据。',
|
||
'multiCli.empty.files': '无相关文件',
|
||
'multiCli.empty.filesText': '此会话无可用的文件分析数据。',
|
||
'multiCli.empty.planning': '无规划数据',
|
||
'multiCli.empty.planningText': '此会话无可用的规划需求。',
|
||
'multiCli.empty.decision': '暂无决策',
|
||
'multiCli.empty.decisionText': '此讨论尚未做出决策。',
|
||
'multiCli.empty.timeline': '无时间线事件',
|
||
'multiCli.empty.timelineText': '此会话无可用的决策时间线。',
|
||
'multiCli.empty.association': '无关联数据',
|
||
'multiCli.empty.associationText': '此会话无可用的上下文包或相关文件。',
|
||
'multiCli.round': '轮次',
|
||
'multiCli.solutionSummary': '方案摘要',
|
||
'multiCli.feasibility': '可行性',
|
||
'multiCli.effort': '工作量',
|
||
'multiCli.risk': '风险',
|
||
'multiCli.consensus': '共识',
|
||
'multiCli.resolvedConflicts': '已解决冲突',
|
||
|
||
// Toolbar
|
||
'multiCli.toolbar.title': '任务导航',
|
||
'multiCli.toolbar.tasks': '任务列表',
|
||
'multiCli.toolbar.refresh': '刷新',
|
||
'multiCli.toolbar.exportJson': '导出JSON',
|
||
'multiCli.toolbar.viewRaw': '查看原始数据',
|
||
'multiCli.toolbar.noTasks': '暂无任务',
|
||
'multiCli.toolbar.scrollToTask': '点击定位到任务',
|
||
|
||
// Context Tab
|
||
'multiCli.context.taskDescription': '任务描述',
|
||
'multiCli.context.constraints': '约束条件',
|
||
'multiCli.context.focusPaths': '焦点路径',
|
||
'multiCli.context.relevantFiles': '相关文件',
|
||
'multiCli.context.dependencies': '依赖项',
|
||
'multiCli.context.conflictRisks': '冲突风险',
|
||
'multiCli.context.sessionId': '会话ID',
|
||
'multiCli.context.rawJson': '原始JSON',
|
||
|
||
// Summary Tab
|
||
'multiCli.summary.title': '摘要',
|
||
'multiCli.summary.convergence': '收敛状态',
|
||
'multiCli.summary.solutions': '解决方案',
|
||
'multiCli.summary.solution': '方案',
|
||
|
||
// Task Overview
|
||
'multiCli.task.description': '描述',
|
||
'multiCli.task.keyPoint': '关键点',
|
||
'multiCli.task.scope': '范围',
|
||
'multiCli.task.dependencies': '依赖项',
|
||
'multiCli.task.targetFiles': '目标文件',
|
||
'multiCli.task.acceptanceCriteria': '验收标准',
|
||
'multiCli.task.reference': '参考资料',
|
||
'multiCli.task.pattern': '模式',
|
||
'multiCli.task.files': '文件',
|
||
'multiCli.task.examples': '示例',
|
||
'multiCli.task.noOverviewData': '无概览数据',
|
||
|
||
// Task Implementation
|
||
'multiCli.task.implementationSteps': '实现步骤',
|
||
'multiCli.task.modificationPoints': '修改点',
|
||
'multiCli.task.verification': '验证',
|
||
'multiCli.task.noImplementationData': '无实现详情',
|
||
'multiCli.task.noFilesSpecified': '未指定文件',
|
||
|
||
// Discussion Tab
|
||
'multiCli.discussion.title': '讨论',
|
||
'multiCli.discussion.discussionTopic': '讨论主题',
|
||
'multiCli.solutions': '解决方案',
|
||
'multiCli.decision': '决策',
|
||
|
||
// Plan
|
||
'multiCli.plan.objective': '目标',
|
||
'multiCli.plan.solution': '解决方案',
|
||
'multiCli.plan.approach': '实现方式',
|
||
'multiCli.plan.risk': '风险',
|
||
|
||
// Modals
|
||
'modal.contentPreview': '内容预览',
|
||
'modal.raw': '原始',
|
||
'modal.preview': '预览',
|
||
'modal.templateDetails': '模板详情',
|
||
'modal.sessionJson': '会话 JSON',
|
||
'modal.copyToClipboard': '复制到剪贴板',
|
||
|
||
// Toast messages
|
||
'toast.workspaceRefreshed': '工作区已刷新',
|
||
'toast.refreshFailed': '刷新失败: {error}',
|
||
'toast.statusUpdateRequires': '状态更新需要服务器模式',
|
||
'toast.bulkUpdateRequires': '批量更新需要服务器模式',
|
||
'toast.failedToUpdate': '更新状态失败',
|
||
'toast.errorUpdating': '更新状态出错: {error}',
|
||
'toast.failedToBulkUpdate': '批量更新失败',
|
||
'toast.errorInBulk': '批量更新出错: {error}',
|
||
'toast.enterPrompt': '请输入提示',
|
||
'toast.enterPath': '请输入路径',
|
||
'toast.commandCopied': '命令已复制: {command}',
|
||
'toast.runCommand': '运行: {command}',
|
||
'toast.completed': '已完成',
|
||
'toast.failed': '失败',
|
||
'toast.error': '错误: {error}',
|
||
'toast.templateNotFound': '未找到模板',
|
||
|
||
// Footer
|
||
'footer.generated': '生成时间:',
|
||
'footer.version': 'CCW 控制面板 v1.0',
|
||
|
||
// Prompt History
|
||
'prompt.timeline': '提示词时间线',
|
||
'prompt.searchPlaceholder': '搜索提示词...',
|
||
'prompt.allProjects': '所有项目',
|
||
'prompt.currentProject': '当前项目',
|
||
'prompt.noPromptsFound': '未找到提示词',
|
||
'prompt.noPromptsText': '没有符合搜索条件的提示词。',
|
||
'prompt.insights': '洞察与建议',
|
||
'prompt.analyze': '分析',
|
||
'prompt.analyzing': '分析中...',
|
||
'prompt.selectTool': '选择工具',
|
||
'prompt.quality': '质量',
|
||
'prompt.intent': '意图',
|
||
'prompt.project': '项目',
|
||
'prompt.session': '会话',
|
||
'prompt.noInsights': '暂无洞察',
|
||
'prompt.noInsightsText': '选择 CLI 工具并点击分析以生成洞察。',
|
||
'prompt.loadingInsights': '正在生成洞察...',
|
||
'prompt.insightsError': '生成洞察失败',
|
||
'prompt.intent.implement': '实现',
|
||
'prompt.intent.fix': '修复',
|
||
'prompt.intent.explore': '探索',
|
||
'prompt.intent.debug': '调试',
|
||
'prompt.intent.refactor': '重构',
|
||
'prompt.intent.test': '测试',
|
||
'prompt.intent.document': '文档',
|
||
'prompt.intent.general': '通用',
|
||
'prompt.timeJustNow': '刚刚',
|
||
'prompt.timeMinutesAgo': '{count} 分钟前',
|
||
'prompt.timeHoursAgo': '{count} 小时前',
|
||
'prompt.timeDaysAgo': '{count} 天前',
|
||
|
||
// Memory Module
|
||
'memory.contextHotspots': '上下文热点',
|
||
'memory.mostRead': '最常读取的文件',
|
||
'memory.mostEdited': '最常编辑的文件',
|
||
'memory.mostMentioned': '最常提及的话题',
|
||
'memory.today': '今天',
|
||
'memory.week': '本周',
|
||
'memory.allTime': '全部时间',
|
||
'memory.noData': '无可用数据',
|
||
'memory.memoryGraph': '记忆图谱',
|
||
'memory.nodes': '节点',
|
||
'memory.resetView': '重置视图',
|
||
'memory.zoomIn': '放大',
|
||
'memory.zoomOut': '缩小',
|
||
'memory.fitView': '自适应',
|
||
'memory.file': '文件',
|
||
'memory.module': '模块',
|
||
'memory.component': '组件',
|
||
'memory.noGraphData': '无图谱数据',
|
||
'memory.d3NotLoaded': 'D3.js 未加载',
|
||
'memory.recentContext': '最近上下文',
|
||
'memory.activities': '活动',
|
||
'memory.searchContext': '搜索上下文...',
|
||
'memory.noRecentActivity': '无最近活动',
|
||
'memory.reads': '读取',
|
||
'memory.edits': '编辑',
|
||
'memory.mentions': '提及',
|
||
'memory.prompts': '提示',
|
||
'memory.nodeDetails': '节点详情',
|
||
'memory.heat': '热度',
|
||
'memory.associations': '关联',
|
||
'memory.type': '类型',
|
||
'memory.relatedNodes': '相关节点',
|
||
'memory.noAssociations': '未找到关联',
|
||
'memory.justNow': '刚刚',
|
||
'memory.minutesAgo': '分钟前',
|
||
'memory.hoursAgo': '小时前',
|
||
'memory.title': '记忆',
|
||
'memory.activeMemory': '活动记忆',
|
||
'memory.active': '已启用',
|
||
'memory.inactive': '未启用',
|
||
'memory.syncNow': '立即同步',
|
||
'memory.syncComplete': '同步完成',
|
||
'memory.syncError': '同步失败',
|
||
'memory.filesAnalyzed': '个文件已分析',
|
||
'memory.activeMemoryEnabled': '活动记忆已启用',
|
||
'memory.activeMemoryDisabled': '活动记忆已禁用',
|
||
'memory.activeMemoryError': '切换活动记忆失败',
|
||
'memory.interval': '间隔',
|
||
'memory.intervalManual': '手动',
|
||
'memory.minutes': '分钟',
|
||
'memory.cliTool': 'CLI',
|
||
'memory.lastSync': '上次同步',
|
||
'memory.autoSyncActive': '自动同步',
|
||
'memory.configUpdated': '配置已更新',
|
||
'memory.configError': '配置更新失败',
|
||
'memory.insightsHistory': '洞察历史',
|
||
'memory.insightsEmpty': '暂无洞察记录。运行分析以生成洞察。',
|
||
'memory.insightPatterns': '模式',
|
||
'memory.insightSuggestions': '建议',
|
||
'memory.insightDetail': '洞察详情',
|
||
'memory.insightDelete': '删除',
|
||
'memory.insightDeleteConfirm': '确定要删除此洞察吗?',
|
||
'memory.insightDeleted': '洞察已删除',
|
||
'memory.prompts': '提示',
|
||
'memory.refreshInsights': '刷新',
|
||
|
||
// Skills
|
||
'nav.skills': '技能',
|
||
'title.skillsManager': '技能管理',
|
||
'skills.title': '技能管理',
|
||
'skills.description': '管理 Claude Code 的技能和能力',
|
||
'skills.create': '创建技能',
|
||
'skills.projectSkills': '项目技能',
|
||
'skills.userSkills': '用户技能',
|
||
'skills.skillsCount': '个技能',
|
||
'skills.noProjectSkills': '未找到项目技能',
|
||
'skills.createHint': '在 .claude/skills/ 中创建技能以添加功能',
|
||
'skills.noUserSkills': '未找到用户技能',
|
||
'skills.userSkillsHint': '用户技能适用于所有项目',
|
||
'skills.noDescription': '无描述',
|
||
'skills.tools': '工具',
|
||
'skills.files': '文件',
|
||
'skills.descriptionLabel': '描述',
|
||
'skills.metadata': '元数据',
|
||
'skills.location': '位置',
|
||
'skills.version': '版本',
|
||
'skills.allowedTools': '允许的工具',
|
||
'skills.supportingFiles': '支持文件',
|
||
'skills.path': '路径',
|
||
'skills.loadError': '加载技能详情失败',
|
||
'skills.deleteConfirm': '确定要删除技能 "{name}" 吗?',
|
||
'skills.deleted': '技能删除成功',
|
||
'skills.deleteError': '删除技能失败',
|
||
'skills.editNotImplemented': '编辑功能即将推出',
|
||
'skills.createNotImplemented': '创建功能即将推出',
|
||
'skills.createSkill': '创建技能', 'skills.sourceFolder': '源文件夹', 'skills.sourceFolderPlaceholder': '技能文件夹路径', 'skills.sourceFolderHint': '选择包含有效 SKILL.md 文件的文件夹', 'skills.sourceFolderRequired': '源文件夹路径是必需的', 'skills.customName': '自定义名称', 'skills.customNamePlaceholder': '留空则使用 SKILL.md 中的技能名称', 'skills.customNameHint': '可选:覆盖技能名称', 'skills.validate': '验证', 'skills.import': '导入', 'skills.validating': '验证中...', 'skills.validSkill': '有效技能', 'skills.invalidSkill': '无效技能', 'skills.validateFirst': '请先验证技能文件夹', 'skills.created': '技能 "{name}" 创建成功', 'skills.createError': '创建技能失败', 'skills.validationError': '验证失败', 'skills.enterFolderPath': '输入技能文件夹路径', 'skills.name': '名称',
|
||
'skills.createMode': '创建模式',
|
||
'skills.importFolder': '导入文件夹',
|
||
'skills.importFolderHint': '导入现有技能文件夹',
|
||
'skills.cliGenerate': 'CLI生成',
|
||
'skills.cliGenerateHint': '使用AI生成',
|
||
'skills.generationType': '生成类型',
|
||
'skills.fromDescription': '从描述生成',
|
||
'skills.fromDescriptionHint': '描述你需要的功能',
|
||
'skills.fromTemplate': '从模板生成',
|
||
'skills.comingSoon': '即将推出',
|
||
'skills.skillName': '技能名称',
|
||
'skills.skillNamePlaceholder': '例如:代码审查、测试助手',
|
||
'skills.skillNameHint': '为技能选择一个描述性的名称',
|
||
'skills.skillNameRequired': '技能名称是必需的',
|
||
'skills.descriptionPlaceholder': '描述这个技能应该帮助什么...\n例如:帮助审查代码的安全漏洞和最佳实践',
|
||
'skills.descriptionRequired': '描述是必需的',
|
||
'skills.descriptionGenerateHint': '具体说明技能应该做什么',
|
||
'skills.generating': '正在通过 CLI 生成技能...这可能需要几分钟。',
|
||
'skills.generated': '技能 "{name}" 生成成功',
|
||
'skills.generateError': '生成技能失败',
|
||
'skills.generate': '生成',
|
||
'skills.cliGenerateInfo': 'AI 将根据你的描述生成完整的技能',
|
||
'skills.cliGenerateTimeHint': '生成时间取决于复杂度,可能需要几分钟',
|
||
'skills.disable': '禁用',
|
||
'skills.enable': '启用',
|
||
'skills.disabled': '已禁用',
|
||
'skills.enabled': '已启用',
|
||
'skills.disabledSkills': '已禁用的技能',
|
||
'skills.disabledAt': '禁用时间',
|
||
'skills.enableConfirm': '确定要启用技能 "{name}" 吗?',
|
||
'skills.disableConfirm': '确定要禁用技能 "{name}" 吗?',
|
||
'skills.noDisabledSkills': '没有已禁用的技能',
|
||
'skills.toggleError': '切换技能状态失败',
|
||
'skills.enableSuccess': '技能 "{name}" 启用成功',
|
||
'skills.disableSuccess': '技能 "{name}" 禁用成功',
|
||
|
||
// Rules
|
||
'nav.rules': '规则',
|
||
'nav.commands': '命令',
|
||
'title.commandsManager': '命令管理',
|
||
'commands.title': '命令管理',
|
||
'commands.description': '管理 Claude Code 命令 - 启用、禁用和按组织分组',
|
||
'commands.totalCommands': '总命令数',
|
||
'commands.enabledCommands': '已启用命令',
|
||
'commands.disabledCommands': '已禁用命令',
|
||
'commands.showDisabled': '显示已禁用',
|
||
'commands.hideDisabled': '隐藏已禁用',
|
||
'commands.noDescription': '无描述',
|
||
'commands.disabledAt': '禁用于',
|
||
'commands.enableConfirm': '启用命令 "{name}"?',
|
||
'commands.disableConfirm': '禁用命令 "{name}"?',
|
||
'commands.enableSuccess': '命令 "{name}" 已成功启用',
|
||
'commands.disableSuccess': '命令 "{name}" 已成功禁用',
|
||
'commands.toggleError': '切换命令状态失败',
|
||
'commands.enabled': '已启用',
|
||
'commands.disabled': '已禁用',
|
||
'commands.name': '名称',
|
||
'commands.description': '描述',
|
||
'commands.scope': '作用域',
|
||
'commands.status': '状态',
|
||
'commands.group.cli': 'CLI',
|
||
'commands.group.workflow': '工作流',
|
||
'commands.group.memory': '记忆',
|
||
'commands.group.task': '任务',
|
||
'commands.group.issue': '问题',
|
||
'commands.group.other': '其他',
|
||
'commands.group.review': '审查',
|
||
'commands.group.execute': '执行',
|
||
'commands.group.plan': '规划',
|
||
'commands.group.test': '测试',
|
||
'commands.group.debug': '调试',
|
||
'commands.group.tools': '工具',
|
||
'commands.enableAll': '全部启用',
|
||
'commands.disableAll': '全部禁用',
|
||
'commands.enableGroupConfirm': '启用 "{group}" 分组中的所有命令?',
|
||
'commands.disableGroupConfirm': '禁用 "{group}" 分组中的所有命令?',
|
||
'commands.enableGroupSuccess': '分组 "{group}" 已全部启用',
|
||
'commands.disableGroupSuccess': '分组 "{group}" 已全部禁用',
|
||
'commands.locationProject': '项目',
|
||
'commands.locationUser': '全局',
|
||
'commands.clickToEnableAll': '点击启用该分组所有命令',
|
||
'commands.clickToDisableAll': '点击禁用该分组所有命令',
|
||
|
||
// Rules
|
||
'title.rulesManager': '规则管理',
|
||
'rules.title': '规则管理',
|
||
'rules.description': '管理 Claude Code 的项目和用户规则',
|
||
'rules.create': '创建规则',
|
||
'rules.projectRules': '项目规则',
|
||
'rules.userRules': '用户规则',
|
||
'rules.rulesCount': '条规则',
|
||
'rules.noProjectRules': '未找到项目规则',
|
||
'rules.createHint': '在 .claude/rules/ 中创建规则以设置项目特定指令',
|
||
'rules.noUserRules': '未找到用户规则',
|
||
'rules.userRulesHint': '用户规则适用于所有项目',
|
||
'rules.typeLabel': '类型',
|
||
'rules.conditional': '条件规则',
|
||
'rules.global': '全局规则',
|
||
'rules.pathConditions': '路径条件',
|
||
'rules.content': '内容',
|
||
'rules.filePath': '文件路径',
|
||
'rules.loadError': '加载规则详情失败',
|
||
'rules.deleteConfirm': '确定要删除规则 "{name}" 吗?',
|
||
'rules.deleted': '规则删除成功',
|
||
'rules.deleteError': '删除规则失败',
|
||
'rules.editNotImplemented': '编辑功能即将推出',
|
||
'rules.createNotImplemented': '创建功能即将推出',
|
||
'rules.createRule': '创建规则',
|
||
'rules.location': '位置',
|
||
'rules.fileName': '文件名',
|
||
'rules.fileNameHint': '必须以 .md 结尾',
|
||
'rules.fileNameRequired': '文件名是必需的',
|
||
'rules.fileNameMustEndMd': '文件名必须以 .md 结尾',
|
||
'rules.subdirectory': '子目录',
|
||
'rules.subdirectoryHint': '可选:将规则组织到子目录中',
|
||
'rules.conditionalRule': '条件规则',
|
||
'rules.conditionalHint': '仅对特定文件路径应用此规则',
|
||
'rules.addPath': '添加路径',
|
||
'rules.contentPlaceholder': '以 Markdown 格式输入规则内容...',
|
||
'rules.contentHint': '使用 Markdown 为 Claude 编写规则说明',
|
||
'rules.contentRequired': '内容是必需的',
|
||
'rules.created': '规则 "{name}" 创建成功',
|
||
'rules.createError': '创建规则失败',
|
||
'rules.createMode': '创建模式',
|
||
'rules.manualInput': '手动输入',
|
||
'rules.manualInputHint': '直接编写内容',
|
||
'rules.cliGenerate': 'CLI生成',
|
||
'rules.cliGenerateHint': '通过AI自动生成',
|
||
'rules.generationType': '生成类型',
|
||
'rules.fromDescription': '从描述生成',
|
||
'rules.fromTemplate': '从模板生成',
|
||
'rules.fromCodeExtract': '从代码提取',
|
||
'rules.description': '描述',
|
||
'rules.descriptionPlaceholder': '描述规则目的和说明...',
|
||
'rules.descriptionHint': 'AI将根据您的描述生成规则内容',
|
||
'rules.descriptionRequired': '描述是必需的',
|
||
'rules.extractScope': '分析范围',
|
||
'rules.extractScopeHint': '要分析的文件模式(例如:src/**/*.ts)',
|
||
'rules.extractScopeRequired': '分析范围是必需的',
|
||
'rules.extractFocus': '关注领域',
|
||
'rules.extractFocusHint': '以逗号分隔的关注方面(例如:命名规范, 错误处理)',
|
||
'rules.enableReview': '启用质量审查',
|
||
'rules.enableReviewHint': 'AI 将验证生成的规则是否清晰、可操作且格式正确',
|
||
'rules.cliGenerating': '正在通过 CLI 生成规则(可能需要几分钟)...',
|
||
|
||
// CLAUDE.md Manager
|
||
'nav.claudeManager': 'CLAUDE.md',
|
||
'title.claudeManager': 'CLAUDE.md 管理器',
|
||
'claudeManager.title': 'CLAUDE.md 文件',
|
||
'claudeManager.files': '个文件',
|
||
'claudeManager.userLevel': '用户级',
|
||
'claudeManager.projectLevel': '项目级',
|
||
'claudeManager.moduleLevel': '模块级',
|
||
'claudeManager.noFile': '无 CLAUDE.md 文件',
|
||
'claudeManager.noModules': '无模块 CLAUDE.md 文件',
|
||
'claudeManager.selectFile': '选择文件以查看',
|
||
'claudeManager.noMetadata': '选择文件以查看元数据',
|
||
'claudeManager.fileInfo': '文件信息',
|
||
'claudeManager.level': '级别',
|
||
'claudeManager.level_user': '用户级 (~/.claude/)',
|
||
'claudeManager.level_project': '项目级 (.claude/)',
|
||
'claudeManager.level_module': '模块级',
|
||
'claudeManager.path': '路径',
|
||
'claudeManager.size': '大小',
|
||
'claudeManager.modified': '修改时间',
|
||
'claudeManager.statistics': '统计信息',
|
||
'claudeManager.lines': '行数',
|
||
'claudeManager.words': '字数',
|
||
'claudeManager.characters': '字符数',
|
||
'claudeManager.actions': '操作',
|
||
'claudeManager.loadError': '加载 CLAUDE.md 文件失败',
|
||
'claudeManager.refreshed': '文件刷新成功',
|
||
'claudeManager.unsavedChanges': '您有未保存的更改。是否放弃?',
|
||
'claudeManager.saved': '文件保存成功',
|
||
'claudeManager.saveError': '文件保存失败',
|
||
'claudeManager.freshness': '新鲜度',
|
||
'claudeManager.lastContentUpdate': '上次内容更新',
|
||
'claudeManager.changedFiles': '变动文件',
|
||
'claudeManager.filesSinceUpdate': '个文件自上次更新后变动',
|
||
'claudeManager.updateReminder': '此文件可能需要更新',
|
||
'claudeManager.markAsUpdated': '标记为已更新',
|
||
'claudeManager.markedAsUpdated': '已成功标记为已更新',
|
||
'claudeManager.markUpdateError': '标记更新失败',
|
||
'claudeManager.never': '从未追踪',
|
||
|
||
// Graph Explorer
|
||
'nav.graphExplorer': '图谱',
|
||
'title.graphExplorer': '代码图谱浏览器',
|
||
'graph.codeRelations': '代码关系',
|
||
'graph.searchProcess': '搜索过程',
|
||
'graph.nodeTypes': '节点类型',
|
||
'graph.edgeTypes': '边类型',
|
||
'graph.noProject': '未选择项目',
|
||
'graph.selectProject': '选择一个项目以查看其代码图谱',
|
||
'graph.loading': '正在加载图谱数据...',
|
||
'graph.noData': '无图谱数据',
|
||
'graph.indexProject': '请先使用 codex-lens 为此项目建立索引',
|
||
'graph.nodeDetails': '节点详情',
|
||
'graph.selectNode': '选择节点以查看详情',
|
||
'graph.impactAnalysis': '影响分析',
|
||
'graph.directDependents': '直接依赖',
|
||
'graph.affectedFiles': '受影响文件',
|
||
'graph.fitView': '适应视图',
|
||
'graph.zoomIn': '放大',
|
||
'graph.zoomOut': '缩小',
|
||
'graph.resetLayout': '重置布局',
|
||
'graph.title': '代码图谱',
|
||
'graph.filters': '筛选器',
|
||
'graph.legend': '图例',
|
||
'graph.nodes': '个节点',
|
||
'graph.edges': '条边',
|
||
'graph.noGraphData': '无图谱数据。请先使用 codex-lens 为此项目建立索引。',
|
||
'graph.noSearchData': '无搜索过程数据。',
|
||
'graph.center': '居中',
|
||
'graph.resetFilters': '重置筛选',
|
||
|
||
// Help & Guide
|
||
'nav.help': '帮助',
|
||
'title.helpGuide': '帮助与指南',
|
||
'graph.cytoscapeNotLoaded': '图谱库未加载',
|
||
'graph.impactAnalysisError': '加载影响分析失败',
|
||
'graph.searchProcessDesc': '可视化搜索查询在系统中的流转过程',
|
||
'graph.searchProcessTitle': '搜索管道',
|
||
'graph.resultsFound': '个结果',
|
||
'graph.coreMemory': '核心记忆',
|
||
'graph.dataSourceSwitched': '数据源已切换',
|
||
'graph.type': '类型',
|
||
'graph.line': '行号',
|
||
'graph.path': '路径',
|
||
'graph.depth': '深度',
|
||
'graph.exports': '导出',
|
||
'graph.imports': '导入',
|
||
'graph.references': '引用',
|
||
'graph.symbolType': '符号类型',
|
||
'graph.affectedSymbols': '受影响符号',
|
||
'graph.scope': '范围',
|
||
'graph.allFiles': '所有文件',
|
||
'graph.byModule': '按模块',
|
||
'graph.byFile': '按文件',
|
||
'graph.selectModule': '选择模块...',
|
||
'graph.selectFile': '选择文件...',
|
||
|
||
// CLI Sync (used in claude-manager.js)
|
||
'claude.cliSync': 'CLI 自动同步',
|
||
'claude.tool': '工具',
|
||
'claude.mode': '模式',
|
||
'claude.syncButton': '使用 CLI 同步',
|
||
'claude.syncing': '正在使用 {tool} 分析...',
|
||
'claude.syncSuccess': '{file} 同步成功',
|
||
'claude.syncError': '同步失败:{error}',
|
||
'claude.modeUpdate': '更新(智能合并)',
|
||
'claude.modeGenerate': '生成(完全替换)',
|
||
'claude.modeAppend': '追加',
|
||
'claude.searchPlaceholder': '搜索文件...',
|
||
'claude.viewModeClaude': '仅 CLAUDE.md',
|
||
'claude.viewModeAll': '所有文件',
|
||
'claude.createFile': '创建文件',
|
||
'claude.createDialogTitle': '创建 CLAUDE.md 文件',
|
||
'claude.selectLevel': '层级',
|
||
'claude.levelUser': '用户级 (~/.claude/)',
|
||
'claude.levelProject': '项目级 (.claude/)',
|
||
'claude.levelModule': '模块级(自定义路径)',
|
||
'claude.modulePath': '模块路径',
|
||
'claude.selectTemplate': '模板',
|
||
'claude.templateDefault': '默认',
|
||
'claude.templateMinimal': '最小化',
|
||
'claude.templateComprehensive': '完整',
|
||
'claude.deleteFile': '删除文件',
|
||
'claude.deleteConfirm': '确定要删除 {file} 吗?',
|
||
'claude.deleteWarning': '此操作无法撤销。',
|
||
'claude.batchDeleteProject': '删除项目文件',
|
||
'claude.batchDeleteTitle': '删除项目工作空间文件',
|
||
'claude.batchDeleteWarning': '此操作将删除项目工作空间内的所有 CLAUDE.md 文件(不包括用户级文件)',
|
||
'claude.noProjectFiles': '没有可删除的项目工作空间文件',
|
||
'claude.filesToDelete': '待删除文件数:',
|
||
'claude.totalSize': '总大小:',
|
||
'claude.fileList': '文件清单',
|
||
'claude.confirmDelete': '确认删除',
|
||
'claude.deletingFiles': '正在删除 {count} 个文件...',
|
||
'claude.batchDeleteSuccess': '成功删除 {deleted}/{total} 个文件',
|
||
'claude.batchDeleteError': '删除文件失败',
|
||
'claude.removeFromList': '从清单中移除',
|
||
'claude.noFilesInList': '清单中没有文件',
|
||
'claude.copyContent': '复制内容',
|
||
'claude.contentCopied': '内容已复制到剪贴板',
|
||
'claude.copyError': '复制内容失败',
|
||
'claude.modulePathRequired': '模块路径为必填项',
|
||
'claude.fileCreated': '文件创建成功',
|
||
'claude.createFileError': '文件创建失败',
|
||
'claude.fileDeleted': '文件删除成功',
|
||
'claude.deleteFileError': '文件删除失败',
|
||
'claude.loadAllFilesError': '加载所有文件失败',
|
||
'claude.unsupportedFileType': '不支持的文件类型',
|
||
'claude.loadFileError': '加载文件失败',
|
||
|
||
// Duplicate keys for compatibility
|
||
'nav.claudeManager': 'CLAUDE.md',
|
||
'title.claudeManager': 'CLAUDE.md Manager',
|
||
'claudeManager.title': 'CLAUDE.md Files',
|
||
'claudeManager.files': 'files',
|
||
'claudeManager.userLevel': 'User Level',
|
||
'claudeManager.projectLevel': 'Project Level',
|
||
'claudeManager.moduleLevel': 'Module Level',
|
||
'claudeManager.noFile': 'No CLAUDE.md file',
|
||
'claudeManager.noModules': 'No module CLAUDE.md files',
|
||
'claudeManager.selectFile': 'Select a file to view',
|
||
'claudeManager.noMetadata': 'Select a file to see metadata',
|
||
'claudeManager.fileInfo': 'File Information',
|
||
'claudeManager.level': 'Level',
|
||
'claudeManager.level_user': 'User (~/.claude/)',
|
||
'claudeManager.level_project': 'Project (.claude/)',
|
||
'claudeManager.level_module': 'Module',
|
||
'claudeManager.path': 'Path',
|
||
'claudeManager.size': 'Size',
|
||
'claudeManager.modified': 'Modified',
|
||
'claudeManager.statistics': 'Statistics',
|
||
'claudeManager.lines': 'Lines',
|
||
'claudeManager.words': 'Words',
|
||
'claudeManager.characters': 'Characters',
|
||
'claudeManager.actions': 'Actions',
|
||
'claudeManager.loadError': 'Failed to load CLAUDE.md files',
|
||
'claudeManager.refreshed': 'Files refreshed successfully',
|
||
'claudeManager.unsavedChanges': 'You have unsaved changes. Discard them?',
|
||
'claudeManager.saved': 'File saved successfully',
|
||
'claudeManager.saveError': 'Failed to save file',
|
||
|
||
|
||
// API Settings
|
||
'nav.apiSettings': 'API 设置',
|
||
'title.apiSettings': 'API 设置',
|
||
'apiSettings.providers': '提供商',
|
||
'apiSettings.customEndpoints': '自定义端点',
|
||
'apiSettings.cacheSettings': '缓存设置',
|
||
'apiSettings.addProvider': '添加提供商',
|
||
'apiSettings.editProvider': '编辑提供商',
|
||
'apiSettings.deleteProvider': '删除提供商',
|
||
'apiSettings.addEndpoint': '添加端点',
|
||
'apiSettings.editEndpoint': '编辑端点',
|
||
'apiSettings.deleteEndpoint': '删除端点',
|
||
'apiSettings.providerType': '提供商类型',
|
||
'apiSettings.apiFormat': 'API 格式',
|
||
'apiSettings.compatible': '兼容',
|
||
'apiSettings.customFormat': '自定义格式',
|
||
'apiSettings.apiFormatHint': '大多数供应商(DeepSeek、Ollama 等)使用 OpenAI 兼容格式',
|
||
'apiSettings.displayName': '显示名称',
|
||
'apiSettings.apiKey': 'API 密钥',
|
||
'apiSettings.apiBaseUrl': 'API 基础 URL',
|
||
'apiSettings.useEnvVar': '使用环境变量',
|
||
'apiSettings.enableProvider': '启用提供商',
|
||
'apiSettings.advancedSettings': '高级设置',
|
||
'apiSettings.basicInfo': '基本信息',
|
||
'apiSettings.endpointSettings': '端点设置',
|
||
'apiSettings.timeout': '超时时间(秒)',
|
||
'apiSettings.seconds': '秒',
|
||
'apiSettings.timeoutHint': '请求超时时间,单位秒(默认:300)',
|
||
'apiSettings.maxRetries': '最大重试次数',
|
||
'apiSettings.maxRetriesHint': '失败后最大重试次数',
|
||
'apiSettings.organization': '组织 ID',
|
||
'apiSettings.organizationHint': 'OpenAI 组织 ID(org-...)',
|
||
'apiSettings.apiVersion': 'API 版本',
|
||
'apiSettings.apiVersionHint': 'Azure API 版本(如 2024-02-01)',
|
||
'apiSettings.rpm': 'RPM 限制',
|
||
'apiSettings.tpm': 'TPM 限制',
|
||
'apiSettings.unlimited': '无限制',
|
||
'apiSettings.proxy': '代理服务器',
|
||
'apiSettings.proxyHint': 'HTTP 代理服务器 URL',
|
||
'apiSettings.customHeaders': '自定义请求头',
|
||
'apiSettings.customHeadersHint': '自定义 HTTP 请求头的 JSON 对象',
|
||
'apiSettings.invalidJsonHeaders': '自定义请求头 JSON 格式无效',
|
||
'apiSettings.searchProviders': '搜索供应商...',
|
||
'apiSettings.selectProvider': '选择供应商',
|
||
'apiSettings.selectProviderHint': '从列表中选择一个供应商来查看和管理其设置',
|
||
'apiSettings.noProvidersFound': '未找到供应商',
|
||
'apiSettings.llmModels': '大语言模型',
|
||
'apiSettings.embeddingModels': '向量模型',
|
||
'apiSettings.rerankerModels': '重排模型',
|
||
'apiSettings.addRerankerModel': '添加重排模型',
|
||
'apiSettings.rerankerTopK': '默认 Top K',
|
||
'apiSettings.rerankerTopKHint': '返回的最高排名结果数量(默认:10)',
|
||
'apiSettings.manageModels': '管理',
|
||
'apiSettings.addModel': '添加模型',
|
||
'apiSettings.multiKeySettings': '多密钥设置',
|
||
'apiSettings.noModels': '暂无模型配置',
|
||
'apiSettings.previewModel': '预览',
|
||
'apiSettings.modelSettings': '模型设置',
|
||
'apiSettings.deleteModel': '删除模型',
|
||
'apiSettings.endpointPreview': '端点预览',
|
||
'apiSettings.modelBaseUrlOverride': '基础 URL 覆盖',
|
||
'apiSettings.modelBaseUrlHint': '为此模型覆盖供应商的基础 URL(留空则使用供应商默认值)',
|
||
'apiSettings.providerUpdated': '供应商已更新',
|
||
'apiSettings.syncToCodexLens': '同步到 CodexLens',
|
||
'apiSettings.configSynced': '配置已同步到 CodexLens',
|
||
'apiSettings.preview': '预览',
|
||
'apiSettings.used': '已使用',
|
||
'apiSettings.total': '总计',
|
||
'apiSettings.testConnection': '测试连接',
|
||
'apiSettings.endpointId': '端点 ID',
|
||
'apiSettings.endpointIdHint': '用法: ccw cli -p "..." --tool custom --model <端点ID> --mode analysis',
|
||
'apiSettings.endpoints': '端点',
|
||
'apiSettings.addEndpointHint': '创建用于 CLI 的自定义端点别名',
|
||
'apiSettings.endpointModel': '模型',
|
||
'apiSettings.selectEndpoint': '选择端点',
|
||
'apiSettings.selectEndpointHint': '从列表中选择一个端点以查看或编辑其设置',
|
||
'apiSettings.provider': '提供商',
|
||
'apiSettings.model': '模型',
|
||
'apiSettings.selectModel': '选择模型',
|
||
'apiSettings.noModelsConfigured': '该供应商未配置模型',
|
||
'apiSettings.cacheStrategy': '缓存策略',
|
||
'apiSettings.enableContextCaching': '启用上下文缓存',
|
||
'apiSettings.cacheTTL': 'TTL (分钟)',
|
||
'apiSettings.cacheMaxSize': '最大大小 (KB)',
|
||
'apiSettings.autoCachePatterns': '自动缓存文件模式',
|
||
'apiSettings.enableGlobalCaching': '启用全局缓存',
|
||
'apiSettings.cacheUsed': '已使用',
|
||
'apiSettings.cacheEntries': '条目数',
|
||
'apiSettings.clearCache': '清除缓存',
|
||
'apiSettings.noProviders': '未配置提供商',
|
||
'apiSettings.noEndpoints': '未配置端点',
|
||
'apiSettings.enabled': '已启用',
|
||
'apiSettings.disabled': '已禁用',
|
||
'apiSettings.cacheEnabled': '缓存已启用',
|
||
'apiSettings.cacheDisabled': '缓存已禁用',
|
||
'apiSettings.providerSaved': '提供商保存成功',
|
||
'apiSettings.providerDeleted': '提供商删除成功',
|
||
'apiSettings.apiBaseUpdated': 'API 基础 URL 更新成功',
|
||
'apiSettings.endpointSaved': '端点保存成功',
|
||
'apiSettings.endpointDeleted': '端点删除成功',
|
||
'apiSettings.cacheCleared': '缓存清除成功',
|
||
'apiSettings.cacheSettingsUpdated': '缓存设置已更新',
|
||
'apiSettings.embeddingPool': '高可用嵌入',
|
||
'apiSettings.embeddingPoolDesc': '自动轮训相同模型的供应商',
|
||
'apiSettings.targetModel': '目标模型',
|
||
'apiSettings.discoveredProviders': '发现的供应商',
|
||
'apiSettings.autoDiscover': '自动发现供应商',
|
||
'apiSettings.excludeProvider': '排除',
|
||
'apiSettings.defaultCooldown': '冷却时间(秒)',
|
||
'apiSettings.defaultConcurrent': '每密钥并发数',
|
||
'apiSettings.poolEnabled': '启用嵌入池',
|
||
'apiSettings.noProvidersFound': '未找到提供此模型的供应商',
|
||
'apiSettings.poolSaved': '嵌入池配置已保存',
|
||
'apiSettings.strategy': '策略',
|
||
'apiSettings.providerKeys': '密钥',
|
||
'apiSettings.selectTargetModel': '选择目标模型',
|
||
'apiSettings.confirmDeleteProvider': '确定要删除此提供商吗?',
|
||
'apiSettings.confirmDeleteEndpoint': '确定要删除此端点吗?',
|
||
'apiSettings.confirmClearCache': '确定要清除缓存吗?',
|
||
'apiSettings.connectionSuccess': '连接成功',
|
||
'apiSettings.connectionFailed': '连接失败',
|
||
'apiSettings.saveProviderFirst': '请先保存提供商',
|
||
'apiSettings.addProviderFirst': '请先添加提供商',
|
||
'apiSettings.failedToLoad': '加载 API 设置失败',
|
||
'apiSettings.toggleVisibility': '切换可见性',
|
||
'apiSettings.noProvidersHint': '添加 API 提供商以开始使用',
|
||
'apiSettings.noEndpointsHint': '创建自定义端点以快速访问模型',
|
||
'apiSettings.cache': '缓存',
|
||
'apiSettings.off': '关闭',
|
||
'apiSettings.used': '已用',
|
||
'apiSettings.total': '总计',
|
||
'apiSettings.cacheUsage': '使用率',
|
||
'apiSettings.cacheSize': '大小',
|
||
'apiSettings.endpointsDescription': '管理自定义 API 端点以快速访问模型',
|
||
'apiSettings.totalEndpoints': '总端点数',
|
||
'apiSettings.cachedEndpoints': '缓存端点数',
|
||
'apiSettings.cacheTabHint': '在主面板中配置全局缓存设置并查看统计信息',
|
||
'apiSettings.cacheDescription': '管理响应缓存以提高性能并降低成本',
|
||
'apiSettings.cachedEntries': '缓存条目',
|
||
'apiSettings.storageUsed': '已用存储',
|
||
'apiSettings.cacheActions': '缓存操作',
|
||
'apiSettings.cacheStatistics': '缓存统计',
|
||
'apiSettings.globalCache': '全局缓存',
|
||
|
||
// Multi-key management
|
||
'apiSettings.apiKeys': 'API 密钥',
|
||
'apiSettings.addKey': '添加密钥',
|
||
'apiSettings.keyLabel': '标签',
|
||
'apiSettings.keyValue': 'API 密钥',
|
||
'apiSettings.keyWeight': '权重',
|
||
'apiSettings.removeKey': '移除',
|
||
'apiSettings.noKeys': '未配置 API 密钥',
|
||
'apiSettings.primaryKey': '主密钥',
|
||
|
||
// Routing strategy
|
||
'apiSettings.routingStrategy': '路由策略',
|
||
'apiSettings.simpleShuffleRouting': '简单随机',
|
||
'apiSettings.weightedRouting': '权重分配',
|
||
'apiSettings.latencyRouting': '延迟优先',
|
||
'apiSettings.costRouting': '成本优先',
|
||
'apiSettings.leastBusyRouting': '最少并发',
|
||
'apiSettings.routingHint': '如何在多个 API 密钥间分配请求',
|
||
|
||
// Health check
|
||
'apiSettings.healthCheck': '健康检查',
|
||
'apiSettings.enableHealthCheck': '启用健康检查',
|
||
'apiSettings.healthInterval': '检查间隔(秒)',
|
||
'apiSettings.healthCooldown': '冷却时间(秒)',
|
||
'apiSettings.failureThreshold': '失败阈值',
|
||
'apiSettings.healthStatus': '状态',
|
||
'apiSettings.healthy': '健康',
|
||
'apiSettings.unhealthy': '异常',
|
||
'apiSettings.unknown': '未知',
|
||
'apiSettings.lastCheck': '最后检查',
|
||
'apiSettings.testKey': '测试密钥',
|
||
'apiSettings.testingKey': '测试中...',
|
||
'apiSettings.keyValid': '密钥有效',
|
||
'apiSettings.keyInvalid': '密钥无效',
|
||
|
||
// Embedding models
|
||
'apiSettings.embeddingDimensions': '向量维度',
|
||
'apiSettings.embeddingMaxTokens': '最大 Token',
|
||
'apiSettings.rerankerTopK': 'Top K',
|
||
'apiSettings.selectEmbeddingModel': '选择嵌入模型',
|
||
|
||
// Model modal
|
||
'apiSettings.addLlmModel': '添加 LLM 模型',
|
||
'apiSettings.addEmbeddingModel': '添加嵌入模型',
|
||
'apiSettings.modelId': '模型 ID',
|
||
'apiSettings.modelName': '显示名称',
|
||
'apiSettings.modelSeries': '模型系列',
|
||
'apiSettings.selectFromPresets': '从预设选择',
|
||
'apiSettings.customModel': '自定义模型',
|
||
'apiSettings.capabilities': '能力',
|
||
'apiSettings.streaming': '流式输出',
|
||
'apiSettings.functionCalling': '函数调用',
|
||
'apiSettings.vision': '视觉能力',
|
||
'apiSettings.contextWindow': '上下文窗口',
|
||
'apiSettings.description': '描述',
|
||
'apiSettings.optional': '可选',
|
||
'apiSettings.modelIdExists': '模型 ID 已存在',
|
||
'apiSettings.useModelTreeToManage': '使用模型树管理各个模型',
|
||
|
||
// CLI Settings
|
||
'apiSettings.cliSettings': 'CLI 封装',
|
||
'apiSettings.addCliSettings': '添加 CLI 封装',
|
||
'apiSettings.editCliSettings': '编辑 CLI 封装',
|
||
'apiSettings.noCliSettings': '未配置 CLI 封装',
|
||
'apiSettings.noCliSettingsSelected': '未选择 CLI 封装',
|
||
'apiSettings.cliSettingsHint': '选择一个 CLI 封装端点或创建新的',
|
||
'apiSettings.showToken': '显示',
|
||
'apiSettings.hideToken': '隐藏',
|
||
'apiSettings.syncFromJson': '解析 JSON',
|
||
'apiSettings.cliProviderHint': '选择一个 Anthropic 供应商以使用其 API 密钥和基础 URL',
|
||
'apiSettings.noAnthropicProviders': '未配置 Anthropic 供应商。请先在供应商标签页中添加。',
|
||
'apiSettings.selectProviderFirst': '请先选择供应商',
|
||
'apiSettings.providerRequired': '供应商为必填项',
|
||
'apiSettings.modelRequired': '模型为必填项',
|
||
'apiSettings.providerNotFound': '未找到供应商',
|
||
'apiSettings.settingsSaved': '设置保存成功',
|
||
'apiSettings.settingsDeleted': '设置删除成功',
|
||
'apiSettings.confirmDeleteSettings': '确定要删除此 CLI 配置吗?',
|
||
'apiSettings.endpointName': '端点名称',
|
||
'apiSettings.envSettings': '环境变量设置',
|
||
'apiSettings.settingsFilePath': '配置文件路径',
|
||
'apiSettings.nameRequired': '名称为必填项',
|
||
'apiSettings.nameInvalidFormat': '名称必须以字母开头,只能包含字母、数字、连字符和下划线',
|
||
'apiSettings.nameTooLong': '名称长度不能超过32个字符',
|
||
'apiSettings.nameConflict': '名称与内置工具冲突',
|
||
'apiSettings.nameFormatHint': '仅限字母、数字、连字符、下划线。用于命令: ccw cli --tool [名称]',
|
||
'apiSettings.tokenRequired': 'API 令牌为必填项',
|
||
'apiSettings.status': '状态',
|
||
'apiSettings.providerBinding': '供应商绑定',
|
||
'apiSettings.directConfig': '直接配置',
|
||
'apiSettings.modelConfig': '模型配置',
|
||
'apiSettings.configJson': '配置 JSON',
|
||
'apiSettings.syncToJson': '同步到 JSON',
|
||
'apiSettings.jsonEditorHint': '直接编辑 JSON 添加高级配置',
|
||
'apiSettings.jsonValid': 'JSON 有效',
|
||
'apiSettings.jsonInvalid': 'JSON 无效',
|
||
|
||
// Model Pools (High Availability)
|
||
'apiSettings.modelPools': '高可用',
|
||
'apiSettings.addModelPool': '添加模型池',
|
||
'apiSettings.editModelPool': '编辑模型池',
|
||
'apiSettings.poolName': '池名称',
|
||
'apiSettings.modelType': '模型类型',
|
||
'apiSettings.embedding': '嵌入',
|
||
'apiSettings.llm': 'LLM',
|
||
'apiSettings.reranker': '重排',
|
||
'apiSettings.embeddingPools': '嵌入池',
|
||
'apiSettings.llmPools': 'LLM 池',
|
||
'apiSettings.rerankerPools': '重排池',
|
||
'apiSettings.cooldown': '冷却时间',
|
||
'apiSettings.maxConcurrent': '最大并发',
|
||
'apiSettings.enablePool': '启用池',
|
||
'apiSettings.autoDiscoverProviders': '自动发现供应商',
|
||
'apiSettings.excludedProviders': '排除的供应商',
|
||
'apiSettings.noPoolSelected': '未选择池',
|
||
'apiSettings.selectPoolFromList': '从列表中选择一个池以查看详情',
|
||
'apiSettings.noPoolsConfigured': '未配置模型池',
|
||
'apiSettings.poolCreated': '池创建成功',
|
||
'apiSettings.poolDeleted': '池删除成功',
|
||
'apiSettings.poolUpdated': '池更新成功',
|
||
'apiSettings.confirmDeletePool': '确定要删除此池吗?',
|
||
'apiSettings.legacyPool': '旧版',
|
||
'apiSettings.pool': '池',
|
||
|
||
// Common
|
||
'common.cancel': '取消',
|
||
'common.optional': '(可选)',
|
||
'common.create': '创建',
|
||
'common.save': '保存',
|
||
'common.delete': '删除',
|
||
'common.edit': '编辑',
|
||
'common.close': '关闭',
|
||
'common.refresh': '刷新',
|
||
'common.back': '返回',
|
||
'common.search': '搜索...',
|
||
'common.refreshed': '已刷新',
|
||
'common.refreshing': '刷新中...',
|
||
'common.loading': '加载中...',
|
||
'common.error': '错误',
|
||
'common.success': '成功',
|
||
'common.warning': '警告',
|
||
'common.info': '信息',
|
||
'common.remove': '移除',
|
||
'common.removeFromRecent': '从最近中移除',
|
||
'common.noDescription': '无描述',
|
||
'common.saving': '保存中...',
|
||
'common.saveSuccess': '保存成功',
|
||
'common.saveFailed': '保存失败',
|
||
'common.unknownError': '未知错误',
|
||
'common.exception': '异常',
|
||
'common.status': '状态',
|
||
|
||
// Core Memory
|
||
'title.coreMemory': '核心记忆',
|
||
'coreMemory.createNew': '创建记忆',
|
||
'coreMemory.showArchived': '显示已归档',
|
||
'coreMemory.showActive': '显示活动',
|
||
'coreMemory.totalMemories': '总记忆数',
|
||
'coreMemory.noMemories': '未找到记忆',
|
||
'coreMemory.noArchivedMemories': '没有已归档的记忆',
|
||
'coreMemory.content': '内容',
|
||
'coreMemory.contentPlaceholder': '输入战略性上下文、见解或重要信息...',
|
||
'coreMemory.contentRequired': '内容为必填项',
|
||
'coreMemory.summary': '摘要',
|
||
'coreMemory.summaryPlaceholder': '可选:此记忆的简要摘要...',
|
||
'coreMemory.metadata': '元数据',
|
||
'coreMemory.invalidMetadata': '无效的 JSON 元数据',
|
||
'coreMemory.rawOutput': '原始输出',
|
||
'coreMemory.created': '记忆创建成功',
|
||
'coreMemory.updated': '记忆更新成功',
|
||
'coreMemory.archived': '记忆已归档',
|
||
'coreMemory.unarchived': '记忆已取消归档',
|
||
'coreMemory.deleted': '记忆已删除',
|
||
'coreMemory.confirmArchive': '归档此记忆?',
|
||
'coreMemory.confirmDelete': '永久删除此记忆?',
|
||
'coreMemory.fetchError': '获取记忆失败',
|
||
'coreMemory.saveError': '保存记忆失败',
|
||
'coreMemory.archiveError': '归档记忆失败',
|
||
'coreMemory.unarchiveError': '取消归档失败',
|
||
'coreMemory.deleteError': '删除记忆失败',
|
||
'coreMemory.edit': '编辑记忆',
|
||
'coreMemory.unarchive': '取消归档',
|
||
'coreMemory.generateSummary': '生成摘要',
|
||
'coreMemory.generatingSummary': '正在生成摘要...',
|
||
'coreMemory.summaryGenerated': '摘要生成成功',
|
||
'coreMemory.summaryError': '生成摘要失败',
|
||
'coreMemory.knowledgeGraph': '知识图谱',
|
||
'coreMemory.graph': '图谱',
|
||
'coreMemory.entities': '实体',
|
||
'coreMemory.noEntities': '未找到实体',
|
||
'coreMemory.relationships': '关系',
|
||
'coreMemory.noRelationships': '未找到关系',
|
||
'coreMemory.graphError': '加载知识图谱失败',
|
||
'coreMemory.evolution': '演化',
|
||
'coreMemory.evolutionHistory': '演化历史',
|
||
'coreMemory.noHistory': '无演化历史',
|
||
'coreMemory.noReason': '未提供原因',
|
||
'coreMemory.current': '当前',
|
||
'coreMemory.evolutionError': '加载演化历史失败',
|
||
'coreMemory.created': '创建时间',
|
||
'coreMemory.updated': '更新时间',
|
||
|
||
// View toggle
|
||
'coreMemory.memories': '记忆',
|
||
'coreMemory.clusters': '聚类',
|
||
'coreMemory.clustersList': '聚类列表',
|
||
'coreMemory.selectCluster': '选择聚类查看详情',
|
||
'coreMemory.openSession': '打开 Session',
|
||
'coreMemory.clickToPreview': '点击预览',
|
||
'coreMemory.previewError': '加载预览失败',
|
||
'coreMemory.unknownSessionType': '未知的会话类型',
|
||
|
||
// Clustering features
|
||
'coreMemory.noClusters': '暂无聚类',
|
||
'coreMemory.autoCluster': '自动聚类',
|
||
'coreMemory.clusterLoadError': '加载聚类失败',
|
||
'coreMemory.clusterDetailError': '加载聚类详情失败',
|
||
'coreMemory.intent': '意图',
|
||
'coreMemory.sessionTimeline': 'Session 时间线',
|
||
'coreMemory.relatedClusters': '关联聚类',
|
||
'coreMemory.noSessions': '此聚类暂无 session',
|
||
'coreMemory.clusteringInProgress': '聚类进行中...',
|
||
'coreMemory.clusteringComplete': '创建了 {created} 个聚类,包含 {sessions} 个 session',
|
||
'coreMemory.clusteringError': '自动聚类失败',
|
||
'coreMemory.embeddingNotAvailable': '语义搜索未安装。安装后可提升聚类准确度。',
|
||
'coreMemory.installGuide': '前往设置',
|
||
'coreMemory.embeddingProgress': '嵌入进度: {pct}% (待处理: {pending})',
|
||
'coreMemory.generateEmbeddings': '生成',
|
||
'coreMemory.noChunksYet': '暂无记忆分块。运行 "ccw memory embed" 启用语义聚类。',
|
||
'coreMemory.embeddingInProgress': '正在生成嵌入...',
|
||
'coreMemory.embeddingComplete': '已为 {count} 个分块生成嵌入',
|
||
'coreMemory.embeddingError': '生成嵌入失败',
|
||
'coreMemory.enterClusterName': '请输入聚类名称:',
|
||
'coreMemory.clusterCreated': '聚类已创建',
|
||
'coreMemory.clusterCreateError': '创建聚类失败',
|
||
'coreMemory.confirmDeleteCluster': '确定删除此聚类?',
|
||
'coreMemory.clusterDeleted': '聚类已删除',
|
||
'coreMemory.clusterDeleteError': '删除聚类失败',
|
||
'coreMemory.clusterUpdated': '聚类已更新',
|
||
'coreMemory.clusterUpdateError': '更新聚类失败',
|
||
'coreMemory.memberRemoved': '成员已移除',
|
||
'coreMemory.memberRemoveError': '移除成员失败',
|
||
'coreMemory.favorites': '收藏',
|
||
'coreMemory.totalFavorites': '收藏总数',
|
||
'coreMemory.noFavorites': '暂无收藏',
|
||
'coreMemory.toggleFavorite': '切换收藏',
|
||
'coreMemory.addedToFavorites': '已添加到收藏',
|
||
'coreMemory.removedFromFavorites': '已从收藏移除',
|
||
'coreMemory.favoriteError': '更新收藏失败',
|
||
'coreMemory.relations': '关联',
|
||
'coreMemory.showRelations': '显示关联',
|
||
'coreMemory.relationsFor': '关联关系',
|
||
'coreMemory.noRelations': '未找到聚类关联',
|
||
'coreMemory.noRelationsHint': '在聚类 Tab 中使用自动聚类来创建关联',
|
||
'coreMemory.belongsToClusters': '所属聚类',
|
||
'coreMemory.relationsError': '加载关联失败',
|
||
|
||
// Issue Manager
|
||
'nav.issues': '议题',
|
||
'nav.issueManager': '管理器',
|
||
'nav.issueDiscovery': '发现',
|
||
'title.issueManager': '议题管理器',
|
||
'title.issueDiscovery': '议题发现',
|
||
|
||
// Loop Monitor
|
||
'title.loopMonitor': '循环监控',
|
||
'loop.title': '循环监控',
|
||
'loop.status.created': '已创建',
|
||
'loop.status.running': '运行中',
|
||
'loop.status.paused': '已暂停',
|
||
'loop.status.completed': '已完成',
|
||
'loop.status.failed': '失败',
|
||
'loop.tabs.timeline': '时间线',
|
||
'loop.tabs.logs': '日志',
|
||
'loop.tabs.variables': '变量',
|
||
'loop.buttons.pause': '暂停',
|
||
'loop.buttons.resume': '恢复',
|
||
'loop.buttons.stop': '停止',
|
||
'loop.buttons.retry': '重试',
|
||
'loop.buttons.newLoop': '新建循环',
|
||
'loop.empty': '没有活跃的循环',
|
||
'loop.metric.iteration': '迭代',
|
||
'loop.metric.step': '步骤',
|
||
'loop.metric.duration': '耗时',
|
||
'loop.task.id': '任务',
|
||
'loop.created': '创建时间',
|
||
'loop.updated': '更新时间',
|
||
'loop.progress': '进度',
|
||
'loop.cliSequence': 'CLI 序列',
|
||
'loop.stateVariables': '状态变量',
|
||
'loop.executionHistory': '执行历史',
|
||
'loop.failureReason': '失败原因',
|
||
'loop.noLoopsFound': '未找到循环',
|
||
'loop.selectLoop': '选择一个循环查看详情',
|
||
'loop.tasks': '任务',
|
||
'loop.createTaskTitle': '创建循环任务',
|
||
'loop.loopsCount': '个循环',
|
||
'loop.paused': '循环已暂停',
|
||
'loop.resumed': '循环已恢复',
|
||
'loop.stopped': '循环已停止',
|
||
'loop.startedSuccess': '循环已启动',
|
||
'loop.taskDescription': '描述',
|
||
'loop.maxIterations': '最大迭代数',
|
||
'loop.errorPolicy': '错误策略',
|
||
'loop.pauseOnError': '错误时暂停',
|
||
'loop.retryAutomatically': '自动重试',
|
||
'loop.failImmediate': '立即失败',
|
||
'loop.successCondition': '成功条件',
|
||
|
||
// Kanban Board
|
||
'loop.kanban.title': '任务看板',
|
||
'loop.kanban.byStatus': '按状态',
|
||
'loop.kanban.byPriority': '按优先级',
|
||
'loop.kanban.noBoardData': '没有要显示的任务',
|
||
'loop.listView': '列表视图',
|
||
'loop.addTask': '添加任务',
|
||
'loop.add': '添加',
|
||
'loop.save': '保存',
|
||
'loop.cancel': '取消',
|
||
'loop.loadToolsError': '加载可用工具失败,请重试。',
|
||
|
||
// Navigation & Grouping
|
||
'loop.nav.groupBy': '分组',
|
||
'loop.nav.allLoops': '所有循环',
|
||
'loop.nav.activeOnly': '仅活跃',
|
||
'loop.nav.recentlyActive': '最近活跃',
|
||
|
||
// Task Status Details
|
||
'loop.taskStatus.pending': '待处理',
|
||
'loop.taskStatus.inProgress': '进行中',
|
||
'loop.taskStatus.blocked': '已阻止',
|
||
'loop.taskStatus.done': '已完成',
|
||
|
||
// Status Management
|
||
'loop.updateStatus': '更新状态',
|
||
'loop.updatedAt': '更新于',
|
||
'loop.updateSuccess': '状态更新成功',
|
||
'loop.updateError': '更新状态失败',
|
||
'loop.priority': '优先级',
|
||
'loop.priority.low': '低',
|
||
'loop.priority.medium': '中',
|
||
'loop.priority.high': '高',
|
||
'loop.tags': '标签',
|
||
'loop.notes': '备注',
|
||
|
||
// Issue Discovery
|
||
'discovery.title': '议题发现',
|
||
'discovery.description': '从多个视角发现潜在问题',
|
||
'discovery.noSessions': '暂无发现会话',
|
||
'discovery.noDiscoveries': '暂无发现',
|
||
'discovery.runHint': '运行 /issue:discover 开始发现问题',
|
||
'discovery.runCommand': '运行 /issue:discover 开始发现问题',
|
||
'discovery.sessions': '会话',
|
||
'discovery.findings': '发现',
|
||
'discovery.phase': '阶段',
|
||
'discovery.perspectives': '视角',
|
||
'discovery.progress': '进度',
|
||
'discovery.total': '总计',
|
||
'discovery.exported': '已导出',
|
||
'discovery.dismissed': '已忽略',
|
||
'discovery.pending': '待处理',
|
||
'discovery.external': '外部研究',
|
||
'discovery.selectAll': '全选',
|
||
'discovery.deselectAll': '取消全选',
|
||
'discovery.exportSelected': '导出选中',
|
||
'discovery.dismissSelected': '忽略选中',
|
||
'discovery.exportAsIssue': '导出为议题',
|
||
'discovery.dismiss': '忽略',
|
||
'discovery.keep': '保留',
|
||
'discovery.priority.critical': '紧急',
|
||
'discovery.priority.high': '高',
|
||
'discovery.priority.medium': '中',
|
||
'discovery.priority.low': '低',
|
||
'discovery.perspective.bug': 'Bug',
|
||
'discovery.perspective.ux': '用户体验',
|
||
'discovery.perspective.test': '测试',
|
||
'discovery.perspective.quality': '代码质量',
|
||
'discovery.perspective.security': '安全',
|
||
'discovery.perspective.performance': '性能',
|
||
'discovery.perspective.maintainability': '可维护性',
|
||
'discovery.perspective.best-practices': '最佳实践',
|
||
'discovery.file': '文件',
|
||
'discovery.line': '行号',
|
||
'discovery.confidence': '置信度',
|
||
'discovery.suggestedIssue': '建议议题',
|
||
'discovery.externalRef': '外部参考',
|
||
'discovery.noFindings': '没有匹配的发现',
|
||
'discovery.filterPerspective': '按视角筛选',
|
||
'discovery.filterPriority': '按优先级筛选',
|
||
'discovery.filterAll': '全部',
|
||
'discovery.allPerspectives': '所有视角',
|
||
'discovery.allPriorities': '所有优先级',
|
||
'discovery.selectFinding': '选择一个发现以预览',
|
||
'discovery.location': '位置',
|
||
'discovery.code': '代码',
|
||
'discovery.impact': '影响',
|
||
'discovery.recommendation': '建议',
|
||
'discovery.exportAsIssues': '导出为议题',
|
||
'discovery.selectAll': '全选',
|
||
'discovery.deselectAll': '取消全选',
|
||
'discovery.deleteSession': '删除会话',
|
||
'discovery.confirmDelete': '确定要删除此发现会话吗?',
|
||
'discovery.deleted': '发现会话已删除',
|
||
'discovery.exportSuccess': '发现已导出为议题',
|
||
'discovery.dismissSuccess': '发现已忽略',
|
||
'discovery.backToList': '返回列表',
|
||
'discovery.viewDetails': '查看详情',
|
||
'discovery.inProgress': '进行中',
|
||
'discovery.completed': '已完成',
|
||
// issues.* keys (used by issue-manager.js)
|
||
'issues.title': '议题管理器',
|
||
'issues.description': '管理议题、解决方案和执行队列',
|
||
'issues.viewIssues': '议题',
|
||
'issues.viewQueue': '队列',
|
||
'issues.filterStatus': '状态',
|
||
'issues.filterAll': '全部',
|
||
'issues.noIssues': '暂无议题',
|
||
'issues.createHint': '点击"创建"添加您的第一个议题',
|
||
'issues.priority': '优先级',
|
||
'issues.tasks': '任务',
|
||
'issues.solutions': '解决方案',
|
||
'issues.boundSolution': '已绑定',
|
||
'issues.queueEmpty': '队列为空',
|
||
'issues.reorderHint': '在组内拖拽项目以重新排序',
|
||
'issues.parallelGroup': '并行',
|
||
'issues.sequentialGroup': '顺序',
|
||
'issues.dependsOn': '依赖于',
|
||
// Create & Search
|
||
'issues.create': '创建',
|
||
'issues.createTitle': '创建新议题',
|
||
'issues.issueId': '议题ID',
|
||
'issues.issueTitle': '标题',
|
||
'issues.issueContext': '上下文',
|
||
'issues.issuePriority': '优先级',
|
||
'issues.titlePlaceholder': '简要描述议题',
|
||
'issues.contextPlaceholder': '详细描述、需求等',
|
||
'issues.priorityLowest': '最低',
|
||
'issues.priorityLow': '低',
|
||
'issues.priorityMedium': '中',
|
||
'issues.priorityHigh': '高',
|
||
'issues.priorityCritical': '紧急',
|
||
'issues.searchPlaceholder': '搜索议题...',
|
||
'issues.showing': '显示',
|
||
'issues.of': '共',
|
||
'issues.issues': '条议题',
|
||
'issues.tryDifferentFilter': '尝试调整搜索或筛选条件',
|
||
'issues.createFirst': '创建第一个议题',
|
||
'issues.idRequired': '议题ID为必填',
|
||
'issues.titleRequired': '标题为必填',
|
||
'issues.created': '议题创建成功',
|
||
'issues.confirmDelete': '确定要删除此议题吗?',
|
||
'issues.deleted': '议题已删除',
|
||
'issues.idAutoGenerated': '自动生成',
|
||
'issues.regenerateId': '重新生成ID',
|
||
// Solution detail
|
||
'issues.solutionDetail': '解决方案详情',
|
||
'issues.bind': '绑定',
|
||
'issues.unbind': '解绑',
|
||
'issues.bound': '已绑定',
|
||
'issues.totalTasks': '任务总数',
|
||
'issues.bindStatus': '绑定状态',
|
||
'issues.createdAt': '创建时间',
|
||
'issues.taskList': '任务列表',
|
||
'issues.noTasks': '此解决方案无任务',
|
||
'issues.noSolutions': '暂无解决方案',
|
||
'issues.viewJson': '查看原始JSON',
|
||
'issues.scope': '作用域',
|
||
'issues.modificationPoints': '修改点',
|
||
'issues.implementationSteps': '实现步骤',
|
||
'issues.acceptanceCriteria': '验收标准',
|
||
'issues.dependencies': '依赖项',
|
||
'issues.solutionBound': '解决方案已绑定',
|
||
'issues.solutionUnbound': '解决方案已解绑',
|
||
// Queue operations
|
||
'issues.queueEmptyHint': '从绑定的解决方案生成执行队列',
|
||
'issues.createQueue': '创建队列',
|
||
'issues.regenerate': '重新生成',
|
||
'issues.regenerateQueue': '重新生成队列',
|
||
'issues.refreshQueue': '刷新',
|
||
'issues.executionGroups': '个执行组',
|
||
'issues.totalItems': '个任务',
|
||
'issues.queueRefreshed': '队列已刷新',
|
||
'issues.confirmCreateQueue': '这将通过 Claude Code CLI 执行 /issue:queue 命令,从绑定的解决方案生成执行队列。\n\n是否继续?',
|
||
'issues.creatingQueue': '正在创建执行队列...',
|
||
'issues.queueExecutionStarted': '队列生成已启动',
|
||
'issues.queueCreated': '队列创建成功',
|
||
'issues.queueCreationFailed': '队列创建失败',
|
||
'issues.queueCommandHint': '在终端中运行以下命令之一,从绑定的解决方案生成执行队列:',
|
||
'issues.queueCommandInfo': '运行命令后,点击"刷新"查看更新后的队列。',
|
||
'issues.alternative': '或者',
|
||
'issues.refreshAfter': '刷新队列',
|
||
'issues.activate': '激活',
|
||
'issues.deactivate': '取消激活',
|
||
'issues.queueActivated': '队列已激活',
|
||
'issues.queueDeactivated': '队列已取消激活',
|
||
'issues.deleteQueue': '删除队列',
|
||
'issues.confirmDeleteQueue': '确定要删除此队列吗?此操作无法撤销。',
|
||
'issues.queueDeleted': '队列删除成功',
|
||
'issues.actions': '操作',
|
||
'issues.archive': '归档',
|
||
'issues.delete': '删除',
|
||
'issues.confirmDeleteIssue': '确定要删除此议题吗?此操作无法撤销。',
|
||
'issues.confirmArchiveIssue': '归档此议题?它将被移动到历史记录中。',
|
||
'issues.issueDeleted': '议题删除成功',
|
||
'issues.issueArchived': '议题归档成功',
|
||
'issues.executionQueues': '执行队列',
|
||
'issues.queues': '个队列',
|
||
'issues.noQueues': '暂无队列',
|
||
'issues.queueEmptyHint': '从绑定的解决方案生成执行队列',
|
||
'issues.refresh': '刷新',
|
||
// issue.* keys (legacy)
|
||
'issue.viewIssues': '议题',
|
||
'issue.viewQueue': '队列',
|
||
'issue.filterAll': '全部',
|
||
'issue.filterStatus': '状态',
|
||
'issue.filterPriority': '优先级',
|
||
'issue.noIssues': '暂无议题',
|
||
'issue.noIssuesHint': '通过 /issue:plan 命令创建的议题将显示在此处',
|
||
'issue.noQueue': '队列中暂无任务',
|
||
'issue.noQueueHint': '运行 /issue:queue 从绑定的解决方案生成执行队列',
|
||
'issue.tasks': '任务',
|
||
'issue.solutions': '解决方案',
|
||
'issue.parallel': '并行',
|
||
'issue.sequential': '顺序',
|
||
'issue.status.registered': '已注册',
|
||
'issue.status.planned': '已规划',
|
||
'issue.status.queued': '已入队',
|
||
'issue.status.executing': '执行中',
|
||
'issue.status.completed': '已完成',
|
||
'issue.status.failed': '失败',
|
||
'issue.priority.critical': '紧急',
|
||
'issue.priority.high': '高',
|
||
'issue.priority.medium': '中',
|
||
'issue.priority.low': '低',
|
||
'issue.detail.context': '上下文',
|
||
'issue.detail.solutions': '解决方案',
|
||
'issue.detail.tasks': '任务',
|
||
'issue.detail.noSolutions': '暂无解决方案',
|
||
'issue.detail.noTasks': '暂无任务',
|
||
'issue.detail.bound': '已绑定',
|
||
'issue.detail.modificationPoints': '修改点',
|
||
'issue.detail.implementation': '实现步骤',
|
||
'issue.detail.acceptance': '验收标准',
|
||
'issue.queue.reordered': '队列已重排',
|
||
'issue.queue.reorderFailed': '队列重排失败',
|
||
'issue.saved': '议题已保存',
|
||
'issue.saveFailed': '保存议题失败',
|
||
'issue.taskUpdated': '任务已更新',
|
||
'issue.taskUpdateFailed': '更新任务失败',
|
||
'issue.conflicts': '冲突',
|
||
'issue.noConflicts': '未检测到冲突',
|
||
'issue.conflict.resolved': '已解决',
|
||
'issue.conflict.pending': '待处理',
|
||
|
||
// Common additions
|
||
'common.copyId': '复制 ID',
|
||
'common.copied': '已复制!',
|
||
'common.copyError': '复制失败',
|
||
|
||
// Loop Monitor - 循环监控
|
||
'loop.title': '循环监控',
|
||
'loop.loops': '循环',
|
||
'loop.all': '全部',
|
||
'loop.running': '运行中',
|
||
'loop.paused': '已暂停',
|
||
'loop.completed': '已完成',
|
||
'loop.failed': '失败',
|
||
'loop.tasks': '任务',
|
||
'loop.newLoop': '新建循环',
|
||
'loop.loading': '加载循环中...',
|
||
'loop.noLoops': '未找到循环',
|
||
'loop.noLoopsHint': '创建一个循环任务开始使用',
|
||
'loop.selectLoop': '选择一个循环查看详情',
|
||
'loop.selectLoopHint': '点击列表中的循环查看其详细信息',
|
||
'loop.loopNotFound': '循环未找到',
|
||
'loop.selectAnotherLoop': '从列表中选择另一个循环',
|
||
'loop.task': '任务',
|
||
'loop.steps': '个步骤',
|
||
'loop.taskInfo': '任务信息',
|
||
'loop.edit': '编辑',
|
||
'loop.taskId': '任务 ID',
|
||
'loop.step': '步骤',
|
||
'loop.updated': '更新时间',
|
||
'loop.created': '创建时间',
|
||
'loop.progress': '进度',
|
||
'loop.iteration': '迭代',
|
||
'loop.currentStep': '当前步骤',
|
||
'loop.cliSequence': 'CLI 序列',
|
||
'loop.stateVariables': '状态变量',
|
||
'loop.executionHistory': '执行历史',
|
||
'loop.failureReason': '失败原因',
|
||
'loop.pause': '暂停',
|
||
'loop.resume': '恢复',
|
||
'loop.stop': '停止',
|
||
'loop.confirmStop': '确定停止循环 {loopId}?\n\n迭代:{currentIteration}/{maxIterations}\n此操作无法撤销。',
|
||
'loop.loopPaused': '循环已暂停',
|
||
'loop.loopResumed': '循环已恢复',
|
||
'loop.loopStopped': '循环已停止',
|
||
'loop.failedToPause': '暂停失败',
|
||
'loop.failedToResume': '恢复失败',
|
||
'loop.failedToStop': '停止失败',
|
||
'loop.failedToLoad': '加载循环失败',
|
||
'loop.justNow': '刚刚',
|
||
'loop.minutesAgo': '{m} 分钟前',
|
||
'loop.hoursAgo': '{h} 小时前',
|
||
'loop.daysAgo': '{d} 天前',
|
||
'loop.tasksCount': '{count} 个启用循环的任务',
|
||
'loop.noLoopTasks': '未找到启用循环的任务',
|
||
'loop.createLoopTask': '创建循环任务',
|
||
'loop.backToLoops': '返回循环列表',
|
||
'loop.startLoop': '启动循环',
|
||
'loop.loopStarted': '循环已启动',
|
||
'loop.failedToStart': '启动循环失败',
|
||
'loop.createTaskFailed': '创建任务失败',
|
||
'loop.createLoopModal': '创建循环任务',
|
||
'loop.basicInfo': '基本信息',
|
||
'loop.importFromIssue': '从问题导入',
|
||
'loop.selectIssue': '选择问题',
|
||
'loop.noIssuesFound': '未找到问题',
|
||
'loop.fetchIssuesFailed': '获取问题列表失败',
|
||
'loop.fetchIssueFailed': '获取问题详情失败',
|
||
'loop.issueImported': '已导入问题',
|
||
'loop.taskTitle': '任务标题',
|
||
'loop.taskTitlePlaceholder': '例如:自动测试修复循环',
|
||
'loop.description': '描述',
|
||
'loop.descriptionPlaceholder': '描述此循环的功能...',
|
||
'loop.loopConfig': '循环配置',
|
||
'loop.maxIterations': '最大迭代次数',
|
||
'loop.errorPolicy': '错误策略',
|
||
'loop.pauseOnError': '暂停',
|
||
'loop.retryAutomatically': '自动重试',
|
||
'loop.failImmediately': '立即失败',
|
||
'loop.maxRetries': '最大重试次数(重试策略)',
|
||
'loop.successCondition': '成功条件(JavaScript 表达式)',
|
||
'loop.successConditionPlaceholder': '例如:state_variables.test_stdout.includes(\'passed\')',
|
||
'loop.availableVars': '可用变量:state_variables、current_iteration',
|
||
'loop.cliSequence': 'CLI 序列',
|
||
'loop.addStep': '添加步骤',
|
||
'loop.stepNumber': '步骤 {number}',
|
||
'loop.stepLabel': '步骤',
|
||
'loop.removeStep': '移除步骤',
|
||
'loop.stepId': '步骤 ID',
|
||
'loop.stepIdPlaceholder': '例如:run_tests',
|
||
'loop.tool': '工具',
|
||
'loop.mode': '模式',
|
||
'loop.command': '命令',
|
||
'loop.commandPlaceholder': '例如:npm test',
|
||
'loop.promptTemplate': '提示模板(支持 [variable_name] 变量替换)',
|
||
'loop.promptPlaceholder': '输入提示模板...',
|
||
'loop.onError': '错误处理',
|
||
'loop.continue': '继续',
|
||
'loop.pause': '暂停',
|
||
'loop.failFast': '立即失败',
|
||
'loop.cancel': '取消',
|
||
'loop.createAndStart': '创建循环',
|
||
'loop.created': '已创建',
|
||
'loop.createFailed': '创建循环失败',
|
||
'loop.taskCreatedFailedStart': '任务已创建,但启动循环失败',
|
||
// V2 Simplified Loop
|
||
'loop.create': '创建',
|
||
'loop.loopCreated': '循环创建成功',
|
||
'loop.titleRequired': '标题不能为空',
|
||
'loop.invalidMaxIterations': '最大迭代次数必须在 1 到 100 之间',
|
||
'loop.loopInfo': '循环信息',
|
||
'loop.v2LoopInfo': '这是一个简化版循环。任务在详情视图中独立管理。',
|
||
'loop.manageTasks': '管理任务',
|
||
'loop.taskManagement': '任务管理',
|
||
'loop.taskManagementPlaceholder': '任务管理将在后续更新中提供。请使用 v1 循环进行完整任务配置。',
|
||
'loop.noTasksYet': '尚未配置任务',
|
||
'loop.back': '返回',
|
||
'loop.loopNotFound': '循环未找到',
|
||
'loop.selectAnotherLoop': '请从列表中选择其他循环',
|
||
'loop.start': '启动',
|
||
'loop.loopStarted': '循环已启动',
|
||
'loop.failedToStart': '启动循环失败',
|
||
// Task List Management
|
||
'loop.taskList': '任务列表',
|
||
'loop.addTask': '添加任务',
|
||
'loop.taskDescription': '任务描述',
|
||
'loop.taskDescriptionPlaceholder': '描述此任务应该做什么...',
|
||
'loop.modeAnalysis': '分析',
|
||
'loop.modeWrite': '编写',
|
||
'loop.modeReview': '审查',
|
||
'loop.save': '保存',
|
||
'loop.taskAdded': '任务添加成功',
|
||
'loop.addTaskFailed': '添加任务失败',
|
||
'loop.editTask': '编辑任务',
|
||
'loop.taskUpdated': '任务更新成功',
|
||
'loop.updateTaskFailed': '更新任务失败',
|
||
'loop.confirmDeleteTask': '确定要删除此任务吗?此操作无法撤销。',
|
||
'loop.taskDeleted': '任务删除成功',
|
||
'loop.deleteTaskFailed': '删除任务失败',
|
||
'loop.deleteTaskError': '删除任务时出错',
|
||
'loop.loadTasksFailed': '加载任务失败',
|
||
'loop.loadTasksError': '加载任务时出错',
|
||
'loop.tasksReordered': '任务已重新排序',
|
||
'loop.saveOrderFailed': '保存排序失败',
|
||
'loop.noTasksHint': '添加您的第一个任务开始使用',
|
||
'loop.noDescription': '无描述',
|
||
'loop.descriptionRequired': '描述不能为空',
|
||
'loop.loadTaskFailed': '加载任务失败',
|
||
'loop.loadTaskError': '加载任务时出错',
|
||
'loop.taskTitleHint': '为循环输入描述性标题',
|
||
'loop.descriptionHint': '关于循环功能的可选上下文',
|
||
'loop.maxIterationsHint': '最大迭代次数 (1-100)',
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Initialize i18n - detect browser language or use stored preference
|
||
*/
|
||
function initI18n() {
|
||
// Check stored preference
|
||
const stored = localStorage.getItem('ccw-lang');
|
||
if (stored && i18n[stored]) {
|
||
currentLang = stored;
|
||
} else {
|
||
// Detect browser language
|
||
const browserLang = navigator.language || navigator.userLanguage;
|
||
if (browserLang.startsWith('zh')) {
|
||
currentLang = 'zh';
|
||
} else {
|
||
currentLang = 'en';
|
||
}
|
||
}
|
||
|
||
// Apply translations to DOM
|
||
applyTranslations();
|
||
updateLangToggle();
|
||
}
|
||
|
||
/**
|
||
* Get translation for a key with optional replacements
|
||
* @param {string} key - Translation key
|
||
* @param {Object} replacements - Optional key-value pairs for replacements
|
||
* @returns {string} Translated string
|
||
*/
|
||
function t(key, replacements = {}) {
|
||
const dict = i18n[currentLang] || i18n.en;
|
||
let text = dict[key] || i18n.en[key] || key;
|
||
|
||
// Apply replacements
|
||
for (const [k, v] of Object.entries(replacements)) {
|
||
text = text.replace(new RegExp(`\\{${k}\\}`, 'g'), v);
|
||
}
|
||
|
||
return text;
|
||
}
|
||
|
||
/**
|
||
* Switch language
|
||
* @param {string} lang - Language code ('en' or 'zh')
|
||
*/
|
||
function switchLang(lang) {
|
||
if (i18n[lang]) {
|
||
currentLang = lang;
|
||
localStorage.setItem('ccw-lang', lang);
|
||
applyTranslations();
|
||
updateLangToggle();
|
||
|
||
// Re-render current view to update dynamic content
|
||
if (typeof updateContentTitle === 'function') {
|
||
updateContentTitle();
|
||
}
|
||
|
||
// Re-render loop monitor if visible
|
||
if (typeof window.selectedLoopId !== 'undefined' && document.getElementById('loopList')) {
|
||
if (typeof updateLoopStatusLabels === 'function') {
|
||
updateLoopStatusLabels();
|
||
}
|
||
if (typeof renderLoopList === 'function') {
|
||
renderLoopList();
|
||
}
|
||
if (window.selectedLoopId && typeof renderLoopDetail === 'function') {
|
||
renderLoopDetail(window.selectedLoopId);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Apply translations to all elements with data-i18n attribute
|
||
*/
|
||
function applyTranslations() {
|
||
document.querySelectorAll('[data-i18n]').forEach(el => {
|
||
const key = el.dataset.i18n;
|
||
const translated = t(key);
|
||
|
||
// Handle different element types
|
||
if (el.tagName === 'INPUT' && el.type === 'text') {
|
||
el.placeholder = translated;
|
||
} else if (el.hasAttribute('title')) {
|
||
el.title = translated;
|
||
} else {
|
||
el.textContent = translated;
|
||
}
|
||
});
|
||
|
||
// Update elements with data-i18n-title
|
||
document.querySelectorAll('[data-i18n-title]').forEach(el => {
|
||
el.title = t(el.dataset.i18nTitle);
|
||
});
|
||
|
||
// Update elements with data-i18n-placeholder
|
||
document.querySelectorAll('[data-i18n-placeholder]').forEach(el => {
|
||
el.placeholder = t(el.dataset.i18nPlaceholder);
|
||
});
|
||
|
||
// Update document title
|
||
document.title = t('app.title');
|
||
}
|
||
|
||
/**
|
||
* Update language toggle button state
|
||
*/
|
||
function updateLangToggle() {
|
||
const langBtn = document.getElementById('langToggle');
|
||
if (langBtn) {
|
||
langBtn.textContent = currentLang.toUpperCase();
|
||
langBtn.title = t('header.language');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Get current language
|
||
* @returns {string} Current language code
|
||
*/
|
||
function getLang() {
|
||
return currentLang;
|
||
}
|
||
|
||
/**
|
||
* Check if current language is Chinese
|
||
* @returns {boolean}
|
||
*/
|
||
function isZh() {
|
||
return currentLang === 'zh';
|
||
}
|