- ChatList 字体从 12px 放大到 13px,图标同步放大,改善点击体验 - ConnectionStatus 胶囊移到顶部 header 区域,与下方按钮左对齐 - "Threads" 改为会话列表上方的小标题,充当分割作用 - ConnectionStatus 文字(Connected/Disconnected/Checking)多语言适配 - "从 Claude CLI 导入" 改为 "从 Claude Code 导入" - 新增 i18n key: chatList.threads, connection.connected/disconnected/checking Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
474 lines
23 KiB
TypeScript
474 lines
23 KiB
TypeScript
/**
|
|
* English translations — source of truth.
|
|
* Every key defined here becomes part of the `TranslationKey` type.
|
|
* Other locale files must implement `Record<TranslationKey, string>`.
|
|
*/
|
|
const en = {
|
|
// ── Navigation ──────────────────────────────────────────────
|
|
'nav.chats': 'Chats',
|
|
'nav.extensions': 'Extensions',
|
|
'nav.settings': 'Settings',
|
|
'nav.autoApproveOn': 'Auto-approve is ON',
|
|
'nav.lightMode': 'Light mode',
|
|
'nav.darkMode': 'Dark mode',
|
|
'nav.toggleTheme': 'Toggle theme',
|
|
|
|
// ── Chat list panel ─────────────────────────────────────────
|
|
'chatList.justNow': 'just now',
|
|
'chatList.minutesAgo': '{n}m',
|
|
'chatList.hoursAgo': '{n}h',
|
|
'chatList.daysAgo': '{n}d',
|
|
'chatList.newConversation': 'New Conversation',
|
|
'chatList.delete': 'Delete',
|
|
'chatList.searchSessions': 'Search sessions...',
|
|
'chatList.noSessions': 'No sessions yet',
|
|
'chatList.importFromCli': 'Import from Claude Code',
|
|
'chatList.addProjectFolder': 'Add project folder',
|
|
'chatList.threads': 'Threads',
|
|
|
|
// ── Message list ────────────────────────────────────────────
|
|
'messageList.claudeChat': 'Claude Chat',
|
|
'messageList.emptyDescription': 'Start a conversation with Claude. Ask questions, get help with code, or explore ideas.',
|
|
'messageList.loadEarlier': 'Load earlier messages',
|
|
'messageList.loading': 'Loading...',
|
|
|
|
// ── Message input ───────────────────────────────────────────
|
|
'messageInput.attachFiles': 'Attach files',
|
|
'messageInput.helpDesc': 'Show available commands and tips',
|
|
'messageInput.clearDesc': 'Clear conversation history',
|
|
'messageInput.costDesc': 'Show token usage statistics',
|
|
'messageInput.compactDesc': 'Compress conversation context',
|
|
'messageInput.doctorDesc': 'Diagnose project health',
|
|
'messageInput.initDesc': 'Initialize CLAUDE.md for project',
|
|
'messageInput.reviewDesc': 'Review code quality',
|
|
'messageInput.terminalSetupDesc': 'Configure terminal settings',
|
|
'messageInput.memoryDesc': 'Edit project memory file',
|
|
'messageInput.modeCode': 'Code',
|
|
'messageInput.modePlan': 'Plan',
|
|
'messageInput.aiSuggested': 'AI Suggested',
|
|
|
|
// ── Streaming message ───────────────────────────────────────
|
|
'streaming.thinking': 'Thinking...',
|
|
'streaming.allowForSession': 'Allow for Session',
|
|
'streaming.allowed': 'Allowed',
|
|
'streaming.denied': 'Denied',
|
|
|
|
// ── Chat view / session page ────────────────────────────────
|
|
'chat.newConversation': 'New Conversation',
|
|
|
|
// ── Settings: General ───────────────────────────────────────
|
|
'settings.title': 'Settings',
|
|
'settings.description': 'Manage CodePilot and Claude CLI settings',
|
|
'settings.general': 'General',
|
|
'settings.providers': 'Providers',
|
|
'settings.claudeCli': 'Claude CLI',
|
|
'settings.codepilot': 'CodePilot',
|
|
'settings.version': 'Version {version}',
|
|
'settings.checkForUpdates': 'Check for Updates',
|
|
'settings.checking': 'Checking...',
|
|
'settings.updateAvailable': 'Update available: v{version}',
|
|
'settings.viewRelease': 'View Release',
|
|
'settings.latestVersion': "You're on the latest version.",
|
|
'settings.autoApproveTitle': 'Auto-approve All Actions',
|
|
'settings.autoApproveDesc': 'Skip all permission checks and auto-approve every tool action. This is dangerous and should only be used for trusted tasks.',
|
|
'settings.autoApproveWarning': 'All tool actions will be auto-approved without confirmation. Use with caution.',
|
|
'settings.autoApproveDialogTitle': 'Enable Auto-approve All Actions?',
|
|
'settings.autoApproveDialogDesc': 'This will bypass all permission checks. Claude will be able to execute any tool action without asking for your confirmation, including:',
|
|
'settings.autoApproveShellCommands': 'Running arbitrary shell commands',
|
|
'settings.autoApproveFileOps': 'Reading, writing, and deleting files',
|
|
'settings.autoApproveNetwork': 'Making network requests',
|
|
'settings.autoApproveTrustWarning': 'Only enable this if you fully trust the task at hand. This setting applies to all new chat sessions.',
|
|
'settings.cancel': 'Cancel',
|
|
'settings.enableAutoApprove': 'Enable Auto-approve',
|
|
'settings.language': 'Language',
|
|
'settings.languageDesc': 'Choose the display language for the interface',
|
|
'settings.usage': 'Usage',
|
|
|
|
// ── Settings: Usage Stats ───────────────────────────────────
|
|
'usage.totalTokens': 'Total Tokens',
|
|
'usage.totalCost': 'Total Cost',
|
|
'usage.sessions': 'Sessions',
|
|
'usage.cacheHitRate': 'Cache Hit Rate',
|
|
'usage.input': 'In',
|
|
'usage.output': 'Out',
|
|
'usage.cached': 'cached',
|
|
'usage.dailyChart': 'Daily Token Usage',
|
|
'usage.loading': 'Loading...',
|
|
'usage.loadError': 'Failed to load usage stats',
|
|
'usage.noData': 'No usage data yet',
|
|
'usage.noDataHint': 'Start a conversation to see statistics here.',
|
|
|
|
// ── Settings: CLI ───────────────────────────────────────────
|
|
'cli.permissions': 'Permissions',
|
|
'cli.permissionsDesc': 'Configure permission settings for Claude CLI',
|
|
'cli.envVars': 'Environment Variables',
|
|
'cli.envVarsDesc': 'Environment variables passed to Claude',
|
|
'cli.form': 'Form',
|
|
'cli.json': 'JSON',
|
|
'cli.save': 'Save',
|
|
'cli.format': 'Format',
|
|
'cli.reset': 'Reset',
|
|
'cli.settingsSaved': 'Settings saved successfully',
|
|
'cli.confirmSaveTitle': 'Confirm Save',
|
|
'cli.confirmSaveDesc': 'This will overwrite your current ~/.claude/settings.json file. Are you sure you want to continue?',
|
|
|
|
// ── Settings: Providers ─────────────────────────────────────
|
|
'provider.addProvider': 'Add Provider',
|
|
'provider.editProvider': 'Edit Provider',
|
|
'provider.deleteProvider': 'Delete Provider',
|
|
'provider.deleteConfirm': 'Are you sure you want to delete "{name}"? This action cannot be undone.',
|
|
'provider.deleting': 'Deleting...',
|
|
'provider.delete': 'Delete',
|
|
'provider.noProviders': 'No providers configured',
|
|
'provider.addToStart': 'Add a provider to get started',
|
|
'provider.quickPresets': 'Quick Presets',
|
|
'provider.customProviders': 'Custom Providers',
|
|
'provider.active': 'Active',
|
|
'provider.configured': 'Configured',
|
|
'provider.name': 'Name',
|
|
'provider.providerType': 'Provider Type',
|
|
'provider.apiKey': 'API Key',
|
|
'provider.baseUrl': 'Base URL',
|
|
'provider.modelName': 'Model Name',
|
|
'provider.advancedOptions': 'Advanced Options',
|
|
'provider.extraEnvVars': 'Extra Environment Variables',
|
|
'provider.notes': 'Notes',
|
|
'provider.notesPlaceholder': 'Optional notes about this provider...',
|
|
'provider.saving': 'Saving...',
|
|
'provider.update': 'Update',
|
|
'provider.envDetected': 'Detected from environment',
|
|
'provider.default': 'Default',
|
|
'provider.setDefault': 'Set as Default',
|
|
'provider.environment': 'Environment',
|
|
'provider.connectedProviders': 'Connected Providers',
|
|
'provider.noConnected': 'No providers connected yet',
|
|
'provider.connect': 'Connect',
|
|
'provider.disconnect': 'Disconnect',
|
|
'provider.disconnecting': 'Disconnecting...',
|
|
'provider.disconnectProvider': 'Disconnect Provider',
|
|
'provider.disconnectConfirm': 'Are you sure you want to disconnect "{name}"? This action cannot be undone.',
|
|
'provider.ccSwitchHint': 'Claude Code configurations added via tools like cc switch may not be readable by CodePilot. We recommend re-adding your provider here.',
|
|
'provider.addProviderSection': 'Add Provider',
|
|
'provider.addProviderDesc': 'Select a provider to connect. Most presets only require an API key.',
|
|
|
|
// ── Right panel / Files ─────────────────────────────────────
|
|
'panel.files': 'Files',
|
|
'panel.tasks': 'Tasks',
|
|
'panel.openPanel': 'Open panel',
|
|
'panel.closePanel': 'Close panel',
|
|
|
|
// ── File tree ───────────────────────────────────────────────
|
|
'fileTree.filterFiles': 'Filter files...',
|
|
'fileTree.refresh': 'Refresh',
|
|
'fileTree.noFiles': 'No files found',
|
|
'fileTree.selectFolder': 'Select a project folder to view files',
|
|
|
|
// ── File preview ────────────────────────────────────────────
|
|
'filePreview.backToTree': 'Back to file tree',
|
|
'filePreview.lines': '{count} lines',
|
|
'filePreview.copyPath': 'Copy path',
|
|
'filePreview.failedToLoad': 'Failed to load file',
|
|
|
|
// ── Doc preview ─────────────────────────────────────────────
|
|
'docPreview.htmlPreview': 'HTML Preview',
|
|
|
|
// ── Extensions page ─────────────────────────────────────────
|
|
'extensions.title': 'Extensions',
|
|
'extensions.skills': 'Skills',
|
|
'extensions.mcpServers': 'MCP Servers',
|
|
|
|
// ── Skills ──────────────────────────────────────────────────
|
|
'skills.noSelected': 'No skill selected',
|
|
'skills.selectOrCreate': 'Select a skill from the list or create a new one',
|
|
'skills.newSkill': 'New Skill',
|
|
'skills.loadingSkills': 'Loading skills...',
|
|
'skills.noSkillsFound': 'No skills found',
|
|
'skills.searchSkills': 'Search skills...',
|
|
'skills.createSkill': 'Create Skill',
|
|
'skills.nameRequired': 'Name is required',
|
|
'skills.nameInvalid': 'Name can only contain letters, numbers, hyphens, and underscores',
|
|
'skills.skillName': 'Skill Name',
|
|
'skills.scope': 'Scope',
|
|
'skills.global': 'Global',
|
|
'skills.project': 'Project',
|
|
'skills.template': 'Template',
|
|
'skills.blank': 'Blank',
|
|
'skills.commitHelper': 'Commit Helper',
|
|
'skills.codeReviewer': 'Code Reviewer',
|
|
'skills.saved': 'Saved',
|
|
'skills.save': 'Save',
|
|
'skills.edit': 'Edit',
|
|
'skills.preview': 'Preview',
|
|
'skills.splitView': 'Split view',
|
|
'skills.deleteConfirm': 'Click again to confirm',
|
|
'skills.placeholder': 'Write your skill prompt in Markdown...',
|
|
'skills.mySkills': 'My Skills',
|
|
'skills.marketplace': 'Marketplace',
|
|
'skills.marketplaceSearch': 'Search Skills.sh...',
|
|
'skills.install': 'Install',
|
|
'skills.installed': 'Installed',
|
|
'skills.installing': 'Installing...',
|
|
'skills.uninstall': 'Uninstall',
|
|
'skills.installs': 'installs',
|
|
'skills.source': 'Source',
|
|
'skills.installedAt': 'Installed At',
|
|
'skills.installSuccess': 'Installation Complete',
|
|
'skills.installFailed': 'Installation Failed',
|
|
'skills.searchNoResults': 'No skills found',
|
|
'skills.marketplaceError': 'Failed to load marketplace',
|
|
'skills.marketplaceHint': 'Browse the Skills Marketplace',
|
|
'skills.marketplaceHintDesc': 'Search and install community skills from Skills.sh',
|
|
'skills.noReadme': 'No description available for this skill',
|
|
|
|
// ── MCP ─────────────────────────────────────────────────────
|
|
'mcp.addServer': 'Add Server',
|
|
'mcp.loadingServers': 'Loading MCP servers...',
|
|
'mcp.serverConfig': 'MCP Server Configuration',
|
|
'mcp.noServers': 'No MCP servers configured',
|
|
'mcp.noServersDesc': "Add an MCP server to extend Claude's capabilities",
|
|
'mcp.arguments': 'Arguments:',
|
|
'mcp.environment': 'Environment:',
|
|
'mcp.listTab': 'List',
|
|
'mcp.jsonTab': 'JSON Config',
|
|
'mcp.editServer': 'Edit Server',
|
|
'mcp.serverName': 'Server Name',
|
|
'mcp.serverType': 'Server Type',
|
|
'mcp.command': 'Command',
|
|
'mcp.argsLabel': 'Arguments (one per line)',
|
|
'mcp.url': 'URL',
|
|
'mcp.headers': 'Headers (JSON)',
|
|
'mcp.envVars': 'Environment Variables (JSON)',
|
|
'mcp.formTab': 'Form',
|
|
'mcp.jsonEditTab': 'JSON',
|
|
'mcp.saveChanges': 'Save Changes',
|
|
|
|
// ── Folder picker ───────────────────────────────────────────
|
|
'folderPicker.title': 'Select a project folder',
|
|
'folderPicker.loading': 'Loading...',
|
|
'folderPicker.noSubdirs': 'No subdirectories',
|
|
'folderPicker.cancel': 'Cancel',
|
|
'folderPicker.select': 'Select This Folder',
|
|
|
|
// ── Import session dialog ───────────────────────────────────
|
|
'import.title': 'Import Session from Claude CLI',
|
|
'import.searchSessions': 'Search sessions...',
|
|
'import.noSessions': 'No sessions found',
|
|
'import.import': 'Import',
|
|
'import.importing': 'Importing...',
|
|
'import.justNow': 'just now',
|
|
'import.minutesAgo': '{n}m ago',
|
|
'import.hoursAgo': '{n}h ago',
|
|
'import.daysAgo': '{n}d ago',
|
|
'import.messages': '{n} msg',
|
|
'import.messagesPlural': '{n} msgs',
|
|
|
|
// ── Connection status ───────────────────────────────────────
|
|
'connection.notInstalled': 'Claude Code is not installed',
|
|
'connection.installed': 'Claude Code is installed',
|
|
'connection.version': 'Version: {version}',
|
|
'connection.installPrompt': 'To use Claude Code features, you need to install the Claude Code CLI.',
|
|
'connection.runCommand': 'Run the following command in your terminal:',
|
|
'connection.installAuto': 'Install Claude Code Automatically',
|
|
'connection.refresh': 'Refresh',
|
|
'connection.installClaude': 'Install Claude Code',
|
|
'connection.connected': 'Connected',
|
|
'connection.disconnected': 'Disconnected',
|
|
'connection.checking': 'Checking',
|
|
|
|
// ── Install wizard ──────────────────────────────────────────
|
|
'install.title': 'Install Claude Code',
|
|
'install.checkingPrereqs': 'Checking prerequisites...',
|
|
'install.alreadyInstalled': 'Claude Code is already installed',
|
|
'install.readyToInstall': 'Ready to install',
|
|
'install.installing': 'Installing Claude Code...',
|
|
'install.complete': 'Installation complete',
|
|
'install.failed': 'Installation failed',
|
|
'install.copyLogs': 'Copy Logs',
|
|
'install.copied': 'Copied',
|
|
'install.install': 'Install',
|
|
'install.cancel': 'Cancel',
|
|
'install.retry': 'Retry',
|
|
'install.done': 'Done',
|
|
'install.recheck': 'Recheck',
|
|
'install.copy': 'Copy',
|
|
'install.homebrewRequired': 'Homebrew is required',
|
|
'install.homebrewDescription': 'Homebrew is the package manager for macOS. Node.js installation requires it.',
|
|
'install.homebrewSteps': 'Follow these steps:',
|
|
'install.homebrewStep1': 'Open Terminal',
|
|
'install.homebrewStep2': 'Paste the command above and press Enter',
|
|
'install.homebrewStep3': 'Follow the on-screen instructions to complete the installation',
|
|
'install.homebrewStep4': 'Come back here and click "Recheck"',
|
|
|
|
// ── Task list ───────────────────────────────────────────────
|
|
'tasks.all': 'All',
|
|
'tasks.active': 'Active',
|
|
'tasks.done': 'Done',
|
|
'tasks.addPlaceholder': 'Add a task...',
|
|
'tasks.addTask': 'Add task',
|
|
'tasks.loading': 'Loading tasks...',
|
|
'tasks.noTasks': 'No tasks yet',
|
|
'tasks.noMatching': 'No matching tasks',
|
|
|
|
// ── Tool call block ─────────────────────────────────────────
|
|
'tool.running': 'running',
|
|
'tool.success': 'success',
|
|
'tool.error': 'error',
|
|
|
|
// ── Common ──────────────────────────────────────────────────
|
|
'common.cancel': 'Cancel',
|
|
'common.save': 'Save',
|
|
'common.delete': 'Delete',
|
|
'common.loading': 'Loading...',
|
|
'common.close': 'Close',
|
|
'common.enabled': 'Enabled',
|
|
'common.disabled': 'Disabled',
|
|
|
|
// ── Error boundary ────────────────────────────────────────
|
|
'error.title': 'Something went wrong',
|
|
'error.description': 'An unexpected error occurred. You can try again or reload the app.',
|
|
'error.showDetails': 'Show details',
|
|
'error.hideDetails': 'Hide details',
|
|
'error.tryAgain': 'Try Again',
|
|
'error.reloadApp': 'Reload App',
|
|
|
|
// ── Update ─────────────────────────────────────────────────
|
|
'update.newVersionAvailable': 'New Version Available',
|
|
'update.downloading': 'Downloading',
|
|
'update.restartToUpdate': 'Restart to Update',
|
|
'update.restartNow': 'Restart Now',
|
|
'update.readyToInstall': 'CodePilot v{version} is ready — restart to update',
|
|
'update.installUpdate': 'Download & Install',
|
|
'update.later': 'Later',
|
|
|
|
// ── Image Generation ──────────────────────────────────────
|
|
'imageGen.toggle': 'Image Generation',
|
|
'imageGen.toggleLabel': 'Image Agent',
|
|
'imageGen.toggleTooltip': 'Toggle Image Agent — AI analyzes intent and generates single or batch images',
|
|
'imageGen.generating': 'Generating image...',
|
|
'imageGen.params': 'Generation Parameters',
|
|
'imageGen.aspectRatio': 'Aspect Ratio',
|
|
'imageGen.resolution': 'Resolution',
|
|
'imageGen.generate': 'Generate',
|
|
'imageGen.regenerate': 'Regenerate',
|
|
'imageGen.download': 'Download',
|
|
'imageGen.prompt': 'Prompt',
|
|
'imageGen.model': 'Model',
|
|
'imageGen.noApiKey': 'Please configure Gemini API Key in Settings > Providers',
|
|
'imageGen.error': 'Image generation failed',
|
|
'imageGen.success': 'Image generated successfully',
|
|
'imageGen.referenceImages': 'Reference Images',
|
|
'imageGen.uploadReference': 'Upload reference image',
|
|
'imageGen.resetChat': 'Reset conversation',
|
|
'imageGen.multiTurnHint': 'You can describe changes to modify the generated image',
|
|
'imageGen.settings': 'Generation Settings',
|
|
'imageGen.generated': 'Generated image',
|
|
'imageGen.confirmTitle': 'Image Generation',
|
|
'imageGen.editPrompt': 'Edit prompt',
|
|
'imageGen.generateButton': 'Generate',
|
|
'imageGen.retryButton': 'Retry',
|
|
'imageGen.generatingStatus': 'Generating...',
|
|
'imageGen.stopButton': 'Stop',
|
|
|
|
// ── Batch Image Generation ─────────────────────────────────
|
|
'batchImageGen.toggle': 'Batch Generate',
|
|
'batchImageGen.toggleTooltip': 'Toggle batch image generation mode',
|
|
'batchImageGen.entryTitle': 'Batch Image Generation',
|
|
'batchImageGen.stylePrompt': 'Style Prompt',
|
|
'batchImageGen.stylePromptPlaceholder': 'Describe the visual style for all images...',
|
|
'batchImageGen.uploadDocs': 'Upload Documents',
|
|
'batchImageGen.uploadDocsHint': 'Upload text/markdown files as source content',
|
|
'batchImageGen.count': 'Image Count',
|
|
'batchImageGen.countAuto': 'Auto',
|
|
'batchImageGen.aspectRatioStrategy': 'Aspect Ratio',
|
|
'batchImageGen.resolution': 'Resolution',
|
|
'batchImageGen.generatePlan': 'Generate Plan',
|
|
'batchImageGen.planning': 'Planning...',
|
|
'batchImageGen.planPreviewTitle': 'Generation Plan',
|
|
'batchImageGen.planSummary': 'Plan Summary',
|
|
'batchImageGen.editPrompt': 'Edit prompt',
|
|
'batchImageGen.addItem': 'Add Item',
|
|
'batchImageGen.removeItem': 'Remove',
|
|
'batchImageGen.regeneratePlan': 'Regenerate Plan',
|
|
'batchImageGen.confirmAndExecute': 'Confirm & Execute',
|
|
'batchImageGen.executing': 'Executing...',
|
|
'batchImageGen.totalProgress': 'Progress',
|
|
'batchImageGen.itemPending': 'Pending',
|
|
'batchImageGen.itemProcessing': 'Generating...',
|
|
'batchImageGen.itemCompleted': 'Done',
|
|
'batchImageGen.itemFailed': 'Failed',
|
|
'batchImageGen.retryFailed': 'Retry Failed',
|
|
'batchImageGen.retryItem': 'Retry',
|
|
'batchImageGen.pause': 'Pause',
|
|
'batchImageGen.resume': 'Resume',
|
|
'batchImageGen.cancel': 'Cancel',
|
|
'batchImageGen.syncToChat': 'Sync to Conversation',
|
|
'batchImageGen.syncComplete': 'Synced to conversation',
|
|
'batchImageGen.syncMode': 'Sync Mode',
|
|
'batchImageGen.syncManual': 'Manual',
|
|
'batchImageGen.syncAutoBatch': 'Auto Batch',
|
|
'batchImageGen.completed': 'Batch generation complete',
|
|
'batchImageGen.completedStats': '{completed}/{total} images generated',
|
|
'batchImageGen.noProvider': 'Please configure a text generation provider in Settings',
|
|
'batchImageGen.tags': 'Tags',
|
|
'batchImageGen.sourceRefs': 'Sources',
|
|
'batchImageGen.prompt': 'Prompt',
|
|
'batchImageGen.aspectRatio': 'Ratio',
|
|
'batchImageGen.imageSize': 'Size',
|
|
|
|
// ── Gallery ─────────────────────────────────────────────────
|
|
'gallery.title': 'Gallery',
|
|
'gallery.empty': 'No images generated yet',
|
|
'gallery.emptyHint': 'Generate images in chat to see them here.',
|
|
'gallery.filterByTag': 'Filter by tag',
|
|
'gallery.dateFrom': 'From',
|
|
'gallery.dateTo': 'To',
|
|
'gallery.sortNewest': 'Newest first',
|
|
'gallery.sortOldest': 'Oldest first',
|
|
'gallery.newestFirst': 'Newest first',
|
|
'gallery.oldestFirst': 'Oldest first',
|
|
'gallery.filters': 'Filters',
|
|
'gallery.clearFilters': 'Clear filters',
|
|
'gallery.loadMore': 'Load more',
|
|
'gallery.openChat': 'Open Chat',
|
|
'gallery.delete': 'Delete',
|
|
'gallery.confirmDelete': 'Confirm delete?',
|
|
'gallery.deleteConfirm': 'Delete this image? This cannot be undone.',
|
|
'gallery.tags': 'Tags',
|
|
'gallery.addTag': 'Add tag',
|
|
'gallery.newTag': 'New tag name',
|
|
'gallery.newTagPlaceholder': 'New tag name...',
|
|
'gallery.cancel': 'Cancel',
|
|
'gallery.removeTag': 'Remove tag',
|
|
'gallery.noTags': 'No tags',
|
|
'gallery.generatedAt': 'Generated at',
|
|
'gallery.viewDetails': 'View details',
|
|
'gallery.imageDetail': 'Image Detail',
|
|
'gallery.prompt': 'Prompt',
|
|
'gallery.download': 'Download',
|
|
'gallery.favorites': 'Favorites',
|
|
'gallery.favoritesOnly': 'Favorites',
|
|
'gallery.addToFavorites': 'Add to favorites',
|
|
'gallery.removeFromFavorites': 'Remove from favorites',
|
|
|
|
// ── Provider: Gemini Image ──────────────────────────────────
|
|
'provider.chatProviders': 'Chat Providers',
|
|
'provider.mediaProviders': 'Media Providers',
|
|
'provider.geminiImageDesc': 'Nano Banana Pro — AI image generation by Google Gemini',
|
|
|
|
// ── CLI dynamic field labels ──────────────────────────────
|
|
'cli.loadingSettings': 'Loading settings...',
|
|
'cli.field.skipDangerousModePermissionPrompt': 'Skip Dangerous Mode Permission Prompt',
|
|
'cli.field.verbose': 'Verbose',
|
|
'cli.field.theme': 'Theme',
|
|
'cli.formatError': 'Cannot format: invalid JSON',
|
|
|
|
// ── Split screen ─────────────────────────────────────────────
|
|
'split.splitScreen': 'Split Screen',
|
|
'split.closeSplit': 'Close Split',
|
|
'split.splitGroup': 'Split',
|
|
'chatList.splitScreen': 'Split Screen',
|
|
} as const;
|
|
|
|
export type TranslationKey = keyof typeof en;
|
|
export default en;
|