// ============================================
// 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.minutes': 'minutes',
    'common.enabled': 'Enabled',
    'common.disabled': 'Disabled',

    // Header
    'header.project': 'Project:',
    'header.recentProjects': 'Recent Projects',
    'header.browse': 'Browse...',
    'header.refreshWorkspace': 'Refresh workspace',
    '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',

    // 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',
    
    // 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.liteTasks': 'Lite Tasks',
    'title.sessionDetail': 'Session Detail',
    'title.liteTaskDetail': 'Lite Task 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',

    // 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.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...',

    // 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',

    // 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',

    // 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!',

    // 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.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',
    'cli.codeIndexMcp': 'Code Index MCP',
    'cli.codeIndexMcpDesc': 'Code search provider (updates CLAUDE.md context-tools reference)',

    // 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',

    // 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)',

    // 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',

    // 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': 'Automatically update CLAUDE.md documentation based on code changes',
    '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',

    // 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:',
    
    // 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.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.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.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 "..." --model <endpoint-id>',
    '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.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',

    // 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.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',
    'title.issueManager': 'Issue Manager',
    // 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',
    // 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',
  },

  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.minutes': '分钟',
    'common.enabled': '已启用',
    'common.disabled': '已禁用',

    // Header
    'header.project': '项目:',
    'header.recentProjects': '最近项目',
    'header.browse': '浏览...',
    'header.refreshWorkspace': '刷新工作区',
    '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': '行',

    // 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': '轻量修复',
    
    // 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.liteTasks': '轻量任务',
    'title.sessionDetail': '会话详情',
    'title.liteTaskDetail': '轻量任务详情',
    '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': '已禁用',

    // 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.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.semanticDeps': '语义搜索依赖',
    'codexlens.checkingDeps': '检查依赖中...',
    'codexlens.semanticInstalled': '语义搜索依赖已安装',
    'codexlens.semanticNotInstalled': '语义搜索依赖未安装',
    'codexlens.installDeps': '安装依赖',
    'codexlens.installDepsPrompt': '是否立即安装？（可能需要几分钟）\n\n点击"取消"将只创建 FTS 索引。',
    'codexlens.installingDeps': '安装依赖中...',
    'codexlens.installingMode': '正在安装',
    'codexlens.depsInstalled': '依赖安装成功',
    'codexlens.depsInstallFailed': '依赖安装失败',

    // 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': '没有可用模型',

    // 模型下载进度
    '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 卸载成功！',

    // 索引管理器
    '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.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': '智能上下文包含的最大文件数',
    'cli.codeIndexMcp': '代码索引 MCP',
    'cli.codeIndexMcpDesc': '代码搜索提供者 (更新 CLAUDE.md 的 context-tools 引用)',

    // 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 服务器模板',

    // MCP CLI Mode
    'mcp.cliMode': 'CLI 模式',
    'mcp.claudeMode': 'Claude 模式',
    'mcp.codexMode': 'Codex 模式',

    // CCW Tools Path Settings
    'mcp.pathSettings': '路径设置',
    'mcp.useCurrentDir': '使用当前目录',
    'mcp.useCurrentProject': '使用当前项目',
    'mcp.allowedDirsPlaceholder': '逗号分隔的路径列表（可选）',

    // 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': '点击查看详情',

    // 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.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 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': '分析角度:',
    
    // 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.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.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.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 "..." --model <端点ID>',
    '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.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': '使用模型树管理各个模型',

    // Common
    'common.cancel': '取消',
    'common.optional': '(可选)',
    'common.create': '创建',
    'common.save': '保存',
    'common.delete': '删除',
    'common.edit': '编辑',
    'common.close': '关闭',
    'common.refresh': '刷新',
    'common.refreshed': '已刷新',
    'common.refreshing': '刷新中...',
    'common.loading': '加载中...',
    'common.error': '错误',
    'common.success': '成功',
    'common.warning': '警告',
    'common.info': '信息',
    'common.remove': '移除',
    'common.removeFromRecent': '从最近中移除',
    'common.noDescription': '无描述',
    'common.saving': '保存中...',
    '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': '管理器',
    'title.issueManager': '议题管理器',
    // 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': '刷新队列',
    // 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': '复制失败',
  }
};

/**
 * 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();
    }
  }
}

/**
 * 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';
}
