# Messages

Every translatable message in Ballmac UI, with its key and English text.

Every built-in label, placeholder and screen reader text is a message with an English default: 773 in all. To translate them, see [Translate Ballmac UI](https://ui.ballmac.com/docs/guides/translate). The same keys are available as JSON at [/i18n/en.json](https://ui.ballmac.com/i18n/en.json).

| Key | English |
| --- | --- |
| `activity-feed.emptyMessage` | No activity yet |
| `agent-graph.ends` | Nothing follows it. |
| `agent-graph.hint` | Select a node to see its connections. The arrow keys follow the edges. |
| `agent-graph.label` | How the agents and tools are connected |
| `agent-graph.node` | \{label\}, \{kind\}\{status\} |
| `agent-graph.receives` | Receives from \{names\}. |
| `agent-graph.sends` | Sends to \{names\}. |
| `agent-graph.starts` | Starts the work. |
| `agent-lanes.handedBy` | Started by \{from\}. |
| `agent-lanes.handoffText` | \{from\} hands over to \{to\} at \{time\} |
| `agent-lanes.handsTo` | Hands over to \{to\}. |
| `agent-lanes.hint` | Select a step to see what happened. Arrow keys move between steps. |
| `agent-lanes.legend` | Step kinds |
| `agent-lanes.now` | Now |
| `agent-lanes.step` | \{label\}, \{lane\}, \{kind\}, \{from\} to \{to\} |
| `agent-plan.progress` | \{title\} progress |
| `agent-plan.retry` | Retry |
| `agent-plan.title` | Plan |
| `agent-roster.all` | All |
| `agent-roster.count` | \{count\} agents shown |
| `agent-roster.filter` | Filter by status |
| `agent-roster.load` | \{name\} load |
| `agent-roster.title` | Agents |
| `ai-chat.label` | Conversation |
| `ai-chat.scrollButtonLabel` | Scroll to latest message |
| `ai-chat.suggestions` | Suggestions |
| `ai-message.label` | Copy message |
| `ai-message.messageActions` | Message actions |
| `api-endpoint.defaultValue` | Default: \{value\} |
| `api-endpoint.parameters` | \{group\} parameters |
| `api-endpoint.requestAndResponses` | Request and responses |
| `api-key-field.copied` | Copied |
| `api-key-field.copyKey` | Copy key |
| `api-key-field.hideKey` | Hide key |
| `api-key-field.label` | API key |
| `api-key-field.regenerateKey` | Regenerate key |
| `api-key-field.showKey` | Show key |
| `app-shell.label` | Sidebar |
| `app-shell.label2` | Details |
| `app-shell.navigation` | Navigation |
| `app-shell.openNavigation` | Open navigation |
| `app-window.close` | Close window |
| `app-window.fullscreen` | Enter full screen |
| `app-window.maximize` | Maximize window |
| `app-window.minimize` | Minimize window |
| `app-window.restore` | Restore window |
| `app-window.zoom` | Zoom window |
| `approval-card.alwaysAllowLabel` | Always allow |
| `approval-card.approveLabel` | Approve |
| `approval-card.deniesItselfIn` | Denies itself in \{seconds\}s |
| `approval-card.denyLabel` | Deny |
| `approval-card.previewLabel` | Exactly what will run |
| `artifact-panel.close` | Close |
| `artifact-panel.closeArtifact` | Close artifact |
| `artifact-panel.copied` | Copied |
| `artifact-panel.copyCode` | Copy code |
| `artifact-panel.download` | Download |
| `artifact-panel.downloadFile` | Download \{name\} |
| `artifact-panel.file` | file |
| `artifact-panel.nextVersion` | Next version |
| `artifact-panel.previousVersion` | Previous version |
| `artifact-panel.versionOf` | of \{total\} |
| `artifact-panel.versions` | Versions |
| `artifact-panel.view` | View |
| `audio-player.audioPlayer` | Audio player: \{title\} |
| `audio-player.backSeconds` | Back \{back\} seconds |
| `audio-player.chapter` | Chapter: |
| `audio-player.forwardSeconds` | Forward \{forward\} seconds |
| `audio-player.pause` | Pause |
| `audio-player.play` | Play |
| `audio-player.playbackSpeedChangeSpeed` | Playback speed \{rate\}×. Change speed |
| `audio-player.seek` | Seek |
| `autonomy-dial.asks` | Stops to ask about |
| `autonomy-dial.does` | Does on its own |
| `autonomy-dial.label` | How much can the agent do on its own? |
| `avatar-circles.andMore` | and \{extra\} more |
| `avatar.more` | \{count\} more |
| `back-to-top.label` | Back to top |
| `banner.dismiss` | Dismiss \{title\} |
| `billing-card.cancelSubscription` | Cancel subscription |
| `billing-card.changePlan` | Change plan |
| `billing-card.currentPlan` | Current plan |
| `billing-card.downloadInvoice` | Download invoice \{id\} |
| `billing-card.exp` | Exp \{date\} |
| `billing-card.paymentMethod` | Payment method |
| `billing-card.recentInvoices` | Recent invoices |
| `billing-card.seats` | Seats |
| `billing-card.seatsOf` | \{used\} of \{total\} used |
| `billing-card.seatsUsed` | Seats used |
| `billing-card.update` | Update |
| `breadcrumb.label` | Breadcrumb |
| `breadcrumb.morePages` | More pages |
| `browser-frame.secureConnection` | Secure connection |
| `bullet-chart.of` | of \{target\} |
| `calendar-agenda.agenda` | Agenda |
| `calendar-agenda.chooseDate` | Choose date |
| `calendar-agenda.emptyMessage` | No events scheduled |
| `calendar-agenda.nextDay` | Next day |
| `calendar-agenda.previousDay` | Previous day |
| `carousel.chooseSlide` | Choose slide |
| `carousel.goToSlide` | Go to slide \{n\} |
| `carousel.label` | Carousel |
| `carousel.nextSlide` | Next slide |
| `carousel.pauseAutoplay` | Pause autoplay |
| `carousel.previousSlide` | Previous slide |
| `carousel.startAutoplay` | Start autoplay |
| `changelog-feed.all` | All |
| `changelog-feed.filterChanges` | Filter changes |
| `changelog-feed.latest` | Latest |
| `changelog-feed.noReleasesMatchThisFilter` | No releases match this filter. |
| `chart-bar.category` | Category |
| `chart-frame.category` | Category |
| `chart-frame.chart` | Chart |
| `chart-frame.download` | Download CSV |
| `chart-frame.emptyDescription` | The chart appears when there is something to plot. |
| `chart-frame.emptyTitle` | No data yet |
| `chart-frame.errorDescription` | Check your connection and try again. |
| `chart-frame.errorTitle` | The chart could not be loaded |
| `chart-frame.loading` | Loading \{title\} |
| `chart-frame.patterns` | Patterns |
| `chart-frame.patternsHint` | Fill with patterns as well as color |
| `chart-frame.ranking` | \{series\}: \{list\}. |
| `chart-frame.series` | Series |
| `chart-frame.single` | \{series\}: \{value\} in \{at\}. |
| `chart-frame.table` | Table |
| `chart-frame.tableLabel` | \{title\}, data table |
| `chart-frame.trend` | \{series\}: from \{first\} in \{firstAt\} to \{last\} in \{lastAt\}; highest \{max\} in \{maxAt\}, lowest \{min\} in \{minAt\}. |
| `chart-frame.view` | View |
| `chart-pie.category` | Category |
| `chart-pie.share` | Share |
| `chart-pie.totalLabel` | Total |
| `chart-pie.value` | Value |
| `chart-radial.category` | Category |
| `chart-radial.share` | Of \{max\} |
| `chart-radial.summary` | \{name\}: \{value\} of \{max\} (\{share\}). |
| `chart-radial.value` | Value |
| `chart-scatter.group` | Group |
| `chart-scatter.name` | Name |
| `chat-attachment.label` | Attachments |
| `chat-attachment.open` | Open \{name\} |
| `chat-attachment.remove` | Remove \{name\} |
| `chat-attachment.retry` | Retry |
| `chat-attachment.retryUploading` | Retry uploading \{name\} |
| `chat-attachment.uploading` | Uploading \{name\} |
| `chat-attachment.uploadingEllipsis` | Uploading… |
| `chat-attachment.uploadingPercent` | Uploading \{percent\}% |
| `citation-coverage.gapHelp` | This claim has no source. |
| `citation-coverage.legend` | A wavy underline means no source backs the claim. |
| `citation-coverage.noSource` | no source |
| `citation-coverage.none` | Every claim has a source. |
| `citation-coverage.onlyGaps` | Show only claims without a source |
| `citation-coverage.source` | source |
| `citation-coverage.sources` | Sources |
| `citation-coverage.summary` | \{supported\} of \{total\} claims have a source |
| `citation-coverage.title` | Source coverage |
| `citation.nextSource` | Next source |
| `citation.openSource` | Open source |
| `citation.previousSource` | Previous source |
| `citation.sourceOf` | Source \{n\} of \{total\} |
| `code-block.copied` | Copied |
| `code-block.copy` | Copy |
| `code-block.files` | Files |
| `code-block.label` | Copy code |
| `code-block.wrapLines` | Wrap lines |
| `color-picker.choose` | Choose \{label\} |
| `color-picker.hexColor` | Hex color |
| `color-picker.hexValue` | \{label\} hex value |
| `color-picker.label` | Color |
| `combobox.clearSelection` | Clear selection |
| `combobox.emptyText` | No results found. |
| `combobox.placeholder` | Select an option |
| `combobox.searchPlaceholder` | Search |
| `command-bar.all` | All |
| `command-bar.back` | Back |
| `command-bar.close` | Close |
| `command-bar.currentPage` | Current page |
| `command-bar.emptyText` | No results found. |
| `command-bar.esc` | Esc |
| `command-bar.navigate` | Navigate |
| `command-bar.placeholder` | Search commands… |
| `command-bar.select` | Select |
| `command-bar.title` | Command bar |
| `command.description` | Type a command or search. Use the arrow keys to move and Enter to run. |
| `command.label` | Command menu |
| `command.title` | Command menu |
| `comparison-table.available` | Available |
| `comparison-table.feature` | Feature |
| `comparison-table.notSpecified` | Not specified |
| `comparison-table.unavailable` | Unavailable |
| `contribution-graph.less` | Less |
| `contribution-graph.more` | More |
| `contribution-graph.summary` | \{label\}: \{total\} total across 0 days |
| `control-center.label` | Control Center |
| `control-center.nextTrack` | Next track |
| `control-center.pause` | Pause |
| `control-center.play` | Play |
| `control-center.previousTrack` | Previous track |
| `cookie-consent.acceptAll` | Accept all |
| `cookie-consent.alwaysOn` | Always on |
| `cookie-consent.back` | Back |
| `cookie-consent.cookiePolicy` | Cookie policy |
| `cookie-consent.customize` | Customize |
| `cookie-consent.description` | We use cookies to make the site work, understand how it is used and, with your permission, personalize content. |
| `cookie-consent.rejectNonEssential` | Reject non-essential |
| `cookie-consent.savePreferences` | Save preferences |
| `cookie-consent.title` | We value your privacy |
| `copy-button.ariaLabel` | Copy to clipboard |
| `copy-button.copiedLabel` | Copied |
| `countdown.complete` | \{label\} complete |
| `countdown.label` | Time remaining |
| `data-grid.editCell` | Edit \{column\}, row \{n\} |
| `data-grid.loading` | Loading rows |
| `data-grid.no` | No |
| `data-grid.noMatches` | No rows match “\{search\}”. |
| `data-grid.noRows` | No rows. |
| `data-grid.notDate` | Enter a date as year-month-day. |
| `data-grid.notNumber` | Enter a number. |
| `data-grid.notOption` | Choose one of the options. |
| `data-grid.pastedSome` | Pasted \{count\} cells. Some were refused: \{problem\} |
| `data-grid.resize` | Resize \{column\} |
| `data-grid.rowsOfTotal` | \{n\} of \{total\} rows |
| `data-grid.selectAll` | Select all rows |
| `data-grid.selectRow` | Select row \{n\} |
| `data-grid.selectedCount` | \{n\} selected |
| `data-grid.sortHint` | Sort by \{column\}. Hold Shift to add a second sort. |
| `data-grid.yes` | Yes |
| `data-table.emptyMessage` | No results. |
| `data-table.nextPage` | Next page |
| `data-table.pageOf` | Page \{page\} of \{total\} |
| `data-table.previousPage` | Previous page |
| `data-table.search` | Search \{label\} |
| `data-table.searchPlaceholder` | Search |
| `data-table.selectAllRows` | Select all rows on this page |
| `data-table.selectRow` | Select row \{n\} |
| `data-table.showColumns` | Show columns |
| `date-picker.clearDate` | Clear date |
| `date-picker.placeholder` | Pick a date |
| `date-range-picker.from` | From |
| `date-range-picker.to` | To |
| `desktop-icons.label` | Desktop |
| `dialog.closeLabel` | Close |
| `diff-viewer.diff` | \{label\} diff |
| `diff-viewer.summary` | \{added\} added · \{removed\} removed |
| `dotted-map.label` | World map |
| `emoji-picker.clear` | Clear search |
| `emoji-picker.errorDescription` | Check your connection and try again. |
| `emoji-picker.errorTitle` | Could not load the emoji |
| `emoji-picker.groups` | Emoji groups |
| `emoji-picker.label` | Emoji picker |
| `emoji-picker.loading` | Loading emoji |
| `emoji-picker.none` | No emoji found for “\{query\}” |
| `emoji-picker.prompt` | Pick an emoji |
| `emoji-picker.recent` | Recently used |
| `emoji-picker.results` | Search results |
| `emoji-picker.search` | Search emoji |
| `emoji-picker.selected` | Selected \{name\} |
| `emoji-picker.skinTone` | Skin tone |
| `emoji-picker.tone` | Skin tone \{n\} |
| `emoji-picker.toneDefault` | Default skin tone |
| `env-editor.addVariable` | Add variable |
| `env-editor.cancel` | Cancel |
| `env-editor.hideValueOf` | Hide value of \{name\} |
| `env-editor.import` | Import |
| `env-editor.key` | KEY |
| `env-editor.nameOfVariable` | Name of variable \{n\} |
| `env-editor.noVariablesYet` | No variables yet |
| `env-editor.pasteAEnvFile` | Paste a .env file |
| `env-editor.pasteEnv` | Paste .env |
| `env-editor.remove` | Remove \{name\} |
| `env-editor.showValueOf` | Show value of \{name\} |
| `env-editor.tipPasteSeveralLinesInto` | Tip: paste several lines into any name field to import them. |
| `env-editor.title` | Environment variables |
| `env-editor.toFix` | \{count\} to fix |
| `env-editor.value` | value |
| `env-editor.valueOf` | Value of \{name\} |
| `env-editor.variableN` | variable \{n\} |
| `escalation-card.agent` | Agent |
| `escalation-card.failed` | That did not go through. Nothing was changed. |
| `escalation-card.feels` | Seems |
| `escalation-card.messages` | Last messages |
| `escalation-card.reply` | Suggested reply, edit before sending |
| `escalation-card.send` | Send reply |
| `escalation-card.sent` | Reply sent to \{customer\}. |
| `escalation-card.snooze` | Snooze |
| `escalation-card.snoozed` | Snoozed. It will come back if the customer writes again. |
| `escalation-card.summary` | What the agent understood |
| `escalation-card.take` | Take over |
| `escalation-card.taken` | You have taken over from the agent. |
| `escalation-card.waiting` | Waiting \{time\} |
| `escalation-card.why` | Why a person is needed: |
| `event-calendar.add` | Add event |
| `event-calendar.allDay` | All day |
| `event-calendar.describeAllDay` | \{title\}, \{date\}, all day\{where\} |
| `event-calendar.describeAllDayRange` | \{title\}, \{from\} to \{to\}, all day\{where\} |
| `event-calendar.describeTimed` | \{title\}, \{date\}, \{from\} to \{to\}\{where\} |
| `event-calendar.describeTimedRange` | \{title\}, \{from\} to \{to\}\{where\} |
| `event-calendar.emptyDescription` | Events you add will be listed here by day. |
| `event-calendar.emptyTitle` | No events this month |
| `event-calendar.eventsOn` | Events on \{date\} |
| `event-calendar.loading` | Loading the calendar |
| `event-calendar.more` | +\{count\} more |
| `event-calendar.moreOn` | \{count\} more events on \{date\} |
| `event-calendar.movedTimed` | Moved \{title\} to \{date\}, \{from\} to \{to\}. |
| `event-calendar.movedTo` | Moved \{title\} to \{date\}. |
| `event-calendar.openDay` | Open \{date\} |
| `event-calendar.today` | Today |
| `event-calendar.viewSwitch` | Calendar view |
| `feedback-widget.tellUsMore` | Tell us more |
| `feedback-widget.thankYou` | Thank you |
| `feedback-widget.topic` | Topic |
| `feedback-widget.triggerLabel` | Feedback |
| `feedback-widget.whatWorkedWellOrWhat` | What worked well, or what could be better? |
| `feedback-widget.yourFeedbackHelpsUsImprove` | Your feedback helps us improve. |
| `file-browser.clear` | Clear |
| `file-browser.delete` | Delete |
| `file-browser.download` | Download |
| `file-browser.files` | Files |
| `file-browser.folder` | folder |
| `file-browser.folderPath` | Folder path |
| `file-browser.rootLabel` | All files |
| `file-browser.rowLabel` | \{name\}, \{detail\} |
| `file-browser.searchFiles` | Search files |
| `file-browser.select` | Select \{name\} |
| `file-browser.selectAllFiles` | Select all files |
| `file-browser.selectedCount` | \{count\} selected |
| `file-browser.selectionActions` | Selection actions |
| `file-browser.view` | View |
| `file-dropzone.choose` | Choose |
| `file-dropzone.dropFilesHereOrBrowse` | Drop files here or browse |
| `file-dropzone.filesToUpload` | Files to upload |
| `file-dropzone.maxSize` | \{size\} MB each |
| `file-dropzone.remove` | Remove \{name\} |
| `file-dropzone.sizeKb` | \{size\} KB |
| `file-tree.label` | Files |
| `finder-window.asIcons` | as Icons |
| `finder-window.asList` | as List |
| `finder-window.back` | Back |
| `finder-window.dateModified` | Date Modified |
| `finder-window.document` | document |
| `finder-window.forward` | Forward |
| `finder-window.itemLabel` | \{name\}, \{kind\} |
| `finder-window.name` | Name |
| `finder-window.path` | Path |
| `finder-window.search` | Search |
| `finder-window.searchThisFolder` | Search this folder |
| `finder-window.size` | Size |
| `finder-window.view` | View |
| `floating-nav.label` | Primary |
| `flow-sankey.from` | From |
| `flow-sankey.hint` | Select a step to follow its flows. |
| `flow-sankey.inout` | \{inV\} in · \{outV\} out |
| `flow-sankey.label` | Flows between steps |
| `flow-sankey.node` | \{label\}: \{inV\} in, \{outV\} out |
| `flow-sankey.table` | Flows, from one step to the next |
| `flow-sankey.to` | To |
| `flow-sankey.value` | Amount |
| `git-graph.label` | Commit history |
| `git-graph.merge` | Merge |
| `globe.label` | Rotating globe |
| `guardrail-feed.all` | All |
| `guardrail-feed.count` | \{count\} checks shown |
| `guardrail-feed.empty` | Nothing here yet. |
| `guardrail-feed.filter` | Filter by action |
| `guardrail-feed.title` | Guardrail activity |
| `handoff-card.context` | Context passed |
| `handoff-card.handsOver` | hands over to |
| `handoff-card.questions` | Open questions |
| `handoff-card.rules` | Rules to keep |
| `heat-grid.cell` | \{row\}, \{column\}: \{value\} |
| `heat-grid.label` | Values |
| `heat-grid.legend` | Legend |
| `heat-grid.none` | No data |
| `icon-cloud.label` | Items |
| `image-cropper.degrees` | \{degrees\} degrees |
| `image-cropper.errorTitle` | The picture could not be loaded |
| `image-cropper.help` | Arrow keys move the picture. Plus and minus zoom. The square brackets turn it a quarter. Zero resets. |
| `image-cropper.label` | Crop the picture |
| `image-cropper.loading` | Loading the picture |
| `image-cropper.reset` | Reset |
| `image-cropper.resetDone` | Reset |
| `image-cropper.retry` | Try again |
| `image-cropper.role` | image cropper |
| `image-cropper.rotateLeft` | Turn left |
| `image-cropper.rotateRight` | Turn right |
| `image-cropper.rotationSpoken` | Rotated to \{degrees\} degrees |
| `image-cropper.straighten` | Straighten |
| `image-cropper.zoom` | Zoom |
| `image-cropper.zoomSpoken` | Zoom \{percent\}% |
| `image-cropper.zoomValue` | \{percent\}% |
| `install-tabs.copied` | Copied |
| `install-tabs.copyCommand` | Copy command |
| `install-tabs.packageManager` | Package manager |
| `invite-members.description` | They will get an email with a link to join. |
| `invite-members.emailAddresses` | Email addresses |
| `invite-members.nameCompanyCom` | name@company.com |
| `invite-members.pending` | Pending (\{count\}) |
| `invite-members.remove` | Remove \{chip\} |
| `invite-members.resendInvitationTo` | Resend invitation to \{email\} |
| `invite-members.revokeInvitationFor` | Revoke invitation for \{email\} |
| `invite-members.role` | Role |
| `invite-members.separateAddressesWithAComma` | Separate addresses with a comma, space or Enter. You can paste a list. |
| `invite-members.title` | Invite teammates |
| `json-viewer.collapse` | Collapse \{name\} |
| `json-viewer.expand` | Expand \{name\} |
| `json-viewer.label` | JSON data |
| `json-viewer.root` | root |
| `k` | Press \{key\} to open |
| `kanban-board.label` | Task board |
| `kanban-board.moveToNextColumn` | Move \{title\} to next column |
| `kanban-board.moveToPreviousColumn` | Move \{title\} to previous column |
| `kanban-board.useAltAndArrowKeys` | \{title\}, \{column\}. Use Alt and arrow keys to move. |
| `keyboard-shortcuts.description` | Work faster without leaving the keyboard. |
| `keyboard-shortcuts.noShortcutMatches` | No shortcut matches “\{query\}”. |
| `keyboard-shortcuts.press` | Press \{key\} anywhere to open this list. |
| `keyboard-shortcuts.searchPlaceholder` | Search shortcuts |
| `keyboard-shortcuts.title` | Keyboard shortcuts |
| `launchpad.label` | Launchpad |
| `launchpad.noAppsMatch` | No apps match “\{query\}”. |
| `launchpad.page` | Page \{n\} |
| `launchpad.pageOf` | Page \{n\} of \{pages\} |
| `launchpad.pages` | Pages |
| `launchpad.search` | Search |
| `launchpad.searchApps` | Search apps |
| `lens.label` | Zoomable image |
| `lens.moveThePointerOverIt` | \{label\}. Move the pointer over it, or use the arrow keys, to magnify. Escape hides the lens. |
| `loading-dots.label` | Loading |
| `lock-screen.enterPassword` | Enter Password |
| `lock-screen.hint` | Touch ID or enter password |
| `lock-screen.lockScreen` | Lock screen |
| `lock-screen.passwordFor` | Password for \{name\} |
| `lock-screen.unlock` | Unlock |
| `log-stream.clear` | Clear |
| `log-stream.emptyText` | Waiting for output… |
| `log-stream.filter` | Filter |
| `log-stream.filterLogLines` | Filter log lines |
| `log-stream.lines` | \{title\}, \{length\} lines |
| `log-stream.pauseStream` | Pause stream |
| `log-stream.resumeStream` | Resume stream |
| `log-stream.showLevels` | Show levels |
| `log-stream.title` | Logs |
| `log-stream.wrapLongLines` | Wrap long lines |
| `mac-window.close` | Close window |
| `mac-window.minimize` | Minimize window |
| `mac-window.zoom` | Zoom window |
| `mega-menu.label` | Main |
| `mega-menu.learnMore` | Learn more |
| `mention-input.noMatches` | No matches for “\{query\}” |
| `mention-input.searching` | Searching |
| `mention-input.suggestions` | Suggestions |
| `model-picker.availableWith` | Available with \{plan\} |
| `model-picker.contextTokens` | \{size\} tokens |
| `model-picker.costHigh` | High |
| `model-picker.costLevel` | \{level\} cost |
| `model-picker.costLow` | Low |
| `model-picker.costMedium` | Medium |
| `model-picker.higherPlan` | a higher plan |
| `model-picker.locked` | Locked |
| `model-picker.modelDetails` | Model details |
| `model-picker.new` | New |
| `model-picker.placeholder` | Select a model |
| `model-picker.searchPlaceholder` | Search models… |
| `multi-select.label` | Select options |
| `multi-select.noMatchingOptions` | No matching options |
| `multi-select.placeholder` | Choose options |
| `multi-select.searchOptions` | Search options |
| `multi-select.searchOptions2` | Search options… |
| `multi-select.selected` | \{count\} selected |
| `multi-select.selectedOf` | \{count\} selected of \{max\} |
| `navbar.label` | Main |
| `navbar.label2` | Menu |
| `navbar.siteNavigation` | Site navigation |
| `notification-center.allNotifications` | All notifications |
| `notification-center.dismiss` | Dismiss "\{title\}" |
| `notification-center.emptyText` | You're all caught up. |
| `notification-center.filterNotifications` | Filter notifications |
| `notification-center.label` | Notifications |
| `notification-center.markAllAsRead` | Mark all as read |
| `notification-center.markAsRead` | Mark "\{title\}" as read |
| `notification-center.unread` | Unread |
| `notification-center.unreadNotifications` | Unread notifications |
| `notification-stack.clearAllNotifications` | Clear all notifications |
| `notification-stack.dismissLabel` | Dismiss |
| `notification-stack.label` | Notifications |
| `notification-stack.showAllNotifications` | Show all \{count\} notifications |
| `notification-stack.showLess` | Show less |
| `number-input.decrease` | Decrease \{label\} |
| `number-input.increase` | Increase \{label\} |
| `number-input.label` | Number |
| `onboarding-checklist.completeMessage` | You're all set. Nice work. |
| `onboarding-checklist.description` | Finish these steps to set up your workspace. |
| `onboarding-checklist.dismissChecklist` | Dismiss checklist |
| `onboarding-checklist.markDone` | \{title\}: mark as done |
| `onboarding-checklist.markNotDone` | \{title\}: mark as not done |
| `onboarding-checklist.reviewTheStepsAgain` | Review the steps again |
| `onboarding-checklist.title` | Get started |
| `package-badge.perWeek` | \{count\}/wk |
| `package-badge.typesIncluded` | Types included |
| `pagination.label` | Pagination |
| `pagination.morePages` | More pages |
| `pagination.nextPage` | Next page |
| `pagination.previousPage` | Previous page |
| `parallel-attempts.added` | \{count\} added |
| `parallel-attempts.choose` | Continue with \{label\} |
| `parallel-attempts.chooseNone` | Continue |
| `parallel-attempts.files` | \{count\} files |
| `parallel-attempts.hint` | Pick a finished attempt to continue with. |
| `parallel-attempts.label` | Attempts |
| `parallel-attempts.picked` | \{label\} is selected. |
| `parallel-attempts.progress` | \{label\} progress |
| `parallel-attempts.recommended` | Suggested |
| `parallel-attempts.removed` | \{count\} removed |
| `password-input.fair` | Fair |
| `password-input.good` | Good |
| `password-input.hidePassword` | Hide password |
| `password-input.label` | Password |
| `password-input.needsWork` | Needs work |
| `password-input.showPassword` | Show password |
| `password-input.strengthHint` | Strength: \{strength\}. Use 8+ characters, mixed case, a number, and a symbol. |
| `password-input.strong` | Strong |
| `password-input.tooShort` | Too short |
| `permission-grid.noAsk` | Runs without asking |
| `permission-grid.permission` | Permission |
| `permission-grid.presets` | Presets |
| `permission-grid.radio` | \{label\}: \{decision\} |
| `permission-grid.summary` | \{allow\} allowed, \{ask\} ask first, \{deny\} denied |
| `permission-grid.title` | What the agent may do |
| `phone-input.countryDialingCode` | Country dialing code |
| `phone-input.label` | Phone number |
| `plan-selector.billingPeriod` | Billing period |
| `plan-selector.perMonth` | / month |
| `plan-selector.save` | Save |
| `popover.closeLabel` | Close popover |
| `progress-steps.label` | Progress |
| `progress-steps.returnTo` | Return to \{label\} |
| `prompt-diff.added` | +\{count\} words |
| `prompt-diff.addedMark` | [added: |
| `prompt-diff.after` | After |
| `prompt-diff.before` | Before |
| `prompt-diff.removed` | −\{count\} words |
| `prompt-diff.removedMark` | [removed: |
| `prompt-diff.restore` | Restore \{label\} |
| `prompt-diff.same` | The two versions are the same. |
| `prompt-diff.split` | Side by side |
| `prompt-diff.unified` | Inline |
| `prompt-diff.view` | View |
| `prompt-input.attachments` | Attachments |
| `prompt-input.label` | Attach files |
| `prompt-input.message` | Message |
| `prompt-input.placeholder` | Send a message… |
| `prompt-input.remove` | Remove \{name\} |
| `prompt-input.stopLabel` | Stop generating |
| `prompt-input.submitLabel` | Send message |
| `qr-code.empty` | Nothing to encode yet |
| `qr-code.label` | QR code for \{value\} |
| `qr-code.tooLong` | This is too long to fit in a QR code. Use a shorter link. |
| `questionnaire.next` | Next |
| `questionnaire.previous` | Previous |
| `questionnaire.skip` | Skip |
| `questionnaire.submit` | Submit |
| `rating.clear` | Clear |
| `rating.label` | Rating |
| `rating.ofStars` | \{number\} of \{count\} stars |
| `resizable.label` | Resize panels |
| `rich-text-editor.charsOf` | \{count\} of \{limit\} characters |
| `rich-text-editor.hint` | Press Escape, then Tab, to leave the editor. |
| `rich-text-editor.linkInvalid` | Enter a web address like example.com. |
| `rich-text-editor.loading` | Loading the editor |
| `rich-text-editor.placeholder` | Write something, or type / for blocks |
| `rich-text-editor.slash.bullets` | Bulleted list |
| `rich-text-editor.slash.bulletsHint` | A simple list of points |
| `rich-text-editor.slash.code` | Code block |
| `rich-text-editor.slash.codeHint` | Monospaced code |
| `rich-text-editor.slash.divider` | Divider |
| `rich-text-editor.slash.dividerHint` | A line between sections |
| `rich-text-editor.slash.h1` | Heading 1 |
| `rich-text-editor.slash.h1Hint` | A large section heading |
| `rich-text-editor.slash.h2` | Heading 2 |
| `rich-text-editor.slash.h2Hint` | A medium heading |
| `rich-text-editor.slash.h3` | Heading 3 |
| `rich-text-editor.slash.h3Hint` | A small heading |
| `rich-text-editor.slash.numbers` | Numbered list |
| `rich-text-editor.slash.numbersHint` | Steps in order |
| `rich-text-editor.slash.quote` | Quote |
| `rich-text-editor.slash.quoteHint` | Set a passage apart |
| `rich-text-editor.slash.tasks` | Checklist |
| `rich-text-editor.slash.tasksHint` | Things to tick off |
| `rich-text-editor.slashLabel` | Blocks |
| `rich-text-editor.slashNone` | No matching blocks |
| `rich-text-editor.toolbar` | Formatting |
| `run-ledger.budget` | Budget |
| `run-ledger.cost` | Cost |
| `run-ledger.left` | \{amount\} left in the budget |
| `run-ledger.nearing` | Nearing the budget, \{amount\} left |
| `run-ledger.over` | Over budget by \{amount\} |
| `run-ledger.step` | Step |
| `run-ledger.summary` | \{count\} steps, \{time\}, \{tokens\} tokens |
| `run-ledger.time` | Time |
| `run-ledger.title` | Run ledger |
| `run-ledger.tokens` | Tokens |
| `run-ledger.top` | Most expensive |
| `run-ledger.total` | Total |
| `run-replay.markers` | Markers |
| `run-replay.next` | Next marker |
| `run-replay.pause` | Pause |
| `run-replay.play` | Play |
| `run-replay.prev` | Previous marker |
| `run-replay.reached` | Reached: \{label\} |
| `run-replay.replay` | Replay from the start |
| `run-replay.scrub` | Position in the run |
| `run-replay.speed` | Playback speed |
| `scroll-velocity.label` | Scrolling content |
| `search-field.clearSearch` | Clear search |
| `search-field.label` | Search |
| `section-tabs.label` | Sections |
| `settings-panel.dirtyMessage` | You have unsaved changes |
| `settings-panel.discard` | Discard |
| `settings-panel.label` | Settings |
| `settings-panel.saveLabel` | Save changes |
| `sheet.closeLabel` | Close |
| `shortcut-hint.label` | \{label\}: \{keys\} |
| `shortcut-hint.plus` |  plus  |
| `sidebar.label` | Sidebar |
| `sidebar.navigation` | Navigation |
| `sidebar.toggleSidebar` | Toggle sidebar |
| `signature-pad.clearSignature` | Clear signature |
| `signature-pad.draw` | Draw |
| `signature-pad.drawOrType` | Draw or type |
| `signature-pad.drawingArea` | \{label\} drawing area |
| `signature-pad.signatureMethod` | Signature method |
| `signature-pad.type` | Type |
| `signature-pad.typeLabel` | Type \{label\} |
| `signature-pad.typeYourFullName` | Type your full name |
| `signature-pad.undoLastStroke` | Undo last stroke |
| `slider-range.maximum` | \{label\} maximum |
| `slider-range.minimum` | \{label\} minimum |
| `snippet-tabs.code` | \{label\} code |
| `snippet-tabs.language` | Language |
| `sortable.cancelled` | Cancelled. \{item\} went back to position \{position\}. |
| `sortable.dropped` | Dropped \{item\} at position \{position\} of \{total\}. |
| `sortable.droppedBack` | Dropped \{item\}. It did not move. |
| `sortable.groupCancelled` | Cancelled. \{item\} went back to \{group\}. |
| `sortable.groupDropped` | Dropped \{item\} in \{group\} at position \{position\} of \{total\}. |
| `sortable.groupMoved` | Moved \{item\} to position \{position\} of \{total\} in \{group\}. |
| `sortable.groupOver` | \{item\} is over \{group\}, position \{position\} of \{total\}. |
| `sortable.groupPickedUp` | Picked up \{item\} from \{group\}. It is position \{position\} of \{total\}. |
| `sortable.handle` | Reorder \{item\} |
| `sortable.instructions` | To pick up an item, press Space or Enter. While dragging, use the arrow keys to move it, Space or Enter to drop it, and Escape to cancel. |
| `sortable.moveEarlier` | Move \{item\} earlier |
| `sortable.moveLater` | Move \{item\} later |
| `sortable.moved` | Moved \{item\} to position \{position\} of \{total\}. |
| `sortable.over` | \{item\} is over position \{position\} of \{total\}. |
| `sortable.pickedUp` | Picked up \{item\}. It is position \{position\} of \{total\}. |
| `sources-list.showAll` | Show all |
| `sources-list.title` | Sources |
| `sparkline.noData` | \{label\}: no data |
| `sparkline.range` | \{label\}: from \{from\} to \{to\} |
| `spinner.label` | Loading |
| `split-view.label` | List |
| `split-view.label2` | Detail |
| `split-view.resizeList` | Resize list |
| `spotlight-search.placeholder` | Spotlight Search |
| `spotlight-search.title` | Spotlight Search |
| `spring-drawer.closeLabel` | Close |
| `spring-drawer.handleLabel` | Resize drawer |
| `state-view.details` | Details |
| `state-view.emptyDescription` | When there is something to show, it will appear here. |
| `state-view.emptyTitle` | Nothing here yet |
| `state-view.errorDescription` | We could not load this. Check your connection and try again. |
| `state-view.errorTitle` | Something went wrong |
| `state-view.loading` | Loading |
| `state-view.retry` | Try again |
| `status-badge-row.historyDays` | \{name\} history, \{length\} days |
| `status-badge-row.title` | System status |
| `status-badge-row.today` | Today |
| `status-badge-row.uptime` | \{percent\}% uptime |
| `stepper-form.back` | Back |
| `stepper-form.completeLabel` | Complete |
| `stepper-form.progress` | Progress |
| `stepper-form.ready` | Ready |
| `stepper-form.stepCompleted` | \{title\}, step \{n\} of \{total\}, completed |
| `stepper-form.stepLabel` | \{title\}, step \{n\} of \{total\} |
| `stepper-form.stepOf` | Step \{n\} of \{total\} |
| `suggestion-chips.label` | Suggested prompts |
| `suggestion-chips.refreshLabel` | Show other suggestions |
| `table-of-contents.title` | On this page |
| `tag-input.label` | Tags |
| `tag-input.placeholder` | Add a tag… |
| `tag-input.remove` | Remove \{tag\} |
| `team-switcher.addLabel` | Add team |
| `team-switcher.teams` | Teams |
| `terminal.copied` | Copied |
| `terminal.copyCommand` | Copy command |
| `terminal.terminal` | Terminal |
| `thinking-indicator.label` | Thinking |
| `thinking-indicator.statusLabel` | Assistant is thinking |
| `time-picker.label` | Time |
| `toast-stack.dismiss` | Dismiss \{title\} |
| `toast-stack.label` | Notifications |
| `token-meter.full` | Context is full |
| `token-meter.left` | \{left\} left |
| `token-meter.nearingLimit` | Nearing the limit, \{left\} left |
| `token-meter.pill` | \{title\}: \{percent\}% used. \{state\}. |
| `token-meter.summary` | \{used\} of \{limit\} tokens used, \{percent\}%. \{state\}. |
| `token-meter.title` | Context window |
| `tool-catalog.all` | All |
| `tool-catalog.attention` | Needs attention |
| `tool-catalog.calls` | \{count\} calls this week |
| `tool-catalog.count` | \{count\} tools shown |
| `tool-catalog.errors` | \{rate\}% fail |
| `tool-catalog.failed` | \{name\} could not be changed, so it is as it was. |
| `tool-catalog.filter` | Filter tools |
| `tool-catalog.flaky` | fails often |
| `tool-catalog.highOn` | On for a high-risk tool: check it is meant to be. |
| `tool-catalog.latency` | \{ms\} ms typical |
| `tool-catalog.none` | No tools match. |
| `tool-catalog.off` | Off |
| `tool-catalog.on` | On |
| `tool-catalog.schema` | \{name\} input schema |
| `tool-catalog.search` | Search tools |
| `tool-catalog.searchPlaceholder` | Search by name or description |
| `tool-catalog.switch` | \{name\} is on |
| `tool-catalog.title` | Tools |
| `toolbar.ariaLabel` | Search |
| `toolbar.clearSearch` | Clear search |
| `toolbar.search` | Search |
| `trace-waterfall.failed` | failed |
| `trace-waterfall.failedShort` | Failed |
| `trace-waterfall.hint` | Select a span to see its timing. Right opens a span, Left closes it. |
| `trace-waterfall.item` | \{name\}, \{kind\}, \{duration\}, starts at \{start\}\{failed\} |
| `trace-waterfall.label` | Spans of the run |
| `trace-waterfall.share` | \{percent\}% of the run |
| `trace-waterfall.span` | Step |
| `treemap.cell` | \{label\}: \{value\}\{unit\}, \{share\}% of the total\{group\} |
| `treemap.groups` | Groups |
| `treemap.hint` | Select a block to see its share. |
| `treemap.label` | Share of the total by item |
| `treemap.share` | \{percent\}% of the total |
| `user-menu.signOut` | Sign out |
| `video-dialog.closeVideo` | Close video |
| `video-dialog.playVideo` | Play video: \{title\} |
| `video-dialog.videoPlayerPressEscapeTo` | Video player. Press Escape to close. |
| `voice-input.discardRecording` | Discard recording |
| `voice-input.label` | Start voice input |
| `voice-input.processingLabel` | Transcribing… |
| `voice-input.recordingTime` | Recording time |
| `voice-input.stopAndUseRecording` | Stop and use recording |
| `waterfall-chart.after` | Total after |
| `waterfall-chart.change` | Change |
| `waterfall-chart.ends` | Ends at \{value\}. |
| `waterfall-chart.step` | Step |
| `webhook-card.events` | Events |
| `webhook-card.hideSigningSecret` | Hide signing secret |
| `webhook-card.moreEvents` | +\{count\} more |
| `webhook-card.noDeliveriesYetEventsAppear` | No deliveries yet. Events appear here as soon as they are sent. |
| `webhook-card.recentDeliveries` | Recent deliveries |
| `webhook-card.redeliver` | Redeliver |
| `webhook-card.requestBody` | Request body |
| `webhook-card.revealSigningSecret` | Reveal signing secret |
| `webhook-card.sendEventsToThisEndpoint` | Send events to this endpoint |
| `webhook-card.sendTestEvent` | Send test event |
| `webhook-card.signingSecret` | Signing secret |
| `webhook-card.successRate` | \{percent\}% of \{count\} deliveries succeeded |
| `webhook-card.webhook` | Webhook \{url\} |
| `webhook-card.yourResponse` | Your response |
| `widgets.noEventsToday` | No events today |
| `window-manager.label` | Desktop |
| `window-manager.restore` | Restore \{title\} |
| `window-manager.trayLabel` | Minimized windows |
| `window-manager.windowAltAndArrowKeys` | \{title\} window. Alt and arrow keys move it; Alt, Shift and arrow keys resize it. |
| `workspace-card.actions` | \{name\} actions |
| `workspace-card.current` | Current |
| `workspace-card.loadingWorkspace` | Loading workspace |
| `workspace-card.storageUsed` | Storage used |
