* feat: add copy-as-markdown and copy-as-json buttons to question card Adds two small icon buttons in the QuestionCard header so users can copy the full question payload (text, options, descriptions) to the clipboard in either Markdown or JSON form. Useful for forwarding interactive questions to an external LLM or note. - Markdown serialization preserves question headers, multi-select hints and option descriptions. - JSON serialization mirrors the on-wire QuestionRequest shape for programmatic reuse. - Toast feedback on success/failure using the shared @/components/ui wrapper and the existing copyTextToClipboard helper (clipboard API with execCommand fallback). - New i18n keys added across all 7 locales. * test: extract question serializers and cover with 15 unit tests The two serializers backing the copy-as-markdown and copy-as-json buttons on QuestionCard were defined as top-level consts inside QuestionCard.tsx. Exposing them for unit tests would trip the react-refresh/only-export-components ESLint rule because that file also exports the QuestionCard component. Move serializeQuestionAsMarkdown and serializeQuestionAsJson into a React-free sibling module, questionSerializers.ts, and re-import them from QuestionCard.tsx. Behavior is byte-identical. Add 15 unit tests via bun:test covering header fallback, multi-select hint gating, blank-description elision, ordering across multiple questions, JSON canonical shape (no transient id/sessionID), boolean normalisation, and the empty-questions edge case.
2278 lines
147 KiB
TypeScript
2278 lines
147 KiB
TypeScript
import { settingsDict } from './en.settings';
|
|
|
|
export const dict = {
|
|
...settingsDict,
|
|
'common.loading': 'Loading...',
|
|
'common.unavailable': 'Unavailable',
|
|
'common.language.english': 'English',
|
|
'common.language.simplifiedChinese': 'Chinese (Simplified)',
|
|
'common.language.ukrainian': 'Ukrainian',
|
|
'common.language.spanish': 'Spanish',
|
|
'common.language.brazilianPortuguese': 'Brazilian Portuguese',
|
|
'common.language.korean': 'Korean',
|
|
'common.language.polish': 'Polish',
|
|
'common.revealPath.finder': 'Reveal in Finder',
|
|
'common.revealPath.fileExplorer': 'Open in File Explorer',
|
|
'common.revealPath.fileManager': 'Open in File Manager',
|
|
'pwa.installPrompt.description': 'Install OpenChamber for quicker access',
|
|
'pwa.installPrompt.action': 'Install',
|
|
'pwa.installPrompt.started': 'Install started',
|
|
'pwa.installPrompt.installed': 'OpenChamber installed',
|
|
'layout.mainTab.chat': 'Chat',
|
|
'layout.mainTab.plan': 'Plan',
|
|
'layout.mainTab.diff': 'Diff',
|
|
'layout.mainTab.files': 'Files',
|
|
'layout.mainTab.terminal': 'Terminal',
|
|
'layout.rightSidebar.git': 'Git',
|
|
'layout.rightSidebar.files': 'Files',
|
|
'layout.rightSidebar.context': 'Context',
|
|
'layout.services.instance': 'Instance',
|
|
'layout.services.usage': 'Usage',
|
|
'sessions.sidebar.header.actions.closeSessions': 'Close sessions',
|
|
'sessions.sidebar.header.actions.addProject': 'Add project',
|
|
'sessions.sidebar.header.actions.newSession': 'New session',
|
|
'sessions.sidebar.header.actions.newMultiRun': 'New multi-run',
|
|
'sessions.sidebar.header.actions.scheduledTasks': 'Scheduled tasks',
|
|
'sessions.scheduledTasks.dialog.title': 'Scheduled tasks',
|
|
'sessions.scheduledTasks.dialog.description': 'Server-side tasks that create a new session and send a configured prompt.',
|
|
'sessions.scheduledTasks.dialog.project.label': 'Project',
|
|
'sessions.scheduledTasks.dialog.project.placeholder': 'Select project',
|
|
'sessions.scheduledTasks.dialog.project.empty': 'No projects',
|
|
'sessions.scheduledTasks.dialog.actions.newTask': 'New task',
|
|
'sessions.scheduledTasks.dialog.actions.runNow': 'Run now',
|
|
'sessions.scheduledTasks.dialog.actions.edit': 'Edit',
|
|
'sessions.scheduledTasks.dialog.actions.editAria': 'Edit {taskName}',
|
|
'sessions.scheduledTasks.dialog.actions.deleteAria': 'Delete {taskName}',
|
|
'sessions.scheduledTasks.dialog.loading': 'Loading tasks...',
|
|
'sessions.scheduledTasks.dialog.empty.noTasks': 'No scheduled tasks yet.',
|
|
'sessions.scheduledTasks.dialog.empty.selectProject': 'Select a project to manage scheduled tasks.',
|
|
'sessions.scheduledTasks.dialog.error.chooseProjectFirst': 'Choose a project first',
|
|
'sessions.scheduledTasks.dialog.toast.loadFailed': 'Failed to load scheduled tasks',
|
|
'sessions.scheduledTasks.dialog.toast.saved': 'Scheduled task saved',
|
|
'sessions.scheduledTasks.dialog.toast.updateFailed': 'Failed to update task',
|
|
'sessions.scheduledTasks.dialog.toast.deleted': 'Scheduled task deleted',
|
|
'sessions.scheduledTasks.dialog.toast.deleteFailed': 'Failed to delete task',
|
|
'sessions.scheduledTasks.dialog.toast.started': 'Task started',
|
|
'sessions.scheduledTasks.dialog.toast.runFailed': 'Failed to run task',
|
|
'sessions.scheduledTasks.dialog.confirm.deleteTask': 'Delete scheduled task "{taskName}"?',
|
|
'sessions.scheduledTasks.dialog.schedule.daily': 'Daily {time}',
|
|
'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': 'Daily {time} ({timezone})',
|
|
'sessions.scheduledTasks.dialog.schedule.weekly': 'Weekly {days} {time}',
|
|
'sessions.scheduledTasks.dialog.schedule.weeklyWithTimezone': 'Weekly {days} {time} ({timezone})',
|
|
'sessions.scheduledTasks.dialog.schedule.once': 'One-time {date} {time}',
|
|
'sessions.scheduledTasks.dialog.schedule.onceWithTimezone': 'One-time {date} {time} ({timezone})',
|
|
'sessions.scheduledTasks.dialog.schedule.cron': 'Cron: {cron}',
|
|
'sessions.scheduledTasks.dialog.schedule.cronWithTimezone': 'Cron: {cron} ({timezone})',
|
|
'sessions.scheduledTasks.dialog.schedule.unknownDate': 'Unknown date',
|
|
'sessions.scheduledTasks.dialog.schedule.weekdayShort.sun': 'Sun',
|
|
'sessions.scheduledTasks.dialog.schedule.weekdayShort.mon': 'Mon',
|
|
'sessions.scheduledTasks.dialog.schedule.weekdayShort.tue': 'Tue',
|
|
'sessions.scheduledTasks.dialog.schedule.weekdayShort.wed': 'Wed',
|
|
'sessions.scheduledTasks.dialog.schedule.weekdayShort.thu': 'Thu',
|
|
'sessions.scheduledTasks.dialog.schedule.weekdayShort.fri': 'Fri',
|
|
'sessions.scheduledTasks.dialog.schedule.weekdayShort.sat': 'Sat',
|
|
'sessions.scheduledTasks.dialog.schedule.weekdayShort.unknown': '?',
|
|
'sessions.scheduledTasks.dialog.relativeTime.inLessThanOneMinute': 'in <1m',
|
|
'sessions.scheduledTasks.dialog.relativeTime.justNow': 'just now',
|
|
'sessions.scheduledTasks.dialog.relativeTime.inMinutes': 'in {count}m',
|
|
'sessions.scheduledTasks.dialog.relativeTime.minutesAgo': '{count}m ago',
|
|
'sessions.scheduledTasks.dialog.relativeTime.inDuration': 'in {duration}',
|
|
'sessions.scheduledTasks.dialog.relativeTime.durationAgo': '{duration} ago',
|
|
'sessions.scheduledTasks.dialog.status.success': 'Success',
|
|
'sessions.scheduledTasks.dialog.status.error': 'Error',
|
|
'sessions.scheduledTasks.dialog.status.running': 'Running',
|
|
'sessions.scheduledTasks.dialog.status.idle': 'Idle',
|
|
'sessions.scheduledTasks.dialog.nextRun.label': 'Next',
|
|
'sessions.scheduledTasks.dialog.lastRun.label': 'Last run',
|
|
'sessions.scheduledTasks.dialog.lastRun.runningNow': 'running now',
|
|
'sessions.scheduledTasks.dialog.lastRun.never': 'never',
|
|
'sessions.scheduledTasks.dialog.taskToggle.enableAria': 'Enable {taskName}',
|
|
'sessions.scheduledTasks.dialog.taskToggle.pauseAria': 'Pause {taskName}',
|
|
'sessions.scheduledTasks.dialog.taskToggle.enabled': 'Enabled',
|
|
'sessions.scheduledTasks.dialog.taskToggle.paused': 'Paused',
|
|
'sessions.scheduledTasks.editor.title.edit': 'Edit scheduled task',
|
|
'sessions.scheduledTasks.editor.title.new': 'New scheduled task',
|
|
'sessions.scheduledTasks.editor.description': 'Configure a server-side task that creates a new session and sends a prompt.',
|
|
'sessions.scheduledTasks.editor.taskName.label': 'Task name',
|
|
'sessions.scheduledTasks.editor.taskName.placeholder': 'Daily sync',
|
|
'sessions.scheduledTasks.editor.scheduleType.label': 'Schedule type',
|
|
'sessions.scheduledTasks.editor.scheduleType.daily': 'Daily',
|
|
'sessions.scheduledTasks.editor.scheduleType.weekly': 'Weekly',
|
|
'sessions.scheduledTasks.editor.scheduleType.once': 'One-time',
|
|
'sessions.scheduledTasks.editor.date.label': 'Date',
|
|
'sessions.scheduledTasks.editor.date.placeholder': 'Select date',
|
|
'sessions.scheduledTasks.editor.date.previousMonth': 'Previous month',
|
|
'sessions.scheduledTasks.editor.date.nextMonth': 'Next month',
|
|
'sessions.scheduledTasks.editor.date.jumpToToday': 'Jump to today',
|
|
'sessions.scheduledTasks.editor.date.today': 'Today',
|
|
'sessions.scheduledTasks.editor.time.label': 'Time',
|
|
'sessions.scheduledTasks.editor.time.hourAria': 'Hours',
|
|
'sessions.scheduledTasks.editor.time.minuteAria': 'Minutes',
|
|
'sessions.scheduledTasks.editor.time.periodAria': 'Period',
|
|
'sessions.scheduledTasks.editor.time.period.am': 'AM',
|
|
'sessions.scheduledTasks.editor.time.period.pm': 'PM',
|
|
'sessions.scheduledTasks.editor.times.label': 'Times',
|
|
'sessions.scheduledTasks.editor.times.add': 'Add time',
|
|
'sessions.scheduledTasks.editor.times.removeAria': 'Remove time',
|
|
'sessions.scheduledTasks.editor.timezone.label': 'Timezone',
|
|
'sessions.scheduledTasks.editor.weekdays.label': 'Weekdays',
|
|
'sessions.scheduledTasks.editor.model.label': 'Model',
|
|
'sessions.scheduledTasks.editor.thinkingLevel.label': 'Thinking level',
|
|
'sessions.scheduledTasks.editor.thinkingLevel.default': 'Default',
|
|
'sessions.scheduledTasks.editor.agent.label': 'Agent',
|
|
'sessions.scheduledTasks.editor.prompt.label': 'Prompt',
|
|
'sessions.scheduledTasks.editor.prompt.placeholder': 'Summarize open tasks and propose next actions',
|
|
'sessions.scheduledTasks.editor.enabled.aria': 'Enable task',
|
|
'sessions.scheduledTasks.editor.enabled.label': 'Enabled',
|
|
'sessions.scheduledTasks.editor.actions.closeAria': 'Close',
|
|
'sessions.scheduledTasks.editor.actions.cancel': 'Cancel',
|
|
'sessions.scheduledTasks.editor.actions.save': 'Save',
|
|
'sessions.scheduledTasks.editor.actions.saving': 'Saving...',
|
|
'sessions.scheduledTasks.editor.toast.saveFailed': 'Failed to save task',
|
|
'sessions.scheduledTasks.editor.validation.taskNameRequired': 'Task name is required',
|
|
'sessions.scheduledTasks.editor.validation.promptRequired': 'Prompt is required',
|
|
'sessions.scheduledTasks.editor.validation.modelRequired': 'Model is required',
|
|
'sessions.scheduledTasks.editor.validation.dateFormat': 'Date must use YYYY-MM-DD',
|
|
'sessions.scheduledTasks.editor.validation.timeFormat': 'Time must use HH:mm',
|
|
'sessions.scheduledTasks.editor.validation.atLeastOneTime': 'Add at least one valid time',
|
|
'sessions.scheduledTasks.editor.validation.atLeastOneWeekday': 'Select at least one weekday',
|
|
'sessions.scheduledTasks.editor.validation.timezoneRequired': 'Timezone is required',
|
|
'multirun.launcher.title': 'New Multi-Run',
|
|
'multirun.launcher.actions.closeEsc': 'Close (Esc)',
|
|
'multirun.launcher.actions.cancel': 'Cancel',
|
|
'multirun.launcher.actions.creating': 'Creating...',
|
|
'multirun.launcher.actions.startWithModelCount': 'Start ({count} models)',
|
|
'multirun.launcher.project.label': 'Project',
|
|
'multirun.launcher.project.placeholder': 'Select project',
|
|
'multirun.launcher.project.empty': 'Add a project first.',
|
|
'multirun.launcher.project.gitRequired': 'No worktree isolation: runs use the same directory.',
|
|
'multirun.launcher.groupName.label': 'Group name',
|
|
'multirun.launcher.groupName.info': 'Used for worktree directory and branch names',
|
|
'multirun.launcher.groupName.placeholder': 'feature-auth, bugfix-login',
|
|
'multirun.launcher.baseBranch.label': 'Base branch',
|
|
'multirun.launcher.baseBranch.info': 'New branch created from this base per model',
|
|
'multirun.launcher.isolateRuns.label': 'Isolate runs',
|
|
'multirun.launcher.agent.label': 'Agent',
|
|
'multirun.launcher.agent.info': 'Agent used for all runs. Defaults to your configured agent.',
|
|
'multirun.launcher.setupCommands.label': 'Setup commands',
|
|
'multirun.launcher.setupCommands.loading': 'Loading...',
|
|
'multirun.launcher.setupCommands.commandPlaceholder': 'bun install',
|
|
'multirun.launcher.setupCommands.removeCommandAria': 'Remove command',
|
|
'multirun.launcher.setupCommands.addCommand': 'Add command',
|
|
'multirun.launcher.prompt.label': 'Prompt',
|
|
'multirun.launcher.prompt.placeholder': 'Enter the prompt to send to all models...',
|
|
'multirun.launcher.attachments.attach': 'Attach',
|
|
'multirun.launcher.attachments.tooltip': 'Same files sent to all runs',
|
|
'multirun.launcher.models.label': 'Models',
|
|
'multirun.launcher.models.info': 'Select 2-{max} models. Same model can be added multiple times.',
|
|
'multirun.launcher.toast.fileTooLarge': 'File "{fileName}" is too large (max 10MB)',
|
|
'multirun.launcher.toast.attachFailed': 'Failed to attach "{fileName}"',
|
|
'multirun.launcher.toast.attachedSingle': 'Attached {count} file',
|
|
'multirun.launcher.toast.attachedPlural': 'Attached {count} files',
|
|
'multirun.modelMultiSelect.actions.addModel': 'Add model',
|
|
'multirun.modelMultiSelect.search.placeholder': 'Search models',
|
|
'multirun.modelMultiSelect.search.noResults': 'No models found',
|
|
'multirun.modelMultiSelect.sections.favorites': 'Favorites',
|
|
'multirun.modelMultiSelect.sections.recent': 'Recent',
|
|
'multirun.modelMultiSelect.variant.placeholder': 'Thinking',
|
|
'multirun.modelMultiSelect.variant.default': 'Default',
|
|
'multirun.modelMultiSelect.keyboard.hint': '↑↓ navigate • Enter select • Esc close',
|
|
'multirun.modelMultiSelect.validation.minOnly': 'Select at least {min} models.',
|
|
'multirun.modelMultiSelect.validation.minToMax': 'Select from {min} to {max} models.',
|
|
'multirun.agentSelector.placeholder': 'Select an agent',
|
|
'multirun.fusion.title': 'Run fusion',
|
|
'multirun.fusion.description': 'Combine the selected multi-run outputs into one stronger answer.',
|
|
'multirun.fusion.provider.placeholder': 'Provider',
|
|
'multirun.fusion.model.placeholder': 'Model',
|
|
'multirun.fusion.sources.label': 'Sources ({count})',
|
|
'multirun.fusion.actions.cancel': 'Cancel',
|
|
'multirun.fusion.actions.start': 'Start fusion',
|
|
'multirun.fusion.actions.starting': 'Starting...',
|
|
'multirun.fusion.toast.noOutputs': 'No assistant outputs found to fuse.',
|
|
'multirun.fusion.toast.failed': 'Failed to start fusion.',
|
|
'sessions.sidebar.header.actions.searchSessions': 'Search sessions',
|
|
'sessions.sidebar.header.actions.exitSelection': 'Exit selection',
|
|
'sessions.sidebar.header.actions.selectSessions': 'Select sessions',
|
|
'sessions.sidebar.header.actions.sessionDisplayMode': 'Session display mode',
|
|
'sessions.sidebar.header.displayMode.label': 'Display mode',
|
|
'sessions.sidebar.header.displayMode.default': 'Default',
|
|
'sessions.sidebar.header.displayMode.minimal': 'Minimal',
|
|
'sessions.sidebar.header.displayMode.showRecent': 'Show recent section',
|
|
'sessions.sidebar.header.displayMode.collapseAll': 'Collapse all',
|
|
'sessions.sidebar.header.displayMode.expandAll': 'Expand all',
|
|
'sessions.sidebar.header.search.matchCountSingle': '{count} match',
|
|
'sessions.sidebar.header.search.matchCountPlural': '{count} matches',
|
|
'sessions.sidebar.header.search.escapeHint': 'Esc to clear',
|
|
'sessions.sidebar.header.search.placeholder': 'Search sessions...',
|
|
'sessions.sidebar.header.search.clear': 'Clear search',
|
|
'sessions.sidebar.footer.actions.settings': 'Settings',
|
|
'sessions.sidebar.footer.actions.shortcuts': 'Shortcuts',
|
|
'sessions.sidebar.footer.actions.aboutOpenChamber': 'About OpenChamber',
|
|
'sessions.sidebar.footer.actions.update': 'Update',
|
|
'sessions.sidebar.empty.noSessions.title': 'No sessions yet',
|
|
'sessions.sidebar.empty.noSessions.description': 'Create your first session to start coding.',
|
|
'sessions.sidebar.empty.noMatches.title': 'No matching sessions',
|
|
'sessions.sidebar.empty.noMatches.description': 'Try a different title, branch, folder, or path.',
|
|
'sessions.sidebar.activity.recentTitle': 'recent',
|
|
'sessions.switcher.openAria': 'Open session switcher',
|
|
'sessions.switcher.empty': 'No recent sessions',
|
|
'sessions.switcher.draftTitle': 'New session',
|
|
'sessions.sidebar.updateCheck.errorTitle': 'Failed to check for updates',
|
|
'sessions.sidebar.updateCheck.latestVersion': 'You are on the latest version',
|
|
'sessions.sidebar.directory.errorAddProjectTitle': 'Failed to add project',
|
|
'sessions.sidebar.directory.errorAddProjectDescription': 'Please select a valid directory.',
|
|
'sessions.sidebar.directory.errorSelectDirectoryTitle': 'Failed to select directory',
|
|
'sessions.sidebar.folder.newFolderName': 'New folder',
|
|
'sessions.sidebar.bulkActions.delete': 'Delete',
|
|
'sessions.sidebar.bulkActions.archive': 'Archive',
|
|
'sessions.sidebar.bulkActions.selectedCount': '{count} selected',
|
|
'sessions.sidebar.bulkActions.moveToFolder': 'Move to folder',
|
|
'sessions.sidebar.bulkActions.deletedSingle': 'Deleted {count} session',
|
|
'sessions.sidebar.bulkActions.deletedPlural': 'Deleted {count} sessions',
|
|
'sessions.sidebar.bulkActions.failedDeleteSingle': 'Failed to delete {count} session',
|
|
'sessions.sidebar.bulkActions.failedDeletePlural': 'Failed to delete {count} sessions',
|
|
'sessions.sidebar.bulkActions.archivedSingle': 'Archived {count} session',
|
|
'sessions.sidebar.bulkActions.archivedPlural': 'Archived {count} sessions',
|
|
'sessions.sidebar.bulkActions.failedArchiveSingle': 'Failed to archive {count} session',
|
|
'sessions.sidebar.bulkActions.failedArchivePlural': 'Failed to archive {count} sessions',
|
|
'sessions.sidebar.folders.none': 'No folders yet',
|
|
'sessions.sidebar.folders.newFolderEllipsis': 'New folder...',
|
|
'sessions.sidebar.folders.removeFromFolder': 'Remove from folder',
|
|
'sessions.sidebar.folders.moveToFolder': 'Move to folder',
|
|
'sessions.sidebar.project.actions.newWorktree': 'New worktree',
|
|
'sessions.sidebar.project.actions.newWorktreeEllipsis': 'New worktree...',
|
|
'sessions.sidebar.project.actions.projectMenu': 'Project menu',
|
|
'sessions.sidebar.project.actions.newSession': 'New session',
|
|
'sessions.sidebar.project.actions.closeProject': 'Close project',
|
|
'sessions.sidebar.project.actions.newDraftSession': 'New draft session',
|
|
'sessions.sidebar.session.menu.rename': 'Rename',
|
|
'sessions.sidebar.session.rename.save': 'Save session name',
|
|
'sessions.sidebar.session.rename.cancel': 'Cancel renaming session',
|
|
'sessions.sidebar.session.menu.unpin': 'Unpin session',
|
|
'sessions.sidebar.session.menu.pin': 'Pin session',
|
|
'sessions.sidebar.session.menu.share': 'Share',
|
|
'sessions.sidebar.session.menu.copied': 'Copied',
|
|
'sessions.sidebar.session.menu.copyLink': 'Copy link',
|
|
'sessions.sidebar.session.menu.unshare': 'Unshare',
|
|
'sessions.sidebar.session.menu.exportMarkdown': 'Export Markdown',
|
|
'sessions.sidebar.session.menu.runFusion': 'Run fusion',
|
|
'sessions.sidebar.session.menu.openInSidePanel': 'Open in Side Panel',
|
|
'sessions.sidebar.session.menu.betaBadge': 'beta',
|
|
'sessions.sidebar.session.menu.label': 'Session menu',
|
|
'sessions.sidebar.session.untitled': 'Untitled Session',
|
|
'sessions.sidebar.session.export.nothingToExport': 'Nothing to export',
|
|
'sessions.sidebar.session.export.success': 'Session exported',
|
|
'sessions.sidebar.session.export.failedRevealPath': 'Failed to reveal path',
|
|
'sessions.sidebar.session.export.untitledSubagent': 'Untitled Sub-agent',
|
|
'sessions.sidebar.session.export.skippedSubtaskSingle': 'Exported session, but skipped {count} sub-agent task that could not be loaded.',
|
|
'sessions.sidebar.session.export.skippedSubtaskMany': 'Exported session, but skipped {count} sub-agent tasks that could not be loaded.',
|
|
'sessions.sidebar.session.export.dialog.title': 'Export Markdown',
|
|
'sessions.sidebar.session.export.dialog.descriptionSingle': 'This session has {count} sub-agent task. Include it in the export?',
|
|
'sessions.sidebar.session.export.dialog.descriptionMany': 'This session has {count} sub-agent tasks. Include them in the export?',
|
|
'sessions.sidebar.session.export.dialog.includeSubtasks': 'Include sub-agent tasks',
|
|
'sessions.sidebar.session.export.dialog.confirm': 'Export',
|
|
'sessions.sidebar.session.status.active': 'Session active',
|
|
'sessions.sidebar.session.status.unread': 'Unread updates',
|
|
'sessions.sidebar.session.status.pinned': 'Pinned session',
|
|
'sessions.sidebar.session.status.permissionRequired': 'Permission required',
|
|
'sessions.sidebar.session.subsessions.collapse': 'Collapse subsessions',
|
|
'sessions.sidebar.session.subsessions.expand': 'Expand subsessions',
|
|
'sessions.sidebar.dialogs.deleteSession.title': 'Delete session?',
|
|
'sessions.sidebar.dialogs.archiveSession.title': 'Archive session?',
|
|
'sessions.sidebar.dialogs.deleteSession.withOneSubtask': '"{sessionTitle}" and its {count} sub-task will be permanently deleted.',
|
|
'sessions.sidebar.dialogs.deleteSession.withManySubtasks': '"{sessionTitle}" and its {count} sub-tasks will be permanently deleted.',
|
|
'sessions.sidebar.dialogs.archiveSession.withOneSubtask': '"{sessionTitle}" and its {count} sub-task will be archived.',
|
|
'sessions.sidebar.dialogs.archiveSession.withManySubtasks': '"{sessionTitle}" and its {count} sub-tasks will be archived.',
|
|
'sessions.sidebar.dialogs.deleteSession.single': '"{sessionTitle}" will be permanently deleted.',
|
|
'sessions.sidebar.dialogs.archiveSession.single': '"{sessionTitle}" will be archived.',
|
|
'sessions.sidebar.dialogs.neverAsk': 'Never ask',
|
|
'sessions.sidebar.dialogs.cancel': 'Cancel',
|
|
'sessions.sidebar.dialogs.deleteSession.titleAction': 'Delete session',
|
|
'sessions.sidebar.dialogs.deleteSessions.titleAction': 'Delete sessions',
|
|
'sessions.sidebar.dialogs.deleteSessions.title': 'Delete sessions?',
|
|
'sessions.sidebar.dialogs.archiveSessions.title': 'Archive sessions?',
|
|
'sessions.sidebar.dialogs.deleteSessions.singleDescription': '{count} session will be permanently deleted.',
|
|
'sessions.sidebar.dialogs.deleteSessions.pluralDescription': '{count} sessions will be permanently deleted.',
|
|
'sessions.sidebar.dialogs.archiveSessions.singleDescription': '{count} session will be archived.',
|
|
'sessions.sidebar.dialogs.archiveSessions.pluralDescription': '{count} sessions will be archived.',
|
|
'sessions.sidebar.dialogs.deleteFolder.title': 'Delete folder?',
|
|
'sessions.sidebar.dialogs.deleteFolder.withOneSubfolder': '"{folderName}" will be deleted along with {count} sub-folder. Sessions inside will not be deleted.',
|
|
'sessions.sidebar.dialogs.deleteFolder.withManySubfolders': '"{folderName}" will be deleted along with {count} sub-folders. Sessions inside will not be deleted.',
|
|
'sessions.sidebar.dialogs.deleteFolder.withContentsNoSubfolders': '"{folderName}" will be deleted. Sessions inside will not be deleted.',
|
|
'sessions.sidebar.dialogs.deleteFolder.single': '"{folderName}" will be permanently deleted.',
|
|
'sessions.sidebar.dialogs.deleteResult.singleFailedToDelete': '{count} session could not be deleted.',
|
|
'sessions.sidebar.dialogs.deleteResult.manyFailedToDelete': '{count} sessions could not be deleted.',
|
|
'sessions.sidebar.dialogs.deleteResult.singleFailedToArchive': '{count} session could not be archived.',
|
|
'sessions.sidebar.dialogs.deleteResult.manyFailedToArchive': '{count} sessions could not be archived.',
|
|
'sessions.sidebar.dialogs.deleteResult.removedFromDate': 'Removed all sessions from {dateLabel}.',
|
|
'sessions.sidebar.dialogs.deleteResult.tryAgain': 'Please try again in a moment.',
|
|
'sessions.sidebar.dialogs.worktreeDelete.descriptionNoLinked': 'This removes the selected worktree.',
|
|
'sessions.sidebar.dialogs.worktreeDelete.descriptionOneLinked': 'This removes the selected worktree and archives {count} linked session.',
|
|
'sessions.sidebar.dialogs.worktreeDelete.descriptionManyLinked': 'This removes the selected worktree and archives {count} linked sessions.',
|
|
'sessions.sidebar.dialogs.sessionDelete.descriptionOne': 'This action permanently removes 1 session.',
|
|
'sessions.sidebar.dialogs.sessionDelete.descriptionOneWithDate': 'This action permanently removes 1 session from {dateLabel}.',
|
|
'sessions.sidebar.dialogs.sessionDelete.descriptionMany': 'This action permanently removes {count} sessions.',
|
|
'sessions.sidebar.dialogs.sessionDelete.descriptionManyWithDate': 'This action permanently removes {count} sessions from {dateLabel}.',
|
|
'sessions.sidebar.dialogs.sessionList.more': '+{count} more',
|
|
'sessions.sidebar.session.share.successTitle': 'Session shared',
|
|
'sessions.sidebar.session.share.successDescription': 'You can copy the link from the menu.',
|
|
'sessions.sidebar.session.share.error': 'Unable to share session',
|
|
'sessions.sidebar.session.share.copyUrlError': 'Failed to copy URL',
|
|
'sessions.sidebar.session.unshare.success': 'Session unshared',
|
|
'sessions.sidebar.session.unshare.error': 'Unable to unshare session',
|
|
'sessions.sidebar.session.delete.success': 'Session deleted',
|
|
'sessions.sidebar.session.delete.error': 'Failed to delete session',
|
|
'sessions.sidebar.session.archive.success': 'Session archived',
|
|
'sessions.sidebar.session.archive.error': 'Failed to archive session',
|
|
'sessions.sidebar.group.pr.checksPassed': '{success}/{total} checks passed',
|
|
'sessions.sidebar.group.pr.failingCount': '{count} failing',
|
|
'sessions.sidebar.group.pr.pendingCount': '{count} pending',
|
|
'sessions.sidebar.group.pr.conflictsOrBlocked': 'Conflicts or blocked',
|
|
'sessions.sidebar.group.pr.mergeable': 'Mergeable',
|
|
'sessions.sidebar.group.pr.mergeState': 'Merge state: {state}',
|
|
'sessions.sidebar.group.pr.status.merged': 'Merged',
|
|
'sessions.sidebar.group.pr.status.readyToMerge': 'Ready to merge',
|
|
'sessions.sidebar.group.pr.status.open': 'PR open',
|
|
'sessions.sidebar.group.pr.status.mergeConflicts': 'Merge conflicts',
|
|
'sessions.sidebar.group.pr.status.mergeBlocked': 'Merge blocked',
|
|
'sessions.sidebar.group.pr.status.draft': 'Draft PR',
|
|
'sessions.sidebar.group.pr.status.closed': 'Closed',
|
|
'sessions.sidebar.group.empty.noArchivedSessions': 'No archived sessions yet.',
|
|
'sessions.sidebar.group.empty.noSessionsInWorkspace': 'No sessions in this workspace yet.',
|
|
'sessions.sidebar.group.showMoreSingle': 'Show {count} more session',
|
|
'sessions.sidebar.group.showMorePlural': 'Show {count} more sessions',
|
|
'sessions.sidebar.group.showFewer': 'Show fewer sessions',
|
|
'sessions.sidebar.group.expandAria': 'Expand {label}',
|
|
'sessions.sidebar.group.collapseAria': 'Collapse {label}',
|
|
'sessions.sidebar.group.actions.deleteArchivedInGroupAria': 'Delete archived sessions in {label}',
|
|
'sessions.sidebar.group.actions.deleteArchivedSessions': 'Delete archived sessions',
|
|
'sessions.sidebar.group.actions.deleteGroupAria': 'Delete {label}',
|
|
'sessions.sidebar.group.actions.deleteWorktree': 'Delete worktree',
|
|
'sessions.sidebar.group.actions.newDraftInGroupAria': 'New draft session in {label}',
|
|
'sessions.sidebar.grouping.projectRoot': 'project root',
|
|
'sessions.sidebar.grouping.projectRootWithBranch': 'project root: {branch}',
|
|
'sessions.sidebar.grouping.archived': 'archived',
|
|
'sessions.sidebar.grouping.archivedDescription': 'Archived and unassigned sessions',
|
|
'sessions.sidebar.folderItem.expandAria': 'Expand folder {folderName}',
|
|
'sessions.sidebar.folderItem.collapseAria': 'Collapse folder {folderName}',
|
|
'sessions.sidebar.folderItem.namePlaceholder': 'Folder name',
|
|
'sessions.sidebar.folderItem.newSessionAria': 'New session in {folderName}',
|
|
'sessions.sidebar.folderItem.newSubfolderAria': 'New sub-folder in {folderName}',
|
|
'sessions.sidebar.folderItem.newSubfolder': 'New sub-folder',
|
|
'sessions.sidebar.folderItem.renameAria': 'Rename folder {folderName}',
|
|
'sessions.sidebar.folderItem.deleteArchivedInFolderAria': 'Delete archived sessions in folder {folderName}',
|
|
'sessions.sidebar.folderItem.deleteFolderAria': 'Delete folder {folderName}',
|
|
'sessions.sidebar.folderItem.emptyFolder': 'Empty folder',
|
|
'sessions.sidebar.sessionDialogs.ok': 'OK',
|
|
'sessions.sidebar.sessionDialogs.linkedSessionSingle': 'Linked session',
|
|
'sessions.sidebar.sessionDialogs.linkedSessionPlural': 'Linked sessions',
|
|
'sessions.sidebar.sessionDialogs.delete.note': 'Worktree directories stay intact. Subsessions linked to the selected sessions will also be removed.',
|
|
'sessions.sidebar.sessionDialogs.directory.errorSelectTitle': 'Failed to select directory',
|
|
'sessions.sidebar.sessionDialogs.directory.errorOpenTitle': 'Failed to open directory',
|
|
'sessions.sidebar.sessionDialogs.directory.errorOpenDescription': 'Desktop could not grant file access.',
|
|
'sessions.sidebar.sessionDialogs.directory.errorAddProjectTitle': 'Failed to add project',
|
|
'sessions.sidebar.sessionDialogs.directory.errorAddProjectDescription': 'Please select a valid directory path.',
|
|
'sessions.sidebar.sessionDialogs.worktree.errorRemoveTitle': 'Failed to remove worktree',
|
|
'sessions.sidebar.sessionDialogs.worktree.removedTitle': 'Worktree removed',
|
|
'sessions.sidebar.sessionDialogs.worktree.removed': 'Worktree removed.',
|
|
'sessions.sidebar.sessionDialogs.worktree.removedWithRemote': 'Worktree and remote branch removed.',
|
|
'sessions.sidebar.sessionDialogs.worktree.attachedArchived': 'Attached worktree archived.',
|
|
'sessions.sidebar.sessionDialogs.worktree.attachedArchivedPlural': 'Attached worktrees archived.',
|
|
'sessions.sidebar.sessionDialogs.worktree.archivedAndRemoteRemoved': 'Archived worktrees and removed remote branches.',
|
|
'sessions.sidebar.sessionDialogs.worktree.label': 'Worktree',
|
|
'sessions.sidebar.sessionDialogs.worktree.pathUnavailable': 'Worktree path unavailable.',
|
|
'sessions.sidebar.sessionDialogs.worktree.uncommittedWarning': 'Uncommitted changes will be discarded.',
|
|
'sessions.sidebar.sessionDialogs.actions.deleteRemoteBranch': 'Delete remote branch',
|
|
'sessions.sidebar.sessionDialogs.actions.remoteBranchInfoUnavailable': 'Remote branch info unavailable',
|
|
'sessions.sidebar.sessionDialogs.actions.deleteLocalBranch': 'Delete local branch',
|
|
'sessions.sidebar.sessionDialogs.actions.deleting': 'Deleting…',
|
|
'sessions.sidebar.sessionDialogs.actions.deleteWorktree': 'Delete worktree',
|
|
'gitView.branch.branchToMergeInto': 'Branch to merge into {branch}',
|
|
'gitView.branch.branchToRebaseOnto': 'Branch to rebase onto',
|
|
'gitView.branch.create': 'Create new branch...',
|
|
'gitView.branch.currentBadge': 'Current',
|
|
'gitView.branch.currentBranchFallback': 'current branch',
|
|
'gitView.branch.currentBranchTooltip': 'Current branch',
|
|
'gitView.branch.detachedHead': 'Detached HEAD',
|
|
'gitView.branch.dialogDescriptionPrefix': 'Choose how to bring another branch into',
|
|
'gitView.branch.empty': 'No branches found.',
|
|
'gitView.branch.localBranches': 'Local branches',
|
|
'gitView.branch.mergeDescription': 'Create a merge commit and preserve branch history.',
|
|
'gitView.branch.mergeRebase': 'Merge/Rebase',
|
|
'gitView.branch.mergeRebaseTooltip': 'Update this branch from another branch.',
|
|
'gitView.branch.mergingInProgress': 'Merging In Progress',
|
|
'gitView.branch.namePlaceholder': 'Branch name',
|
|
'gitView.branch.newBranchPlaceholder': 'New branch name',
|
|
'gitView.branch.noLocalBranches': 'No local branches',
|
|
'gitView.branch.noRemoteBranches': 'No remote branches',
|
|
'gitView.branch.operation': 'Operation',
|
|
'gitView.branch.operationCompleted': 'Operation Completed',
|
|
'gitView.branch.operationFailed': 'Operation Failed',
|
|
'gitView.branch.pushToPrefix': 'Push To Prefix',
|
|
'gitView.branch.pushToSuffix': 'Push To Suffix',
|
|
'gitView.branch.rebaseDescription': 'Replay your commits on top of the selected branch.',
|
|
'gitView.branch.rebasingInProgress': 'Rebasing In Progress',
|
|
'gitView.branch.remoteBranches': 'Remote branches',
|
|
'gitView.branch.renameTitle': 'Rename branch',
|
|
'gitView.branch.renameSave': 'Save branch name',
|
|
'gitView.branch.renameSaving': 'Saving branch name',
|
|
'gitView.branch.renameCancel': 'Cancel branch rename',
|
|
'gitView.branch.searchPlaceholder': 'Search branches...',
|
|
'gitView.branch.selectBranch': 'Select Branch',
|
|
'gitView.branch.summaryMergeInfix': 'into',
|
|
'gitView.branch.summaryMergePrefix': 'This will merge',
|
|
'gitView.branch.summaryRebaseInfix': 'onto',
|
|
'gitView.branch.summaryRebasePrefix': 'This will rebase',
|
|
'gitView.branch.updateDescriptionPrefix': 'Bring the latest changes into',
|
|
'gitView.branch.updateTitle': 'Update branch',
|
|
'gitView.changes.changedFilesAria': 'Changed files',
|
|
'gitView.changes.clearSelectionAria': 'Clear file selection',
|
|
'gitView.changes.collapseDirectoryAria': 'Collapse Directory aria label',
|
|
'gitView.changes.expandDirectoryAria': 'Expand Directory aria label',
|
|
'gitView.changes.revertAll': 'Revert all',
|
|
'gitView.changes.revertAllDescriptionPlural': 'Revert All Description Plural',
|
|
'gitView.changes.revertAllDescriptionSingle': 'Revert All Description Single',
|
|
'gitView.changes.revertAllDialogTitle': 'Revert all changes?',
|
|
'gitView.changes.revertFileAria': 'Revert File aria label',
|
|
'gitView.changes.revertFileTooltip': 'Revert changes',
|
|
'gitView.changes.reverting': 'Reverting...',
|
|
'gitView.changes.selectAllAria': 'Select all files',
|
|
'gitView.changes.selectFileAria': 'Select File aria label',
|
|
'gitView.changes.title': 'Changes',
|
|
'gitView.changes.toggleDirectorySelectionAria': 'Toggle Directory Selection aria label',
|
|
'gitView.commit.addGitmoji': 'Add gitmoji',
|
|
'gitView.commit.aiHighlights.insertAria': 'Insert aria label',
|
|
'gitView.commit.aiHighlights.insertTooltip': 'Insert tooltip',
|
|
'gitView.commit.aiHighlights.title': 'Highlights',
|
|
'gitView.commit.commit': 'Commit',
|
|
'gitView.commit.commitAria': 'Commit aria label',
|
|
'gitView.commit.committing': 'Committing...',
|
|
'gitView.commit.generate': 'Generate',
|
|
'gitView.commit.generateAria': 'Generate commit message',
|
|
'gitView.commit.messagePlaceholder': 'Commit message',
|
|
'gitView.commit.push': 'Commit & sync',
|
|
'gitView.commit.pushAria': 'Commit and sync',
|
|
'gitView.commit.pushing': 'Syncing...',
|
|
'gitView.commit.selectFilesHint': 'Select files in Changes to enable commit.',
|
|
'gitView.commit.title': 'Commit',
|
|
'gitView.common.cancel': 'Cancel',
|
|
'gitView.common.close': 'Close',
|
|
'gitView.common.done': 'Done',
|
|
'gitView.common.processing': 'Processing...',
|
|
'gitView.common.reset': 'Reset',
|
|
'gitView.conflict.abortOperation': 'Abort Operation',
|
|
'gitView.conflict.conflictedFiles': 'Conflicted files:',
|
|
'gitView.conflict.continueLater': 'Continue Later',
|
|
'gitView.conflict.detectedDescription': 'Detected Description',
|
|
'gitView.conflict.detectedTitle': 'Detected Title',
|
|
'gitView.conflict.errorLoadingDetails': 'Error Loading Details',
|
|
'gitView.conflict.headInfo': 'HEAD information:',
|
|
'gitView.conflict.loadFailed': 'Load Failed',
|
|
'gitView.conflict.loading': 'Loading conflict details...',
|
|
'gitView.conflict.noActiveSession': 'No Active Session',
|
|
'gitView.conflict.noActiveSessionDescription': 'No Active Session Description',
|
|
'gitView.conflict.resolveCurrentSession': 'Resolve in Current Session',
|
|
'gitView.conflict.resolveNewSession': 'Resolve in New Session',
|
|
'gitView.empty.cleanDescription': 'All changes have been committed',
|
|
'gitView.empty.cleanTitle': 'Working tree clean',
|
|
'gitView.empty.pullBehindPlural': 'Pull {count} commits',
|
|
'gitView.empty.pullBehindSingle': 'Pull {count} commit',
|
|
'gitView.header.identityTooltip': 'Git identity',
|
|
'gitView.header.noIdentity': 'No identity',
|
|
'gitView.header.noProfiles': 'No profiles available to apply.',
|
|
'gitView.header.removeRemoteAria': 'Remove Remote aria label',
|
|
'gitView.header.removeRemoteTitle': 'Remove Remote Title',
|
|
'gitView.history.binary': 'Binary',
|
|
'gitView.history.binaryNoDiff': 'Binary file — no diff available',
|
|
'gitView.history.commitsPlaceholder': 'Commits Placeholder',
|
|
'gitView.history.copySha': 'Copy SHA',
|
|
'gitView.history.diffError': 'Failed to load diff. Click to retry.',
|
|
'gitView.history.largeDiffDescription': 'Rendering may be slow. You can still view the diff by clicking below.',
|
|
'gitView.history.largeDiffTitle': 'Large diff ({count} changed lines)',
|
|
'gitView.history.loadingDiff': 'Loading diff...',
|
|
'gitView.history.loadingFiles': 'Loading files...',
|
|
'gitView.history.logSize100': 'Log Size100',
|
|
'gitView.history.logSize25': 'Log Size25',
|
|
'gitView.history.logSize50': 'Log Size50',
|
|
'gitView.history.noCommits': 'No commits found',
|
|
'gitView.history.noFiles': 'No files',
|
|
'gitView.history.renamedNoDiff': 'Renamed file — diff not supported',
|
|
'gitView.history.renderDiffAnyway': 'Render anyway',
|
|
'gitView.history.title': 'History',
|
|
'gitView.integrate.checking': 'Checking…',
|
|
'gitView.integrate.cherryPickAbortedToast': 'Cherry Pick Aborted Toast',
|
|
'gitView.integrate.cherryPickConflictDescription': 'Cherry Pick Conflict Description',
|
|
'gitView.integrate.cherryPickConflictToast': 'Cherry Pick Conflict Toast',
|
|
'gitView.integrate.cherryPickContinueFailedToast': 'Cherry Pick Continue Failed Toast',
|
|
'gitView.integrate.cherryPickFinishedToast': 'Cherry Pick Finished Toast',
|
|
'gitView.integrate.commitsMovedDescriptionPlural': 'Commits Moved Description Plural',
|
|
'gitView.integrate.commitsMovedDescriptionSingle': 'Commits Moved Description Single',
|
|
'gitView.integrate.commitsMovedToast': 'Commits Moved Toast',
|
|
'gitView.integrate.commitsToMove': 'Commits to move',
|
|
'gitView.integrate.conflictsInFiles': 'Conflicts In Files',
|
|
'gitView.integrate.currentCommit': 'Current Commit',
|
|
'gitView.integrate.currentSession': 'Current Session',
|
|
'gitView.integrate.failedToMoveToast': 'Failed To Move Toast',
|
|
'gitView.integrate.moreFiles': 'More Files',
|
|
'gitView.integrate.move': 'Move',
|
|
'gitView.integrate.moveCommits': 'Move commits',
|
|
'gitView.integrate.moving': 'Moving…',
|
|
'gitView.integrate.newSession': 'New Session',
|
|
'gitView.integrate.noActiveSession': 'No Active Session',
|
|
'gitView.integrate.noActiveSessionDescription': 'No Active Session Description',
|
|
'gitView.integrate.noCommitsToMove': 'No commits to move.',
|
|
'gitView.integrate.noCommitsToMoveToast': 'No Commits To Move Toast',
|
|
'gitView.integrate.previewUnavailable': 'Preview Unavailable',
|
|
'gitView.integrate.showAll': 'Show All',
|
|
'gitView.integrate.showLess': 'Show Less',
|
|
'gitView.integrate.showingFirstCommits': 'Showing First Commits',
|
|
'gitView.integrate.target': 'Target',
|
|
'gitView.integrate.title': 'Re-integrate commits',
|
|
'gitView.integrate.toMoveCount': 'To Move Count',
|
|
'gitView.operation.abort': 'Abort',
|
|
'gitView.operation.continue': 'Continue',
|
|
'gitView.operation.inProgressTitle': '{operation} in progress',
|
|
'gitView.operation.merge': 'Merge',
|
|
'gitView.operation.mergeInProgressWithHead': 'Merging {head}',
|
|
'gitView.operation.mergingMessage': 'Merging: {message}',
|
|
'gitView.operation.rebase': 'Rebase',
|
|
'gitView.operation.rebaseInProgress': 'Rebase in progress',
|
|
'gitView.operation.rebasingOnto': 'Rebasing {headName} onto {onto}',
|
|
'gitView.operation.resolveConflictsHint': 'Resolve conflicts, then continue the operation.',
|
|
'gitView.operation.resolveWithAi': 'Resolve with AI',
|
|
'gitView.stash.confirmButton': 'Confirm Button',
|
|
'gitView.stash.description': 'Description',
|
|
'gitView.stash.mergeWith': 'Merge With',
|
|
'gitView.stash.rebaseOnto': 'Rebase Onto',
|
|
'gitView.stash.restoreAfterOperation': 'Restore After Operation',
|
|
'gitView.stash.restoreAria': 'Restore aria label',
|
|
'gitView.stash.stepRestore': 'Restore your stashed changes',
|
|
'gitView.stash.stepStash': 'Stash your uncommitted changes',
|
|
'gitView.stash.thisWill': 'This will:',
|
|
'gitView.stash.title': 'Uncommitted Changes',
|
|
'gitView.stashes.actions.apply': 'Apply',
|
|
'gitView.stashes.actions.drop': 'Drop',
|
|
'gitView.stashes.actions.pop': 'Pop',
|
|
'gitView.stashes.actions.stashCurrent': 'Stash current changes',
|
|
'gitView.stashes.actions.stashCurrentWithCount': 'Stash {count} files',
|
|
'gitView.stashes.confirm.drop': 'Drop {ref}?',
|
|
'gitView.stashes.description': 'Save, restore, and clean up Git stashes for this repository.',
|
|
'gitView.stashes.empty.list': 'No stashes yet.',
|
|
'gitView.stashes.empty.search': 'No matching stashes.',
|
|
'gitView.stashes.includeUntrackedHint': 'Untracked files are included automatically.',
|
|
'gitView.stashes.fileCount': '{count} files',
|
|
'gitView.stashes.fileCountLoading': 'counting files...',
|
|
'gitView.stashes.itemNumber': '#{number}',
|
|
'gitView.stashes.latestLabel': 'Latest',
|
|
'gitView.stashes.messagePlaceholder': 'Stash name',
|
|
'gitView.stashes.searchPlaceholder': 'Search stashes',
|
|
'gitView.stashes.title': 'Stashes',
|
|
'gitView.stashes.toast.applyFailed': 'Failed to apply stash',
|
|
'gitView.stashes.toast.applySuccess': 'Stash applied',
|
|
'gitView.stashes.toast.createFailed': 'Failed to stash changes',
|
|
'gitView.stashes.toast.created': 'Changes stashed',
|
|
'gitView.stashes.toast.dropFailed': 'Failed to drop stash',
|
|
'gitView.stashes.toast.dropSuccess': 'Stash dropped',
|
|
'gitView.stashes.toast.loadFailed': 'Failed to load stashes',
|
|
'gitView.stashes.toast.noChanges': 'No local changes to stash',
|
|
'gitView.stashes.toast.popFailed': 'Failed to pop stash',
|
|
'gitView.stashes.toast.popSuccess': 'Stash popped',
|
|
'gitView.stashes.untitled': 'Untitled stash',
|
|
'gitView.sync.fetch': 'Fetch',
|
|
'gitView.sync.fetchFromRemote': 'Fetch from {name}',
|
|
'gitView.sync.fetchTooltip': 'Fetch from remote',
|
|
'gitView.sync.commitOrStashTooltip': 'Commit or stash your changes before syncing',
|
|
'gitView.sync.moreActionsAria': 'More sync actions',
|
|
'gitView.sync.noRemoteTooltip': 'No remotes configured',
|
|
'gitView.sync.pull': 'Pull',
|
|
'gitView.sync.pullTooltip': 'Pull changes',
|
|
'gitView.sync.pullTooltipBehind': 'Pull changes ({count} behind)',
|
|
'gitView.sync.push': 'Push',
|
|
'gitView.sync.pushTooltip': 'Push changes',
|
|
'gitView.sync.pushTooltipAhead': 'Push changes ({count} ahead)',
|
|
'gitView.sync.sync': 'sync',
|
|
'gitView.sync.syncChanges': 'Sync Changes',
|
|
'gitView.sync.syncChangesTooltip': 'Sync Changes ({behind} down, {ahead} up)',
|
|
'gitView.sync.syncChangesWithCounts': 'Sync Changes {behind}↓ {ahead}↑',
|
|
'gitView.sync.syncCounts': '{behind}↓ {ahead}↑',
|
|
'gitView.branch.actionsUnavailable': 'Branch actions unavailable in this repository state',
|
|
'gitView.conflict.noDetailsAvailable': 'No conflict details available',
|
|
'gitView.empty.notGitRepository': 'This directory is not a Git repository',
|
|
'gitView.empty.notGitRepositoryDescription': 'Initialize Git in this directory or open a repository.',
|
|
'gitView.empty.selectSessionOrDirectory': 'Select a session or directory to view Git status',
|
|
'gitView.empty.worktreeFeaturesUnavailable': 'Worktree features are unavailable in this workspace mode.',
|
|
'gitView.empty.worktreeSetupDescription': 'Finishing worktree setup and preparing repository state.',
|
|
'gitView.empty.worktreeSetupInProgress': 'Worktree setup in progress',
|
|
'gitView.gitmoji.empty': 'No gitmoji found',
|
|
'gitView.gitmoji.searchPlaceholder': 'Search gitmoji...',
|
|
'gitView.gitmoji.title': 'Insert gitmoji',
|
|
'gitView.history.dialogDescription': 'Browse recent commits and inspect changed files.',
|
|
'gitView.loading.checkingRepository': 'Checking repository...',
|
|
'gitView.loading.loading': 'Loading...',
|
|
'gitView.pr.actions.add': 'Add',
|
|
'gitView.pr.actions.cancelEditing': 'Cancel editing',
|
|
'gitView.pr.actions.cancelEditingAria': 'Cancel PR editing',
|
|
'gitView.pr.actions.createPr': 'Create PR',
|
|
'gitView.pr.actions.edit': 'Edit',
|
|
'gitView.pr.actions.editPr': 'Edit PR',
|
|
'gitView.pr.actions.editPrAria': 'Edit pull request',
|
|
'gitView.pr.actions.hide': 'Hide',
|
|
'gitView.pr.actions.markReady': 'Mark ready',
|
|
'gitView.pr.actions.markReadyAria': 'Mark pull request ready for review',
|
|
'gitView.pr.actions.mergePr': 'Merge PR',
|
|
'gitView.pr.actions.mergePrAria': 'Merge pull request',
|
|
'gitView.pr.actions.openChecks': 'Open checks',
|
|
'gitView.pr.actions.openChecksAria': 'Open failed checks',
|
|
'gitView.pr.actions.openComments': 'Open comments',
|
|
'gitView.pr.actions.openCommentsAria': 'Open pull request comments',
|
|
'gitView.pr.actions.openOnGitHub': 'Open on GitHub',
|
|
'gitView.pr.actions.openOnGitHubAria': 'Open pull request on GitHub',
|
|
'gitView.pr.actions.openSettings': 'Open settings',
|
|
'gitView.pr.actions.repo': 'Repository',
|
|
'gitView.pr.actions.resolveFailedChecks': 'Resolve failed checks',
|
|
'gitView.pr.actions.resolveFailedChecksAria': 'Send failed checks to agent',
|
|
'gitView.pr.actions.savePr': 'Save PR',
|
|
'gitView.pr.actions.savePrAria': 'Save pull request changes',
|
|
'gitView.pr.actions.sendCommentToAgent': 'Send comment to agent',
|
|
'gitView.pr.actions.sendCommentToAgentAria': 'Send this comment to agent',
|
|
'gitView.pr.actions.sendToAgent': 'Send to agent',
|
|
'gitView.pr.actions.shareComments': 'Share comments',
|
|
'gitView.pr.actions.shareCommentsAria': 'Send pull request comments to agent',
|
|
'gitView.pr.actions.toggleDraftAria': 'Toggle draft state',
|
|
'gitView.pr.actions.refresh': 'Refresh PR status',
|
|
'gitView.pr.actions.refreshAria': 'Refresh pull request status',
|
|
'gitView.pr.additionalContext.added': 'Added',
|
|
'gitView.pr.additionalContext.hint': 'Add extra context for better review quality.',
|
|
'gitView.pr.additionalContext.optional': 'Optional',
|
|
'gitView.pr.additionalContext.title': 'Additional context',
|
|
'gitView.pr.checkDetails.empty': 'No check details available',
|
|
'gitView.pr.checkDetails.title': 'Failed check details',
|
|
'gitView.pr.checkingStatus': 'Checking pull request status...',
|
|
'gitView.pr.checks.label': 'checks',
|
|
'gitView.pr.checks.completedLabel': 'Completed',
|
|
'gitView.pr.checks.conclusionLabel': 'Conclusion',
|
|
'gitView.pr.checks.startedLabel': 'Started',
|
|
'gitView.pr.checks.statusLabel': 'Status',
|
|
'gitView.pr.checks.stepLabel': 'Step',
|
|
'gitView.pr.checks.steps': 'Steps',
|
|
'gitView.pr.comments.empty': 'No comments found',
|
|
'gitView.pr.comments.generalContext': 'General comment',
|
|
'gitView.pr.comments.reviewContext': 'Review comment',
|
|
'gitView.pr.comments.title': 'Comments',
|
|
'gitView.pr.comments.unknownAuthor': 'Unknown author',
|
|
'gitView.pr.createTitle': 'Create pull request',
|
|
'gitView.pr.draftMustBeReady': 'Draft PR must be marked ready before merge.',
|
|
'gitView.pr.field.baseBranch': 'Base branch',
|
|
'gitView.pr.field.description': 'Description',
|
|
'gitView.pr.field.draft': 'Draft',
|
|
'gitView.pr.field.title': 'Title',
|
|
'gitView.pr.githubNotConnected': 'GitHub is not connected',
|
|
'gitView.pr.loadingDescription': 'Loading description...',
|
|
'gitView.pr.mergeMethod.merge': 'Create a merge commit',
|
|
'gitView.pr.mergeMethod.rebase': 'Rebase and merge',
|
|
'gitView.pr.mergeMethod.squash': 'Squash and merge',
|
|
'gitView.pr.noDescription': 'No description',
|
|
'gitView.pr.noMergePermission': 'You do not have permission to merge this pull request.',
|
|
'gitView.pr.notMergeable': 'Not mergeable',
|
|
'gitView.pr.numberLabel': 'PR #{number}',
|
|
'gitView.pr.placeholder.additionalContext': 'Any constraints, rollout notes, or reviewer context...',
|
|
'gitView.pr.placeholder.description': 'Describe the change...',
|
|
'gitView.pr.placeholder.main': 'Summarize your pull request',
|
|
'gitView.pr.placeholder.selectBaseBranch': 'Select base branch',
|
|
'gitView.pr.placeholder.title': 'Pull request title',
|
|
'gitView.pr.placeholder.whatChanged': 'What changed and why?',
|
|
'gitView.pr.statusUnavailable': 'Pull request status unavailable',
|
|
'gitView.pr.toast.baseBranchRequired': 'Select a base branch',
|
|
'gitView.pr.toast.baseMustDifferFromHead': 'Base branch must differ from current branch',
|
|
'gitView.pr.toast.createPrFailed': 'Failed to create pull request',
|
|
'gitView.pr.toast.generateDescriptionFailed': 'Failed to generate pull request description',
|
|
'gitView.pr.toast.githubApiUnavailable': 'GitHub API is unavailable',
|
|
'gitView.pr.toast.loadCheckDetailsFailed': 'Failed to load check details',
|
|
'gitView.pr.toast.loadChecksFailed': 'Failed to load pull request checks',
|
|
'gitView.pr.toast.loadCommentsFailed': 'Failed to load comments',
|
|
'gitView.pr.toast.loadPrCommentsFailed': 'Failed to load pull request comments',
|
|
'gitView.pr.toast.markReadyFailed': 'Failed to mark pull request ready',
|
|
'gitView.pr.toast.markedReady': 'Pull request marked ready for review',
|
|
'gitView.pr.toast.mergeFailed': 'Failed to merge pull request',
|
|
'gitView.pr.toast.noActiveSession': 'No active chat session',
|
|
'gitView.pr.toast.noActiveSessionDescription': 'Open or create a chat session to send context to an agent.',
|
|
'gitView.pr.toast.noFailedChecks': 'No failed checks found',
|
|
'gitView.pr.toast.noModelSelected': 'Select a model first',
|
|
'gitView.pr.toast.noPrComments': 'No pull request comments found',
|
|
'gitView.pr.toast.prCreated': 'Pull request created',
|
|
'gitView.pr.toast.prMerged': 'Pull request merged',
|
|
'gitView.pr.toast.prNotMerged': 'Pull request was not merged',
|
|
'gitView.pr.toast.prUpdated': 'Pull request updated',
|
|
'gitView.pr.toast.sendMessageFailed': 'Failed to send message to agent',
|
|
'gitView.pr.toast.titleRequired': 'Title is required',
|
|
'gitView.pr.toast.updatePrFailed': 'Failed to update pull request',
|
|
'gitView.pullRequest.createHint': 'Create and manage pull requests from this branch.',
|
|
'gitView.pullRequest.availableOnFeatureBranches': 'Available when the current branch can open a pull request.',
|
|
'gitView.pullRequest.title': 'Pull request',
|
|
'gitView.tabs.commit': 'Commit',
|
|
'gitView.tabs.pr': 'PR',
|
|
'gitView.tabs.update': 'Update',
|
|
'gitView.tabs.worktree': 'Worktree',
|
|
'gitView.toast.abortOperationFailed': 'Failed to abort operation',
|
|
'gitView.toast.appliedIdentity': 'Applied identity: {name}',
|
|
'gitView.toast.applyIdentityFailed': 'Failed to apply identity',
|
|
'gitView.toast.branchCreatedLocally': 'Branch created locally, but failed to set upstream.',
|
|
'gitView.toast.cannotCheckout': 'Cannot checkout branch: {reason}',
|
|
'gitView.toast.cannotCreateBranch': 'Cannot create branch: {reason}',
|
|
'gitView.toast.cannotRemoveOriginRemote': 'Cannot remove the origin remote',
|
|
'gitView.toast.cannotRenameBranch': 'Cannot rename branch: {reason}',
|
|
'gitView.toast.checkedOut': 'Checked out {name}',
|
|
'gitView.toast.checkoutFailed': 'Failed to checkout {name}',
|
|
'gitView.toast.commitCreated': 'Commit created',
|
|
'gitView.toast.commitHashCopied': 'Commit hash copied',
|
|
'gitView.toast.continueOperationFailed': 'Failed to continue operation',
|
|
'gitView.toast.copyFailed': 'Failed to copy',
|
|
'gitView.toast.createBranchFailed': 'Failed to create branch',
|
|
'gitView.toast.createCommitFailed': 'Failed to create commit',
|
|
'gitView.toast.createdBranch': 'Created branch {name}',
|
|
'gitView.toast.enterCommitMessage': 'Enter a commit message',
|
|
'gitView.toast.fetchedFromRemote': 'Fetched from {name}',
|
|
'gitView.toast.generateCommitMessageFailed': 'Failed to generate commit message',
|
|
'gitView.toast.mergeAborted': 'Merge aborted',
|
|
'gitView.toast.mergeCompleted': 'Merge completed',
|
|
'gitView.toast.mergeConflictsDetected': 'Merge conflicts detected',
|
|
'gitView.toast.mergedIntoBranch': 'Merged {branch} into {currentBranch}',
|
|
'gitView.toast.pulledFilesPlural': 'Pulled {count} files from {name}',
|
|
'gitView.toast.pulledFilesSingle': 'Pulled {count} file from {name}',
|
|
'gitView.toast.pushedToUpstream': 'Pushed to upstream',
|
|
'gitView.toast.commitOrStashBeforeSync': 'Commit or stash your changes before syncing',
|
|
'gitView.toast.alreadyUpToDate': 'Already up to date',
|
|
'gitView.toast.syncedPulledPluralAndPushed': 'Pulled {count} files from {name} and pushed to upstream',
|
|
'gitView.toast.syncedPulledSingleAndPushed': 'Pulled {count} file from {name} and pushed to upstream',
|
|
'gitView.toast.syncedChanges': 'Synced changes',
|
|
'gitView.toast.rebaseAborted': 'Rebase aborted',
|
|
'gitView.toast.rebaseConflictsDetected': 'Rebase conflicts detected',
|
|
'gitView.toast.rebaseStepCompleted': 'Rebase step completed',
|
|
'gitView.toast.rebasedOntoBranch': 'Rebased {currentBranch} onto {branch}',
|
|
'gitView.toast.refreshRepositoryFailed': 'Failed to refresh repository',
|
|
'gitView.toast.remoteNameRequired': 'Remote name is required',
|
|
'gitView.toast.removedRemote': 'Removed remote {name}',
|
|
'gitView.toast.renameBranchFailed': 'Failed to rename {oldName} to {newName}',
|
|
'gitView.toast.renamedBranch': 'Renamed {oldName} to {newName}',
|
|
'gitView.toast.restoreStashFailed': 'Failed to restore stash',
|
|
'gitView.toast.restoreStashManually': 'Stash restored manually required',
|
|
'gitView.toast.revertFailed': 'Failed to revert changes',
|
|
'gitView.toast.revertedFile': 'Reverted {path}',
|
|
'gitView.toast.revertedFilesPlural': 'Reverted {count} files',
|
|
'gitView.toast.revertedFilesSingle': 'Reverted {count} file',
|
|
'gitView.toast.revertedSomePlural': 'Reverted {success} files, {failed} failed',
|
|
'gitView.toast.revertedSomeSingle': 'Reverted {success} file, {failed} failed',
|
|
'gitView.toast.selectFileToCommit': 'Select at least one file to commit',
|
|
'gitView.toast.selectFileToDescribe': 'Select at least one file to describe',
|
|
'gitView.toast.stashedRestored': 'Stashed changes restored',
|
|
'gitView.toast.syncActionFailed': '{action} failed',
|
|
'gitView.toast.upstreamSet': 'Set upstream for {branch} to {remote}',
|
|
'gitView.worktree.availableInWorktreeMode': 'Available only in worktree mode',
|
|
'contextPanel.mode.chat': 'Chat',
|
|
'contextPanel.mode.files': 'Files',
|
|
'contextPanel.mode.diff': 'Diff',
|
|
'contextPanel.mode.plan': 'Plan',
|
|
'contextPanel.mode.context': 'Context',
|
|
'contextPanel.mode.preview': 'Preview',
|
|
'contextPanel.mode.browser': 'Browser',
|
|
'contextPanel.browser.open': 'Open browser panel',
|
|
'contextPanel.browser.addressAria': 'Browser address',
|
|
'contextPanel.browser.empty': 'Web browser',
|
|
'contextPanel.browser.emptyHint': 'Enter an address above to start browsing the web',
|
|
'contextPanel.tab.closeTabAria': 'Close {label} tab',
|
|
'contextPanel.actions.collapsePanel': 'Collapse panel',
|
|
'contextPanel.actions.expandPanel': 'Expand panel',
|
|
'contextPanel.actions.closePanel': 'Close panel',
|
|
'contextPanel.actions.resizePanelAria': 'Resize context panel',
|
|
'contextPanel.iframe.sessionChatTitle': 'Session chat {sessionID}',
|
|
'contextPanel.preview.actions.reload': 'Reload preview',
|
|
'contextPanel.preview.actions.openExternal': 'Open in browser',
|
|
'contextPanel.preview.actions.retry': 'Retry',
|
|
'contextPanel.preview.iframeTitle': 'Preview',
|
|
'contextPanel.preview.invalidUrl': 'Preview needs a valid http(s) URL.',
|
|
'contextPanel.preview.empty': 'No preview URL',
|
|
'contextPanel.preview.loading': 'Connecting preview proxy...',
|
|
'contextPanel.preview.proxyError': 'Could not start preview proxy.',
|
|
'contextPanel.preview.upstreamUnreachable': 'Dev server is not responding.',
|
|
'contextPanel.preview.upstreamUnreachableHint': 'Make sure your dev server is still running, then retry.',
|
|
'contextPanel.preview.startingServer': 'Starting dev server...',
|
|
'contextPanel.preview.startingServerHint': 'Waiting for the server to accept connections.',
|
|
'contextPanel.preview.title': 'Preview',
|
|
'contextPanel.preview.description': 'Use Project Actions or a terminal Preview button to open a preview.',
|
|
'contextPanel.preview.startPreview': 'Start Preview',
|
|
'contextPanel.preview.starting': 'Starting...',
|
|
'contextPanel.preview.noDevServer': 'No dev server command found. Configure a project action or add a "dev" script to package.json.',
|
|
'contextPanel.preview.startFailed': 'Failed to start preview server.',
|
|
'contextPanel.preview.serverExited': 'Dev server exited unexpectedly.',
|
|
'contextPanel.preview.noUrlDetected': 'Dev server started, but no URL was detected in its output. Open the Preview terminal tab to check logs.',
|
|
'contextPanel.preview.serverExitedWithLog': 'Dev server exited unexpectedly. Last output:\n\n{log}',
|
|
'contextPanel.preview.noUrlDetectedWithLog': 'Dev server did not become reachable. Last output:\n\n{log}',
|
|
'contextPanel.preview.console.open': 'Open preview console',
|
|
'contextPanel.preview.console.waiting': 'Waiting for preview console',
|
|
'contextPanel.preview.console.title': 'Preview console',
|
|
'contextPanel.preview.console.attach': 'Attach',
|
|
'contextPanel.preview.console.copy': 'Copy',
|
|
'contextPanel.preview.console.clear': 'Clear',
|
|
'contextPanel.preview.console.empty': 'No preview console events yet.',
|
|
'contextPanel.preview.console.noFilteredEvents': 'No events match this filter.',
|
|
'contextPanel.preview.console.runtimeError': 'Runtime error',
|
|
'contextPanel.preview.console.copied': 'Preview console copied',
|
|
'contextPanel.preview.console.copyFailed': 'Failed to copy preview console',
|
|
'contextPanel.preview.console.attached': 'Preview console attached to chat',
|
|
'contextPanel.preview.console.attachNoSession': 'Open a chat session before attaching preview logs',
|
|
'contextPanel.preview.console.attachAnnotation': 'These are browser console logs from the dev server running for this project.',
|
|
'contextPanel.preview.inspect.toggle': 'Inspect preview element',
|
|
'contextPanel.preview.inspect.attached': 'Preview annotation attached to chat',
|
|
'contextPanel.preview.inspect.attachNoSession': 'Open a chat session before attaching preview annotations',
|
|
'contextPanel.preview.inspect.attachAnnotation': 'This is a selected DOM element from the in-app preview.',
|
|
'contextPanel.preview.inspect.attachAnnotationWithScreenshot': 'This is a selected DOM element from the in-app preview. A screenshot of the visible preview area with the selected element highlighted is attached.',
|
|
'contextPanel.preview.console.filter.all': 'All',
|
|
'contextPanel.preview.console.filter.errors': 'Errors',
|
|
'contextPanel.preview.console.filter.warnings': 'Warnings',
|
|
'contextPanel.preview.console.filter.logs': 'Logs',
|
|
|
|
'terminalView.preview.open': 'Preview',
|
|
'terminalView.preview.openTitle': 'Open preview pane',
|
|
'sidebarFilesTree.menu.rename': 'Rename',
|
|
'sidebarFilesTree.menu.copyPath': 'Copy Path',
|
|
'sidebarFilesTree.menu.save': 'Save',
|
|
'sidebarFilesTree.menu.newFile': 'New File',
|
|
'sidebarFilesTree.menu.newFolder': 'New Folder',
|
|
'sidebarFilesTree.menu.delete': 'Delete',
|
|
'sidebarFilesTree.toast.pathCopied': 'Path copied',
|
|
'sidebarFilesTree.toast.copyFailed': 'Copy failed',
|
|
'sidebarFilesTree.toast.revealFailed': 'Failed to reveal path',
|
|
'sidebarFilesTree.toast.filenameRequired': 'Filename is required',
|
|
'sidebarFilesTree.toast.writeNotSupported': 'Write not supported',
|
|
'sidebarFilesTree.toast.fileCreated': 'File created',
|
|
'sidebarFilesTree.toast.operationFailed': 'Operation failed',
|
|
'sidebarFilesTree.toast.folderNameRequired': 'Folder name is required',
|
|
'sidebarFilesTree.toast.folderCreated': 'Folder created',
|
|
'sidebarFilesTree.toast.nameRequired': 'Name is required',
|
|
'sidebarFilesTree.toast.renameNotSupported': 'Rename not supported',
|
|
'sidebarFilesTree.toast.renamedSuccessfully': 'Renamed successfully',
|
|
'sidebarFilesTree.toast.deleteNotSupported': 'Delete not supported',
|
|
'sidebarFilesTree.toast.deletedSuccessfully': 'Deleted successfully',
|
|
'sidebarFilesTree.search.placeholder': 'Search files...',
|
|
'sidebarFilesTree.search.clearAria': 'Clear search',
|
|
'sidebarFilesTree.actions.newFileTitle': 'New File',
|
|
'sidebarFilesTree.actions.newFolderTitle': 'New Folder',
|
|
'sidebarFilesTree.actions.refreshTitle': 'Refresh',
|
|
'sidebarFilesTree.state.searching': 'Searching...',
|
|
'sidebarFilesTree.state.loading': 'Loading...',
|
|
'sidebarFilesTree.dialog.createFile.title': 'Create File',
|
|
'sidebarFilesTree.dialog.createFolder.title': 'Create Folder',
|
|
'sidebarFilesTree.dialog.rename.title': 'Rename',
|
|
'sidebarFilesTree.dialog.delete.title': 'Delete',
|
|
'sidebarFilesTree.dialog.createFile.description': 'Create a new file in {path}',
|
|
'sidebarFilesTree.dialog.createFolder.description': 'Create a new folder in {path}',
|
|
'sidebarFilesTree.dialog.rename.description': 'Rename {name}',
|
|
'sidebarFilesTree.dialog.delete.description': 'Are you sure you want to delete {name}? This action cannot be undone.',
|
|
'sidebarFilesTree.dialog.rootFallback': 'root',
|
|
'sidebarFilesTree.dialog.rename.placeholder': 'New name',
|
|
'sidebarFilesTree.dialog.namePlaceholder': 'Name',
|
|
'sidebarFilesTree.dialog.cancel': 'Cancel',
|
|
'sidebarFilesTree.dialog.confirm': 'Confirm',
|
|
'sidebarFilesTree.dialog.delete.confirm': 'Delete',
|
|
'filesView.dialog.createFile.title': 'Create File',
|
|
'filesView.dialog.createFolder.title': 'Create Folder',
|
|
'filesView.dialog.rename.title': 'Rename',
|
|
'filesView.dialog.delete.title': 'Delete',
|
|
'filesView.dialog.createFile.description': 'Create a new file in {path}',
|
|
'filesView.dialog.createFolder.description': 'Create a new folder in {path}',
|
|
'filesView.dialog.rename.description': 'Rename {name}',
|
|
'filesView.dialog.delete.description': 'Are you sure you want to delete {name}? This action cannot be undone.',
|
|
'filesView.dialog.rootFallback': 'root',
|
|
'filesView.dialog.rename.placeholder': 'New name',
|
|
'filesView.dialog.namePlaceholder': 'Name',
|
|
'filesView.dialog.cancel': 'Cancel',
|
|
'filesView.dialog.confirm': 'Confirm',
|
|
'filesView.dialog.delete.confirm': 'Delete',
|
|
'filesView.editor.saving': 'Saving...',
|
|
'filesView.editor.saved': 'Saved',
|
|
'filesView.editor.autoSaveOn': 'Auto-save on',
|
|
'filesView.editor.manualSave': 'Manual save',
|
|
'filesView.editor.saveNowTitle': 'Save now ({shortcut}) - auto-saves after 1.5s',
|
|
'filesView.editor.saveNowManualTitle': 'Save now ({shortcut})',
|
|
'filesView.editor.saveAria': 'Save ({shortcut})',
|
|
'filesView.editor.openInDesktopApp': 'Open in desktop app',
|
|
'filesView.editor.refreshApps': 'Refresh Apps',
|
|
'filesView.editor.disableLineWrap': 'Disable line wrap',
|
|
'filesView.editor.enableLineWrap': 'Enable line wrap',
|
|
'filesView.editor.findInFile': 'Find in file',
|
|
'filesView.editor.goToLine': 'Go to line',
|
|
'filesView.editor.switchToTextView': 'Switch to Text View',
|
|
'filesView.editor.switchToTreeView': 'Switch to Tree View',
|
|
'filesView.toast.copyFailed': 'Copy failed',
|
|
'filesView.toast.openInAppFailed': 'Failed to open in {app}',
|
|
'filesView.toast.savingNotSupported': 'Saving not supported',
|
|
'filesView.toast.writeFileFailed': 'Failed to write file',
|
|
'filesView.toast.saveFailed': 'Save failed',
|
|
'filesView.editor.copyFileContents': 'Copy file contents',
|
|
'filesView.editor.copyFilePathTitle': 'Copy file path ({path})',
|
|
'filesView.editor.saveFile': 'Save file',
|
|
'filesView.editor.exitFullscreen': 'Exit fullscreen',
|
|
'filesView.editor.fullscreen': 'Fullscreen',
|
|
'filesView.unsaved.title': 'Unsaved changes',
|
|
'filesView.unsaved.description': 'Save your edits before continuing?',
|
|
'filesView.unsaved.saveChanges': 'Save changes',
|
|
'filesView.unsaved.discard': 'Discard',
|
|
'filesView.editor.back': 'Back',
|
|
'filesView.editor.openFilesAria': 'Open files',
|
|
'filesView.editor.closeFileAria': 'Close {name}',
|
|
'filesView.editor.selectFile': 'Select a file',
|
|
'filesView.editor.showControlsAria': 'Show editor controls',
|
|
'filesView.editor.controlsTitle': 'Editor controls',
|
|
'filesView.editor.pickFileFromTree': 'Pick a file from the tree.',
|
|
'filesView.state.loading': 'Loading...',
|
|
'filesView.state.openingFileAtChange': 'Opening file at change...',
|
|
'filesView.tree.search.placeholder': 'Search files...',
|
|
'filesView.tree.search.clearAria': 'Clear search',
|
|
'filesView.tree.search.searching': 'Searching...',
|
|
'filesView.tree.actions.newFileTitle': 'New File',
|
|
'filesView.tree.actions.newFolderTitle': 'New Folder',
|
|
'filesView.editor.imageAltFallback': 'Image',
|
|
'filesView.error.jsonViewerUnavailable': 'JSON viewer unavailable',
|
|
'filesView.error.switchToTextMode': 'Switch to text mode to view raw content.',
|
|
'filesView.warning.largeFilePreviewLimited': 'This file is large ({sizeKb}KB). Preview may be limited.',
|
|
'filesView.error.previewUnavailable': 'Preview unavailable',
|
|
'filesView.error.switchToEditMode': 'Switch to edit mode to fix the issue.',
|
|
'filesView.error.readFileFailed': 'Failed to read file',
|
|
'filesView.editor.htmlPreviewTitle': 'HTML Preview',
|
|
'contextUsage.aria.label': 'Context usage',
|
|
'contextUsage.mobile.title': 'Context Usage',
|
|
'contextUsage.mobile.usedTokens': 'Used tokens',
|
|
'contextUsage.mobile.contextLimit': 'Context limit',
|
|
'contextUsage.mobile.outputLimit': 'Output limit',
|
|
'contextUsage.mobile.usage': 'Usage',
|
|
'contextUsage.tooltip.usedTokens': 'Used tokens: {tokens}',
|
|
'contextUsage.tooltip.contextLimit': 'Context limit: {tokens}',
|
|
'contextUsage.tooltip.outputLimit': 'Output limit: {tokens}',
|
|
'contextSidebar.session.untitled': 'Untitled Session',
|
|
'contextSidebar.empty.openSession': 'Open a session to inspect context.',
|
|
'contextSidebar.section.context': 'Context',
|
|
'contextSidebar.section.lastAssistantMessage': 'Last Assistant Message',
|
|
'contextSidebar.section.rawMessages': 'Raw Messages',
|
|
'contextSidebar.context.percentUsed': '{percent}% used',
|
|
'contextSidebar.breakdown.user': 'User',
|
|
'contextSidebar.breakdown.assistant': 'Assistant',
|
|
'contextSidebar.breakdown.toolCalls': 'Tool Calls',
|
|
'contextSidebar.breakdown.other': 'Other',
|
|
'contextSidebar.stats.messages': 'Messages',
|
|
'contextSidebar.stats.user': 'User',
|
|
'contextSidebar.stats.assistant': 'Assistant',
|
|
'contextSidebar.stats.cost': 'Cost',
|
|
'contextSidebar.tokens.input': 'Input',
|
|
'contextSidebar.tokens.output': 'Output',
|
|
'contextSidebar.tokens.reasoning': 'Reasoning',
|
|
'contextSidebar.tokens.cacheRead': 'Cache Read',
|
|
'contextSidebar.tokens.cacheWrite': 'Cache Write',
|
|
'contextSidebar.actions.copyJson': 'Copy JSON',
|
|
'contextSidebar.actions.copy': 'Copy',
|
|
'contextSidebar.actions.copied': 'Copied',
|
|
'planView.file.defaultName': 'plan',
|
|
'planView.title.default': 'Plan',
|
|
'planView.error.saveFailed': 'Save failed',
|
|
'planView.error.previewUnavailable': 'Preview unavailable',
|
|
'planView.error.switchToEditMode': 'Switch to edit mode to fix the issue.',
|
|
'planView.error.writeFailed': 'Write failed',
|
|
'planView.error.writePlanFileFailed': 'Failed to write plan file ({status})',
|
|
'planView.actions.improvePlanAria': 'Improve plan',
|
|
'planView.actions.improve': 'Improve',
|
|
'planView.actions.implementPlanAria': 'Implement plan',
|
|
'planView.actions.implement': 'Implement',
|
|
'planView.actions.sendToNewSession': 'Send to new session',
|
|
'planView.actions.sendToNewWorktreeSession': 'Send to new worktree session',
|
|
'planView.actions.copyPlanContents': 'Copy plan contents',
|
|
'planView.state.loading': 'Loading...',
|
|
'diffView.binary.unavailable': 'Content of this file cannot be viewed.',
|
|
'diffView.change.untracked': 'Untracked file',
|
|
'diffView.change.new': 'New file',
|
|
'diffView.change.deleted': 'Deleted file',
|
|
'diffView.change.renamed': 'Renamed file',
|
|
'diffView.change.copied': 'Copied file',
|
|
'diffView.change.modified': 'Modified file',
|
|
'diffView.mode.single.label': 'Single file',
|
|
'diffView.mode.single.description': 'Show one file at a time',
|
|
'diffView.mode.stacked.label': 'All files',
|
|
'diffView.mode.stacked.description': 'Stack all modified files together',
|
|
'diffView.selector.selectFile': 'Select file',
|
|
'diffView.selector.viewMode': 'View mode',
|
|
'diffView.image.original': 'Original',
|
|
'diffView.image.modified': 'Modified',
|
|
'diffView.image.new': 'New',
|
|
'diffView.image.originalAlt': 'Original: {path}',
|
|
'diffView.image.modifiedAlt': 'Modified: {path}',
|
|
'diffView.section.files': 'Files',
|
|
'diffView.state.selectSessionDirectory': 'Select a session directory to view diffs',
|
|
'diffView.state.loadingRepositoryStatus': 'Loading repository status...',
|
|
'diffView.state.notGitRepository': 'Not a git repository. Use the Git tab to initialize or change directories.',
|
|
'diffView.state.cleanWorkingTree': 'Working tree clean, no changes to display',
|
|
'diffView.state.failedToLoadDiff': 'Failed to load diff',
|
|
'diffView.state.loadingDiff': 'Loading diff...',
|
|
'diffView.state.loadingChanges': 'Loading changes...',
|
|
'diffView.summary.changedFilesSingle': '{count} file changed',
|
|
'diffView.summary.changedFilesPlural': '{count} files changed',
|
|
'diffView.actions.retry': 'Retry',
|
|
'diffView.actions.disableLineWrap': 'Disable line wrap',
|
|
'diffView.actions.enableLineWrap': 'Enable line wrap',
|
|
'diffView.actions.openFileInEditorAtChange': 'Open this file in editor at change',
|
|
'diffView.actions.openFileAtFirstChangedLine': 'Open this file at first changed line',
|
|
'rightSidebar.contextNotesTodo.plan.defaultTitle': 'Plan',
|
|
'rightSidebar.contextNotesTodo.empty.selectProject': 'Select a project to add notes and todos.',
|
|
'rightSidebar.contextNotesTodo.notes.title': 'Quick notes - {project}',
|
|
'rightSidebar.contextNotesTodo.notes.placeholder': 'Capture context, reminders, or links',
|
|
'rightSidebar.contextNotesTodo.todo.title': 'Todo',
|
|
'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count} item',
|
|
'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count} items',
|
|
'rightSidebar.contextNotesTodo.todo.clearCompleted': 'Clear completed',
|
|
'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'Add a todo',
|
|
'rightSidebar.contextNotesTodo.todo.addAria': 'Add todo',
|
|
'rightSidebar.contextNotesTodo.todo.empty': 'No todos yet. Add a small checklist for this project.',
|
|
'rightSidebar.contextNotesTodo.todo.actions.markComplete': 'Mark "{text}" complete',
|
|
'rightSidebar.contextNotesTodo.todo.actions.collapse': 'Collapse todo "{text}"',
|
|
'rightSidebar.contextNotesTodo.todo.actions.expand': 'Expand todo "{text}"',
|
|
'rightSidebar.contextNotesTodo.todo.actions.delete': 'Delete "{text}"',
|
|
'rightSidebar.contextNotesTodo.todo.actions.send': 'Send "{text}"',
|
|
'rightSidebar.contextNotesTodo.todo.actions.reorder': 'Reorder "{text}"',
|
|
'rightSidebar.contextNotesTodo.todo.resizeAria': 'Resize todo list',
|
|
'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': 'Send to current session',
|
|
'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': 'Send to new session',
|
|
'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': 'Send to new worktree session',
|
|
'rightSidebar.contextNotesTodo.plans.title': 'Plans',
|
|
'rightSidebar.contextNotesTodo.plans.filesSingle': '{count} file',
|
|
'rightSidebar.contextNotesTodo.plans.filesPlural': '{count} files',
|
|
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Import plan from file',
|
|
'rightSidebar.contextNotesTodo.plans.empty': 'No saved plans yet.',
|
|
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Delete plan',
|
|
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': 'Delete plan "{title}"',
|
|
'rightSidebar.contextNotesTodo.sendDialog.title.newSession': 'Send to new session',
|
|
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': 'Send to new worktree',
|
|
'rightSidebar.contextNotesTodo.sendDialog.variant.default': 'Default',
|
|
'rightSidebar.contextNotesTodo.sendDialog.actions.cancel': 'Cancel',
|
|
'rightSidebar.contextNotesTodo.sendDialog.actions.send': 'Send',
|
|
'rightSidebar.contextNotesTodo.sendDialog.actions.sending': 'Sending',
|
|
'rightSidebar.contextNotesTodo.toast.saveNotesFailed': 'Failed to save project notes',
|
|
'rightSidebar.contextNotesTodo.toast.loadNotesFailed': 'Failed to load project notes',
|
|
'rightSidebar.contextNotesTodo.toast.noActiveSession': 'No active session selected',
|
|
'rightSidebar.contextNotesTodo.toast.sentToCurrentSession': 'Todo sent to current session',
|
|
'rightSidebar.contextNotesTodo.toast.worktreeRequiresGitRepo': 'Worktree actions are only available for Git repositories',
|
|
'rightSidebar.contextNotesTodo.toast.createSessionFailed': 'Failed to create session',
|
|
'rightSidebar.contextNotesTodo.toast.sentToNewSession': 'Todo sent to new session',
|
|
'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': 'Todo sent to new worktree session',
|
|
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Failed to send todo',
|
|
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Failed to delete plan',
|
|
'rightSidebar.contextNotesTodo.toast.planFileEmpty': 'Plan file is empty',
|
|
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Failed to import plan',
|
|
'rightSidebar.contextNotesTodo.toast.planImported': 'Plan imported',
|
|
'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': 'Failed to read plan file',
|
|
'inlineComment.range.lines': 'Lines {start}-{end}',
|
|
'inlineComment.input.placeholder': 'Add a comment... (Cmd+Enter to save)',
|
|
'inlineComment.actions.cancel': 'Cancel',
|
|
'inlineComment.actions.save': 'Save',
|
|
'inlineComment.actions.comment': 'Comment',
|
|
'inlineComment.actions.showLess': 'Show less',
|
|
'inlineComment.actions.showMore': 'Show more',
|
|
'inlineComment.actions.editComment': 'Edit comment',
|
|
'inlineComment.actions.deleteComment': 'Delete comment',
|
|
'inlineComment.toast.selectSessionToSave': 'Select a session to save comment',
|
|
'header.github.connectedWithLogin': 'GitHub: {login}',
|
|
'header.github.connected': 'GitHub connected',
|
|
'header.github.avatarWithLogin': '{login} avatar',
|
|
'header.github.avatar': 'GitHub avatar',
|
|
'header.github.accountsTitle': 'GitHub Accounts',
|
|
'header.services.openWithCurrent': 'Open instance, usage and MCP (current: {current})',
|
|
'header.services.open': 'Open services, usage and MCP',
|
|
'header.services.tooltip.currentInstanceWithShortcuts': 'Current instance: {current} ({toggle}; next tab {nextTab})',
|
|
'header.services.tooltip.servicesWithShortcuts': 'Services ({toggle}; next tab {nextTab})',
|
|
'header.services.title': 'Services',
|
|
'header.services.viewAria': 'View services',
|
|
'header.services.closeAria': 'Close services',
|
|
'header.services.rateLimits': 'Rate limits',
|
|
'header.services.refreshRateLimitsAria': 'Refresh rate limits',
|
|
'header.services.noRateLimits': 'No rate limits available.',
|
|
'header.services.noRateLimitsReported': 'No rate limits reported.',
|
|
'header.services.used': 'Used',
|
|
'header.services.remaining': 'Remaining',
|
|
'header.services.modelFamily.other': 'Other',
|
|
'header.services.shutdownDev': 'Stop OpenChamber',
|
|
'header.actions.openPlanAria': 'Open plan',
|
|
'header.actions.planWithShortcut': 'Plan ({shortcut})',
|
|
'header.actions.terminalPanelWithShortcut': 'Terminal panel ({shortcut})',
|
|
'header.actions.toggleTerminalPanelAria': 'Toggle terminal panel',
|
|
'terminalView.stream.processExitedMessage': '\r\n[Process exited{exitCodeSegment}{signalSegment}]\r\n',
|
|
'terminalView.stream.processExitedWithCode': ' with code {exitCode}',
|
|
'terminalView.stream.processExitedWithSignal': ' (signal {signal})',
|
|
'terminalView.error.sessionEnded': 'Terminal session ended',
|
|
'terminalView.error.connectionFailed': 'Connection failed: {message}',
|
|
'terminalView.error.startSessionFailed': 'Failed to start terminal session',
|
|
'terminalView.error.restartFailed': 'Failed to restart terminal',
|
|
'terminalView.error.sendInputFailed': 'Failed to send input',
|
|
'terminalView.empty.noWorkingDirectory': 'No working directory available for terminal.',
|
|
'terminalView.empty.selectSession': 'Select a session to open the terminal.',
|
|
'terminalView.empty.noWorkingDirectoryForSession': 'No working directory available for this session.',
|
|
'terminalView.actions.retry': 'Retry',
|
|
'terminalView.actions.hardRestart': 'Hard Restart',
|
|
'terminalView.actions.hardRestartTitle': 'Force kill and create fresh session',
|
|
'terminalView.quickKeys.escape': 'Esc',
|
|
'terminalView.quickKeys.tabAria': 'Tab',
|
|
'terminalView.quickKeys.controlLabel': 'Ctrl',
|
|
'terminalView.quickKeys.controlModifierAria': 'Control modifier',
|
|
'terminalView.quickKeys.commandModifierAria': 'Command modifier',
|
|
'terminalView.quickKeys.arrowUpAria': 'Arrow up',
|
|
'terminalView.quickKeys.arrowLeftAria': 'Arrow left',
|
|
'terminalView.quickKeys.arrowDownAria': 'Arrow down',
|
|
'terminalView.quickKeys.arrowRightAria': 'Arrow right',
|
|
'terminalView.quickKeys.enterAria': 'Enter',
|
|
'terminalView.tabs.closeTabTitle': 'Close tab',
|
|
'terminalView.tabs.newTabTitle': 'New tab',
|
|
'terminalView.bottomDock.resizeAria': 'Resize terminal panel',
|
|
'terminalView.bottomDock.restoreTitle': 'Restore terminal panel height',
|
|
'terminalView.bottomDock.restoreAria': 'Restore terminal panel height',
|
|
'terminalView.bottomDock.expandTitle': 'Expand terminal panel',
|
|
'terminalView.bottomDock.expandAria': 'Expand terminal panel',
|
|
'terminalView.bottomDock.closeTitle': 'Close terminal panel',
|
|
'terminalView.bottomDock.closeAria': 'Close terminal panel',
|
|
'terminalView.viewport.inputAria': 'Terminal input',
|
|
'directoryExplorerDialog.title': 'Add project directory',
|
|
'directoryExplorerDialog.description': 'Choose a folder to add as a project.',
|
|
'directoryExplorerDialog.toggle.showHidden': 'Show hidden',
|
|
'directoryExplorerDialog.pathInput.placeholder': 'Enter path or select from tree...',
|
|
'directoryExplorerDialog.actions.openingFinder': 'Opening...',
|
|
'directoryExplorerDialog.actions.openInFinder': 'Open in Finder',
|
|
'directoryExplorerDialog.actions.adding': 'Adding...',
|
|
'directoryExplorerDialog.actions.addProject': 'Add project',
|
|
'directoryExplorerDialog.actions.addLocalProject': 'Add local project',
|
|
'directoryExplorerDialog.actions.cloneRepository': 'Clone repository',
|
|
'directoryExplorerDialog.actions.cloneAndAdd': 'Clone & add',
|
|
'directoryExplorerDialog.actions.cloning': 'Cloning...',
|
|
'directoryExplorerDialog.actions.createAndAdd': 'Create & add',
|
|
'directoryExplorerDialog.actions.alreadyAdded': 'Already added',
|
|
'directoryExplorerDialog.clone.remoteUrlPlaceholder': 'Repository URL (HTTPS or SSH)',
|
|
'directoryExplorerDialog.browse.directories': 'Directories',
|
|
'directoryExplorerDialog.browse.loading': 'Loading directories...',
|
|
'directoryExplorerDialog.browse.empty': 'No matching directories.',
|
|
'directoryExplorerDialog.browse.parentDirectory': 'Parent directory',
|
|
'directoryExplorerDialog.browse.addedBadge': 'Added',
|
|
'directoryExplorerDialog.footer.navigate': 'Navigate',
|
|
'directoryExplorerDialog.footer.select': 'Select',
|
|
'directoryExplorerDialog.footer.add': 'Add',
|
|
'directoryExplorerDialog.shortcut.enter': 'Enter',
|
|
'directoryExplorerDialog.toast.unableToAccessDirectory': 'Unable to access directory',
|
|
'directoryExplorerDialog.toast.desktopDeniedAccess': 'Desktop denied directory access.',
|
|
'directoryExplorerDialog.toast.failedToOpenDirectory': 'Failed to open directory',
|
|
'directoryExplorerDialog.toast.desktopCouldNotGrantAccess': 'Desktop could not grant file access.',
|
|
'directoryExplorerDialog.toast.failedToAddProject': 'Failed to add project',
|
|
'directoryExplorerDialog.toast.cloneUrlRequired': 'Enter a repository URL before cloning.',
|
|
'directoryExplorerDialog.toast.selectValidDirectoryPath': 'Please select a valid directory path.',
|
|
'directoryExplorerDialog.toast.failedToSelectDirectory': 'Failed to select directory',
|
|
'directoryExplorerDialog.toast.unknownError': 'Unknown error occurred.',
|
|
'directoryTree.actions.createNewDirectory': 'Create new directory',
|
|
'directoryTree.actions.pinDirectory': 'Pin directory',
|
|
'directoryTree.actions.unpinDirectory': 'Unpin directory',
|
|
'directoryTree.actions.createDirectory': 'Create directory',
|
|
'directoryTree.actions.cancel': 'Cancel',
|
|
'directoryTree.actions.selectWorkingDirectoryAria': 'Select working directory',
|
|
'directoryTree.state.locatingHomeDirectory': 'Locating home directory...',
|
|
'directoryTree.state.loading': 'Loading...',
|
|
'directoryTree.state.noDirectoriesFound': 'No directories found',
|
|
'directoryTree.section.pinned': 'Pinned',
|
|
'directoryTree.section.browse': 'Browse',
|
|
'aboutDialog.versionLabel': 'Version {version}',
|
|
'aboutDialog.openChamberVersionLabel': 'OpenChamber version {version}',
|
|
'aboutDialog.openCodeVersionLabel': 'OpenCode version {version}',
|
|
'aboutDialog.actions.copyDiagnostics': 'Copy diagnostics',
|
|
'aboutDialog.actions.preparingDiagnostics': 'Preparing diagnostics...',
|
|
'aboutDialog.actions.diagnosticsCopied': 'Diagnostics copied',
|
|
'aboutDialog.diagnosticsDescription': 'Includes OpenChamber state, OpenCode health, directories, and projects.',
|
|
'aboutDialog.footerNote': 'Made with love for the community',
|
|
'aboutDialog.toast.copyFailed': 'Copy failed',
|
|
'aboutDialog.toast.diagnosticsNotReady': 'Diagnostics not ready yet. Wait a second and retry.',
|
|
'aboutDialog.toast.diagnosticsCopied': 'Diagnostics copied',
|
|
'helpDialog.title': 'Keyboard Shortcuts',
|
|
'helpDialog.description': 'Use these keyboard shortcuts to navigate OpenChamber efficiently',
|
|
'helpDialog.section.navigationCommands': 'Navigation & Commands',
|
|
'helpDialog.section.sessionManagement': 'Session Management',
|
|
'helpDialog.section.panels': 'Panels',
|
|
'helpDialog.section.interface': 'Interface',
|
|
'helpDialog.item.openCommandPalette': 'Open Command Palette',
|
|
'helpDialog.item.showKeyboardShortcuts': 'Show Keyboard Shortcuts (this dialog)',
|
|
'helpDialog.item.toggleSessionSidebar': 'Toggle Session Sidebar',
|
|
'helpDialog.item.cycleAgent': 'Cycle Agent (chat input)',
|
|
'helpDialog.item.openModelSelector': 'Open Model Selector',
|
|
'helpDialog.item.navigateModels': 'Navigate Models (in picker)',
|
|
'helpDialog.item.adjustThinkingMode': 'Adjust Thinking Mode (in picker, when supported)',
|
|
'helpDialog.item.cycleThinkingVariant': 'Cycle Thinking Variant (global shortcut)',
|
|
'helpDialog.item.newWindow': 'New Window (desktop only)',
|
|
'helpDialog.item.createNewSession': 'Create New Session',
|
|
'helpDialog.item.createNewWorktreeDraft': 'Create New Worktree Draft',
|
|
'helpDialog.item.focusChatInput': 'Focus Chat Input',
|
|
'helpDialog.item.abortActiveRun': 'Abort active run (double press)',
|
|
'helpDialog.item.toggleRightSidebar': 'Toggle Right Sidebar',
|
|
'helpDialog.item.openRightSidebarGitTab': 'Open Right Sidebar Git Tab',
|
|
'helpDialog.item.openRightSidebarFilesTab': 'Open Right Sidebar Files Tab',
|
|
'helpDialog.item.cycleRightSidebarTab': 'Cycle Right Sidebar Tab',
|
|
'helpDialog.item.toggleTerminalDock': 'Toggle Terminal Dock',
|
|
'helpDialog.item.toggleTerminalExpanded': 'Toggle Terminal Expanded',
|
|
'helpDialog.item.togglePlanContextPanel': 'Toggle Plan Context Panel',
|
|
'helpDialog.item.cycleTheme': 'Cycle Theme (Light → Dark → System)',
|
|
'helpDialog.item.switchProject': 'Switch Project',
|
|
'helpDialog.item.toggleServicesMenu': 'Toggle Services Menu',
|
|
'helpDialog.item.cycleServicesTab': 'Cycle Services Tab',
|
|
'helpDialog.item.openSettings': 'Open Settings',
|
|
'helpDialog.keyCombiner.or': 'or',
|
|
'helpDialog.proTips.title': 'Pro Tips:',
|
|
'helpDialog.proTips.commandPalette': 'Use Command Palette ({shortcut}) to quickly access all actions',
|
|
'helpDialog.proTips.recentSessions': 'The 5 most recent sessions appear in the Command Palette',
|
|
'helpDialog.proTips.themeCycling': 'Theme cycling remembers your preference across sessions',
|
|
'header.actions.rightSidebarWithShortcut': 'Right sidebar ({shortcut})',
|
|
'header.actions.toggleRightSidebarAria': 'Toggle right sidebar',
|
|
'header.actions.openSessionsWithShortcut': 'Open sessions ({shortcut})',
|
|
'header.actions.openSessionsAria': 'Open sessions',
|
|
'header.actions.closeSessionsAria': 'Close sessions',
|
|
'header.actions.newSessionAria': 'New session',
|
|
'header.actions.newSessionWithShortcut': 'New session ({shortcut})',
|
|
'header.actions.backAria': 'Back',
|
|
'header.navigation.mainAria': 'Main navigation',
|
|
'header.sessions.title': 'Sessions',
|
|
'header.changes.availableAria': 'Changes available',
|
|
'session.githubIssuePicker.error.noActiveProject': 'No active project',
|
|
'session.githubIssuePicker.error.runtimeUnavailable': 'GitHub runtime API unavailable',
|
|
'session.githubIssuePicker.error.notConnected': 'GitHub not connected',
|
|
'session.githubIssuePicker.error.repoNotResolvable': 'Repo not resolvable',
|
|
'session.githubIssuePicker.error.repoMustBeGithub': 'origin remote must be a GitHub URL',
|
|
'session.githubIssuePicker.error.issueNotFound': 'Issue not found',
|
|
'session.githubIssuePicker.error.noModelSelected': 'No model selected',
|
|
'session.githubIssuePicker.toast.loadMoreFailed': 'Failed to load more issues',
|
|
'session.githubIssuePicker.toast.loadIssueDetailsFailed': 'Failed to load issue details',
|
|
'session.githubIssuePicker.toast.sendContextFailed': 'Failed to send issue context',
|
|
'session.githubIssuePicker.toast.sessionCreated': 'Session created from issue',
|
|
'session.githubIssuePicker.toast.startSessionFailed': 'Failed to start session',
|
|
'session.githubIssuePicker.title.select': 'Link GitHub Issue',
|
|
'session.githubIssuePicker.title.createSession': 'New Session From GitHub Issue',
|
|
'session.githubIssuePicker.description.select': 'Select an issue to link to this session.',
|
|
'session.githubIssuePicker.description.createSession': 'Seeds a new session with hidden issue context (title/body/labels/comments).',
|
|
'session.githubIssuePicker.searchPlaceholder': 'Search by title or #123, or paste issue URL',
|
|
'session.githubIssuePicker.empty.noActiveProject': 'No active project selected.',
|
|
'session.githubIssuePicker.empty.runtimeUnavailable': 'GitHub runtime API unavailable.',
|
|
'session.githubIssuePicker.empty.notConnected': 'GitHub not connected. Connect your GitHub account in settings.',
|
|
'session.githubIssuePicker.empty.noIssuesFound': 'No issues found',
|
|
'session.githubIssuePicker.empty.noOpenIssuesFound': 'No open issues found',
|
|
'session.githubIssuePicker.loading.issues': 'Loading issues...',
|
|
'session.githubIssuePicker.loading.more': 'Loading...',
|
|
'session.githubIssuePicker.actions.openSettings': 'Open settings',
|
|
'session.githubIssuePicker.actions.useIssue': 'Use issue #{number}',
|
|
'session.githubIssuePicker.actions.openInGitHubAria': 'Open in GitHub',
|
|
'session.githubIssuePicker.actions.loadMore': 'Load more',
|
|
'session.githubIssuePicker.actions.sectionTitle': 'Actions',
|
|
'session.githubIssuePicker.actions.toggleWorktreeAria': 'Toggle worktree',
|
|
'session.githubIssuePicker.actions.createInWorktree': 'Create in worktree',
|
|
'session.githubIssuePicker.actions.openRepo': 'Open Repo',
|
|
'session.githubIssuePicker.actions.refresh': 'Refresh',
|
|
'session.githubPrPicker.error.noActiveProject': 'No active project',
|
|
'session.githubPrPicker.error.runtimeUnavailable': 'GitHub runtime API unavailable',
|
|
'session.githubPrPicker.error.notConnected': 'GitHub not connected',
|
|
'session.githubPrPicker.error.prNotFound': 'Pull request not found',
|
|
'session.githubPrPicker.error.repoNotResolvable': 'Repo not resolvable',
|
|
'session.githubPrPicker.error.repoMustBeGithub': 'origin remote must be a GitHub URL',
|
|
'session.githubPrPicker.toast.loadMoreFailed': 'Failed to load more pull requests',
|
|
'session.githubPrPicker.toast.loadDetailsFailed': 'Failed to load pull request details',
|
|
'session.githubPrPicker.title': 'Link GitHub Pull Request',
|
|
'session.githubPrPicker.description': 'Select a pull request to attach review context to this message.',
|
|
'session.githubPrPicker.searchPlaceholder': 'Search by title or #123, or paste pull request URL',
|
|
'session.githubPrPicker.includeDiffAria': 'Include PR diff in attached context',
|
|
'session.githubPrPicker.includeDiff': 'Include PR diff',
|
|
'session.githubPrPicker.empty.noActiveProject': 'No active project selected.',
|
|
'session.githubPrPicker.empty.runtimeUnavailable': 'GitHub runtime API unavailable.',
|
|
'session.githubPrPicker.empty.notConnected': 'GitHub not connected. Connect your GitHub account in settings.',
|
|
'session.githubPrPicker.empty.noPullRequestsFound': 'No pull requests found',
|
|
'session.githubPrPicker.empty.noOpenPullRequestsFound': 'No open pull requests found',
|
|
'session.githubPrPicker.loading.pullRequests': 'Loading pull requests...',
|
|
'session.githubPrPicker.loading.more': 'Loading...',
|
|
'session.githubPrPicker.actions.openSettings': 'Open settings',
|
|
'session.githubPrPicker.actions.usePullRequest': 'Use pull request #{number}',
|
|
'session.githubPrPicker.actions.openInGitHubAria': 'Open in GitHub',
|
|
'session.githubPrPicker.actions.loadMore': 'Load more',
|
|
'session.newWorktree.title': 'New Worktree',
|
|
'session.newWorktree.mode.newBranch': 'New Branch',
|
|
'session.newWorktree.mode.existingBranch': 'Existing Branch',
|
|
'session.newWorktree.selectBranch': 'Select Branch',
|
|
'session.newWorktree.chooseBranch': 'Choose a branch...',
|
|
'session.newWorktree.fetchBranches': 'Fetch branches',
|
|
'session.newWorktree.searchBranches': 'Search branches...',
|
|
'session.newWorktree.loadingBranches': 'Loading branches...',
|
|
'session.newWorktree.noBranchesFound': 'No branches found',
|
|
'session.newWorktree.matchingBranches': 'Matching branches',
|
|
'session.newWorktree.noMatchingBranches': 'No matching branches',
|
|
'session.newWorktree.localBranches': 'Local branches',
|
|
'session.newWorktree.remoteBranches': 'Remote branches',
|
|
'session.newWorktree.otherLocalBranches': 'Other local branches',
|
|
'session.newWorktree.otherRemoteBranches': 'Other remote branches',
|
|
'session.newWorktree.branchName': 'Branch Name',
|
|
'session.newWorktree.branchNamePlaceholder': 'feature/my-awesome-feature',
|
|
'session.newWorktree.actions.change': 'Change',
|
|
'session.newWorktree.actions.startFromGitHubIssuePr': 'Start from GitHub Issue/PR',
|
|
'session.newWorktree.usingPrBranch': 'Using PR branch: {branch}',
|
|
'session.newWorktree.fromIssue': 'From issue #{number}: {title}',
|
|
'session.newWorktree.worktreeDirectory': 'Worktree Directory',
|
|
'session.newWorktree.worktreeDirectoryPlaceholder': 'my-worktree-directory',
|
|
'session.newWorktree.resetToMatchBranchName': 'Reset to match branch name',
|
|
'session.newWorktree.sourceBranch': 'Source Branch',
|
|
'session.newWorktree.selectSourceBranch': 'Select Source Branch',
|
|
'session.newWorktree.selectSourceBranchPlaceholder': 'Select source branch...',
|
|
'session.newWorktree.newBranchFromSource': 'New branch will be created from {source}',
|
|
'session.newWorktree.issueNumber': 'Issue #{number}',
|
|
'session.newWorktree.prNumber': 'PR #{number}',
|
|
'session.newWorktree.includeDiffBadge': '+diff',
|
|
'session.newWorktree.newSessionTitle': 'New session',
|
|
'session.newWorktree.fromSource': 'from {source}',
|
|
'session.newWorktree.actions.cancel': 'Cancel',
|
|
'session.newWorktree.actions.creating': 'Creating...',
|
|
'session.newWorktree.actions.createWorktree': 'Create Worktree',
|
|
'session.newWorktree.actions.reset': 'Reset',
|
|
'session.newWorktree.error.noModelSelected': 'No model selected',
|
|
'session.newWorktree.error.noActiveProject': 'No active project',
|
|
'session.newWorktree.error.branchNameRequired': 'Branch name is required',
|
|
'session.newWorktree.error.worktreeDirectoryRequired': 'Worktree directory is required',
|
|
'session.newWorktree.error.sendGitHubContextFailed': 'Failed to send GitHub context',
|
|
'session.newWorktree.error.createWorktreeFailed': 'Failed to create worktree',
|
|
'session.newWorktree.toast.sessionFromIssue': 'Session created from issue',
|
|
'session.newWorktree.toast.sessionFromPr': 'Session created from PR',
|
|
'session.newWorktree.toast.worktreeCreated': 'Worktree created',
|
|
'session.newWorktree.toast.worktreeCreatedDescription': '{target} - bootstrapping in background',
|
|
'session.githubIntegration.title': 'Select from GitHub',
|
|
'session.githubIntegration.tabs.issues': 'Issues',
|
|
'session.githubIntegration.tabs.pullRequests': 'Pull Requests',
|
|
'session.githubIntegration.connect.title': 'Connect to GitHub',
|
|
'session.githubIntegration.connect.description': 'Link issues or pull requests to auto-fill worktree details',
|
|
'session.githubIntegration.connect.action': 'Connect GitHub',
|
|
'session.githubIntegration.search.issuesPlaceholder': 'Search issues or enter #123...',
|
|
'session.githubIntegration.search.prsPlaceholder': 'Search PRs or enter #456...',
|
|
'session.githubIntegration.empty.noIssuesFound': 'No issues found',
|
|
'session.githubIntegration.empty.noPullRequestsFound': 'No pull requests found',
|
|
'session.githubIntegration.actions.loadMore': 'Load more',
|
|
'session.githubIntegration.actions.cancel': 'Cancel',
|
|
'session.githubIntegration.actions.select': 'Select',
|
|
'session.githubIntegration.selected.issueNumber': 'Issue #{number}',
|
|
'session.githubIntegration.selected.prNumber': 'PR #{number}',
|
|
'session.githubIntegration.includeDiffAria': 'Include PR diff in session context',
|
|
'session.githubIntegration.includeDiff': 'Include PR diff',
|
|
'session.githubIntegration.error.notConnected': 'GitHub not connected',
|
|
'session.githubIntegration.error.loadDataFailed': 'Failed to load data',
|
|
'session.githubIntegration.validation.branchAlreadyCheckedOut': 'Branch is already checked out in a worktree',
|
|
'session.githubIntegration.validation.branchAlreadyExists': 'Branch already exists locally',
|
|
'session.githubIntegration.validation.failed': 'Validation failed',
|
|
'chat.fileAttachment.toast.attachFailed': 'Failed to attach file',
|
|
'chat.fileAttachment.toast.someFilesSkipped': 'Some files were skipped:\n{summary}',
|
|
'chat.fileAttachment.toast.vscodePickFailed': 'Failed to pick files in VS Code',
|
|
'chat.fileAttachment.fileFallback': 'file',
|
|
'chat.fileAttachment.skippedFallback': 'skipped',
|
|
'chat.fileAttachment.actions.attachAria': 'Attach files',
|
|
'chat.fileAttachment.actions.attach': 'Attach files',
|
|
'chat.fileAttachment.actions.removeNamed': 'Remove {name}',
|
|
'chat.fileAttachment.actions.removeImage': 'Remove image',
|
|
'chat.fileAttachment.activeEditor.addFile': 'Add file:{name} to context',
|
|
'chat.fileAttachment.activeEditor.pinSelection': 'Pin selection to context',
|
|
'chat.fileAttachment.activeEditor.remove': 'Remove from context',
|
|
'chat.pendingChanges.fileCountSingle': '{count} file',
|
|
'chat.pendingChanges.fileCountPlural': '{count} files',
|
|
'chat.pendingChanges.changedInWorkspace': 'changed in workspace',
|
|
'chat.changedFiles.title': 'Changed files',
|
|
'chat.changedFiles.actions.openFileTitle': 'Open {path}',
|
|
'chat.emptyState.opencodeUnreachable': 'OpenCode is not reachable',
|
|
'chat.emptyState.startNewChat': 'Start a new chat',
|
|
'chat.scrollToBottom.aria': 'Scroll to bottom',
|
|
'chat.timeline.relative.justNow': 'just now',
|
|
'chat.timeline.relative.minutesAgo': '{count}m ago',
|
|
'chat.timeline.relative.hoursAgo': '{count}h ago',
|
|
'chat.timeline.relative.daysAgo': '{count}d ago',
|
|
'chat.timeline.title': 'Conversation Timeline',
|
|
'chat.timeline.description': 'Navigate to any point in the conversation or fork a new session',
|
|
'chat.timeline.searchPlaceholder': 'Search messages...',
|
|
'chat.timeline.empty.search': 'No messages found',
|
|
'chat.timeline.empty.session': 'No messages in this session yet',
|
|
'chat.timeline.noTextContent': '[No text content]',
|
|
'chat.timeline.actions.title': 'Actions',
|
|
'chat.timeline.actions.revertFromHere': 'Revert from here',
|
|
'chat.timeline.actions.forkFromHere': 'Fork from here',
|
|
'chat.timeline.actions.previousTurn': 'Previous turn',
|
|
'chat.timeline.actions.latest': 'Latest',
|
|
'chat.timeline.help.clickMessage': 'Click on a message to scroll to it in the conversation',
|
|
'chat.timeline.help.undoToPoint': 'Undo to this point (message text will populate input)',
|
|
'chat.timeline.help.createSessionFromHere': 'Create a new session starting from here',
|
|
'chat.statusRow.todo.status.inProgress': 'In progress',
|
|
'chat.statusRow.todo.status.pending': 'Pending',
|
|
'chat.statusRow.todo.status.completed': 'Completed',
|
|
'chat.statusRow.todo.status.cancelled': 'Cancelled',
|
|
'chat.statusRow.todo.priority.high': 'High priority',
|
|
'chat.statusRow.todo.priority.medium': 'Medium priority',
|
|
'chat.statusRow.todo.priority.low': 'Low priority',
|
|
'chat.statusRow.actions.stopGeneratingAria': 'Stop generating',
|
|
'chat.statusRow.tasksTitle': 'Tasks',
|
|
'chat.statusRow.summary.activeLeft': '{active} active · {left} left',
|
|
'chat.statusRow.aborted': 'Aborted',
|
|
'chat.revertIndicator.redo': 'Redo',
|
|
'chat.revertIndicator.redoAria': 'Redo — restore reverted messages',
|
|
'chat.revertPopover.title': 'Reverted',
|
|
'chat.revertPopover.noTextContent': 'No text content',
|
|
'chat.revertPopover.forkFromHere': 'Fork from here',
|
|
'chat.revertPopover.forkFromMessage': 'Fork from this message',
|
|
'chat.revertPopover.restoreAll': 'Restore all',
|
|
'chat.revertPopover.restore': 'Restore',
|
|
'chat.revertPopover.revert': 'Revert',
|
|
'chat.revertPopover.fork': 'Fork',
|
|
'chat.revert.toast.undo': 'Reverted to {preview}',
|
|
'chat.revert.toast.redo': 'Redone',
|
|
'chat.revert.toast.restored': 'Restored all messages',
|
|
'chat.errorBoundary.title': 'Chat Error',
|
|
'chat.errorBoundary.description': 'The chat interface encountered an error. This might be due to a temporary network issue or corrupted message data.',
|
|
'chat.errorBoundary.sessionLabel': 'Session',
|
|
'chat.errorBoundary.detailsSummary': 'Error details',
|
|
'chat.errorBoundary.resetAction': 'Reset Chat',
|
|
'chat.errorBoundary.persistentHint': 'If the problem persists, try refreshing the page.',
|
|
'chat.autocomplete.tabs.commands': 'Commands',
|
|
'chat.autocomplete.tabs.agents': 'Agents',
|
|
'chat.autocomplete.tabs.files': 'Files',
|
|
'chat.autocomplete.keyboardHint': '↑↓ navigate • Enter select • Esc close',
|
|
'chat.commandAutocomplete.command.initDescription': 'Create/update AGENTS.md file',
|
|
'chat.commandAutocomplete.command.undoDescription': 'Undo the last message',
|
|
'chat.commandAutocomplete.command.redoDescription': 'Redo previously undone messages',
|
|
'chat.commandAutocomplete.command.timelineDescription': 'Open the conversation timeline',
|
|
'chat.commandAutocomplete.command.compactDescription': 'Compress session history using AI to reduce context size',
|
|
'chat.commandAutocomplete.command.summaryDescription': 'Non-destructive session summary. Optional topic hint after the command.',
|
|
'chat.commandAutocomplete.command.workspaceReviewDescription': 'Review current workspace changes for high-signal issues only.',
|
|
'chat.commandAutocomplete.badge.skill': 'skill',
|
|
'chat.commandAutocomplete.badge.system': 'system',
|
|
'chat.commandAutocomplete.empty': 'No commands found',
|
|
'chat.agentMentionAutocomplete.badge.system': 'system',
|
|
'chat.agentMentionAutocomplete.empty': 'No agents found',
|
|
'chat.fileMentionAutocomplete.searchMoreAgents': 'Type to search more agents',
|
|
'chat.fileMentionAutocomplete.empty': 'No matches found',
|
|
'chat.queuedMessage.attachments': '+{count} file(s)',
|
|
'chat.queuedMessage.empty': '(empty)',
|
|
'chat.queuedMessage.removeAria': 'Remove from queue',
|
|
'chat.container.returnToParent.aria': 'Return to parent session',
|
|
'chat.container.returnToParent.titleNamed': 'Return to: {title}',
|
|
'chat.container.returnToParent.title': 'Return to parent session',
|
|
'chat.container.returnToParent.label': 'Parent',
|
|
'chat.container.readOnlySubagentPromptBanner': 'Subagent sessions cannot be prompted.',
|
|
'chat.unifiedControls.title': 'Controls',
|
|
'chat.unifiedControls.model.title': 'Model',
|
|
'chat.unifiedControls.model.noRecent': 'No recent models',
|
|
'chat.unifiedControls.model.moreAria': 'More models',
|
|
'chat.unifiedControls.effort.title': 'Effort',
|
|
'chat.unifiedControls.effort.moreAria': 'More effort options',
|
|
'chat.questionCard.summaryTab': 'Summary',
|
|
'chat.questionCard.noAnswer': '(no answer)',
|
|
'chat.questionCard.inputNeeded': 'Input needed',
|
|
'chat.questionCard.fromSubagent': 'From subagent',
|
|
'chat.questionCard.questionFallback': 'Question {index}',
|
|
'chat.questionCard.selectMultiple': 'Select multiple',
|
|
'chat.questionCard.recommended': 'recommended',
|
|
'chat.questionCard.other': 'Other…',
|
|
'chat.questionCard.yourAnswer': 'Your answer',
|
|
'chat.questionCard.submit': 'Submit',
|
|
'chat.questionCard.next': 'Next',
|
|
'chat.questionCard.dismiss': 'Dismiss',
|
|
'chat.questionCard.copyMarkdown': 'Copy as Markdown',
|
|
'chat.questionCard.copyJson': 'Copy as JSON',
|
|
'chat.questionCard.copiedMarkdown': 'Question copied as Markdown',
|
|
'chat.questionCard.copiedJson': 'Question copied as JSON',
|
|
'chat.questionCard.copyFailed': 'Failed to copy question',
|
|
'chat.textSelection.toast.noProject': 'No project found for this session',
|
|
'chat.textSelection.toast.addToNotesFailed': 'Failed to add to notes',
|
|
'chat.textSelection.toast.addToNotesSuccess': 'Added distilled insight to notes',
|
|
'chat.textSelection.toast.addToNotesSummaryFailed': 'Could not summarize selection, added selected text to notes',
|
|
'chat.textSelection.actions.addToChat': 'Add to chat',
|
|
'chat.textSelection.actions.newSession': 'New session',
|
|
'chat.textSelection.actions.copy': 'Copy',
|
|
'chat.textSelection.actions.addToNotes': 'Add to notes',
|
|
'chat.textSelection.title.addToCurrentChat': 'Add to current chat',
|
|
'chat.textSelection.title.newSessionWithSelection': 'Create new session with selection',
|
|
'chat.textSelection.title.saveInsightToNotes': 'Save distilled insight to notes',
|
|
'chat.messageBody.actions.revertAria': 'Revert to this message',
|
|
'chat.messageBody.actions.revert': 'Revert from here',
|
|
'chat.messageBody.actions.forkAria': 'Fork from this message',
|
|
'chat.messageBody.actions.fork': 'Fork from here',
|
|
'chat.messageBody.actions.copyMessageAria': 'Copy message text',
|
|
'chat.messageBody.actions.copyMessage': 'Copy message',
|
|
'chat.messageBody.actions.openPreviewAria': 'Open preview',
|
|
'chat.messageBody.actions.openPreview': 'Open preview',
|
|
'chat.messageBody.actions.copyAnswer': 'Copy answer',
|
|
'chat.messageBody.actions.savingImage': 'Saving image...',
|
|
'chat.messageBody.actions.saveAsImage': 'Save as image',
|
|
'chat.messageBody.actions.saveAsPlan': 'Save as plan',
|
|
'chat.messageBody.actions.startNewSession': 'Start new session from this answer',
|
|
'chat.messageBody.actions.startNewMultiRun': 'Start new multi-run from this answer',
|
|
'chat.generatedResult.actions.copy': 'Copy',
|
|
'chat.generatedResult.actions.copied': 'Copied',
|
|
'chat.generatedResult.commit.title': 'Generated commit message',
|
|
'chat.generatedResult.commit.highlights': 'Highlights',
|
|
'chat.generatedResult.pullRequest.title': 'Generated pull request',
|
|
'chat.generatedResult.pullRequest.titleLabel': 'Title',
|
|
'chat.generatedResult.pullRequest.bodyLabel': 'Body',
|
|
'chat.messageBody.tts.stopSpeaking': 'Stop speaking',
|
|
'chat.messageBody.tts.readAloud': 'Read aloud',
|
|
'chat.messageBody.tts.readAloudWithProvider': 'Read aloud ({provider} voice)',
|
|
'chat.messageBody.toast.noProject': 'No project found for this session',
|
|
'chat.messageBody.toast.savePlanFailed': 'Failed to save plan',
|
|
'chat.messageBody.toast.planSaved': 'Plan saved',
|
|
'chat.messageBody.toast.imageSaved': 'Image saved',
|
|
'chat.messageBody.toast.generateImageFailed': 'Failed to generate image',
|
|
'chat.chatInput.actions.commands': 'Commands',
|
|
'chat.chatInput.actions.attachFiles': 'Attach files',
|
|
'chat.chatInput.actions.addAttachment': 'Add attachment',
|
|
'chat.chatInput.actions.linkGithubIssue': 'Link GitHub Issue',
|
|
'chat.chatInput.actions.linkGithubPr': 'Link GitHub PR',
|
|
'chat.chatInput.actions.modelAgentSettings': 'Model and agent settings',
|
|
'chat.chatInput.actions.sendMessageAria': 'Send message',
|
|
'chat.chatInput.actions.queueMessageAria': 'Queue message',
|
|
'chat.chatInput.actions.stopGeneratingAria': 'Stop generating',
|
|
'chat.chatInput.focusMode.toggleAria': 'Toggle focus mode',
|
|
'chat.chatInput.focusMode.label': 'Focus mode',
|
|
'chat.chatInput.permissionAutoAccept.disable': 'Disable permission auto-accept',
|
|
'chat.chatInput.permissionAutoAccept.enable': 'Enable permission auto-accept',
|
|
'chat.chatInput.permissionAutoAccept.on': 'Permission auto-accept: on',
|
|
'chat.chatInput.permissionAutoAccept.off': 'Permission auto-accept: off',
|
|
'chat.chatInput.linked.byAuthor': 'by {author}',
|
|
'chat.chatInput.linked.issue.openInBrowserAria': 'Open issue in browser',
|
|
'chat.chatInput.linked.issue.removeAria': 'Remove linked issue',
|
|
'chat.chatInput.linked.pr.number': 'PR #{number}',
|
|
'chat.chatInput.linked.pr.openInBrowserAria': 'Open pull request in browser',
|
|
'chat.chatInput.linked.pr.removeAria': 'Remove linked pull request',
|
|
'chat.chatInput.placeholder.shell': 'Enter shell command...',
|
|
'chat.chatInput.placeholder.chat': '@ for files/agents; / for commands; ! for shell',
|
|
'chat.chatInput.placeholder.selectSession': 'Select or create a session to start chatting',
|
|
'chat.chatInput.toast.compactFailed': 'Failed to compact session',
|
|
'chat.chatInput.toast.summaryFailed': 'Failed to generate summary',
|
|
'chat.chatInput.toast.reviewFailed': 'Failed to review changes',
|
|
'chat.chatInput.toast.attachmentsTooLarge': 'Attachments are too large to send. Please try reducing the number or size of images.',
|
|
'chat.chatInput.toast.sendAttachmentsFailed': 'Failed to send attachments. Try fewer files or smaller images.',
|
|
'chat.chatInput.toast.messageSendFailed': 'Message failed to send. Attachments restored.',
|
|
'chat.chatInput.toast.clipboardAttachFailed': 'Failed to attach image from clipboard',
|
|
'chat.chatInput.toast.addedFileMentions': 'Added {count} file mention(s)',
|
|
'chat.chatInput.toast.attachFileFailed': 'Failed to attach file',
|
|
'chat.chatInput.toast.attachNamedFailed': 'Failed to attach {name}',
|
|
'chat.chatInput.toast.someFilesSkipped': 'Some files were skipped:\n{summary}',
|
|
'chat.chatInput.toast.vscodePickFailed': 'Failed to pick files in VS Code',
|
|
'chat.chatInput.toast.openSessionFirst': 'Open a session first',
|
|
'chat.chatInput.toast.togglePermissionAutoAcceptFailed': 'Failed to toggle permission auto-accept',
|
|
'chat.chatInput.reviewComments': 'Review comments:',
|
|
'chat.chatInput.devServerLogs': 'Dev Server logs:',
|
|
'chat.chatInput.devServerLogsRemove': 'Remove Dev Server logs',
|
|
'chat.chatInput.previewAnnotations': 'Preview annotations:',
|
|
'chat.chatInput.previewContext': 'Preview context:',
|
|
'chat.chatInput.previewContextRemove': 'Remove preview context',
|
|
'chat.chatInput.projectRoot': 'Project root',
|
|
'chat.chatInput.branch': 'Branch',
|
|
'chat.chatInput.worktrees': 'Worktrees',
|
|
'chat.chatInput.worktreeNew': '+ New',
|
|
'chat.chatInput.drop.insertMention': 'Drop to insert as mention',
|
|
'chat.chatInput.drop.attachFiles': 'Drop files here to attach',
|
|
'chat.chatInput.fileFallback': 'file',
|
|
'chat.mobileStatus.editProjects.title': 'Edit Projects',
|
|
'chat.mobileStatus.editProjects.footer': 'Drag items to reorder, or use arrows to move. Tap edit to change details.',
|
|
'chat.mobileStatus.editProjects.empty': 'No projects to edit',
|
|
'chat.mobileStatus.projects.empty': 'No projects',
|
|
'chat.mobileStatus.projects.addAria': 'Add project',
|
|
'chat.mobileStatus.projects.removeTitle': 'Remove Project',
|
|
'chat.mobileStatus.projects.removeDescriptionPrefix': 'Are you sure you want to remove',
|
|
'chat.mobileStatus.projects.cancel': 'Cancel',
|
|
'chat.mobileStatus.projects.remove': 'Remove',
|
|
'chat.mobileStatus.new': 'New',
|
|
'chat.mobileStatus.noSessionsInProject': 'No sessions in this project',
|
|
'chat.mobileStatus.swipeHint': '← Swipe here to open sidebars →',
|
|
'chat.mobileStatus.toast.addProjectFailed': 'Failed to add project',
|
|
'chat.mobileStatus.toast.selectValidDirectory': 'Please select a valid directory.',
|
|
'chat.mobileStatus.toast.selectDirectoryFailed': 'Failed to select directory',
|
|
'chat.toolOutputDialog.image.previousAria': 'Previous image',
|
|
'chat.toolOutputDialog.image.nextAria': 'Next image',
|
|
'chat.toolOutputDialog.image.closeAria': 'Close image preview',
|
|
'chat.toolOutputDialog.mermaid.missingSource': 'Missing Mermaid source URL.',
|
|
'chat.toolOutputDialog.mermaid.loadFailed': 'Unable to load Mermaid diagram.',
|
|
'chat.toolOutputDialog.mermaid.closeAria': 'Close diagram preview',
|
|
'chat.toolOutputDialog.mermaid.loading': 'Loading diagram...',
|
|
'chat.toolOutputDialog.mermaid.renderFailed': 'Unable to render Mermaid diagram.',
|
|
'chat.toolOutputDialog.mermaid.retry': 'Retry',
|
|
'chat.toolOutputDialog.commandCompleted': 'Command completed successfully',
|
|
'chat.toolOutputDialog.noOutputProduced': 'No output was produced',
|
|
'chat.toolPart.lspErrors': 'LSP errors',
|
|
'chat.toolPart.moreErrors': '+{count} more errors',
|
|
'chat.toolPart.error': 'Error:',
|
|
'chat.toolPart.awaitingResponse': 'Awaiting response...',
|
|
'chat.toolPart.noOutputProduced': 'No output produced',
|
|
'chat.toolPart.output': 'Output',
|
|
'chat.toolPart.openSubtask': 'Open {type} subtask',
|
|
'chat.todo.total': 'Total',
|
|
'chat.todo.inProgress': 'In Progress',
|
|
'chat.todo.pending': 'Pending',
|
|
'chat.todo.completed': 'Completed',
|
|
'chat.todo.cancelled': 'Cancelled',
|
|
'chat.permissionCard.workingDirectory': 'Working Directory:',
|
|
'chat.permissionCard.timeout': 'Timeout:',
|
|
'chat.permissionCard.request': 'Request:',
|
|
'chat.permissionCard.headers': 'Headers:',
|
|
'chat.permissionCard.body': 'Body:',
|
|
'chat.permissionCard.action': 'Action:',
|
|
'chat.permissionCard.details': 'Details:',
|
|
'chat.permissionCard.patterns': 'Patterns:',
|
|
'chat.permissionToast.sessionFallback': 'Session',
|
|
'chat.permissionToast.permissionFallback': 'Permission details unavailable',
|
|
'chat.permissionToast.labels.session': 'Session:',
|
|
'chat.permissionToast.labels.permission': 'Permission:',
|
|
'chat.permissionToast.actions.once': 'Once',
|
|
'chat.permissionToast.actions.always': 'Always',
|
|
'chat.permissionToast.actions.deny': 'Deny',
|
|
'chat.permissionToast.actions.approveOnceAria': 'Approve once',
|
|
'chat.permissionToast.actions.approveOnceAriaWithSession': 'Approve once for {session}',
|
|
'chat.permissionToast.actions.approveAlwaysAria': 'Approve always',
|
|
'chat.permissionToast.actions.approveAlwaysAriaWithSession': 'Approve always for {session}',
|
|
'chat.permissionToast.actions.denyAria': 'Deny permission',
|
|
'chat.permissionToast.actions.denyAriaWithSession': 'Deny permission for {session}',
|
|
'chat.permissionRequest.required': 'Permission required:',
|
|
'chat.permissionRequest.actions.once': 'Once',
|
|
'chat.permissionRequest.actions.always': 'Always',
|
|
'chat.permissionRequest.actions.reject': 'Reject',
|
|
'chat.modelControls.provider': 'Provider',
|
|
'chat.modelControls.capability.toolCalling': 'Tool calling',
|
|
'chat.modelControls.capability.reasoning': 'Reasoning',
|
|
'chat.modelControls.modality.text': 'Text',
|
|
'chat.modelControls.modality.image': 'Image',
|
|
'chat.modelControls.modality.video': 'Video',
|
|
'chat.modelControls.modality.audio': 'Audio',
|
|
'chat.modelControls.modality.pdf': 'PDF',
|
|
'chat.modelControls.capabilities': 'Capabilities',
|
|
'chat.modelControls.modalities': 'Modalities',
|
|
'chat.modelControls.input': 'Input',
|
|
'chat.modelControls.output': 'Output',
|
|
'chat.modelControls.limits': 'Limits',
|
|
'chat.modelControls.context': 'Context',
|
|
'chat.modelControls.metadata': 'Metadata',
|
|
'chat.modelControls.knowledge': 'Knowledge',
|
|
'chat.modelControls.release': 'Release',
|
|
'chat.modelControls.mode': 'Mode',
|
|
'chat.modelControls.model': 'Model',
|
|
'chat.modelControls.temperature': 'Temperature',
|
|
'chat.modelControls.topP': 'Top P',
|
|
'chat.modelControls.permissions': 'Permissions',
|
|
'chat.modelControls.edit': 'Edit',
|
|
'chat.modelControls.bash': 'Bash',
|
|
'chat.modelControls.webFetch': 'WebFetch',
|
|
'chat.modelControls.customPrompt': 'Custom Prompt',
|
|
'chat.modelControls.selectModel': 'Select model',
|
|
'chat.modelControls.searchProvidersOrModels': 'Search providers or models',
|
|
'chat.modelControls.clearSearch': 'Clear search',
|
|
'chat.modelControls.current': 'Current',
|
|
'chat.modelControls.thinking': 'Thinking',
|
|
'chat.modelControls.default': 'Default',
|
|
'chat.modelControls.selectAgent': 'Select agent',
|
|
'chat.modelControls.costPerMillion': 'Cost ($/1M tokens)',
|
|
'chat.modelControls.metadataUnavailable': 'Model metadata unavailable.',
|
|
'chat.modelControls.addNewProvider': 'Add new provider',
|
|
'chat.modelControls.noAgentSelected': 'No agent selected.',
|
|
'chat.modelControls.resetToDefault': 'Reset to default',
|
|
'chat.modelControls.searchModels': 'Search models',
|
|
'chat.modelControls.searchAgents': 'Search agents',
|
|
'chat.modelControls.noModelsFound': 'No models found',
|
|
'chat.modelControls.favorites': 'Favorites',
|
|
'chat.modelControls.recent': 'Recent',
|
|
'chat.modelControls.addToFavorites': 'Add to favorites',
|
|
'chat.modelControls.removeFromFavorites': 'Remove from favorites',
|
|
'chat.modelControls.favoriteAria': 'Favorite',
|
|
'chat.modelControls.unfavoriteAria': 'Unfavorite',
|
|
'chat.modelControls.collapseProvider': 'Collapse provider',
|
|
'chat.modelControls.expandProvider': 'Expand provider',
|
|
'chat.modelControls.keyboardHint': '↑↓ navigate{thinking} • Enter select • Esc close',
|
|
'chat.modelControls.keyboardHintNavigate': '↑↓ navigate',
|
|
'chat.modelControls.keyboardHintSwitchAgent': '{shortcut} switch agent',
|
|
'chat.modelControls.keyboardHintThinking': '←→ thinking',
|
|
'chat.modelControls.showThinkingModes': 'Show thinking modes',
|
|
'chat.modelControls.hideThinkingModes': 'Hide thinking modes',
|
|
'chat.modelControls.moreThinkingModes': 'More thinking modes',
|
|
'chat.modelControls.noProvidersOrModelsFound': 'No providers or models match your search.',
|
|
'chat.modelControls.reorderFavoriteAria': 'Reorder favorite',
|
|
'chat.modelControls.reorderFavoriteTitle': 'Drag to reorder favorite',
|
|
'chat.modelControls.permissionLabel.custom': 'Custom',
|
|
'chat.modelControls.permissionLabel.allow': 'Allow',
|
|
'chat.modelControls.permissionLabel.deny': 'Deny',
|
|
'chat.modelControls.permissionLabel.ask': 'Ask',
|
|
'chat.modelControls.modeValue.primary': 'Primary',
|
|
'chat.modelControls.modeValue.subagent': 'Subagent',
|
|
'chat.modelControls.modeValue.all': 'All',
|
|
'chat.modelControls.modeValue.none': '—',
|
|
'chat.reasoningTrace.thinking': 'Thinking',
|
|
'chat.reasoningTrace.justification': 'Justification',
|
|
'chat.reasoningTrace.expandAria': 'Expand reasoning trace',
|
|
'chat.reasoningTrace.collapseAria': 'Collapse reasoning trace',
|
|
'chat.reasoningTrace.thought': 'Thought',
|
|
'chat.messageBody.subtask.title': 'Delegated task',
|
|
'chat.messageBody.subtask.hidePrompt': 'Hide prompt',
|
|
'chat.messageBody.subtask.showPrompt': 'Show prompt',
|
|
'chat.messageBody.subtask.openSession': 'Open subtask session',
|
|
'chat.messageBody.shellCommand.title': 'Shell command',
|
|
'chat.messageBody.shellCommand.hideOutput': 'Hide output',
|
|
'chat.messageBody.shellCommand.showOutput': 'Show output',
|
|
'chat.messageBody.shellCommand.copied': 'Copied',
|
|
'chat.messageBody.shellCommand.copyOutput': 'Copy output',
|
|
'commandPalette.title': 'Command Palette',
|
|
'commandPalette.description': 'Search files, sessions, and commands.',
|
|
'commandPalette.input.placeholder': 'Search files, sessions, commands...',
|
|
'commandPalette.empty.noResults': 'No results found.',
|
|
'commandPalette.empty.searchingFiles': 'Searching files...',
|
|
'commandPalette.item.newSession': 'New Session',
|
|
'commandPalette.item.newMiniChat': 'New Mini Chat Window',
|
|
'commandPalette.item.newWorktreeDraft': 'New Worktree Draft',
|
|
'commandPalette.item.addProject': 'Add Project',
|
|
'commandPalette.item.showSessionSwitcher': 'Show Session Switcher',
|
|
'commandPalette.item.toggleSidebar': 'Toggle Sidebar',
|
|
'commandPalette.item.toggleRightSidebar': 'Toggle Right Sidebar',
|
|
'commandPalette.item.showContextUsage': 'Show Context Usage',
|
|
'commandPalette.item.toggleTerminal': 'Toggle Terminal',
|
|
'commandPalette.item.openSettings': 'Open Settings...',
|
|
'commandPalette.session.untitled': 'Untitled Session',
|
|
'openCodeStatusDialog.title': 'OpenCode Status',
|
|
'openCodeStatusDialog.description': 'Inspect current OpenCode status and diagnostics.',
|
|
'openCodeStatusDialog.actions.copy': 'Copy',
|
|
'openCodeStatusDialog.empty.noData': 'No data.',
|
|
'openCodeStatusDialog.toast.copiedTitle': 'Copied',
|
|
'openCodeStatusDialog.toast.copiedDescription': 'Status copied to clipboard',
|
|
'openCodeStatusDialog.toast.copyFailed': 'Failed to copy status',
|
|
'saveProjectPlanDialog.title': 'Save Project Plan',
|
|
'saveProjectPlanDialog.description': 'Save this plan into your project as a Markdown file.',
|
|
'saveProjectPlanDialog.field.title': 'Title',
|
|
'saveProjectPlanDialog.field.titlePlaceholder': 'Plan title',
|
|
'saveProjectPlanDialog.field.contentPreview': 'Content preview',
|
|
'saveProjectPlanDialog.actions.cancel': 'Cancel',
|
|
'saveProjectPlanDialog.actions.save': 'Save',
|
|
'saveProjectPlanDialog.actions.saving': 'Saving...',
|
|
'branchPickerDialog.title': 'Branch Picker',
|
|
'branchPickerDialog.description.localBranchesForProject': 'Local branches for {project}',
|
|
'branchPickerDialog.description.selectProject': 'Select a project to view branches',
|
|
'branchPickerDialog.search.placeholder': 'Search branches...',
|
|
'branchPickerDialog.search.renameBranchPlaceholder': 'Rename branch',
|
|
'branchPickerDialog.state.noProjectSelected': 'No project selected',
|
|
'branchPickerDialog.state.loadingBranches': 'Loading branches...',
|
|
'branchPickerDialog.state.noMatchingBranches': 'No matching branches',
|
|
'branchPickerDialog.state.noBranchesFound': 'No branches found',
|
|
'branchPickerDialog.badge.head': 'HEAD',
|
|
'branchPickerDialog.badge.worktree': 'worktree',
|
|
'branchPickerDialog.actions.createWorktreeAria': 'Create worktree from branch',
|
|
'branchPickerDialog.actions.renameAria': 'Rename branch',
|
|
'branchPickerDialog.actions.deleteAria': 'Delete branch',
|
|
'branchPickerDialog.actions.deleteWorktreeAria': 'Remove worktree',
|
|
'branchPickerDialog.actions.confirmRenameAria': 'Confirm rename',
|
|
'branchPickerDialog.actions.cancelRenameAria': 'Cancel rename',
|
|
'branchPickerDialog.actions.confirmDeleteAria': 'Confirm delete branch',
|
|
'branchPickerDialog.actions.cancelDeleteAria': 'Cancel delete branch',
|
|
'branchPickerDialog.actions.deletePrompt': 'Delete',
|
|
'branchPickerDialog.actions.forceDeletePrompt': 'Force Delete',
|
|
'branchPickerDialog.tooltip.createWorktree': 'Create worktree',
|
|
'branchPickerDialog.tooltip.worktreeAlreadyExists': 'Worktree already exists',
|
|
'branchPickerDialog.tooltip.rename': 'Rename branch',
|
|
'branchPickerDialog.tooltip.renameDisabledForRoot': 'Cannot rename root branch',
|
|
'branchPickerDialog.tooltip.delete': 'Delete branch',
|
|
'branchPickerDialog.tooltip.deleteCurrentBranch': 'Cannot delete current branch',
|
|
'branchPickerDialog.tooltip.deleteDisabledForRoot': 'Cannot delete root branch',
|
|
'branchPickerDialog.tooltip.deleteWorktree': 'Remove worktree',
|
|
'branchPickerDialog.tooltip.deleteWorktreeRootProtected': 'Cannot remove root worktree',
|
|
'branchPickerDialog.toast.branchRenamed': 'Branch renamed',
|
|
'branchPickerDialog.toast.failedToRenameBranch': 'Failed to rename branch',
|
|
'branchPickerDialog.toast.branchDeleted': 'Branch deleted',
|
|
'branchPickerDialog.toast.branchNotMerged': 'Branch is not fully merged',
|
|
'branchPickerDialog.toast.confirmAgainToForceDelete': 'Confirm again to force delete',
|
|
'branchPickerDialog.toast.failedToDeleteBranch': 'Failed to delete branch',
|
|
'branchPickerDialog.toast.worktreeCreated': 'Worktree created',
|
|
'branchPickerDialog.toast.failedToCreateWorktree': 'Failed to create worktree',
|
|
'branchPickerDialog.error.failedToLoad': 'Failed to load branches',
|
|
'branchPickerDialog.error.renameRejected': 'Rename was rejected',
|
|
'branchPickerDialog.error.renameFailed': 'Failed to rename branch',
|
|
'branchPickerDialog.error.deleteRejected': 'Delete was rejected',
|
|
'branchPickerDialog.error.deleteFailed': 'Failed to delete branch',
|
|
'branchPickerDialog.error.createWorktreeFailed': 'Failed to create worktree',
|
|
'projectEditDialog.title': 'Edit project',
|
|
'projectEditDialog.field.name': 'Name',
|
|
'projectEditDialog.field.namePlaceholder': 'Project name',
|
|
'projectEditDialog.field.color': 'Color',
|
|
'projectEditDialog.field.icon': 'Icon',
|
|
'projectEditDialog.field.preview': 'Preview',
|
|
'projectEditDialog.field.iconBackground': 'Icon Background',
|
|
'projectEditDialog.field.iconBackgroundAria': 'Project icon background color',
|
|
'projectEditDialog.option.none': 'None',
|
|
'projectEditDialog.actions.uploadIcon': 'Upload Icon',
|
|
'projectEditDialog.actions.uploading': 'Uploading...',
|
|
'projectEditDialog.actions.discoverFavicon': 'Discover Favicon',
|
|
'projectEditDialog.actions.discovering': 'Discovering...',
|
|
'projectEditDialog.actions.removeProjectIcon': 'Remove Project Icon',
|
|
'projectEditDialog.actions.removing': 'Removing...',
|
|
'projectEditDialog.actions.undoRemove': 'Undo Remove',
|
|
'projectEditDialog.actions.clear': 'Clear',
|
|
'projectEditDialog.actions.cancel': 'Cancel',
|
|
'projectEditDialog.actions.save': 'Save',
|
|
'projectEditDialog.toast.failedToUploadIcon': 'Failed to upload project icon',
|
|
'projectEditDialog.toast.iconUpdated': 'Project icon updated',
|
|
'projectEditDialog.toast.failedToRemoveIcon': 'Failed to remove project icon',
|
|
'projectEditDialog.toast.iconRemoved': 'Project icon removed',
|
|
'projectEditDialog.toast.failedToDiscoverIcon': 'Failed to discover project icon',
|
|
'projectEditDialog.toast.customIconAlreadySet': 'Custom icon already set for this project',
|
|
'projectEditDialog.toast.iconDiscovered': 'Project icon discovered',
|
|
'agentManager.sidebar.search.placeholder': 'Search Agent Groups...',
|
|
'agentManager.sidebar.actions.newAgentGroup': 'New Agent Group',
|
|
'agentManager.sidebar.actions.more': '... More ({count})',
|
|
'agentManager.sidebar.actions.showLess': 'Show less',
|
|
'agentManager.sidebar.section.agentGroups': 'Agent Groups',
|
|
'agentManager.sidebar.state.loading': 'Loading...',
|
|
'agentManager.sidebar.state.noGroupsFound': 'No groups found',
|
|
'agentManager.sidebar.state.noGroupsYet': 'No agent groups yet',
|
|
'agentManager.sidebar.state.createToGetStarted': 'Create a new agent group to get started',
|
|
'agentManager.sidebar.item.modelCountSingle': '{count} model',
|
|
'agentManager.sidebar.item.modelCountPlural': '{count} models',
|
|
'agentManager.sidebar.item.groupMenuAria': 'Group menu',
|
|
'agentManager.sidebar.item.delete': 'Delete',
|
|
'agentManager.sidebar.relativeTime.now': 'now',
|
|
'agentManager.sidebar.relativeTime.minutes': '{count}m',
|
|
'agentManager.sidebar.relativeTime.hours': '{count}h',
|
|
'agentManager.sidebar.relativeTime.days': '{count}d',
|
|
'agentManager.sidebar.dialog.deleteGroupTitle': 'Delete agent group',
|
|
'agentManager.sidebar.dialog.deleteGroupDescription': 'Delete "{group}"? This removes all worktrees and sessions in this group.',
|
|
'agentManager.sidebar.dialog.cancel': 'Cancel',
|
|
'agentManager.sidebar.dialog.delete': 'Delete',
|
|
'agentManager.sidebar.dialog.deleting': 'Deleting...',
|
|
'agentManager.sidebar.toast.deletingGroup': 'Deleting "{group}"...',
|
|
'agentManager.sidebar.toast.deletedGroup': 'Deleted "{group}"',
|
|
'agentManager.sidebar.toast.failedToDeleteGroup': 'Failed to fully delete "{group}"',
|
|
'agentManager.detail.header.modelCountSingle': '{count} model',
|
|
'agentManager.detail.header.modelCountPlural': '{count} models',
|
|
'agentManager.detail.header.noBranch': 'No branch',
|
|
'agentManager.detail.actions.worktreeActionsAria': 'Worktree actions',
|
|
'agentManager.detail.actions.removeThisWorktree': 'Remove this worktree',
|
|
'agentManager.detail.actions.keepThisRemoveOthers': 'Leave this one, remove others',
|
|
'agentManager.detail.actions.copyWorktreePath': 'Copy Worktree Path',
|
|
'agentManager.detail.dialog.removeWorktreeTitle': 'Remove worktree',
|
|
'agentManager.detail.dialog.removeOtherWorktreesTitle': 'Remove other worktrees',
|
|
'agentManager.detail.dialog.removeWorktreeDescription': 'Remove "{label}"? This deletes all sessions in that worktree and removes the worktree itself.',
|
|
'agentManager.detail.dialog.removeOtherWorktreesDescription': 'Keep "{label}" and remove the other worktrees in "{group}".',
|
|
'agentManager.detail.dialog.cancel': 'Cancel',
|
|
'agentManager.detail.dialog.remove': 'Remove',
|
|
'agentManager.detail.dialog.removeOthers': 'Remove others',
|
|
'agentManager.detail.dialog.working': 'Working...',
|
|
'agentManager.detail.state.loadingSessionFor': 'Loading session for {label}',
|
|
'agentManager.detail.state.sessionId': 'Session ID: {id}',
|
|
'agentManager.detail.state.noSessionsInGroup': 'No sessions in this group',
|
|
'agentManager.detail.toast.noWorktreePath': 'No worktree path available',
|
|
'agentManager.detail.toast.worktreePathCopied': 'Worktree path copied',
|
|
'agentManager.detail.toast.failedToCopyPath': 'Failed to copy path',
|
|
'agentManager.detail.toast.removingWorktree': 'Removing worktree...',
|
|
'agentManager.detail.toast.removingOtherWorktrees': 'Removing other worktrees...',
|
|
'agentManager.detail.toast.failedToFullyRemoveWorktree': 'Failed to fully remove worktree',
|
|
'agentManager.detail.toast.worktreeRemoved': 'Worktree removed',
|
|
'agentManager.detail.toast.otherWorktreesRemoved': 'Removed other worktrees',
|
|
'agentManager.empty.groupName.label': 'Group Name',
|
|
'agentManager.empty.groupName.placeholder': 'e.g. feature-auth, bugfix-login',
|
|
'agentManager.empty.groupName.description': 'Used for worktree directory and branch naming',
|
|
'agentManager.empty.baseBranch.label': 'Base Branch',
|
|
'agentManager.empty.baseBranch.description': 'Creates new branches from {branch}',
|
|
'agentManager.empty.setupCommands.label': 'Setup commands',
|
|
'agentManager.empty.setupCommands.configured': '{count} configured',
|
|
'agentManager.empty.setupCommands.description': 'Commands run in each new worktree. Use $ROOT_PROJECT_PATH for project root.',
|
|
'agentManager.empty.setupCommands.loading': 'Loading...',
|
|
'agentManager.empty.setupCommands.commandPlaceholder': 'e.g., bun install',
|
|
'agentManager.empty.setupCommands.removeCommandAria': 'Remove command',
|
|
'agentManager.empty.setupCommands.addCommand': 'Add command',
|
|
'agentManager.empty.agent.label': 'Agent',
|
|
'agentManager.empty.agent.description': 'Defaults to your configured default agent',
|
|
'agentManager.empty.models.label': 'Models',
|
|
'agentManager.empty.models.addModel': 'Add model',
|
|
'agentManager.empty.models.selectedSingle': '{count} model selected',
|
|
'agentManager.empty.models.selectedPlural': '{count} models selected',
|
|
'agentManager.empty.prompt.label': 'Prompt',
|
|
'agentManager.empty.prompt.placeholder': 'Ask anything...',
|
|
'agentManager.empty.prompt.addAttachmentAria': 'Add attachment',
|
|
'agentManager.empty.actions.startAgentGroupAria': 'Start Agent Group',
|
|
'agentManager.empty.toast.fileTooLarge': 'File "{fileName}" is too large (max 10MB)',
|
|
'agentManager.empty.toast.failedToAttach': 'Failed to attach "{fileName}"',
|
|
'agentManager.empty.toast.attachedSingle': 'Attached {count} file',
|
|
'agentManager.empty.toast.attachedPlural': 'Attached {count} files',
|
|
'agentManager.empty.toast.failedToCreateGroup': 'Failed to create agent group',
|
|
'openInApp.actions.open': 'Open',
|
|
'openInApp.actions.openInAria': 'Open in {app}',
|
|
'openInApp.actions.chooseAppAria': 'Choose app to open',
|
|
'openInApp.actions.copyPath': 'Copy Path',
|
|
'openInApp.actions.refreshApps': 'Refresh Apps',
|
|
'openInApp.toast.pathCopied': 'Path copied to clipboard',
|
|
'projectActions.actions.addActionAria': 'Add action',
|
|
'projectActions.actions.addAction': 'Add action',
|
|
'projectActions.actions.addNewAction': 'Add new action',
|
|
'projectActions.actions.autoDiscover': 'Auto-discover',
|
|
'projectActions.actions.chooseActionAria': 'Choose project action',
|
|
'projectActions.actions.openPreview': 'Open Preview',
|
|
'projectActions.actions.runNamedAria': 'Run {name}',
|
|
'projectActions.actions.stopNamedAria': 'Stop {name}',
|
|
'projectActions.label.fallbackAction': 'Action',
|
|
'projectActions.toast.openedUrlFromOutput': 'Opened URL from action output',
|
|
'projectActions.toast.openedForwardedUrl': 'Opened forwarded URL',
|
|
'projectActions.toast.openedActionUrl': 'Opened action URL',
|
|
'projectActions.error.noActiveDirectory': 'No active directory',
|
|
'projectActions.error.noActiveDirectoryForAction': 'No active directory for action',
|
|
'projectActions.error.failedToCreateTerminalSession': 'Failed to create terminal session',
|
|
'projectActions.error.invalidCustomUrlFormat': 'Invalid custom URL format',
|
|
'projectActions.error.selectedDesktopSshForwardUnavailable': 'Selected desktop SSH forward is unavailable',
|
|
'projectActions.error.failedToRunAction': 'Failed to run action',
|
|
'mcpDropdown.title': 'MCP Servers',
|
|
'mcpDropdown.actions.refreshAria': 'Refresh',
|
|
'mcpDropdown.actions.openAria': 'MCP servers',
|
|
'mcpDropdown.statusAria': 'MCP status',
|
|
'mcpDropdown.status.unknown': 'Unknown',
|
|
'mcpDropdown.status.connected': 'Connected',
|
|
'mcpDropdown.status.failed': 'Failed: {error}',
|
|
'mcpDropdown.status.unknownError': 'Unknown error',
|
|
'mcpDropdown.status.needsAuth': 'Needs authentication',
|
|
'mcpDropdown.status.needsRegistration': 'Needs registration: {error}',
|
|
'mcpDropdown.empty.configureInConfig': 'Configure MCP servers in OpenCode config.',
|
|
'sessionAuth.error.rateLimitTitle': 'Too many attempts',
|
|
'sessionAuth.error.networkTitle': 'Unable to reach server',
|
|
'sessionAuth.error.rateLimitDescriptionSingle': 'Please wait {minutes} minute before trying again.',
|
|
'sessionAuth.error.rateLimitDescriptionPlural': 'Please wait {minutes} minutes before trying again.',
|
|
'sessionAuth.error.networkDescription': 'We could not verify the UI session. Check that the service is running and try again.',
|
|
'sessionAuth.error.retry': 'Retry',
|
|
'sessionAuth.error.passkeySetupFailed': 'Passkey setup failed.',
|
|
'sessionAuth.error.incorrectPassword': 'Incorrect password. Try again.',
|
|
'sessionAuth.error.unexpectedResponse': 'Unexpected response from server.',
|
|
'sessionAuth.error.networkRetry': 'Network error. Check connection and retry.',
|
|
'sessionAuth.error.passkeySignInCanceled': 'Passkey sign-in was canceled.',
|
|
'sessionAuth.error.enterPasswordForPasskey': 'Enter your password to add a passkey.',
|
|
'sessionAuth.locked.tunnelTitle': 'Tunnel access required',
|
|
'sessionAuth.locked.unlockTitle': 'Unlock OpenChamber',
|
|
'sessionAuth.locked.tunnelDescription': 'Open this tunnel using the one-time connect link from the desktop app.',
|
|
'sessionAuth.locked.passwordDescription': 'This session is password-protected.',
|
|
'sessionAuth.locked.hostSwitcherHint': 'Use Local if remote is unreachable.',
|
|
'sessionAuth.actions.cancelPasskey': 'Cancel passkey',
|
|
'sessionAuth.actions.usePasskey': 'Use passkey',
|
|
'sessionAuth.actions.unlockingAria': 'Unlocking',
|
|
'sessionAuth.actions.unlockAria': 'Unlock',
|
|
'sessionAuth.actions.trustDevice': 'Trust this device',
|
|
'sessionAuth.actions.trustDeviceAria': 'Trust this device',
|
|
'sessionAuth.actions.cancelPasskeySetup': 'Cancel passkey setup',
|
|
'sessionAuth.actions.addPasskey': 'Add passkey',
|
|
'sessionAuth.password.placeholder': 'Enter password',
|
|
'sessionAuth.toast.passkeyAdded': 'Passkey added',
|
|
'sessionAuth.toast.passkeySetupCanceled': 'Passkey setup canceled',
|
|
'desktopHostSwitcher.title': 'Instance',
|
|
'desktopHostSwitcher.description': 'Switch between Local and remote OpenChamber servers',
|
|
'desktopHostSwitcher.header.current': 'Current',
|
|
'desktopHostSwitcher.header.default': 'Default',
|
|
'desktopHostSwitcher.header.currentColon': 'Current:',
|
|
'desktopHostSwitcher.header.currentDefaultColon': 'Current default:',
|
|
'desktopHostSwitcher.status.connected': 'Connected',
|
|
'desktopHostSwitcher.status.authRequired': 'Auth required',
|
|
'desktopHostSwitcher.status.wrongService': 'Wrong service',
|
|
'desktopHostSwitcher.status.unreachable': 'Unreachable',
|
|
'desktopHostSwitcher.status.unknown': 'Unknown',
|
|
'desktopHostSwitcher.status.ping': ' · {ms}ms ping',
|
|
'desktopHostSwitcher.statusAria': 'Instance status',
|
|
'desktopHostSwitcher.sshPhase.ready': 'Ready',
|
|
'desktopHostSwitcher.sshPhase.error': 'Error',
|
|
'desktopHostSwitcher.sshPhase.reconnecting': 'Reconnecting',
|
|
'desktopHostSwitcher.sshPhase.resolvingConfig': 'Resolving config',
|
|
'desktopHostSwitcher.sshPhase.checkingAuth': 'Checking auth',
|
|
'desktopHostSwitcher.sshPhase.connectingSsh': 'Connecting SSH',
|
|
'desktopHostSwitcher.sshPhase.probingRemote': 'Probing remote',
|
|
'desktopHostSwitcher.sshPhase.installing': 'Installing',
|
|
'desktopHostSwitcher.sshPhase.updating': 'Updating',
|
|
'desktopHostSwitcher.sshPhase.detectingServer': 'Detecting server',
|
|
'desktopHostSwitcher.sshPhase.startingServer': 'Starting server',
|
|
'desktopHostSwitcher.sshPhase.forwardingPorts': 'Forwarding ports',
|
|
'desktopHostSwitcher.sshPhase.idle': 'Idle',
|
|
'desktopHostSwitcher.ssh.needInstancesHint': 'Need SSH instances? Manage them in Settings.',
|
|
'desktopHostSwitcher.ssh.instanceFallback': 'SSH instance',
|
|
'desktopHostSwitcher.ssh.connectingTo': 'Connecting to {host}',
|
|
'desktopHostSwitcher.actions.refresh': 'Refresh',
|
|
'desktopHostSwitcher.actions.refreshInstancesAria': 'Refresh instances',
|
|
'desktopHostSwitcher.actions.remoteSsh': 'Remote SSH',
|
|
'desktopHostSwitcher.actions.instanceActionsAria': 'Instance actions',
|
|
'desktopHostSwitcher.actions.edit': 'Edit',
|
|
'desktopHostSwitcher.actions.delete': 'Delete',
|
|
'desktopHostSwitcher.actions.connect': 'Connect',
|
|
'desktopHostSwitcher.actions.defaultInstanceAria': 'Default instance',
|
|
'desktopHostSwitcher.actions.setAsDefaultAria': 'Set as default',
|
|
'desktopHostSwitcher.actions.setAsDefault': 'Set as default',
|
|
'desktopHostSwitcher.actions.openInNewWindowAria': 'Open in new window',
|
|
'desktopHostSwitcher.actions.openInNewWindow': 'Open in new window',
|
|
'desktopHostSwitcher.actions.addInstance': 'Add instance',
|
|
'desktopHostSwitcher.actions.cancel': 'Cancel',
|
|
'desktopHostSwitcher.actions.save': 'Save',
|
|
'desktopHostSwitcher.actions.add': 'Add',
|
|
'desktopHostSwitcher.actions.switchToLocal': 'Switch to Local',
|
|
'desktopHostSwitcher.actions.retry': 'Retry',
|
|
'desktopHostSwitcher.actions.switchInstanceAria': 'Switch instance',
|
|
'desktopHostSwitcher.actions.switchInstance': 'Switch instance',
|
|
'desktopHostSwitcher.actions.switchToAria': 'Switch to {instance}',
|
|
'desktopHostSwitcher.field.labelPlaceholder': 'Label',
|
|
'desktopHostSwitcher.field.labelOptionalPlaceholder': 'Label (optional)',
|
|
'desktopHostSwitcher.field.urlPlaceholder': 'https://host:port',
|
|
'desktopHostSwitcher.state.limitedOnPage': 'Instance switcher is limited on this page. Use Local to recover.',
|
|
'desktopHostSwitcher.state.loading': 'Loading...',
|
|
'desktopHostSwitcher.state.instanceUnreachable': 'Instance unreachable',
|
|
'desktopHostSwitcher.edit.title': 'Edit instance',
|
|
'desktopHostSwitcher.add.title': 'Add instance',
|
|
'desktopHostSwitcher.error.failedToSave': 'Failed to save',
|
|
'desktopHostSwitcher.error.failedToLoad': 'Failed to load',
|
|
'desktopHostSwitcher.error.invalidUrl': 'Invalid URL (must be http/https)',
|
|
'desktopHostSwitcher.error.failedToOpenNewWindow': 'Failed to open new window',
|
|
'desktopHostSwitcher.instance.local': 'Local',
|
|
'desktopHostSwitcher.instance.fallback': 'Instance',
|
|
'desktopHostSwitcher.startup.title': 'Default SSH instance unavailable',
|
|
'desktopHostSwitcher.startup.connectingTo': 'Connecting to {host}...',
|
|
'desktopHostSwitcher.startup.failed': 'Failed to connect the default SSH instance.',
|
|
'desktopHostSwitcher.toast.sshConnected': 'SSH instance "{host}" connected',
|
|
'desktopHostSwitcher.toast.sshFailedToConnect': 'SSH instance "{host}" failed to connect',
|
|
'desktopHostSwitcher.toast.instanceUnreachable': 'Instance "{host}" is unreachable',
|
|
'miniChat.header.newSession': 'New session',
|
|
'miniChat.header.session': 'Session',
|
|
'miniChat.header.defaultAgent': 'Default agent',
|
|
'miniChat.header.noModel': 'No model',
|
|
'miniChat.status.busy': 'Running',
|
|
'miniChat.status.retry': 'Retrying',
|
|
'miniChat.status.idle': 'Idle',
|
|
'miniChat.actions.pin': 'Pin above other windows',
|
|
'miniChat.actions.unpin': 'Unpin window',
|
|
'miniChat.actions.pinAria': 'Pin Mini Chat window',
|
|
'miniChat.actions.unpinAria': 'Unpin Mini Chat window',
|
|
'miniChat.actions.openMain': 'Open in main window',
|
|
'miniChat.actions.openMainAria': 'Open session in main window',
|
|
'miniChat.unavailable.title': 'Session unavailable',
|
|
'miniChat.unavailable.description': 'This session could not be loaded. It may have been deleted, archived, or opened from a different project context.',
|
|
'sessions.sidebar.session.menu.openMiniChatWindow': 'Open in Mini Chat Window',
|
|
'header.actions.newMiniChat': 'New Mini Chat Window',
|
|
'header.actions.newMiniChatAria': 'Open a new Mini Chat window',
|
|
'header.actions.openSessionMiniChat': 'Open Session in Mini Chat',
|
|
'header.actions.openSessionMiniChatAria': 'Open current session in Mini Chat',
|
|
'errorBoundary.title': 'Something went wrong',
|
|
'errorBoundary.description': 'The application encountered an unexpected error. This has been logged for debugging.',
|
|
'errorBoundary.state.unknownError': 'Unknown error',
|
|
'errorBoundary.state.componentStackLabel': 'Component stack:',
|
|
'errorBoundary.actions.errorDetails': 'Error details',
|
|
'errorBoundary.actions.tryAgain': 'Try again',
|
|
'errorBoundary.actions.copy': 'Copy',
|
|
'errorBoundary.actions.copied': 'Copied',
|
|
'jsonTreeView.error.emptyJson': 'Empty JSON content',
|
|
'jsonTreeView.error.invalidJson': 'Invalid JSON',
|
|
'jsonTreeView.error.invalidJsonTitle': 'Invalid JSON',
|
|
'jsonTreeView.actions.expandAll': 'Expand All',
|
|
'jsonTreeView.actions.collapseAll': 'Collapse All',
|
|
'numberInput.actions.decreaseAria': 'Decrease value',
|
|
'numberInput.actions.increaseAria': 'Increase value',
|
|
'goToLineDialog.field.linePlaceholderShort': 'Line',
|
|
'goToLineDialog.field.linePlaceholder': 'Line number',
|
|
'goToLineDialog.actions.go': 'Go',
|
|
'goToLineDialog.helper.editorUnavailable': 'Editor unavailable.',
|
|
'goToLineDialog.helper.currentLineRange': 'Current Line: {current}. Type a line number between 1 and {max} to navigate to.',
|
|
'goToLineDialog.helper.goToLine': 'Go to line {line}',
|
|
'dialog.common.actions.close': 'Close',
|
|
'filesView.toast.relativePathCopied': 'Relative path copied',
|
|
'filesView.tree.menu.copyRelativePath': 'Copy Relative Path',
|
|
'multiRun.branchSelector.placeholder.selectSourceBranch': 'Select source branch...',
|
|
'multiRun.branchSelector.status.loadingBranches': 'Loading branches...',
|
|
'multiRun.branchSelector.status.noBranchesFound': 'No branches found',
|
|
'multiRun.branchSelector.status.notInGitRepository': 'Not in a git repository.',
|
|
'multiRun.branchSelector.groups.localBranches': 'Local branches',
|
|
'multiRun.branchSelector.groups.remoteBranches': 'Remote branches',
|
|
'multiRun.window.actions.closeAria': 'Close multi-run',
|
|
'multiRun.window.description': 'OpenChamber Multi-Run window.',
|
|
'voice.status.idle': 'Voice Ready',
|
|
'voice.status.listening': 'Listening...',
|
|
'voice.status.processing': 'Processing...',
|
|
'voice.status.speaking': 'Speaking...',
|
|
'voice.status.error': 'Voice Error',
|
|
'voice.status.conversationModeActiveAria': 'Conversation mode active',
|
|
'voice.action.finishAndTranscribe': 'Finish and transcribe voice input',
|
|
'onboarding.common.actions.back': 'Back',
|
|
'onboarding.common.copyToClipboard': 'Copy to clipboard',
|
|
'onboarding.common.status.copiedToClipboard': 'Copied to clipboard',
|
|
'onboarding.chooser.title': 'Welcome to OpenChamber',
|
|
'onboarding.chooser.description': 'Choose how you want to connect to get started.',
|
|
'onboarding.chooser.tabs.localInstall': 'Local Install',
|
|
'onboarding.chooser.tabs.connectRemote': 'Connect Remote',
|
|
'onboarding.localSetup.title': 'Setting Up OpenCode',
|
|
'onboarding.localSetup.description': 'Install OpenCode CLI to continue.',
|
|
'onboarding.localSetup.dialog.selectOpencodeBinary': 'Select opencode binary',
|
|
'onboarding.localSetup.errors.cliNotReady': 'OpenCode CLI is not ready yet. Please confirm installation is complete and try again.',
|
|
'onboarding.localSetup.errors.detectionFailed': 'Detection failed',
|
|
'onboarding.localSetup.windows.title': 'Windows setup (WSL recommended)',
|
|
'onboarding.localSetup.windows.stepInstallWsl': 'Install WSL (if needed) with',
|
|
'onboarding.localSetup.windows.stepInstallWslSuffix': 'in PowerShell.',
|
|
'onboarding.localSetup.windows.stepRunInstallInWsl': 'Run the install command below inside your WSL terminal.',
|
|
'onboarding.localSetup.windows.stepSetBinaryPath': 'If OpenChamber does not detect OpenCode automatically, set the binary path below.',
|
|
'onboarding.localSetup.intro': 'OpenCode is the heart of OpenChamber — install it to get started.',
|
|
'onboarding.localSetup.docs.windows': 'OpenCode Windows + WSL docs',
|
|
'onboarding.localSetup.docs.default': 'OpenCode docs',
|
|
'onboarding.localSetup.actions.checking': 'Checking…',
|
|
'onboarding.localSetup.actions.checkAndContinue': "I've completed installation, check and continue",
|
|
'onboarding.localSetup.actions.checkNow': 'Check now',
|
|
'onboarding.localSetup.helper.checkAndContinue': 'Click to check if OpenCode CLI is available. If successful, you\'ll automatically enter the main screen.',
|
|
'onboarding.localSetup.status.watching': 'Waiting for OpenCode',
|
|
'onboarding.localSetup.status.autoContinue': "We'll continue automatically once it's detected.",
|
|
'onboarding.localSetup.field.alreadyInstalled': 'Already installed? Set the OpenCode CLI path:',
|
|
'onboarding.localSetup.advanced.title': 'Set a custom binary path',
|
|
'onboarding.localSetup.troubleshoot.title': 'Having trouble?',
|
|
'onboarding.localSetup.actions.browse': 'Browse',
|
|
'onboarding.localSetup.actions.apply': 'Apply',
|
|
'onboarding.localSetup.helper.saveAndReload': 'Saves to OpenChamber settings and reloads OpenCode configuration.',
|
|
'onboarding.localSetup.remotePreference': 'Prefer to use a remote server?',
|
|
'onboarding.localSetup.actions.connectRemoteServer': 'Connect to Remote Server →',
|
|
'onboarding.localSetup.windows.hintInstallInWsl': 'On Windows, install and run OpenCode in WSL for best compatibility.',
|
|
'onboarding.localSetup.windows.hintDetectionFailed': 'If detection fails, set a native path (opencode.cmd/opencode.exe), wsl.exe, or wsl:/usr/local/bin/opencode.',
|
|
'onboarding.localSetup.hint.ensurePath': 'Already installed? Make sure opencode is in your PATH.',
|
|
'onboarding.localSetup.hint.setEnv': 'Or set OPENCODE_BINARY environment variable.',
|
|
'onboarding.localSetup.hint.missingRuntime': 'If you see "env: node: No such file or directory" or "env: bun: No such file or directory", install that runtime or ensure it is on PATH.',
|
|
'onboarding.remoteConnection.title': 'Connect to Remote Server',
|
|
'onboarding.remoteConnection.titleRecovery': 'Connect to a Different Server',
|
|
'onboarding.remoteConnection.description': 'Enter the address of an OpenChamber server to connect to.',
|
|
'onboarding.remoteConnection.field.serverAddress': 'Server Address',
|
|
'onboarding.remoteConnection.field.serverAddressPlaceholder': 'https://your-server.example.com:4096',
|
|
'onboarding.remoteConnection.field.nameOptional': 'Name (optional)',
|
|
'onboarding.remoteConnection.field.namePlaceholder': 'My Remote Server',
|
|
'onboarding.remoteConnection.errors.connectionTestFailed': 'Connection test failed',
|
|
'onboarding.remoteConnection.errors.failedToSaveConnection': 'Failed to save connection',
|
|
'onboarding.remoteConnection.status.connectedSuccessfully': 'Connected successfully ({latencyMs}ms)',
|
|
'onboarding.remoteConnection.status.authWarning': 'Server requires authentication. You can still connect.',
|
|
'onboarding.remoteConnection.status.connectionFailed': 'Connection Failed',
|
|
'onboarding.remoteConnection.status.suggestionsUnreachable': 'Suggestions: Check the server address, verify the server is running, or check your network connection.',
|
|
'onboarding.remoteConnection.status.suggestionsWrongService': 'Suggestions: Verify the URL points to an OpenChamber server, or contact the server administrator.',
|
|
'onboarding.remoteConnection.actions.testing': 'Testing…',
|
|
'onboarding.remoteConnection.actions.testConnection': 'Test Connection',
|
|
'onboarding.remoteConnection.actions.connectAndRestart': 'Connect & Restart',
|
|
'onboarding.remoteConnection.actions.whatToDo': 'What would you like to do?',
|
|
'onboarding.remoteConnection.actions.chooseDifferentServer': 'Choose Different Server',
|
|
'onboarding.remoteConnection.actions.useLocalInstead': 'Use Local Instead',
|
|
'onboarding.remoteConnection.probe.authMessage': 'Server requires authentication. You can still connect, but may need to provide credentials.',
|
|
'onboarding.remoteConnection.probe.wrongServiceMessage': 'Server responded but is not running OpenChamber. Verify the address points to an OpenChamber server.',
|
|
'onboarding.remoteConnection.probe.unreachableMessage': 'Server is unreachable. Check your network connection and verify the server address.',
|
|
'onboarding.desktopRecovery.localUnavailable.title': 'Local OpenCode Unavailable',
|
|
'onboarding.desktopRecovery.localUnavailable.description': 'OpenCode CLI could not be started or is not installed. Install OpenCode or connect to a remote server instead.',
|
|
'onboarding.desktopRecovery.localUnavailable.retry': 'Retry Local',
|
|
'onboarding.desktopRecovery.localUnavailable.useLocal': 'Set Up Local',
|
|
'onboarding.desktopRecovery.noDefaultConnection.title': 'No Default Connection',
|
|
'onboarding.desktopRecovery.noDefaultConnection.description': 'Your saved default connection could not be found. Choose how you want to connect.',
|
|
'onboarding.desktopRecovery.remoteUnreachable.title': 'Remote Server Unreachable',
|
|
'onboarding.desktopRecovery.remoteUnreachable.description': 'Could not connect to "{host}". Check your network connection and verify the server address.',
|
|
'onboarding.desktopRecovery.remoteUnreachable.retry': 'Retry Connection',
|
|
'onboarding.desktopRecovery.incompatibleServer.title': 'Incompatible Server',
|
|
'onboarding.desktopRecovery.incompatibleServer.description': 'The server at "{host}" is not running OpenChamber. Verify the address points to an OpenChamber server.',
|
|
'onboarding.desktopRecovery.common.useLocal': 'Use Local',
|
|
'onboarding.desktopRecovery.common.useRemote': 'Use Remote',
|
|
'onboarding.desktopRecovery.actions.retrying': 'Retrying…',
|
|
'onboarding.desktopRecovery.actions.retryConnection': 'Retry Connection',
|
|
'startup.initRecovery.title': 'Startup failed',
|
|
'startup.initRecovery.description': 'OpenChamber could not finish initialization. Check that the server is running, then retry.',
|
|
'startup.initRecovery.retry': 'Retry',
|
|
'startup.initRecovery.retrying': 'Retrying…',
|
|
'onboarding.desktopRecovery.placeholders.remoteServer': 'the remote server',
|
|
'onboarding.desktopRecovery.placeholders.unknownServer': 'unknown',
|
|
'vscodeLayout.title.chat': 'Chat',
|
|
'vscodeLayout.title.newSession': 'New session',
|
|
'vscodeLayout.title.sessions': 'Sessions',
|
|
'vscodeLayout.title.sessionFallback': 'Session',
|
|
'vscodeLayout.actions.backToSessionsAria': 'Back to sessions',
|
|
'vscodeLayout.actions.newSessionAria': 'New session',
|
|
'vscodeLayout.actions.openAgentManagerAria': 'Open Agent Manager',
|
|
'vscodeLayout.actions.resizeSessionsSidebarAria': 'Resize sessions sidebar',
|
|
'vscodeLayout.actions.settingsAria': 'Settings',
|
|
'vscodeLayout.quota.title': 'Rate limits',
|
|
'vscodeLayout.quota.mode.used': 'Used',
|
|
'vscodeLayout.quota.mode.remaining': 'Remaining',
|
|
'vscodeLayout.quota.lastUpdated': 'Last updated {time}',
|
|
'vscodeLayout.quota.noRateLimitsAvailable': 'No rate limits available.',
|
|
'vscodeLayout.quota.noRateLimitsReported': 'No rate limits reported.',
|
|
'vscodeLayout.quota.actions.rateLimitsAria': 'Rate limits',
|
|
'vscodeLayout.quota.actions.showUsedAria': 'Show used quota',
|
|
'vscodeLayout.quota.actions.showRemainingAria': 'Show remaining quota',
|
|
'vscodeLayout.quota.actions.refreshAria': 'Refresh rate limits',
|
|
'updateDialog.header.updateAvailable': 'Update Available',
|
|
'updateDialog.header.updating': 'Updating OpenChamber...',
|
|
'updateDialog.changelog.title': "What's new",
|
|
'updateDialog.status.installingUpdate': 'Installing update...',
|
|
'updateDialog.status.serverRestarting': 'Server restarting...',
|
|
'updateDialog.status.waitingForServer': 'Waiting for server...',
|
|
'updateDialog.status.autoReloadHint': 'The page will reload automatically when the update is complete.',
|
|
'updateDialog.fallback.updateViaTerminal': 'Or update via terminal:',
|
|
'updateDialog.actions.copyCommand': 'Copy command',
|
|
'updateDialog.actions.copied': 'Copied!',
|
|
'updateDialog.status.downloadingPayload': 'Downloading update payload...',
|
|
'updateDialog.actions.downloadUpdate': 'Download Update',
|
|
'updateDialog.status.downloading': 'Downloading...',
|
|
'updateDialog.actions.restartToUpdate': 'Restart to Update',
|
|
'updateDialog.actions.updateNow': 'Update Now',
|
|
'updateDialog.status.updating': 'Updating...',
|
|
'updateDialog.error.updateFailed': 'Update failed',
|
|
'updateDialog.error.takingLonger': 'Update is taking longer than expected. Wait a bit and refresh, or run: openchamber update',
|
|
'opencodeUpdate.toast.available.title': 'OpenCode update available',
|
|
'opencodeUpdate.toast.available.description': 'Version {version} is ready to install.',
|
|
'opencodeUpdate.toast.actions.update': 'Update',
|
|
'opencodeUpdate.toast.actions.reload': 'Reload OpenCode',
|
|
'opencodeUpdate.toast.upgrading.title': 'Updating OpenCode...',
|
|
'opencodeUpdate.toast.upgrading.description': 'Keep OpenChamber open.',
|
|
'opencodeUpdate.toast.updated.title': 'OpenCode updated',
|
|
'opencodeUpdate.toast.updated.description': 'Reload OpenCode to start using the updated version.',
|
|
'opencodeUpdate.toast.updated.descriptionWithVersion': 'Version {version} is installed. Reload OpenCode to use it.',
|
|
'opencodeUpdate.toast.failed.title': 'Could not update OpenCode',
|
|
'opencodeUpdate.toast.failed.description': 'The OpenCode upgrade failed.',
|
|
'opencodeUpdate.toast.reload.message': 'Restarting OpenCode...',
|
|
'memoryDebugPanel.title': 'Debug Panel',
|
|
'memoryDebugPanel.tabs.memory': 'Memory',
|
|
'memoryDebugPanel.tabs.streaming': 'Streaming',
|
|
'memoryDebugPanel.section.sessionsInMemory': 'Sessions in Memory',
|
|
'memoryDebugPanel.section.uiStreamingMetrics': 'UI Streaming Metrics',
|
|
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code Bridge Metrics',
|
|
'memoryDebugPanel.section.noUiSamples': 'No UI streaming samples yet. Start a stream and keep this panel open.',
|
|
'memoryDebugPanel.section.noVscodeSamples': 'No VS Code bridge samples yet.',
|
|
'memoryDebugPanel.metric.totalMessages': 'Total Messages',
|
|
'memoryDebugPanel.metric.cachedSessions': 'Cached Sessions',
|
|
'memoryDebugPanel.metric.viewportWindow': 'Viewport Window',
|
|
'memoryDebugPanel.metric.zombieTimeout': 'Zombie Timeout',
|
|
'memoryDebugPanel.metric.githubTotalRequests': 'GitHub Total Requests',
|
|
'memoryDebugPanel.metric.metrics': 'Metrics',
|
|
'memoryDebugPanel.metric.samples': 'Samples',
|
|
'memoryDebugPanel.metric.lastUpdate': 'Last Update',
|
|
'memoryDebugPanel.metric.uiMetrics': 'UI Metrics',
|
|
'memoryDebugPanel.metric.vscodeMetrics': 'VS Code Metrics',
|
|
'memoryDebugPanel.metric.messageListRenders': 'MsgList Renders',
|
|
'memoryDebugPanel.metric.messageListStreamRenders': 'MsgList Stream Renders',
|
|
'memoryDebugPanel.metric.chatMessageRenders': 'ChatMessage Renders',
|
|
'memoryDebugPanel.metric.chatMessageStreamRenders': 'ChatMessage Stream Renders',
|
|
'memoryDebugPanel.metric.chatMessageStaticDuringStream': 'ChatMessage Static During Stream',
|
|
'memoryDebugPanel.metric.chatMessageStaticOutsideActiveTurn': 'ChatMessage Static Outside Active Turn',
|
|
'memoryDebugPanel.metric.messagesValue': '{count} messages',
|
|
'memoryDebugPanel.metric.minutesValue': '{count} minutes',
|
|
'memoryDebugPanel.metric.msgsValue': '{count} msgs',
|
|
'memoryDebugPanel.metric.countValue': 'count {value}',
|
|
'memoryDebugPanel.metric.avgValue': 'avg {value}',
|
|
'memoryDebugPanel.metric.maxValue': 'max {value}',
|
|
'memoryDebugPanel.metric.totalValue': 'total {value}',
|
|
'memoryDebugPanel.actions.logState': 'Log State',
|
|
'memoryDebugPanel.actions.copyJson': 'Copy JSON',
|
|
'memoryDebugPanel.tooltip.logCurrentState': 'Log current memory state to browser console',
|
|
'memoryDebugPanel.streaming.copy.copied': 'Streaming debug JSON copied',
|
|
'memoryDebugPanel.streaming.copy.failed': 'Failed to copy JSON',
|
|
'memoryDebugPanel.streaming.copy.hint': 'Copy exports both UI and VS Code streaming metrics as JSON',
|
|
'memoryDebugPanel.common.idle': 'idle',
|
|
'memoryDebugPanel.common.live': 'live',
|
|
'memoryDebugPanel.common.notAvailable': 'n/a',
|
|
'memoryDebugPanel.common.untitled': 'Untitled',
|
|
'directoryTree.field.newDirectoryPlaceholder': 'new_directory',
|
|
'textarea.resizeHandleAria': 'Resize textarea',
|
|
'sidebar.resize.leftPanelAria': 'Resize left panel',
|
|
'sidebar.resize.rightPanelAria': 'Resize right panel',
|
|
'mainLayout.mobile.closeDrawerAria': 'Close drawer',
|
|
'sortableTabsStrip.aria.tabs': 'Tabs',
|
|
'openChamberLogo.aria.logo': 'OpenChamber logo',
|
|
'markdownRenderer.table.actions.copyTitle': 'Copy table',
|
|
'markdownRenderer.table.actions.downloadTitle': 'Download table',
|
|
'markdownRenderer.table.toast.downloadedAsFormat': 'Table downloaded as {format}',
|
|
'markdownRenderer.mermaid.actions.copyTitle': 'Copy',
|
|
'markdownRenderer.mermaid.actions.copySourceTitle': 'Copy source',
|
|
'markdownRenderer.mermaid.actions.downloadSvgTitle': 'Download SVG',
|
|
'markdownRenderer.mermaid.toast.downloadFailed': 'Failed to download diagram',
|
|
} as const;
|
|
|
|
export type I18nKey = keyof typeof dict;
|