export default { aiChat: { // ── Conversation sidebar ── sidebarTitle: 'Chats', newConversation: 'New chat', doubleClickToRename: 'Double-click to rename', archive: 'Archive', unarchive: 'Unarchive', pinConversation: 'Pin', unpinConversation: 'Unpin', archived: 'Archived', archivedCount: 'Archived ({n})', emptyConversation: 'No conversations', // UX-06 §3.1: conversation search (live title filter, Ctrl+K to focus) searchPlaceholder: 'Search chats…', searchEmpty: 'No matching chats', searchShortcutHint: 'Ctrl+K', // ── Time grouping (sidebar) ── today: 'Today', yesterday: 'Yesterday', earlier: 'Earlier', // ── Header buttons ── conversationList: 'Chat list', maximize: 'Maximize', pendingApprovalCount: '{n} pending', pendingApprovalHint: 'Click to jump to the first pending approval', restoreSidebar: 'Restore sidebar', sidebarResizeHint: 'Drag to resize sidebar', detachWindow: 'Detach window', closePanel: 'Close panel', dockRight: 'Dock to main window right', undock: 'Undock', pinOnTop: 'Pin on top', unpin: 'Unpin', closeWindow: 'Close window', // ── Provider status ── clickToSwitchProvider: 'Click to switch provider', providerNotConfigured: 'No AI provider configured. Please add one in settings.', notConfigured: 'Not configured', // ── Empty states (UX-2025-20: example prompt cards + no-provider guidance) ── emptyNoProvider: 'No AI provider configured', emptyNoProviderHint: 'Please add a provider in settings to start chatting', emptyTitle: 'Chat with AI assistant', emptyHint: 'Try "create a project" or "list all tasks"', // Example prompt cards: click to fill and send (4 prompts, DevFlow scenarios) examplePrompt1: 'Analyze this project’s dependencies', examplePrompt2: 'Help me write a workflow node', examplePrompt3: 'List all current tasks', examplePrompt4: 'Generate a project idea', goToSettings: 'Open settings', goToSettingsHint: 'The detached window cannot open settings directly. Configure AI providers on the main window’s Settings page.', // ── Provider switch feedback (UX-2025-14) ── providerSwitched: 'Switched to {model}', providerSwitchHint: 'Current model: {model}', // ── Back to bottom ── backToBottom: 'Back to bottom', // ── Pending queue ── queueTitle: 'Queued {n}/10', clearQueue: 'Clear', // UX-260616-06/07: queue item edit + send now queueEdit: 'Edit', queueSave: 'Save', queueCancel: 'Cancel', queueSendNow: 'Send now', // ── Skill ── clearSkill: 'Clear skill', placeholderWithSkill: 'Skill selected. Type arguments and press Enter', placeholderDefault: "Type a message... (/ for skills, {'@'} to mention)", skillNoMatch: 'No matching skill', skillNotLoaded: 'No local skills loaded', // ── UX-10: @ entity mention (@ opens popover, select inserts [Type:Name] token) ── mentionHint: "{'@'} to mention project/task", mentionGroupProject: 'Projects', mentionGroupTask: 'Tasks', mentionNoMatch: 'No matching entity', mentionEmpty: 'No project/task to mention', // ── Send ── stopGenerating: 'Stop generating', // ── Input hint ── inputHint: 'Enter to send · Shift+Enter for newline', // ── Confirm dialog ── confirmDeleteConversation: 'Delete chat "{title}"? This cannot be undone.', clearChat: 'Clear', confirmClearChat: 'Are you sure you want to clear all messages in this chat? This cannot be undone.', // UX-08 §3.4: generate-in-progress confirm when starting a new chat (only when generating, otherwise no behavior change) confirmNewConvWhileGenerating: 'Generation is in progress. Interrupt it and start a new chat?', toastSendFail: 'Send failed: {msg}', // ── Message copy (F-260615-13) ── copyMsg: 'Copy message', copied: 'Copied', copyFailed: 'Copy failed', // ── Message actions bar (UX-02) ── regenerate: 'Regenerate', regenerateFailed: 'Regenerate failed: {msg}', regenerateUnavailable: 'No reply to regenerate', // ── UX-09: edit last user message and regenerate ── editMessage: 'Edit', editMessageFailed: 'Edit failed: {msg}', editNotLastUser: 'Only the last user message can be edited', placeholderEditing: 'Edit message then Enter to regenerate (Esc to cancel)', // ── Error bubble actions (UX-03 / UX-260616-01) ── retry: 'Retry', goToSettingsAction: 'Open settings', // ── F-260616-03: max iterations reached pause action card ── maxRoundsReached: 'Max rounds reached. Continue?', maxRoundsHint: 'Continue runs another full round; stop ends with current results', continueLoop: 'Continue', stopLoop: 'Stop', continueLoopFailed: 'Continue failed: {msg}', stopLoopFailed: 'Stop failed: {msg}', // ── UX-18: conversation export (sidebar hover, pick format to download) ── exportConversation: 'Export chat', exportMarkdown: 'Markdown', exportJson: 'JSON', exportTxt: 'Plain text', exportFailed: 'Export failed: {msg}', }, }