Files
Claude-Code-Workflow/ccw/src/templates/dashboard-js/i18n.js
catlog22 3998d24e32 Enhance skill generator documentation and templates
- 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.
2026-01-28 20:34:03 +08:00

5559 lines
254 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================
// 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 GPUNVIDIA/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 组织 IDorg-...',
'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';
}