// ============================================ // 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', // 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)', // 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', // Rules 'nav.rules': '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 --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', // 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': '监控器', // 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)', // CodexLens 配置 'codexlens.config': 'CodexLens 配置', 'codexlens.configDesc': '管理代码索引、语义搜索和嵌入模型', 'codexlens.status': '状态', 'codexlens.installed': '已安装', 'codexlens.notInstalled': '未安装', 'codexlens.installFirst': '安装 CodexLens 以访问语义搜索和模型管理功能', 'codexlens.indexes': '索引', 'codexlens.currentWorkspace': '当前工作区', 'codexlens.indexStoragePath': '索引存储路径', 'codexlens.whereIndexesStored': '索引存储位置', 'codexlens.currentPath': '当前路径', 'codexlens.newStoragePath': '新存储路径', 'codexlens.pathPlaceholder': '例如:/path/to/indexes 或 ~/.codexlens/indexes', 'codexlens.pathInfo': '支持 ~ 表示用户目录。更改立即生效。', 'codexlens.pathUnchanged': '路径未变更', 'codexlens.pathEmpty': '路径不能为空', 'codexlens.migrationRequired': '需要迁移', 'codexlens.migrationWarning': '更改路径后,需要为每个工作区重新初始化索引。', 'codexlens.actions': '操作', 'codexlens.initializeIndex': '初始化索引', 'codexlens.cleanCurrentWorkspace': '清理当前工作空间', 'codexlens.cleanAllIndexes': '清理所有索引', 'codexlens.installCodexLens': '安装 CodexLens', 'codexlens.createIndex': '创建索引', 'codexlens.indexManagement': '管理', 'codexlens.incrementalUpdate': '增量更新', 'codexlens.environmentVariables': '环境变量', 'codexlens.envGroup.embedding': '嵌入配置', 'codexlens.envGroup.reranker': '重排序配置', 'codexlens.envGroup.concurrency': '并发设置', 'codexlens.envGroup.cascade': '级联搜索设置', 'codexlens.envGroup.chunking': '分块选项', 'codexlens.envGroup.llm': 'LLM 功能', // 环境变量字段标签 'codexlens.envField.backend': '后端', 'codexlens.envField.model': '模型', 'codexlens.envField.useGpu': '使用 GPU', 'codexlens.envField.highAvailability': '高可用', 'codexlens.envField.loadBalanceStrategy': '负载均衡策略', 'codexlens.envField.rateLimitCooldown': '限流冷却 (秒)', 'codexlens.envField.enabled': '启用', 'codexlens.envField.topKResults': 'Top K 结果数', 'codexlens.envField.maxWorkers': '最大工作线程数', 'codexlens.envField.batchSize': '批处理大小 (固定)', 'codexlens.envField.dynamicBatchSize': '动态批处理大小', 'codexlens.envField.batchSizeUtilization': '容量利用率', 'codexlens.envField.batchSizeMax': '最大批处理大小', 'codexlens.envField.charsPerToken': '字符/Token比', 'codexlens.envField.searchStrategy': '搜索策略', 'codexlens.envField.coarseK': '粗筛 K (第一阶段)', 'codexlens.envField.fineK': '精筛 K (最终)', 'codexlens.envField.stripComments': '去除注释', 'codexlens.envField.stripDocstrings': '去除文档字符串', 'codexlens.envField.testFilePenalty': '测试文件惩罚', 'codexlens.envField.docstringWeight': '文档字符串权重', 'codexlens.usingApiReranker': '使用 API 重排序', 'codexlens.currentModel': '当前模型', 'codexlens.localModels': '本地模型', 'codexlens.active': '已激活', 'codexlens.useLocal': '切换本地', 'codexlens.select': '选择', 'codexlens.switchedToLocal': '已切换到本地', 'codexlens.configuredInApiSettings': '已在 API 设置中配置', 'codexlens.commonModels': '常用模型', 'codexlens.selectApiModel': '选择 API 模型...', 'codexlens.selectLocalModel': '选择本地模型...', 'codexlens.noConfiguredModels': '未在 API 设置中配置模型', 'codexlens.autoDownloadHint': '模型会在首次使用时自动下载', 'codexlens.embeddingBackend': '嵌入后端', 'codexlens.localFastembed': '本地 (FastEmbed)', 'codexlens.apiLitellm': 'API (LiteLLM)', 'codexlens.backendHint': '选择本地模型或远程 API 端点', 'codexlens.noApiModels': '未配置 API 嵌入模型', 'codexlens.embeddingModel': '嵌入模型', 'codexlens.modelHint': '选择向量搜索的嵌入模型(带 ✓ 的已安装)', 'codexlens.concurrency': 'API 并发数', 'codexlens.concurrencyHint': '并行 API 调用数量。较高的值可加速索引但可能触发速率限制。', 'codexlens.concurrencyCustom': '自定义', 'codexlens.rotation': '多供应商轮训', 'codexlens.rotationDesc': '聚合多个 API 供应商和密钥进行并行嵌入生成', 'codexlens.rotationEnabled': '启用轮训', 'codexlens.rotationStrategy': '轮训策略', 'codexlens.strategyRoundRobin': '轮询', 'codexlens.strategyLatencyAware': '延迟感知', 'codexlens.strategyWeightedRandom': '加权随机', 'codexlens.targetModel': '目标模型', 'codexlens.targetModelHint': '所有供应商应支持的模型名称(例如 qwen3-embedding)', 'codexlens.cooldownSeconds': '冷却时间(秒)', 'codexlens.cooldownHint': '速率限制后的默认冷却时间(推荐 60 秒)', 'codexlens.rotationProviders': '轮训供应商', 'codexlens.addProvider': '添加供应商', 'codexlens.noRotationProviders': '未配置轮训供应商', 'codexlens.providerWeight': '权重', 'codexlens.maxConcurrentPerKey': '每密钥最大并发', 'codexlens.useAllKeys': '使用所有密钥', 'codexlens.selectKeys': '选择密钥', 'codexlens.configureRotation': '配置轮训', 'codexlens.configureInApiSettings': '在 API 设置中配置', 'codexlens.rotationSaved': '轮训配置保存成功', 'codexlens.endpointsSynced': '个端点已同步到 CodexLens', 'codexlens.syncFailed': '同步失败', 'codexlens.rotationDeleted': '轮训配置已删除', 'codexlens.totalEndpoints': '总端点数', 'codexlens.fullIndex': '全部', 'codexlens.vectorIndex': '向量', 'codexlens.ftsIndex': 'FTS', 'codexlens.fullIndexDesc': 'FTS + 语义搜索(推荐)', 'codexlens.vectorIndexDesc': '仅语义嵌入搜索', 'codexlens.ftsIndexDesc': '仅快速全文搜索', 'codexlens.indexTypeHint': '完整索引包含 FTS + 语义搜索。仅 FTS 更快但无 AI 搜索功能。', 'codexlens.maintenance': '维护', 'codexlens.testSearch': '测试搜索', 'codexlens.testFunctionality': '测试 CodexLens 功能', 'codexlens.textSearch': '文本搜索', 'codexlens.fileSearch': '文件搜索', 'codexlens.symbolSearch': '符号搜索', 'codexlens.exactMode': '精确模式', 'codexlens.fuzzyMode': '模糊模式 (Trigram)', 'codexlens.hybridMode': '混合模式 (RRF)', 'codexlens.vectorMode': '向量模式 (语义搜索)', 'codexlens.searchPlaceholder': '输入搜索查询(例如:函数名、文件路径、代码片段)', 'codexlens.runSearch': '运行搜索', 'codexlens.results': '结果', 'codexlens.resultsCount': '个结果', 'codexlens.resultLimit': '数量限制', 'codexlens.contentLength': '内容长度', 'codexlens.extraFiles': '额外文件', 'codexlens.saveConfig': '保存配置', 'codexlens.searching': '搜索中...', 'codexlens.searchCompleted': '搜索完成', 'codexlens.searchFailed': '搜索失败', 'codexlens.enterQuery': '请输入搜索查询', 'codexlens.configSaved': '配置保存成功', 'codexlens.pathEmpty': '索引目录路径不能为空', 'codexlens.cleanConfirm': '确定要清理所有 CodexLens 索引吗?此操作无法撤销。', 'codexlens.cleanCurrentWorkspaceConfirm': '确定要清理当前工作空间的索引吗?此操作无法撤销。', 'codexlens.cleaning': '清理索引中...', 'codexlens.cleanSuccess': '所有索引已成功清理', 'codexlens.cleanCurrentWorkspaceSuccess': '当前工作空间索引已成功清理', 'codexlens.cleanFailed': '清理索引失败', 'codexlens.loadingConfig': '加载配置中...', // 工作空间索引状态 'codexlens.workspaceStatus': '工作空间索引状态', 'codexlens.noIndexFound': '当前工作空间未找到索引', 'codexlens.filesIndexed': '个文件已索引', 'codexlens.filesWithEmbeddings': '个文件已嵌入', 'codexlens.vectorSearchEnabled': '向量搜索已启用', 'codexlens.vectorSearchPartial': '向量搜索需要≥50%覆盖率', // 模型管理 'codexlens.semanticDeps': '语义搜索依赖', 'codexlens.checkingDeps': '检查依赖中...', 'codexlens.semanticInstalled': '语义搜索依赖已安装', 'codexlens.semanticNotInstalled': '语义搜索依赖未安装', 'codexlens.installDeps': '安装依赖', 'codexlens.installDepsPrompt': '是否立即安装?(可能需要几分钟)\n\n点击"取消"将只创建 FTS 索引。', 'codexlens.installingDeps': '安装依赖中...', 'codexlens.installingMode': '正在安装', 'codexlens.depsInstalled': '依赖安装成功', 'codexlens.depsInstallFailed': '依赖安装失败', // SPLADE 依赖 'codexlens.spladeDeps': 'SPLADE 稀疏检索', 'codexlens.spladeInstalled': 'SPLADE 已安装', 'codexlens.spladeNotInstalled': 'SPLADE 未安装', 'codexlens.spladeInstallHint': '安装后可改进代码搜索的同义词匹配', 'codexlens.installingSpladePackage': '正在安装 SPLADE 包', 'codexlens.spladeInstallSuccess': 'SPLADE 安装成功', 'codexlens.spladeInstallFailed': 'SPLADE 安装失败', 'codexlens.spladeModel': '模型', 'codexlens.spladeIndexStatus': 'SPLADE 索引', 'codexlens.spladeIndexExists': '索引可用', 'codexlens.spladeIndexMissing': '无 SPLADE 索引', 'codexlens.spladeRebuild': '重建 SPLADE 索引', 'codexlens.spladeRebuilding': '正在重建 SPLADE 索引...', 'codexlens.spladeRebuildSuccess': 'SPLADE 索引重建完成', 'codexlens.spladeRebuildFailed': 'SPLADE 索引重建失败', 'codexlens.spladeChunks': '分块数', 'codexlens.spladePostings': '词条数', // GPU 模式选择 'codexlens.selectGpuMode': '选择加速模式', 'codexlens.cpuModeDesc': '标准 CPU 处理', 'codexlens.directmlModeDesc': 'Windows GPU(NVIDIA/AMD/Intel)', 'codexlens.cudaModeDesc': 'NVIDIA GPU(需要 CUDA Toolkit)', 'common.recommended': '推荐', 'common.unavailable': '不可用', 'common.auto': '自动', // GPU 设备选择 'codexlens.selectGpuDevice': '选择 GPU 设备', 'codexlens.discrete': '独立显卡', 'codexlens.integrated': '集成显卡', 'codexlens.selectingGpu': '选择 GPU 中...', 'codexlens.gpuSelected': 'GPU 已选择', 'codexlens.resettingGpu': '重置 GPU 选择中...', 'codexlens.gpuReset': 'GPU 选择已重置为自动', 'codexlens.resetToAuto': '重置为自动', 'codexlens.modelManagement': '模型管理', 'codexlens.loadingModels': '加载模型中...', 'codexlens.downloadModel': '下载', 'codexlens.deleteModel': '删除', 'codexlens.downloading': '下载中...', 'codexlens.deleting': '删除中...', 'codexlens.modelDownloaded': '模型已下载', 'codexlens.modelDownloadFailed': '模型下载失败', 'codexlens.modelDeleted': '模型已删除', 'codexlens.modelDeleteFailed': '模型删除失败', 'codexlens.deleteModelConfirm': '确定要删除模型', 'codexlens.modelListError': '加载模型列表失败', 'codexlens.noModelsAvailable': '没有可用模型', // FastEmbed 安装 'codexlens.fastembedNotInstalled': 'FastEmbed 未安装', 'codexlens.fastembedDesc': 'FastEmbed 提供本地嵌入模型用于语义搜索', 'codexlens.selectMode': '选择模式', 'codexlens.cpuModeShort': '标准', 'codexlens.directmlModeShort': 'Windows GPU', 'codexlens.cudaModeShort': 'NVIDIA GPU', 'codexlens.installFastembed': '安装 FastEmbed', 'codexlens.installingFastembed': '正在安装 FastEmbed...', 'codexlens.installMayTakeTime': '这可能需要几分钟...', 'codexlens.fastembedInstalled': 'FastEmbed 已安装', 'codexlens.fastembedInstallFailed': 'FastEmbed 安装失败', 'codexlens.installFastembedFirst': '请先在上方安装 FastEmbed 以管理本地嵌入模型', 'codexlens.detectedGpus': '检测到的 GPU', 'codexlens.reinstallOptions': '重新安装选项', 'codexlens.reinstallDesc': '使用不同的 GPU 模式重新安装:', 'codexlens.confirmReinstall': '这将重新安装 FastEmbed。是否继续?', 'codexlens.fastembedReinstalled': 'FastEmbed 已重新安装', 'codexlens.reinstallingFastembed': '正在重新安装 FastEmbed...', 'codexlens.activeAccelerator': '当前加速器', 'codexlens.active': '使用中', 'codexlens.downloadedModels': '已下载模型', 'codexlens.noLocalModels': '暂无已下载模型', 'codexlens.configuredModels': '已配置的 API 模型', 'codexlens.commonModels': '常用模型', // 模型下载进度 'codexlens.downloadingModel': '正在下载', 'codexlens.connectingToHuggingFace': '正在连接 Hugging Face...', 'codexlens.downloadTimeEstimate': '预计时间', 'codexlens.manualDownloadHint': '手动下载', 'codexlens.downloadingModelFiles': '正在下载模型文件...', 'codexlens.downloadingWeights': '正在下载模型权重...', 'codexlens.downloadingTokenizer': '正在下载分词器...', 'codexlens.verifyingModel': '正在验证模型...', 'codexlens.finalizingDownload': '正在完成...', 'codexlens.downloadComplete': '下载完成!', 'codexlens.downloadFailed': '下载失败', 'codexlens.manualDownloadOptions': '手动下载选项', 'codexlens.cliDownload': '命令行', 'codexlens.huggingfaceDownload': 'Hugging Face', 'codexlens.downloadCanceled': '下载已取消', // 手动下载指南 'codexlens.manualDownloadGuide': '手动下载指南', 'codexlens.cliMethod': '命令行(推荐)', 'codexlens.cliMethodDesc': '在终端运行,显示下载进度:', 'codexlens.pythonMethod': 'Python 脚本', 'codexlens.pythonMethodDesc': '使用 Python 预下载模型:', 'codexlens.hfHubMethod': 'Hugging Face Hub CLI', 'codexlens.hfHubMethodDesc': '使用 huggingface-cli 下载,支持断点续传:', 'codexlens.modelLinks': '模型直链', 'codexlens.cacheLocation': '模型存储位置', 'common.copied': '已复制到剪贴板', // CodexLens 索引进度 'codexlens.indexing': '索引中', 'codexlens.indexingDesc': '正在为工作区构建代码索引', 'codexlens.preparingIndex': '准备索引...', 'codexlens.filesProcessed': '已处理文件', 'codexlens.indexComplete': '索引完成', 'codexlens.indexSuccess': '索引创建成功', 'codexlens.indexFailed': '索引失败', 'codexlens.embeddingsFailed': '嵌入生成失败', 'codexlens.ftsSuccessEmbeddingsFailed': 'FTS 索引已创建,但嵌入生成失败', // CodexLens 安装 'codexlens.installDesc': '基于 Python 的代码索引引擎', 'codexlens.whatWillBeInstalled': '将安装的内容:', 'codexlens.pythonVenv': 'Python 虚拟环境', 'codexlens.pythonVenvDesc': '隔离的 Python 环境', 'codexlens.codexlensPackage': 'CodexLens 包', 'codexlens.codexlensPackageDesc': '代码索引和搜索引擎', 'codexlens.sqliteFtsDesc': '全文搜索数据库', 'codexlens.installLocation': '安装位置', 'codexlens.installTime': '首次安装可能需要 2-3 分钟下载和配置 Python 包。', 'codexlens.startingInstall': '正在启动安装...', 'codexlens.installing': '安装中...', 'codexlens.creatingVenv': '正在创建虚拟环境...', 'codexlens.installingPip': '正在安装 pip 包...', 'codexlens.installingPackage': '正在安装 CodexLens 包...', 'codexlens.settingUpDeps': '正在配置 Python 依赖...', 'codexlens.installComplete': '安装完成!', 'codexlens.installSuccess': 'CodexLens 安装成功!', 'codexlens.installNow': '立即安装', 'codexlens.accelerator': '加速器', // CodexLens 卸载 'codexlens.uninstall': '卸载', 'codexlens.uninstallDesc': '移除 CodexLens 及所有数据', 'codexlens.whatWillBeRemoved': '将被移除的内容:', 'codexlens.removeVenv': '虚拟环境 ~/.codexlens/venv', 'codexlens.removeData': '所有 CodexLens 索引数据和数据库', 'codexlens.removeConfig': '配置文件和语义搜索模型', 'codexlens.removing': '正在删除文件...', 'codexlens.uninstalling': '正在卸载...', 'codexlens.removingVenv': '正在删除虚拟环境...', 'codexlens.removingData': '正在删除索引数据...', 'codexlens.removingConfig': '正在清理配置文件...', 'codexlens.finalizing': '正在完成卸载...', 'codexlens.uninstallComplete': '卸载完成!', 'codexlens.uninstallSuccess': 'CodexLens 卸载成功!', // 忽略规则 'codexlens.ignorePatterns': '忽略规则', 'codexlens.ignorePatternsDesc': '配置索引时要排除的目录和文件。更改仅对新索引生效。', 'codexlens.directoryPatterns': '目录规则', 'codexlens.extensionFilters': '文件过滤', 'codexlens.directoryPatternsHint': '每行一个规则(如 node_modules, .git)', 'codexlens.extensionFiltersHint': '跳过 embedding 的文件(如 *.min.js)', 'codexlens.ignorePatternsSaved': '忽略规则已保存', 'codexlens.ignorePatternReset': '已重置为默认值(点击保存应用)', 'common.patterns': '条规则', 'common.resetToDefaults': '重置为默认', // 索引管理器 'index.manager': '索引管理器', 'index.projects': '项目数', 'index.totalSize': '总大小', 'index.vectorIndexes': '向量', 'index.ftsIndexes': 'FTS', 'index.projectId': '项目 ID', 'index.size': '大小', 'index.type': '类型', 'index.lastModified': '修改时间', 'index.vector': '向量', 'index.fts': 'FTS', 'index.noIndexes': '暂无索引', 'index.notConfigured': '未配置', 'index.initCurrent': '索引当前项目', 'index.cleanAll': '清理全部', 'index.cleanProject': '清理索引', 'index.cleanProjectConfirm': '清理索引:', 'index.cleaning': '清理索引中...', 'index.cleanSuccess': '索引清理成功', 'index.cleanFailed': '清理失败', 'index.cleanAllConfirm': '确定要清理所有索引吗?此操作无法撤销。', 'index.cleanAllSuccess': '所有索引已清理', 'index.vectorIndex': '向量索引', 'index.normalIndex': 'FTS索引', 'index.fullIndex': '全部索引', 'index.vectorDesc': '语义搜索(含嵌入向量)', 'index.normalDesc': '快速全文搜索', 'index.fullDesc': 'FTS + 语义搜索(推荐)', 'index.selectModel': '选择嵌入模型', 'index.modelCode': '代码优化 (768维)', 'index.modelBase': '通用基础 (768维)', 'index.modelFast': '快速轻量 (384维)', 'index.modelMinilm': 'MiniLM (384维)', 'index.modelMultilingual': '多语言 (1024维) ⚠️', 'index.modelBalanced': '高精度 (1024维) ⚠️', 'index.dimensionWarning': '1024维模型需要更多资源', // Semantic Search 配置 'semantic.settings': '语义搜索设置', 'semantic.testSearch': '测试语义搜索', 'semantic.searchPlaceholder': '输入语义查询(例如:身份验证逻辑、错误处理)', 'semantic.runSearch': '运行语义搜索', 'semantic.close': '关闭', 'cli.settings': '设置', // 语言设置 'lang.settings': '回复语言', 'lang.settingsDesc': '配置 Claude 回复语言偏好', 'lang.chinese': '中文回复', 'lang.chineseDesc': '在全局 CLAUDE.md 中启用中文回复准则', 'lang.chineseDescClaude': '在 ~/.claude/CLAUDE.md 中启用', 'lang.chineseDescCodex': '在 ~/.codex/AGENTS.md 中启用', 'lang.enabled': '已启用', 'lang.disabled': '已禁用', 'lang.enableSuccess': '中文回复已启用', 'lang.disableSuccess': '中文回复已禁用', 'lang.enableFailed': '启用中文回复失败', 'lang.disableFailed': '禁用中文回复失败', 'lang.windows': 'Windows 平台规范', 'lang.windowsDesc': '在全局 CLAUDE.md 中启用 Windows 路径格式规范', 'lang.windowsEnableSuccess': 'Windows 平台规范已启用', 'lang.windowsDisableSuccess': 'Windows 平台规范已禁用', 'lang.windowsEnableFailed': '启用 Windows 平台规范失败', 'lang.windowsDisableFailed': '禁用 Windows 平台规范失败', 'lang.installRequired': '请运行 "ccw install" 以启用此功能', // CCW 安装状态 'status.installed': '已安装', 'status.incomplete': '不完整', 'status.notInstalled': '未安装', 'status.ccwInstall': 'CCW 工作流', 'status.ccwInstallDesc': '完整功能所需的工作流文件', 'status.required': '必需', 'status.filesMissing': '个文件缺失', 'status.missingFiles': '缺失文件', 'status.runToFix': '修复命令', 'cli.promptFormat': '提示词格式', 'cli.promptFormatDesc': '多轮对话拼接格式', 'cli.storageBackend': '存储后端', 'cli.storageBackendDesc': 'CLI 历史使用 SQLite 存储,支持全文搜索', 'cli.smartContext': '智能上下文', 'cli.smartContextDesc': '自动分析提示词并添加相关文件路径', 'cli.nativeResume': '原生恢复', 'cli.nativeResumeDesc': '使用工具原生恢复命令 (gemini -r, qwen --resume, codex resume)', 'cli.recursiveQuery': '递归查询', 'cli.recursiveQueryDesc': '聚合显示父项目和子项目的 CLI 历史与内存数据', 'cli.maxContextFiles': '最大上下文文件数', 'cli.maxContextFilesDesc': '智能上下文包含的最大文件数', // CCW Install 'ccw.install': 'CCW 安装', 'ccw.installations': '个安装', 'ccw.installationsPlural': '个安装', 'ccw.noInstallations': '未找到安装', 'ccw.installCcw': '安装 CCW', 'ccw.upgrade': '升级', 'ccw.uninstall': '卸载', 'ccw.files': '个文件', 'ccw.globalInstall': '全局安装', 'ccw.globalInstallDesc': '安装到用户主目录 (~/.claude)', 'ccw.pathInstall': '路径安装', 'ccw.pathInstallDesc': '安装到指定项目文件夹', 'ccw.installPath': '安装路径', 'ccw.installToPath': '安装到路径', 'ccw.uninstallConfirm': '从此位置卸载 CCW?', 'ccw.upgradeStarting': '开始升级...', 'ccw.upgradeCompleted': '升级完成!正在刷新...', 'ccw.upgradeFailed': '升级失败: {error}', // CCW Endpoint Tools 'ccw.endpointTools': 'CCW 端点工具', 'ccw.tool': '个工具', 'ccw.tools': '个工具', 'ccw.noEndpointTools': '未找到端点工具', 'ccw.parameters': '参数', 'ccw.required': '必填', 'ccw.optional': '可选', 'ccw.default': '默认值:', 'ccw.options': '选项:', 'ccw.noParams': '此工具没有参数', 'ccw.usageExample': '使用示例', 'ccw.endpointTool': '端点工具', // Explorer 'explorer.title': '浏览器', 'explorer.refresh': '刷新', 'explorer.selectFile': '选择文件预览', 'explorer.selectFileHint': '从树中选择文件以预览其内容', 'explorer.loading': '正在加载文件树...', 'explorer.loadingFile': '正在加载文件...', 'explorer.emptyDir': '空目录', 'explorer.loadError': '加载失败: {error}', 'explorer.preview': '预览', 'explorer.source': '源码', 'explorer.lines': '行', 'explorer.updateClaudeMd': '更新 CLAUDE.md', 'explorer.currentFolderOnly': '更新 CLAUDE.md(仅当前文件夹)', 'explorer.withSubdirs': '更新 CLAUDE.md(包含子目录)', // Task Queue 'taskQueue.title': '更新任务', 'taskQueue.cli': 'CLI:', 'taskQueue.addTask': '添加更新任务', 'taskQueue.startAll': '开始所有任务', 'taskQueue.clearCompleted': '清除已完成', 'taskQueue.noTasks': '队列中没有任务', 'taskQueue.noTasksHint': '悬停文件夹并点击图标添加任务', 'taskQueue.processing': '处理中...', 'taskQueue.updated': '更新成功', 'taskQueue.failed': '更新失败', 'taskQueue.currentOnly': '仅当前', 'taskQueue.withSubdirs': '含子目录', 'taskQueue.startingTasks': '正在并行启动 {count} 个任务...', 'taskQueue.queueCompleted': '队列完成: {success} 个成功, {failed} 个失败', // Update CLAUDE.md Modal 'updateClaudeMd.title': '更新 CLAUDE.md', 'updateClaudeMd.targetDir': '目标目录', 'updateClaudeMd.cliTool': 'CLI 工具', 'updateClaudeMd.strategy': '策略', 'updateClaudeMd.singleLayer': '单层 - 仅当前目录 + 子 CLAUDE.md 引用', 'updateClaudeMd.multiLayer': '多层 - 在所有子目录生成 CLAUDE.md', 'updateClaudeMd.running': '正在更新...', 'updateClaudeMd.execute': '执行', 'updateClaudeMd.addToQueue': '添加到队列', 'updateClaudeMd.cancel': '取消', // MCP Manager 'mcp.currentAvailable': '当前可用 MCP', 'mcp.installToProject': '安装到项目', 'mcp.installToGlobal': '安装到全局', 'mcp.installToWorkspace': '安装到工作空间', 'mcp.updateInWorkspace': '在工作空间更新', 'mcp.updateInGlobal': '在全局更新', 'mcp.projectAvailable': '当前可用 MCP', 'mcp.newServer': '新建服务器', 'mcp.newGlobalServer': '新建全局服务器', 'mcp.newProjectServer': '新建项目服务器', 'mcp.serversConfigured': '个服务器已配置', 'mcp.serversAvailable': 'servers available', 'mcp.globalAvailable': '全局可用 MCP', 'mcp.globalServersFrom': '个服务器来自 ~/.claude.json', 'mcp.enterprise': '企业 MCP 服务器', 'mcp.enterpriseManaged': '托管', 'mcp.enterpriseReadOnly': '个服务器(只读)', 'mcp.user': '用户 MCP 服务器', 'mcp.userServersFrom': '个服务器来自 ~/.claude.json', 'mcp.availableOther': '其他项目可用', 'mcp.serversAvailable': '个服务器可用', 'mcp.allProjects': '所有项目 MCP 概览', 'mcp.projects': '个项目', 'mcp.project': '项目', 'mcp.servers': 'MCP 服务器', 'mcp.status': '状态', 'mcp.current': '(当前)', 'mcp.noMcpServers': '无 MCP 服务器', 'mcp.add': '添加', 'mcp.addToProject': '添加到项目', 'mcp.installToProject': '安装到项目', 'mcp.installToGlobal': '安装到全局', 'mcp.installToProject': 'Install to project', 'mcp.installToGlobal': 'Install to global', 'mcp.removeFromProject': '从项目移除', 'mcp.removeConfirm': '从此项目移除 MCP 服务器 "{name}"?', 'mcp.readOnly': '只读', 'mcp.usedIn': '用于 {count} 个项目', 'mcp.usedInPlural': '用于 {count} 个项目', 'mcp.availableToAll': '可用于所有项目,来自 ~/.claude.json', 'mcp.managedByOrg': '由组织管理(最高优先级)', 'mcp.variables': '个变量', 'mcp.cmd': '命令', 'mcp.url': '地址', 'mcp.args': '参数', 'mcp.env': '环境变量', 'mcp.usedInCount': '用于 {count} 个项目', 'mcp.from': '来自', 'mcp.variant': '变体', 'mcp.sourceEnterprise': '企业级', 'mcp.sourceGlobal': '全局', 'mcp.sourceProject': '项目级', 'mcp.viewDetails': '查看详情', 'mcp.clickToViewDetails': '点击查看详情', // MCP Details Modal 'mcp.detailsModal.title': 'MCP 服务器详情', 'mcp.detailsModal.close': '关闭', 'mcp.detailsModal.serverName': '服务器名称', 'mcp.detailsModal.source': '来源', 'mcp.detailsModal.configuration': '配置', 'mcp.detailsModal.noEnv': '无环境变量', // MCP Create Modal 'mcp.createTitle': '创建 MCP 服务器', 'mcp.form': '表单', 'mcp.json': 'JSON', 'mcp.serverName': '服务器名称', 'mcp.serverNamePlaceholder': '例如: my-mcp-server', 'mcp.command': '命令', 'mcp.commandPlaceholder': '例如: npx, uvx, node, python', 'mcp.arguments': '参数(每行一个)', 'mcp.envVars': '环境变量(每行 KEY=VALUE)', 'mcp.pasteJson': '粘贴 MCP 服务器 JSON 配置', 'mcp.jsonFormatsHint': '支持 {"servers": {...}}、{"mcpServers": {...}} 和直接服务器配置格式。', 'mcp.previewServers': '预览(将添加的服务器):', 'mcp.create': '创建', 'mcp.chooseInstallLocation': '选择安装位置', 'mcp.installToClaudeJson': '安装到 .claude.json', 'mcp.installToMcpJson': '安装到 .mcp.json(推荐)', 'mcp.claudeJsonDesc': '保存在根目录 .claude.json projects 字段下(共享配置)', 'mcp.mcpJsonDesc': '保存在项目 .mcp.json 文件中(推荐用于版本控制)', // New MCP Manager UI 'mcp.title': 'MCP 服务器管理', 'mcp.subtitle': '管理 Claude、Codex 和项目级别的 MCP 服务器配置', 'mcp.createNew': '创建新服务器', 'mcp.createFirst': '创建第一个服务器', 'mcp.noServers': '未配置 MCP 服务器', 'mcp.noServersDesc': '开始创建新的 MCP 服务器或从模板安装', 'mcp.totalServers': '总服务器数', 'mcp.enabled': '已启用', 'mcp.viewServer': '查看服务器', 'mcp.editServer': '编辑服务器', 'mcp.createServer': '创建服务器', 'mcp.updateServer': '更新服务器', 'mcp.close': '关闭', 'mcp.cancel': '取消', 'mcp.update': '更新', 'mcp.install': '安装', 'mcp.save': '保存', 'mcp.delete': '删除', 'mcp.optional': '可选', 'mcp.description': '描述', 'mcp.category': '分类', 'mcp.installTo': '安装到', 'mcp.configTarget': '配置目标', 'mcp.clickToSwitch': '点击切换', 'mcp.usingMcpJson': '使用 .mcp.json', 'mcp.usingClaudeJson': '使用 claude.json', 'mcp.cwd': '工作目录', 'mcp.httpHeaders': 'HTTP 头', 'mcp.error': '错误', 'mcp.success': '成功', 'mcp.nameRequired': '服务器名称为必填项', 'mcp.commandRequired': '命令为必填项', 'mcp.urlRequired': 'URL 为必填项', 'mcp.invalidArgsJson': '参数 JSON 格式无效', 'mcp.invalidEnvJson': '环境变量 JSON 格式无效', 'mcp.invalidHeadersJson': 'HTTP 头 JSON 格式无效', 'mcp.serverInstalled': '服务器安装成功', 'mcp.serverEnabled': '服务器启用成功', 'mcp.serverDisabled': '服务器禁用成功', 'mcp.serverDeleted': '服务器删除成功', 'mcp.backToManager': '返回管理器', 'mcp.noTemplates': '无可用模板', 'mcp.noTemplatesDesc': '从现有服务器创建模板或添加新模板', 'mcp.templatesDesc': '浏览并安装预配置的 MCP 服务器模板', // Recommended MCP 'mcp.recommended': '推荐 MCP', 'mcp.quickSetup': '快速安装', 'mcp.configRequired': '需配置', 'mcp.noConfigNeeded': '无需配置', 'mcp.reconfigure': '配置', 'mcp.wizard.install': '安装', 'mcp.wizard.noConfig': '无需配置,可直接安装!', 'mcp.wizard.installTo': '安装到', 'mcp.wizard.project': '项目', 'mcp.wizard.global': '全局', // Recommended MCP Server Definitions 'mcp.ace-tool.name': 'ACE 工具', 'mcp.ace-tool.desc': 'Augment 上下文引擎 - 实时代码库索引的语义代码搜索', 'mcp.ace-tool.field.baseUrl': '服务器地址', 'mcp.ace-tool.field.baseUrl.desc': 'ACE MCP 中继服务器 URL', 'mcp.ace-tool.field.token': 'API 令牌', 'mcp.ace-tool.field.token.desc': '从 ACE 控制台获取您的 API 令牌', 'mcp.chrome-devtools.name': 'Chrome 开发工具', 'mcp.chrome-devtools.desc': '浏览器自动化和开发者工具集成,用于 Web 开发', 'mcp.exa.name': 'Exa 搜索', 'mcp.exa.desc': 'AI 驱动的网络搜索,支持实时爬取和内容提取', 'mcp.exa.field.apiKey': 'EXA API 密钥', 'mcp.exa.field.apiKey.desc': '可选 - 免费版有速率限制,从 exa.ai 获取密钥可提高配额', 'mcp.codexLens.name': 'CodexLens 工具', 'mcp.codexLens.desc': '代码智能工具,提供符号搜索、代码导航和引用查找功能', 'mcp.codexLens.field.tools': '启用的工具', 'mcp.codexLens.field.tools.desc': '选择要启用的代码智能工具', 'mcp.wizard.selectAtLeastOne': '请至少选择一个选项', // MCP CLI Mode 'mcp.cliMode': 'CLI 模式', 'mcp.claudeMode': 'Claude 模式', 'mcp.codexMode': 'Codex 模式', // CCW Tools Path Settings 'mcp.pathSettings': '路径设置', 'mcp.useCurrentDir': '使用当前目录', 'mcp.useCurrentProject': '使用当前项目', 'mcp.allowedDirsPlaceholder': '逗号分隔的路径列表(可选)', 'mcp.disableSandboxDesc': '允许访问任意目录', // Codex MCP 'mcp.codex.globalServers': 'Codex 全局 MCP 服务器', 'mcp.codex.newServer': '新建服务器', 'mcp.codex.noServers': '未配置 Codex MCP 服务器', 'mcp.codex.noServersHint': '使用 "codex mcp add" 命令或在此处创建', 'mcp.codex.infoTitle': '关于 Codex MCP', 'mcp.codex.infoDesc': 'Codex MCP 服务器仅支持全局配置(存储在 ~/.codex/config.toml)。使用 TOML 格式配置。', 'mcp.codex.serverAdded': 'Codex MCP 服务器 "{name}" 已添加', 'mcp.codex.addFailed': '添加 Codex MCP 服务器失败', 'mcp.codex.serverRemoved': 'Codex MCP 服务器 "{name}" 已移除', 'mcp.codex.removeFailed': '移除 Codex MCP 服务器失败', 'mcp.codex.serverToggled': 'Codex MCP 服务器 "{name}" 已{state}', 'mcp.codex.toggleFailed': '切换 Codex MCP 服务器失败', 'mcp.codex.remove': '移除', 'mcp.codex.removeConfirm': '移除 Codex MCP 服务器 "{name}"?', 'mcp.codex.copyToClaude': '复制到 Claude', 'mcp.codex.copyToCodex': '复制到 Codex', 'mcp.codex.install': '安装到 Codex', 'mcp.codex.copyFromClaude': '从 Claude 复制服务器到 Codex', 'mcp.codex.alreadyAdded': '已在 Codex 中', 'mcp.codex.scopeCodex': 'Codex - 全局 (~/.codex/config.toml)', 'mcp.codex.enabledTools': '工具', 'mcp.codex.tools': '个工具已启用', // Claude to Codex copy 'mcp.claude.copyFromCodex': '从 Codex 复制服务器到 Claude', 'mcp.claude.alreadyAdded': '已在 Claude 中', 'mcp.claude.copyToClaude': '复制到 Claude 全局', 'mcp.claude.copyToCodex': '复制到 Codex', // MCP Edit Modal 'mcp.editModal.title': '编辑 MCP 服务器', 'mcp.editModal.serverNamePlaceholder': 'server-name', 'mcp.editModal.onePerLine': '每行一个', 'mcp.editModal.save': '保存更改', 'mcp.editModal.delete': '删除', 'mcp.editModal.nameRequired': '服务器名称必填', 'mcp.editModal.commandRequired': '命令或 URL 必填', 'mcp.editModal.saved': 'MCP 服务器 "{name}" 已更新', 'mcp.editModal.saveFailed': '保存 MCP 服务器失败', 'mcp.editModal.deleteConfirm': '删除 MCP 服务器 "{name}"?', 'mcp.editModal.deleted': 'MCP 服务器 "{name}" 已删除', 'mcp.editModal.deleteFailed': '删除 MCP 服务器失败', 'mcp.clickToEdit': '点击编辑', 'mcp.clickToViewDetails': '点击查看详情', // Windows MCP 兼容性 'mcp.windows.title': 'Windows 兼容性警告', 'mcp.windows.compatibilityWarning': 'MCP 服务器 "{name}" 使用的 "{command}" 命令需要在 Windows 上添加 "cmd /c" 包装才能与 Claude Code 正常工作。', 'mcp.windows.autoFix': '自动修复(推荐)', 'mcp.windows.keepOriginal': '保持原样', // Hook Manager 'hook.projectHooks': '项目钩子', 'hook.projectFile': '.claude/settings.json', 'hook.newHook': '新建钩子', 'hook.hooksConfigured': '个钩子已配置', 'hook.globalHooks': '全局钩子', 'hook.globalFile': '~/.claude/settings.json', 'hook.wizards': '钩子向导', 'hook.guidedSetup': '引导设置', 'hook.wizardsDesc': '通过向导配置复杂钩子', 'hook.quickInstall': '快速安装模板', 'hook.oneClick': '一键安装钩子', 'hook.envVarsRef': '环境变量参考', 'hook.filePaths': '受影响文件的空格分隔路径', 'hook.toolName': '正在执行的工具名称', 'hook.toolInput': '传递给工具的 JSON 输入', 'hook.sessionId': '当前 Claude 会话 ID', 'hook.projectDir': '当前项目目录路径', 'hook.workingDir': '当前工作目录', 'hook.openWizard': '打开向导', 'hook.installed': '已安装', 'hook.installProject': '安装(项目)', 'hook.installGlobal': '全局', 'hook.uninstall': '卸载', 'hook.viewDetails': '查看模板详情', 'hook.edit': '编辑钩子', 'hook.delete': '删除钩子', 'hook.deleteConfirm': '删除此 {event} 钩子?', // Hook Create Modal 'hook.createTitle': '创建钩子', 'hook.event': '钩子事件', 'hook.selectEvent': '选择事件...', 'hook.preToolUse': 'PreToolUse - 工具执行前', 'hook.postToolUse': 'PostToolUse - 工具完成后', 'hook.notification': 'Notification - 通知时', 'hook.stop': 'Stop - 代理停止时', 'hook.matcher': '匹配器(可选)', 'hook.matcherPlaceholder': '例如: Write, Edit, Bash(留空匹配所有)', 'hook.matcherHint': '要匹配的工具名称。留空匹配所有工具。', 'hook.commandLabel': '命令', 'hook.commandPlaceholder': '例如: curl, bash, node', 'hook.argsLabel': '参数(每行一个)', 'hook.scope': '作用域', 'hook.scopeProject': '项目(.claude/settings.json)', 'hook.scopeGlobal': '全局(~/.claude/settings.json)', 'hook.quickTemplates': '快速模板', // Hook templates 'hook.template.ccwNotify': 'CCW 通知', 'hook.template.ccwNotifyDesc': '写入时通知控制面板', 'hook.template.logTool': '工具使用日志', 'hook.template.logToolDesc': '记录所有工具执行', 'hook.template.lintCheck': 'Lint 检查', 'hook.template.lintCheckDesc': '文件更改时运行 eslint', 'hook.template.gitAdd': 'Git 暂存', 'hook.template.gitAddDesc': '自动暂存写入的文件', // Hook Quick Install Templates 'hook.tpl.sessionContext': 'Session 上下文', 'hook.tpl.sessionContextDesc': '会话启动时加载集群概览(仅触发一次)', 'hook.tpl.codexlensSync': 'CodexLens 自动同步', 'hook.tpl.codexlensSyncDesc': '文件写入或编辑时自动更新代码索引', 'hook.tpl.ccwDashboardNotify': 'CCW 控制面板通知', 'hook.tpl.ccwDashboardNotifyDesc': '文件写入时通知 CCW 控制面板', 'hook.tpl.toolLogger': '工具使用记录器', 'hook.tpl.toolLoggerDesc': '将所有工具执行记录到文件', 'hook.tpl.autoLint': '自动 Lint 检查', 'hook.tpl.autoLintDesc': '写入后对 JavaScript/TypeScript 文件运行 ESLint', 'hook.tpl.autoGitStage': '自动 Git 暂存', 'hook.tpl.autoGitStageDesc': '自动将写入的文件添加到 Git 暂存区', // Hook Template Categories 'hook.category.indexing': '索引', 'hook.category.notification': '通知', 'hook.category.logging': '日志', 'hook.category.quality': '质量', 'hook.category.git': 'Git', 'hook.category.memory': '记忆', 'hook.category.skill': '技能', 'hook.category.context': '上下文', // Hook Wizard Templates 'hook.wizard.memoryUpdate': '记忆更新钩子', 'hook.wizard.memoryUpdateDesc': '基于队列的 CLAUDE.md 更新,支持阈值和超时配置', 'hook.wizard.queueBasedUpdate': '队列批量更新', 'hook.wizard.queueBasedUpdateDesc': '达到路径数量阈值或超时时批量更新', 'hook.wizard.cliTool': 'CLI 工具', 'hook.wizard.cliToolDesc': '用于生成 CLAUDE.md 的 CLI 工具', 'hook.wizard.thresholdPaths': '阈值(路径数)', 'hook.wizard.thresholdPathsDesc': '触发批量更新的路径数量', 'hook.wizard.timeoutSeconds': '超时(秒)', 'hook.wizard.timeoutSecondsDesc': '超过此时间自动刷新队列', // 保留旧键以兼容 'hook.wizard.onSessionEnd': '会话结束时', 'hook.wizard.onSessionEndDesc': 'Claude 会话结束时更新文档', 'hook.wizard.periodicUpdate': '定期更新', 'hook.wizard.periodicUpdateDesc': '会话期间定期更新文档', 'hook.wizard.countBasedUpdate': '累计数量更新', 'hook.wizard.countBasedUpdateDesc': '文件变动达到阈值时更新文档', 'hook.wizard.fileCountThreshold': '文件数量阈值', 'hook.wizard.fileCountThresholdDesc': '触发更新的文件变动数量', 'hook.wizard.skillContext': 'SKILL 上下文加载器', 'hook.wizard.skillContextDesc': '根据用户提示中的关键词自动加载 SKILL 包', 'hook.wizard.keywordMatching': '关键词匹配', 'hook.wizard.keywordMatchingDesc': '当提示中检测到关键词时加载特定 SKILL', 'hook.wizard.autoDetection': '自动检测', 'hook.wizard.autoDetectionDesc': '根据提示中的名称自动检测并加载 SKILL', 'hook.wizard.memorySetup': '记忆模块设置', 'hook.wizard.memorySetupDesc': '配置自动上下文跟踪(轻量级元数据记录)', 'hook.wizard.fileReadTracker': '文件读取追踪器', 'hook.wizard.fileReadTrackerDesc': '追踪文件读取以构建上下文热图', 'hook.wizard.fileWriteTracker': '文件写入追踪器', 'hook.wizard.fileWriteTrackerDesc': '追踪文件修改以识别核心模块', 'hook.wizard.promptTracker': '提示追踪器', 'hook.wizard.promptTrackerDesc': '记录用户提示用于模式分析', 'hook.wizard.selectTrackers': '选择追踪器', // 危险保护向导 'hook.wizard.dangerProtection': '危险操作保护', 'hook.wizard.dangerProtectionDesc': '通过确认对话框保护危险操作', 'hook.wizard.dangerBashConfirm': '危险命令', 'hook.wizard.dangerBashConfirmDesc': '执行 rm -rf、shutdown、kill、format 等命令前确认', 'hook.wizard.dangerFileProtection': '敏感文件', 'hook.wizard.dangerFileProtectionDesc': '阻止修改 .env、.git/、密钥等敏感文件', 'hook.wizard.dangerGitDestructive': 'Git 操作', 'hook.wizard.dangerGitDestructiveDesc': '强制推送、硬重置、删除分支前确认', 'hook.wizard.dangerNetworkConfirm': '网络访问', 'hook.wizard.dangerNetworkConfirmDesc': '执行 curl、wget、ssh、WebFetch 请求前确认', 'hook.wizard.dangerSystemPaths': '系统路径', 'hook.wizard.dangerSystemPathsDesc': '阻止/确认对 /etc、/usr、C:\\Windows 的操作', 'hook.wizard.dangerPermissionChange': '权限更改', 'hook.wizard.dangerPermissionChangeDesc': '执行 chmod、chown、icacls 操作前确认', 'hook.wizard.selectProtections': '选择保护项', // Hook Wizard Labels 'hook.wizard.cliTools': 'CLI 工具:', 'hook.wizard.event': '事件:', 'hook.wizard.availableSkills': '可用 SKILL:', 'hook.wizard.loading': '加载中...', 'hook.wizard.matches': '匹配:', 'hook.wizard.whenToTrigger': '触发时机', 'hook.wizard.configuration': '配置', 'hook.wizard.commandPreview': '生成的命令预览', 'hook.wizard.installTo': '安装到', 'hook.wizard.installHook': '安装钩子', 'hook.wizard.noSkillsConfigured': '尚未配置任何 SKILL', 'hook.wizard.clickAddSkill': '点击"添加 SKILL"配置关键词触发器', 'hook.wizard.configureSkills': '配置 SKILL', 'hook.wizard.addSkill': '添加 SKILL', 'hook.wizard.selectSkill': '选择 SKILL...', 'hook.wizard.triggerKeywords': '触发关键词(逗号分隔)', 'hook.wizard.autoDetectionMode': '自动检测模式', 'hook.wizard.autoDetectionInfo': '当 SKILL 名称出现在提示中时将自动加载。', 'hook.wizard.noSkillsFound': '未找到 SKILL。请在 .claude/skills/ 中创建 SKILL 包', 'hook.wizard.noSkillConfigs': '# 尚未配置 SKILL', 'hook.wizard.cliTool': 'CLI 工具', 'hook.wizard.intervalSeconds': '间隔(秒)', 'hook.wizard.updateStrategy': '更新策略', 'hook.wizard.toolForDocGen': '用于生成文档的工具', 'hook.wizard.timeBetweenUpdates': '更新之间的时间间隔', 'hook.wizard.relatedStrategy': 'related: 已更改的模块, single-layer: 当前目录', // Lite Tasks 'lite.plan': '规划', 'lite.fix': '修复', 'lite.summary': '摘要', 'lite.rootCause': '根本原因', 'lite.fixStrategy': '修复策略', 'lite.approach': '方法', 'lite.userRequirements': '用户需求', 'lite.focusPaths': '关注路径', 'lite.metadata': '元数据', 'lite.severity': '严重性:', 'lite.riskLevel': '风险等级:', 'lite.estimatedTime': '预计时间:', 'lite.complexity': '复杂度:', 'lite.execution': '执行:', 'lite.fixTasks': '修复任务', 'lite.modificationPoints': '修改点:', 'lite.implementationSteps': '实现步骤:', 'lite.verification': '验证:', 'lite.rawJson': '原始 JSON', 'lite.noPlanData': '暂无计划数据', 'lite.noPlanDataText': '未找到该会话的 {file}。', 'lite.diagnosisSummary': '诊断摘要', 'lite.diagnosisDetails': '诊断详情', 'lite.totalDiagnoses': '总诊断数:', 'lite.angles': '分析角度:', 'lite.multiCli': '多CLI', // Multi-CLI Plan 'multiCli.rounds': '轮', 'multiCli.backToList': '返回多CLI计划', 'multiCli.roundCount': '轮数', 'multiCli.topic': '主题', 'multiCli.tab.topic': '讨论主题', 'multiCli.tab.files': '相关文件', 'multiCli.tab.planning': '规划', 'multiCli.tab.decision': '决策', 'multiCli.tab.timeline': '时间线', 'multiCli.tab.rounds': '轮次', 'multiCli.tab.discussion': '讨论', 'multiCli.tab.association': '关联', 'multiCli.scope': '范围', 'multiCli.scope.included': '包含', 'multiCli.scope.excluded': '排除', 'multiCli.keyQuestions': '关键问题', 'multiCli.fileTree': '文件树', 'multiCli.impactSummary': '影响摘要', 'multiCli.dependencies': '依赖关系', 'multiCli.functional': '功能需求', 'multiCli.nonFunctional': '非功能需求', 'multiCli.acceptanceCriteria': '验收标准', 'multiCli.source': '来源', 'multiCli.confidence': '置信度', 'multiCli.selectedSolution': '选定方案', 'multiCli.rejectedAlternatives': '被拒绝的备选方案', 'multiCli.rejectionReason': '原因', 'multiCli.pros': '优点', 'multiCli.cons': '缺点', 'multiCli.effort': '工作量', 'multiCli.sources': '来源', 'multiCli.currentRound': '当前', 'multiCli.singleRoundInfo': '这是单轮讨论。查看其他标签页获取详情。', 'multiCli.noRoundData': '此轮无数据。', 'multiCli.roundId': '轮次', 'multiCli.timestamp': '时间', 'multiCli.duration': '持续时间', 'multiCli.contributors': '贡献者', 'multiCli.convergence': '收敛度', 'multiCli.newInsights': '新发现', 'multiCli.crossVerification': '交叉验证', 'multiCli.agreements': '一致意见', 'multiCli.disagreements': '分歧', 'multiCli.resolution': '决议', 'multiCli.empty.topic': '无讨论主题', 'multiCli.empty.topicText': '此会话无可用的讨论主题数据。', 'multiCli.empty.files': '无相关文件', 'multiCli.empty.filesText': '此会话无可用的文件分析数据。', 'multiCli.empty.planning': '无规划数据', 'multiCli.empty.planningText': '此会话无可用的规划需求。', 'multiCli.empty.decision': '暂无决策', 'multiCli.empty.decisionText': '此讨论尚未做出决策。', 'multiCli.empty.timeline': '无时间线事件', 'multiCli.empty.timelineText': '此会话无可用的决策时间线。', 'multiCli.empty.association': '无关联数据', 'multiCli.empty.associationText': '此会话无可用的上下文包或相关文件。', 'multiCli.round': '轮次', 'multiCli.solutionSummary': '方案摘要', 'multiCli.feasibility': '可行性', 'multiCli.effort': '工作量', 'multiCli.risk': '风险', 'multiCli.consensus': '共识', 'multiCli.resolvedConflicts': '已解决冲突', // Toolbar 'multiCli.toolbar.title': '任务导航', 'multiCli.toolbar.tasks': '任务列表', 'multiCli.toolbar.refresh': '刷新', 'multiCli.toolbar.exportJson': '导出JSON', 'multiCli.toolbar.viewRaw': '查看原始数据', 'multiCli.toolbar.noTasks': '暂无任务', 'multiCli.toolbar.scrollToTask': '点击定位到任务', // Context Tab 'multiCli.context.taskDescription': '任务描述', 'multiCli.context.constraints': '约束条件', 'multiCli.context.focusPaths': '焦点路径', 'multiCli.context.relevantFiles': '相关文件', 'multiCli.context.dependencies': '依赖项', 'multiCli.context.conflictRisks': '冲突风险', 'multiCli.context.sessionId': '会话ID', 'multiCli.context.rawJson': '原始JSON', // Summary Tab 'multiCli.summary.title': '摘要', 'multiCli.summary.convergence': '收敛状态', 'multiCli.summary.solutions': '解决方案', 'multiCli.summary.solution': '方案', // Task Overview 'multiCli.task.description': '描述', 'multiCli.task.keyPoint': '关键点', 'multiCli.task.scope': '范围', 'multiCli.task.dependencies': '依赖项', 'multiCli.task.targetFiles': '目标文件', 'multiCli.task.acceptanceCriteria': '验收标准', 'multiCli.task.reference': '参考资料', 'multiCli.task.pattern': '模式', 'multiCli.task.files': '文件', 'multiCli.task.examples': '示例', 'multiCli.task.noOverviewData': '无概览数据', // Task Implementation 'multiCli.task.implementationSteps': '实现步骤', 'multiCli.task.modificationPoints': '修改点', 'multiCli.task.verification': '验证', 'multiCli.task.noImplementationData': '无实现详情', 'multiCli.task.noFilesSpecified': '未指定文件', // Discussion Tab 'multiCli.discussion.title': '讨论', 'multiCli.discussion.discussionTopic': '讨论主题', 'multiCli.solutions': '解决方案', 'multiCli.decision': '决策', // Plan 'multiCli.plan.objective': '目标', 'multiCli.plan.solution': '解决方案', 'multiCli.plan.approach': '实现方式', 'multiCli.plan.risk': '风险', // Modals 'modal.contentPreview': '内容预览', 'modal.raw': '原始', 'modal.preview': '预览', 'modal.templateDetails': '模板详情', 'modal.sessionJson': '会话 JSON', 'modal.copyToClipboard': '复制到剪贴板', // Toast messages 'toast.workspaceRefreshed': '工作区已刷新', 'toast.refreshFailed': '刷新失败: {error}', 'toast.statusUpdateRequires': '状态更新需要服务器模式', 'toast.bulkUpdateRequires': '批量更新需要服务器模式', 'toast.failedToUpdate': '更新状态失败', 'toast.errorUpdating': '更新状态出错: {error}', 'toast.failedToBulkUpdate': '批量更新失败', 'toast.errorInBulk': '批量更新出错: {error}', 'toast.enterPrompt': '请输入提示', 'toast.enterPath': '请输入路径', 'toast.commandCopied': '命令已复制: {command}', 'toast.runCommand': '运行: {command}', 'toast.completed': '已完成', 'toast.failed': '失败', 'toast.error': '错误: {error}', 'toast.templateNotFound': '未找到模板', // Footer 'footer.generated': '生成时间:', 'footer.version': 'CCW 控制面板 v1.0', // Prompt History 'prompt.timeline': '提示词时间线', 'prompt.searchPlaceholder': '搜索提示词...', 'prompt.allProjects': '所有项目', 'prompt.currentProject': '当前项目', 'prompt.noPromptsFound': '未找到提示词', 'prompt.noPromptsText': '没有符合搜索条件的提示词。', 'prompt.insights': '洞察与建议', 'prompt.analyze': '分析', 'prompt.analyzing': '分析中...', 'prompt.selectTool': '选择工具', 'prompt.quality': '质量', 'prompt.intent': '意图', 'prompt.project': '项目', 'prompt.session': '会话', 'prompt.noInsights': '暂无洞察', 'prompt.noInsightsText': '选择 CLI 工具并点击分析以生成洞察。', 'prompt.loadingInsights': '正在生成洞察...', 'prompt.insightsError': '生成洞察失败', 'prompt.intent.implement': '实现', 'prompt.intent.fix': '修复', 'prompt.intent.explore': '探索', 'prompt.intent.debug': '调试', 'prompt.intent.refactor': '重构', 'prompt.intent.test': '测试', 'prompt.intent.document': '文档', 'prompt.intent.general': '通用', 'prompt.timeJustNow': '刚刚', 'prompt.timeMinutesAgo': '{count} 分钟前', 'prompt.timeHoursAgo': '{count} 小时前', 'prompt.timeDaysAgo': '{count} 天前', // Memory Module 'memory.contextHotspots': '上下文热点', 'memory.mostRead': '最常读取的文件', 'memory.mostEdited': '最常编辑的文件', 'memory.mostMentioned': '最常提及的话题', 'memory.today': '今天', 'memory.week': '本周', 'memory.allTime': '全部时间', 'memory.noData': '无可用数据', 'memory.memoryGraph': '记忆图谱', 'memory.nodes': '节点', 'memory.resetView': '重置视图', 'memory.zoomIn': '放大', 'memory.zoomOut': '缩小', 'memory.fitView': '自适应', 'memory.file': '文件', 'memory.module': '模块', 'memory.component': '组件', 'memory.noGraphData': '无图谱数据', 'memory.d3NotLoaded': 'D3.js 未加载', 'memory.recentContext': '最近上下文', 'memory.activities': '活动', 'memory.searchContext': '搜索上下文...', 'memory.noRecentActivity': '无最近活动', 'memory.reads': '读取', 'memory.edits': '编辑', 'memory.mentions': '提及', 'memory.prompts': '提示', 'memory.nodeDetails': '节点详情', 'memory.heat': '热度', 'memory.associations': '关联', 'memory.type': '类型', 'memory.relatedNodes': '相关节点', 'memory.noAssociations': '未找到关联', 'memory.justNow': '刚刚', 'memory.minutesAgo': '分钟前', 'memory.hoursAgo': '小时前', 'memory.title': '记忆', 'memory.activeMemory': '活动记忆', 'memory.active': '已启用', 'memory.inactive': '未启用', 'memory.syncNow': '立即同步', 'memory.syncComplete': '同步完成', 'memory.syncError': '同步失败', 'memory.filesAnalyzed': '个文件已分析', 'memory.activeMemoryEnabled': '活动记忆已启用', 'memory.activeMemoryDisabled': '活动记忆已禁用', 'memory.activeMemoryError': '切换活动记忆失败', 'memory.interval': '间隔', 'memory.intervalManual': '手动', 'memory.minutes': '分钟', 'memory.cliTool': 'CLI', 'memory.lastSync': '上次同步', 'memory.autoSyncActive': '自动同步', 'memory.configUpdated': '配置已更新', 'memory.configError': '配置更新失败', 'memory.insightsHistory': '洞察历史', 'memory.insightsEmpty': '暂无洞察记录。运行分析以生成洞察。', 'memory.insightPatterns': '模式', 'memory.insightSuggestions': '建议', 'memory.insightDetail': '洞察详情', 'memory.insightDelete': '删除', 'memory.insightDeleteConfirm': '确定要删除此洞察吗?', 'memory.insightDeleted': '洞察已删除', 'memory.prompts': '提示', 'memory.refreshInsights': '刷新', // Skills 'nav.skills': '技能', 'title.skillsManager': '技能管理', 'skills.title': '技能管理', 'skills.description': '管理 Claude Code 的技能和能力', 'skills.create': '创建技能', 'skills.projectSkills': '项目技能', 'skills.userSkills': '用户技能', 'skills.skillsCount': '个技能', 'skills.noProjectSkills': '未找到项目技能', 'skills.createHint': '在 .claude/skills/ 中创建技能以添加功能', 'skills.noUserSkills': '未找到用户技能', 'skills.userSkillsHint': '用户技能适用于所有项目', 'skills.noDescription': '无描述', 'skills.tools': '工具', 'skills.files': '文件', 'skills.descriptionLabel': '描述', 'skills.metadata': '元数据', 'skills.location': '位置', 'skills.version': '版本', 'skills.allowedTools': '允许的工具', 'skills.supportingFiles': '支持文件', 'skills.path': '路径', 'skills.loadError': '加载技能详情失败', 'skills.deleteConfirm': '确定要删除技能 "{name}" 吗?', 'skills.deleted': '技能删除成功', 'skills.deleteError': '删除技能失败', 'skills.editNotImplemented': '编辑功能即将推出', 'skills.createNotImplemented': '创建功能即将推出', 'skills.createSkill': '创建技能', 'skills.sourceFolder': '源文件夹', 'skills.sourceFolderPlaceholder': '技能文件夹路径', 'skills.sourceFolderHint': '选择包含有效 SKILL.md 文件的文件夹', 'skills.sourceFolderRequired': '源文件夹路径是必需的', 'skills.customName': '自定义名称', 'skills.customNamePlaceholder': '留空则使用 SKILL.md 中的技能名称', 'skills.customNameHint': '可选:覆盖技能名称', 'skills.validate': '验证', 'skills.import': '导入', 'skills.validating': '验证中...', 'skills.validSkill': '有效技能', 'skills.invalidSkill': '无效技能', 'skills.validateFirst': '请先验证技能文件夹', 'skills.created': '技能 "{name}" 创建成功', 'skills.createError': '创建技能失败', 'skills.validationError': '验证失败', 'skills.enterFolderPath': '输入技能文件夹路径', 'skills.name': '名称', 'skills.createMode': '创建模式', 'skills.importFolder': '导入文件夹', 'skills.importFolderHint': '导入现有技能文件夹', 'skills.cliGenerate': 'CLI生成', 'skills.cliGenerateHint': '使用AI生成', 'skills.generationType': '生成类型', 'skills.fromDescription': '从描述生成', 'skills.fromDescriptionHint': '描述你需要的功能', 'skills.fromTemplate': '从模板生成', 'skills.comingSoon': '即将推出', 'skills.skillName': '技能名称', 'skills.skillNamePlaceholder': '例如:代码审查、测试助手', 'skills.skillNameHint': '为技能选择一个描述性的名称', 'skills.skillNameRequired': '技能名称是必需的', 'skills.descriptionPlaceholder': '描述这个技能应该帮助什么...\n例如:帮助审查代码的安全漏洞和最佳实践', 'skills.descriptionRequired': '描述是必需的', 'skills.descriptionGenerateHint': '具体说明技能应该做什么', 'skills.generating': '正在通过 CLI 生成技能...这可能需要几分钟。', 'skills.generated': '技能 "{name}" 生成成功', 'skills.generateError': '生成技能失败', 'skills.generate': '生成', 'skills.cliGenerateInfo': 'AI 将根据你的描述生成完整的技能', 'skills.cliGenerateTimeHint': '生成时间取决于复杂度,可能需要几分钟', // Rules 'nav.rules': '规则', 'title.rulesManager': '规则管理', 'rules.title': '规则管理', 'rules.description': '管理 Claude Code 的项目和用户规则', 'rules.create': '创建规则', 'rules.projectRules': '项目规则', 'rules.userRules': '用户规则', 'rules.rulesCount': '条规则', 'rules.noProjectRules': '未找到项目规则', 'rules.createHint': '在 .claude/rules/ 中创建规则以设置项目特定指令', 'rules.noUserRules': '未找到用户规则', 'rules.userRulesHint': '用户规则适用于所有项目', 'rules.typeLabel': '类型', 'rules.conditional': '条件规则', 'rules.global': '全局规则', 'rules.pathConditions': '路径条件', 'rules.content': '内容', 'rules.filePath': '文件路径', 'rules.loadError': '加载规则详情失败', 'rules.deleteConfirm': '确定要删除规则 "{name}" 吗?', 'rules.deleted': '规则删除成功', 'rules.deleteError': '删除规则失败', 'rules.editNotImplemented': '编辑功能即将推出', 'rules.createNotImplemented': '创建功能即将推出', 'rules.createRule': '创建规则', 'rules.location': '位置', 'rules.fileName': '文件名', 'rules.fileNameHint': '必须以 .md 结尾', 'rules.fileNameRequired': '文件名是必需的', 'rules.fileNameMustEndMd': '文件名必须以 .md 结尾', 'rules.subdirectory': '子目录', 'rules.subdirectoryHint': '可选:将规则组织到子目录中', 'rules.conditionalRule': '条件规则', 'rules.conditionalHint': '仅对特定文件路径应用此规则', 'rules.addPath': '添加路径', 'rules.contentPlaceholder': '以 Markdown 格式输入规则内容...', 'rules.contentHint': '使用 Markdown 为 Claude 编写规则说明', 'rules.contentRequired': '内容是必需的', 'rules.created': '规则 "{name}" 创建成功', 'rules.createError': '创建规则失败', 'rules.createMode': '创建模式', 'rules.manualInput': '手动输入', 'rules.manualInputHint': '直接编写内容', 'rules.cliGenerate': 'CLI生成', 'rules.cliGenerateHint': '通过AI自动生成', 'rules.generationType': '生成类型', 'rules.fromDescription': '从描述生成', 'rules.fromTemplate': '从模板生成', 'rules.fromCodeExtract': '从代码提取', 'rules.description': '描述', 'rules.descriptionPlaceholder': '描述规则目的和说明...', 'rules.descriptionHint': 'AI将根据您的描述生成规则内容', 'rules.descriptionRequired': '描述是必需的', 'rules.extractScope': '分析范围', 'rules.extractScopeHint': '要分析的文件模式(例如:src/**/*.ts)', 'rules.extractScopeRequired': '分析范围是必需的', 'rules.extractFocus': '关注领域', 'rules.extractFocusHint': '以逗号分隔的关注方面(例如:命名规范, 错误处理)', 'rules.enableReview': '启用质量审查', 'rules.enableReviewHint': 'AI 将验证生成的规则是否清晰、可操作且格式正确', 'rules.cliGenerating': '正在通过 CLI 生成规则(可能需要几分钟)...', // CLAUDE.md Manager 'nav.claudeManager': 'CLAUDE.md', 'title.claudeManager': 'CLAUDE.md 管理器', 'claudeManager.title': 'CLAUDE.md 文件', 'claudeManager.files': '个文件', 'claudeManager.userLevel': '用户级', 'claudeManager.projectLevel': '项目级', 'claudeManager.moduleLevel': '模块级', 'claudeManager.noFile': '无 CLAUDE.md 文件', 'claudeManager.noModules': '无模块 CLAUDE.md 文件', 'claudeManager.selectFile': '选择文件以查看', 'claudeManager.noMetadata': '选择文件以查看元数据', 'claudeManager.fileInfo': '文件信息', 'claudeManager.level': '级别', 'claudeManager.level_user': '用户级 (~/.claude/)', 'claudeManager.level_project': '项目级 (.claude/)', 'claudeManager.level_module': '模块级', 'claudeManager.path': '路径', 'claudeManager.size': '大小', 'claudeManager.modified': '修改时间', 'claudeManager.statistics': '统计信息', 'claudeManager.lines': '行数', 'claudeManager.words': '字数', 'claudeManager.characters': '字符数', 'claudeManager.actions': '操作', 'claudeManager.loadError': '加载 CLAUDE.md 文件失败', 'claudeManager.refreshed': '文件刷新成功', 'claudeManager.unsavedChanges': '您有未保存的更改。是否放弃?', 'claudeManager.saved': '文件保存成功', 'claudeManager.saveError': '文件保存失败', 'claudeManager.freshness': '新鲜度', 'claudeManager.lastContentUpdate': '上次内容更新', 'claudeManager.changedFiles': '变动文件', 'claudeManager.filesSinceUpdate': '个文件自上次更新后变动', 'claudeManager.updateReminder': '此文件可能需要更新', 'claudeManager.markAsUpdated': '标记为已更新', 'claudeManager.markedAsUpdated': '已成功标记为已更新', 'claudeManager.markUpdateError': '标记更新失败', 'claudeManager.never': '从未追踪', // Graph Explorer 'nav.graphExplorer': '图谱', 'title.graphExplorer': '代码图谱浏览器', 'graph.codeRelations': '代码关系', 'graph.searchProcess': '搜索过程', 'graph.nodeTypes': '节点类型', 'graph.edgeTypes': '边类型', 'graph.noProject': '未选择项目', 'graph.selectProject': '选择一个项目以查看其代码图谱', 'graph.loading': '正在加载图谱数据...', 'graph.noData': '无图谱数据', 'graph.indexProject': '请先使用 codex-lens 为此项目建立索引', 'graph.nodeDetails': '节点详情', 'graph.selectNode': '选择节点以查看详情', 'graph.impactAnalysis': '影响分析', 'graph.directDependents': '直接依赖', 'graph.affectedFiles': '受影响文件', 'graph.fitView': '适应视图', 'graph.zoomIn': '放大', 'graph.zoomOut': '缩小', 'graph.resetLayout': '重置布局', 'graph.title': '代码图谱', 'graph.filters': '筛选器', 'graph.legend': '图例', 'graph.nodes': '个节点', 'graph.edges': '条边', 'graph.noGraphData': '无图谱数据。请先使用 codex-lens 为此项目建立索引。', 'graph.noSearchData': '无搜索过程数据。', 'graph.center': '居中', 'graph.resetFilters': '重置筛选', // Help & Guide 'nav.help': '帮助', 'title.helpGuide': '帮助与指南', 'graph.cytoscapeNotLoaded': '图谱库未加载', 'graph.impactAnalysisError': '加载影响分析失败', 'graph.searchProcessDesc': '可视化搜索查询在系统中的流转过程', 'graph.searchProcessTitle': '搜索管道', 'graph.resultsFound': '个结果', 'graph.coreMemory': '核心记忆', 'graph.dataSourceSwitched': '数据源已切换', 'graph.type': '类型', 'graph.line': '行号', 'graph.path': '路径', 'graph.depth': '深度', 'graph.exports': '导出', 'graph.imports': '导入', 'graph.references': '引用', 'graph.symbolType': '符号类型', 'graph.affectedSymbols': '受影响符号', 'graph.scope': '范围', 'graph.allFiles': '所有文件', 'graph.byModule': '按模块', 'graph.byFile': '按文件', 'graph.selectModule': '选择模块...', 'graph.selectFile': '选择文件...', // CLI Sync (used in claude-manager.js) 'claude.cliSync': 'CLI 自动同步', 'claude.tool': '工具', 'claude.mode': '模式', 'claude.syncButton': '使用 CLI 同步', 'claude.syncing': '正在使用 {tool} 分析...', 'claude.syncSuccess': '{file} 同步成功', 'claude.syncError': '同步失败:{error}', 'claude.modeUpdate': '更新(智能合并)', 'claude.modeGenerate': '生成(完全替换)', 'claude.modeAppend': '追加', 'claude.searchPlaceholder': '搜索文件...', 'claude.viewModeClaude': '仅 CLAUDE.md', 'claude.viewModeAll': '所有文件', 'claude.createFile': '创建文件', 'claude.createDialogTitle': '创建 CLAUDE.md 文件', 'claude.selectLevel': '层级', 'claude.levelUser': '用户级 (~/.claude/)', 'claude.levelProject': '项目级 (.claude/)', 'claude.levelModule': '模块级(自定义路径)', 'claude.modulePath': '模块路径', 'claude.selectTemplate': '模板', 'claude.templateDefault': '默认', 'claude.templateMinimal': '最小化', 'claude.templateComprehensive': '完整', 'claude.deleteFile': '删除文件', 'claude.deleteConfirm': '确定要删除 {file} 吗?', 'claude.deleteWarning': '此操作无法撤销。', 'claude.batchDeleteProject': '删除项目文件', 'claude.batchDeleteTitle': '删除项目工作空间文件', 'claude.batchDeleteWarning': '此操作将删除项目工作空间内的所有 CLAUDE.md 文件(不包括用户级文件)', 'claude.noProjectFiles': '没有可删除的项目工作空间文件', 'claude.filesToDelete': '待删除文件数:', 'claude.totalSize': '总大小:', 'claude.fileList': '文件清单', 'claude.confirmDelete': '确认删除', 'claude.deletingFiles': '正在删除 {count} 个文件...', 'claude.batchDeleteSuccess': '成功删除 {deleted}/{total} 个文件', 'claude.batchDeleteError': '删除文件失败', 'claude.removeFromList': '从清单中移除', 'claude.noFilesInList': '清单中没有文件', 'claude.copyContent': '复制内容', 'claude.contentCopied': '内容已复制到剪贴板', 'claude.copyError': '复制内容失败', 'claude.modulePathRequired': '模块路径为必填项', 'claude.fileCreated': '文件创建成功', 'claude.createFileError': '文件创建失败', 'claude.fileDeleted': '文件删除成功', 'claude.deleteFileError': '文件删除失败', 'claude.loadAllFilesError': '加载所有文件失败', 'claude.unsupportedFileType': '不支持的文件类型', 'claude.loadFileError': '加载文件失败', // Duplicate keys for compatibility 'nav.claudeManager': 'CLAUDE.md', 'title.claudeManager': 'CLAUDE.md Manager', 'claudeManager.title': 'CLAUDE.md Files', 'claudeManager.files': 'files', 'claudeManager.userLevel': 'User Level', 'claudeManager.projectLevel': 'Project Level', 'claudeManager.moduleLevel': 'Module Level', 'claudeManager.noFile': 'No CLAUDE.md file', 'claudeManager.noModules': 'No module CLAUDE.md files', 'claudeManager.selectFile': 'Select a file to view', 'claudeManager.noMetadata': 'Select a file to see metadata', 'claudeManager.fileInfo': 'File Information', 'claudeManager.level': 'Level', 'claudeManager.level_user': 'User (~/.claude/)', 'claudeManager.level_project': 'Project (.claude/)', 'claudeManager.level_module': 'Module', 'claudeManager.path': 'Path', 'claudeManager.size': 'Size', 'claudeManager.modified': 'Modified', 'claudeManager.statistics': 'Statistics', 'claudeManager.lines': 'Lines', 'claudeManager.words': 'Words', 'claudeManager.characters': 'Characters', 'claudeManager.actions': 'Actions', 'claudeManager.loadError': 'Failed to load CLAUDE.md files', 'claudeManager.refreshed': 'Files refreshed successfully', 'claudeManager.unsavedChanges': 'You have unsaved changes. Discard them?', 'claudeManager.saved': 'File saved successfully', 'claudeManager.saveError': 'Failed to save file', // API Settings 'nav.apiSettings': 'API 设置', 'title.apiSettings': 'API 设置', 'apiSettings.providers': '提供商', 'apiSettings.customEndpoints': '自定义端点', 'apiSettings.cacheSettings': '缓存设置', 'apiSettings.addProvider': '添加提供商', 'apiSettings.editProvider': '编辑提供商', 'apiSettings.deleteProvider': '删除提供商', 'apiSettings.addEndpoint': '添加端点', 'apiSettings.editEndpoint': '编辑端点', 'apiSettings.deleteEndpoint': '删除端点', 'apiSettings.providerType': '提供商类型', 'apiSettings.apiFormat': 'API 格式', 'apiSettings.compatible': '兼容', 'apiSettings.customFormat': '自定义格式', 'apiSettings.apiFormatHint': '大多数供应商(DeepSeek、Ollama 等)使用 OpenAI 兼容格式', 'apiSettings.displayName': '显示名称', 'apiSettings.apiKey': 'API 密钥', 'apiSettings.apiBaseUrl': 'API 基础 URL', 'apiSettings.useEnvVar': '使用环境变量', 'apiSettings.enableProvider': '启用提供商', 'apiSettings.advancedSettings': '高级设置', 'apiSettings.basicInfo': '基本信息', 'apiSettings.endpointSettings': '端点设置', 'apiSettings.timeout': '超时时间(秒)', 'apiSettings.seconds': '秒', 'apiSettings.timeoutHint': '请求超时时间,单位秒(默认:300)', 'apiSettings.maxRetries': '最大重试次数', 'apiSettings.maxRetriesHint': '失败后最大重试次数', 'apiSettings.organization': '组织 ID', 'apiSettings.organizationHint': 'OpenAI 组织 ID(org-...)', 'apiSettings.apiVersion': 'API 版本', 'apiSettings.apiVersionHint': 'Azure API 版本(如 2024-02-01)', 'apiSettings.rpm': 'RPM 限制', 'apiSettings.tpm': 'TPM 限制', 'apiSettings.unlimited': '无限制', 'apiSettings.proxy': '代理服务器', 'apiSettings.proxyHint': 'HTTP 代理服务器 URL', 'apiSettings.customHeaders': '自定义请求头', 'apiSettings.customHeadersHint': '自定义 HTTP 请求头的 JSON 对象', 'apiSettings.invalidJsonHeaders': '自定义请求头 JSON 格式无效', 'apiSettings.searchProviders': '搜索供应商...', 'apiSettings.selectProvider': '选择供应商', 'apiSettings.selectProviderHint': '从列表中选择一个供应商来查看和管理其设置', 'apiSettings.noProvidersFound': '未找到供应商', 'apiSettings.llmModels': '大语言模型', 'apiSettings.embeddingModels': '向量模型', 'apiSettings.rerankerModels': '重排模型', 'apiSettings.addRerankerModel': '添加重排模型', 'apiSettings.rerankerTopK': '默认 Top K', 'apiSettings.rerankerTopKHint': '返回的最高排名结果数量(默认:10)', 'apiSettings.manageModels': '管理', 'apiSettings.addModel': '添加模型', 'apiSettings.multiKeySettings': '多密钥设置', 'apiSettings.noModels': '暂无模型配置', 'apiSettings.previewModel': '预览', 'apiSettings.modelSettings': '模型设置', 'apiSettings.deleteModel': '删除模型', 'apiSettings.endpointPreview': '端点预览', 'apiSettings.modelBaseUrlOverride': '基础 URL 覆盖', 'apiSettings.modelBaseUrlHint': '为此模型覆盖供应商的基础 URL(留空则使用供应商默认值)', 'apiSettings.providerUpdated': '供应商已更新', 'apiSettings.syncToCodexLens': '同步到 CodexLens', 'apiSettings.configSynced': '配置已同步到 CodexLens', 'apiSettings.preview': '预览', 'apiSettings.used': '已使用', 'apiSettings.total': '总计', 'apiSettings.testConnection': '测试连接', 'apiSettings.endpointId': '端点 ID', 'apiSettings.endpointIdHint': '用法: ccw cli -p "..." --tool custom --model <端点ID> --mode analysis', 'apiSettings.endpoints': '端点', 'apiSettings.addEndpointHint': '创建用于 CLI 的自定义端点别名', 'apiSettings.endpointModel': '模型', 'apiSettings.selectEndpoint': '选择端点', 'apiSettings.selectEndpointHint': '从列表中选择一个端点以查看或编辑其设置', 'apiSettings.provider': '提供商', 'apiSettings.model': '模型', 'apiSettings.selectModel': '选择模型', 'apiSettings.noModelsConfigured': '该供应商未配置模型', 'apiSettings.cacheStrategy': '缓存策略', 'apiSettings.enableContextCaching': '启用上下文缓存', 'apiSettings.cacheTTL': 'TTL (分钟)', 'apiSettings.cacheMaxSize': '最大大小 (KB)', 'apiSettings.autoCachePatterns': '自动缓存文件模式', 'apiSettings.enableGlobalCaching': '启用全局缓存', 'apiSettings.cacheUsed': '已使用', 'apiSettings.cacheEntries': '条目数', 'apiSettings.clearCache': '清除缓存', 'apiSettings.noProviders': '未配置提供商', 'apiSettings.noEndpoints': '未配置端点', 'apiSettings.enabled': '已启用', 'apiSettings.disabled': '已禁用', 'apiSettings.cacheEnabled': '缓存已启用', 'apiSettings.cacheDisabled': '缓存已禁用', 'apiSettings.providerSaved': '提供商保存成功', 'apiSettings.providerDeleted': '提供商删除成功', 'apiSettings.apiBaseUpdated': 'API 基础 URL 更新成功', 'apiSettings.endpointSaved': '端点保存成功', 'apiSettings.endpointDeleted': '端点删除成功', 'apiSettings.cacheCleared': '缓存清除成功', 'apiSettings.cacheSettingsUpdated': '缓存设置已更新', 'apiSettings.embeddingPool': '高可用嵌入', 'apiSettings.embeddingPoolDesc': '自动轮训相同模型的供应商', 'apiSettings.targetModel': '目标模型', 'apiSettings.discoveredProviders': '发现的供应商', 'apiSettings.autoDiscover': '自动发现供应商', 'apiSettings.excludeProvider': '排除', 'apiSettings.defaultCooldown': '冷却时间(秒)', 'apiSettings.defaultConcurrent': '每密钥并发数', 'apiSettings.poolEnabled': '启用嵌入池', 'apiSettings.noProvidersFound': '未找到提供此模型的供应商', 'apiSettings.poolSaved': '嵌入池配置已保存', 'apiSettings.strategy': '策略', 'apiSettings.providerKeys': '密钥', 'apiSettings.selectTargetModel': '选择目标模型', 'apiSettings.confirmDeleteProvider': '确定要删除此提供商吗?', 'apiSettings.confirmDeleteEndpoint': '确定要删除此端点吗?', 'apiSettings.confirmClearCache': '确定要清除缓存吗?', 'apiSettings.connectionSuccess': '连接成功', 'apiSettings.connectionFailed': '连接失败', 'apiSettings.saveProviderFirst': '请先保存提供商', 'apiSettings.addProviderFirst': '请先添加提供商', 'apiSettings.failedToLoad': '加载 API 设置失败', 'apiSettings.toggleVisibility': '切换可见性', 'apiSettings.noProvidersHint': '添加 API 提供商以开始使用', 'apiSettings.noEndpointsHint': '创建自定义端点以快速访问模型', 'apiSettings.cache': '缓存', 'apiSettings.off': '关闭', 'apiSettings.used': '已用', 'apiSettings.total': '总计', 'apiSettings.cacheUsage': '使用率', 'apiSettings.cacheSize': '大小', 'apiSettings.endpointsDescription': '管理自定义 API 端点以快速访问模型', 'apiSettings.totalEndpoints': '总端点数', 'apiSettings.cachedEndpoints': '缓存端点数', 'apiSettings.cacheTabHint': '在主面板中配置全局缓存设置并查看统计信息', 'apiSettings.cacheDescription': '管理响应缓存以提高性能并降低成本', 'apiSettings.cachedEntries': '缓存条目', 'apiSettings.storageUsed': '已用存储', 'apiSettings.cacheActions': '缓存操作', 'apiSettings.cacheStatistics': '缓存统计', 'apiSettings.globalCache': '全局缓存', // Multi-key management 'apiSettings.apiKeys': 'API 密钥', 'apiSettings.addKey': '添加密钥', 'apiSettings.keyLabel': '标签', 'apiSettings.keyValue': 'API 密钥', 'apiSettings.keyWeight': '权重', 'apiSettings.removeKey': '移除', 'apiSettings.noKeys': '未配置 API 密钥', 'apiSettings.primaryKey': '主密钥', // Routing strategy 'apiSettings.routingStrategy': '路由策略', 'apiSettings.simpleShuffleRouting': '简单随机', 'apiSettings.weightedRouting': '权重分配', 'apiSettings.latencyRouting': '延迟优先', 'apiSettings.costRouting': '成本优先', 'apiSettings.leastBusyRouting': '最少并发', 'apiSettings.routingHint': '如何在多个 API 密钥间分配请求', // Health check 'apiSettings.healthCheck': '健康检查', 'apiSettings.enableHealthCheck': '启用健康检查', 'apiSettings.healthInterval': '检查间隔(秒)', 'apiSettings.healthCooldown': '冷却时间(秒)', 'apiSettings.failureThreshold': '失败阈值', 'apiSettings.healthStatus': '状态', 'apiSettings.healthy': '健康', 'apiSettings.unhealthy': '异常', 'apiSettings.unknown': '未知', 'apiSettings.lastCheck': '最后检查', 'apiSettings.testKey': '测试密钥', 'apiSettings.testingKey': '测试中...', 'apiSettings.keyValid': '密钥有效', 'apiSettings.keyInvalid': '密钥无效', // Embedding models 'apiSettings.embeddingDimensions': '向量维度', 'apiSettings.embeddingMaxTokens': '最大 Token', 'apiSettings.rerankerTopK': 'Top K', 'apiSettings.selectEmbeddingModel': '选择嵌入模型', // Model modal 'apiSettings.addLlmModel': '添加 LLM 模型', 'apiSettings.addEmbeddingModel': '添加嵌入模型', 'apiSettings.modelId': '模型 ID', 'apiSettings.modelName': '显示名称', 'apiSettings.modelSeries': '模型系列', 'apiSettings.selectFromPresets': '从预设选择', 'apiSettings.customModel': '自定义模型', 'apiSettings.capabilities': '能力', 'apiSettings.streaming': '流式输出', 'apiSettings.functionCalling': '函数调用', 'apiSettings.vision': '视觉能力', 'apiSettings.contextWindow': '上下文窗口', 'apiSettings.description': '描述', 'apiSettings.optional': '可选', 'apiSettings.modelIdExists': '模型 ID 已存在', 'apiSettings.useModelTreeToManage': '使用模型树管理各个模型', // CLI Settings 'apiSettings.cliSettings': 'CLI 封装', 'apiSettings.addCliSettings': '添加 CLI 封装', 'apiSettings.editCliSettings': '编辑 CLI 封装', 'apiSettings.noCliSettings': '未配置 CLI 封装', 'apiSettings.noCliSettingsSelected': '未选择 CLI 封装', 'apiSettings.cliSettingsHint': '选择一个 CLI 封装端点或创建新的', 'apiSettings.showToken': '显示', 'apiSettings.hideToken': '隐藏', 'apiSettings.syncFromJson': '解析 JSON', 'apiSettings.cliProviderHint': '选择一个 Anthropic 供应商以使用其 API 密钥和基础 URL', 'apiSettings.noAnthropicProviders': '未配置 Anthropic 供应商。请先在供应商标签页中添加。', 'apiSettings.selectProviderFirst': '请先选择供应商', 'apiSettings.providerRequired': '供应商为必填项', 'apiSettings.modelRequired': '模型为必填项', 'apiSettings.providerNotFound': '未找到供应商', 'apiSettings.settingsSaved': '设置保存成功', 'apiSettings.settingsDeleted': '设置删除成功', 'apiSettings.confirmDeleteSettings': '确定要删除此 CLI 配置吗?', 'apiSettings.endpointName': '端点名称', 'apiSettings.envSettings': '环境变量设置', 'apiSettings.settingsFilePath': '配置文件路径', 'apiSettings.nameRequired': '名称为必填项', 'apiSettings.nameInvalidFormat': '名称必须以字母开头,只能包含字母、数字、连字符和下划线', 'apiSettings.nameTooLong': '名称长度不能超过32个字符', 'apiSettings.nameConflict': '名称与内置工具冲突', 'apiSettings.nameFormatHint': '仅限字母、数字、连字符、下划线。用于命令: ccw cli --tool [名称]', 'apiSettings.tokenRequired': 'API 令牌为必填项', 'apiSettings.status': '状态', 'apiSettings.providerBinding': '供应商绑定', 'apiSettings.directConfig': '直接配置', 'apiSettings.modelConfig': '模型配置', 'apiSettings.configJson': '配置 JSON', 'apiSettings.syncToJson': '同步到 JSON', 'apiSettings.jsonEditorHint': '直接编辑 JSON 添加高级配置', 'apiSettings.jsonValid': 'JSON 有效', 'apiSettings.jsonInvalid': 'JSON 无效', // Model Pools (High Availability) 'apiSettings.modelPools': '高可用', 'apiSettings.addModelPool': '添加模型池', 'apiSettings.editModelPool': '编辑模型池', 'apiSettings.poolName': '池名称', 'apiSettings.modelType': '模型类型', 'apiSettings.embedding': '嵌入', 'apiSettings.llm': 'LLM', 'apiSettings.reranker': '重排', 'apiSettings.embeddingPools': '嵌入池', 'apiSettings.llmPools': 'LLM 池', 'apiSettings.rerankerPools': '重排池', 'apiSettings.cooldown': '冷却时间', 'apiSettings.maxConcurrent': '最大并发', 'apiSettings.enablePool': '启用池', 'apiSettings.autoDiscoverProviders': '自动发现供应商', 'apiSettings.excludedProviders': '排除的供应商', 'apiSettings.noPoolSelected': '未选择池', 'apiSettings.selectPoolFromList': '从列表中选择一个池以查看详情', 'apiSettings.noPoolsConfigured': '未配置模型池', 'apiSettings.poolCreated': '池创建成功', 'apiSettings.poolDeleted': '池删除成功', 'apiSettings.poolUpdated': '池更新成功', 'apiSettings.confirmDeletePool': '确定要删除此池吗?', 'apiSettings.legacyPool': '旧版', 'apiSettings.pool': '池', // Common 'common.cancel': '取消', 'common.optional': '(可选)', 'common.create': '创建', 'common.save': '保存', 'common.delete': '删除', 'common.edit': '编辑', 'common.close': '关闭', 'common.refresh': '刷新', 'common.back': '返回', 'common.search': '搜索...', 'common.refreshed': '已刷新', 'common.refreshing': '刷新中...', 'common.loading': '加载中...', 'common.error': '错误', 'common.success': '成功', 'common.warning': '警告', 'common.info': '信息', 'common.remove': '移除', 'common.removeFromRecent': '从最近中移除', 'common.noDescription': '无描述', 'common.saving': '保存中...', 'common.saveSuccess': '保存成功', 'common.saveFailed': '保存失败', 'common.unknownError': '未知错误', 'common.exception': '异常', 'common.status': '状态', // Core Memory 'title.coreMemory': '核心记忆', 'coreMemory.createNew': '创建记忆', 'coreMemory.showArchived': '显示已归档', 'coreMemory.showActive': '显示活动', 'coreMemory.totalMemories': '总记忆数', 'coreMemory.noMemories': '未找到记忆', 'coreMemory.noArchivedMemories': '没有已归档的记忆', 'coreMemory.content': '内容', 'coreMemory.contentPlaceholder': '输入战略性上下文、见解或重要信息...', 'coreMemory.contentRequired': '内容为必填项', 'coreMemory.summary': '摘要', 'coreMemory.summaryPlaceholder': '可选:此记忆的简要摘要...', 'coreMemory.metadata': '元数据', 'coreMemory.invalidMetadata': '无效的 JSON 元数据', 'coreMemory.rawOutput': '原始输出', 'coreMemory.created': '记忆创建成功', 'coreMemory.updated': '记忆更新成功', 'coreMemory.archived': '记忆已归档', 'coreMemory.unarchived': '记忆已取消归档', 'coreMemory.deleted': '记忆已删除', 'coreMemory.confirmArchive': '归档此记忆?', 'coreMemory.confirmDelete': '永久删除此记忆?', 'coreMemory.fetchError': '获取记忆失败', 'coreMemory.saveError': '保存记忆失败', 'coreMemory.archiveError': '归档记忆失败', 'coreMemory.unarchiveError': '取消归档失败', 'coreMemory.deleteError': '删除记忆失败', 'coreMemory.edit': '编辑记忆', 'coreMemory.unarchive': '取消归档', 'coreMemory.generateSummary': '生成摘要', 'coreMemory.generatingSummary': '正在生成摘要...', 'coreMemory.summaryGenerated': '摘要生成成功', 'coreMemory.summaryError': '生成摘要失败', 'coreMemory.knowledgeGraph': '知识图谱', 'coreMemory.graph': '图谱', 'coreMemory.entities': '实体', 'coreMemory.noEntities': '未找到实体', 'coreMemory.relationships': '关系', 'coreMemory.noRelationships': '未找到关系', 'coreMemory.graphError': '加载知识图谱失败', 'coreMemory.evolution': '演化', 'coreMemory.evolutionHistory': '演化历史', 'coreMemory.noHistory': '无演化历史', 'coreMemory.noReason': '未提供原因', 'coreMemory.current': '当前', 'coreMemory.evolutionError': '加载演化历史失败', 'coreMemory.created': '创建时间', 'coreMemory.updated': '更新时间', // View toggle 'coreMemory.memories': '记忆', 'coreMemory.clusters': '聚类', 'coreMemory.clustersList': '聚类列表', 'coreMemory.selectCluster': '选择聚类查看详情', 'coreMemory.openSession': '打开 Session', 'coreMemory.clickToPreview': '点击预览', 'coreMemory.previewError': '加载预览失败', 'coreMemory.unknownSessionType': '未知的会话类型', // Clustering features 'coreMemory.noClusters': '暂无聚类', 'coreMemory.autoCluster': '自动聚类', 'coreMemory.clusterLoadError': '加载聚类失败', 'coreMemory.clusterDetailError': '加载聚类详情失败', 'coreMemory.intent': '意图', 'coreMemory.sessionTimeline': 'Session 时间线', 'coreMemory.relatedClusters': '关联聚类', 'coreMemory.noSessions': '此聚类暂无 session', 'coreMemory.clusteringInProgress': '聚类进行中...', 'coreMemory.clusteringComplete': '创建了 {created} 个聚类,包含 {sessions} 个 session', 'coreMemory.clusteringError': '自动聚类失败', 'coreMemory.embeddingNotAvailable': '语义搜索未安装。安装后可提升聚类准确度。', 'coreMemory.installGuide': '前往设置', 'coreMemory.embeddingProgress': '嵌入进度: {pct}% (待处理: {pending})', 'coreMemory.generateEmbeddings': '生成', 'coreMemory.noChunksYet': '暂无记忆分块。运行 "ccw memory embed" 启用语义聚类。', 'coreMemory.embeddingInProgress': '正在生成嵌入...', 'coreMemory.embeddingComplete': '已为 {count} 个分块生成嵌入', 'coreMemory.embeddingError': '生成嵌入失败', 'coreMemory.enterClusterName': '请输入聚类名称:', 'coreMemory.clusterCreated': '聚类已创建', 'coreMemory.clusterCreateError': '创建聚类失败', 'coreMemory.confirmDeleteCluster': '确定删除此聚类?', 'coreMemory.clusterDeleted': '聚类已删除', 'coreMemory.clusterDeleteError': '删除聚类失败', 'coreMemory.clusterUpdated': '聚类已更新', 'coreMemory.clusterUpdateError': '更新聚类失败', 'coreMemory.memberRemoved': '成员已移除', 'coreMemory.memberRemoveError': '移除成员失败', 'coreMemory.favorites': '收藏', 'coreMemory.totalFavorites': '收藏总数', 'coreMemory.noFavorites': '暂无收藏', 'coreMemory.toggleFavorite': '切换收藏', 'coreMemory.addedToFavorites': '已添加到收藏', 'coreMemory.removedFromFavorites': '已从收藏移除', 'coreMemory.favoriteError': '更新收藏失败', 'coreMemory.relations': '关联', 'coreMemory.showRelations': '显示关联', 'coreMemory.relationsFor': '关联关系', 'coreMemory.noRelations': '未找到聚类关联', 'coreMemory.noRelationsHint': '在聚类 Tab 中使用自动聚类来创建关联', 'coreMemory.belongsToClusters': '所属聚类', 'coreMemory.relationsError': '加载关联失败', // Issue Manager 'nav.issues': '议题', 'nav.issueManager': '管理器', 'nav.issueDiscovery': '发现', 'title.issueManager': '议题管理器', 'title.issueDiscovery': '议题发现', // Loop Monitor 'title.loopMonitor': '循环监控', 'loop.title': '循环监控', 'loop.status.created': '已创建', 'loop.status.running': '运行中', 'loop.status.paused': '已暂停', 'loop.status.completed': '已完成', 'loop.status.failed': '失败', 'loop.tabs.timeline': '时间线', 'loop.tabs.logs': '日志', 'loop.tabs.variables': '变量', 'loop.buttons.pause': '暂停', 'loop.buttons.resume': '恢复', 'loop.buttons.stop': '停止', 'loop.buttons.retry': '重试', 'loop.buttons.newLoop': '新建循环', 'loop.empty': '没有活跃的循环', 'loop.metric.iteration': '迭代', 'loop.metric.step': '步骤', 'loop.metric.duration': '耗时', 'loop.task.id': '任务', 'loop.created': '创建时间', 'loop.updated': '更新时间', 'loop.progress': '进度', 'loop.cliSequence': 'CLI 序列', 'loop.stateVariables': '状态变量', 'loop.executionHistory': '执行历史', 'loop.failureReason': '失败原因', 'loop.noLoopsFound': '未找到循环', 'loop.selectLoop': '选择一个循环查看详情', 'loop.tasks': '任务', 'loop.createTaskTitle': '创建循环任务', 'loop.loopsCount': '个循环', 'loop.paused': '循环已暂停', 'loop.resumed': '循环已恢复', 'loop.stopped': '循环已停止', 'loop.startedSuccess': '循环已启动', 'loop.taskDescription': '描述', 'loop.maxIterations': '最大迭代数', 'loop.errorPolicy': '错误策略', 'loop.pauseOnError': '错误时暂停', 'loop.retryAutomatically': '自动重试', 'loop.failImmediate': '立即失败', 'loop.successCondition': '成功条件', // Kanban Board 'loop.kanban.title': '任务看板', 'loop.kanban.byStatus': '按状态', 'loop.kanban.byPriority': '按优先级', 'loop.kanban.noBoardData': '没有要显示的任务', 'loop.listView': '列表视图', 'loop.addTask': '添加任务', // 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'; }