dashboard-nanobot/frontend/src/i18n/dashboard.en.ts

266 lines
11 KiB
TypeScript
Raw Normal View History

2026-03-01 16:26:03 +00:00
export const dashboardEn = {
processing: 'Processing...',
executingWith: (action: string) => `Executing: ${action}`,
executing: 'Nanobot is executing tools...',
thinkingWith: (action: string) => `Thinking: ${action}`,
thinking: 'Nanobot is thinking...',
fileReadFail: 'Failed to read file.',
workspaceLoadFail: 'Failed to load workspace tree.',
2026-03-03 06:09:11 +00:00
channelSaved: 'Channel saved (effective after bot restart).',
2026-03-01 16:26:03 +00:00
channelSaveFail: 'Failed to save channel.',
channelAddFail: 'Failed to add channel.',
channelDeleteConfirm: (channelType: string) => `Delete channel ${channelType}?`,
channelDeleteFail: 'Failed to delete channel.',
stopFail: 'Stop failed. Check backend logs.',
startFail: 'Start failed. Check backend logs.',
backendDeliverFail: 'Backend failed to deliver command.',
sendFail: 'Send failed.',
uploadFile: 'Upload file',
uploadingFile: 'Uploading...',
uploadFail: 'File upload failed.',
2026-03-09 04:53:15 +00:00
attachmentAdded: (count: number) => `${count} attachment(s) added.`,
2026-03-03 06:09:11 +00:00
uploadTooLarge: (files: string, limitMb: number) => `These files exceed the upload limit (${limitMb}MB): ${files}`,
2026-03-01 16:26:03 +00:00
attachmentMessage: '[attachment message]',
removeAttachment: 'Remove attachment',
2026-03-03 16:45:51 +00:00
copyPrompt: 'Copy prompt',
2026-03-10 07:04:33 +00:00
editPrompt: 'Edit prompt',
2026-03-03 16:45:51 +00:00
copyPromptDone: 'Prompt copied.',
copyPromptFail: 'Failed to copy prompt.',
2026-03-10 07:04:33 +00:00
editPromptDone: 'Inserted into composer.',
voiceInput: 'Voice input',
2026-03-11 17:20:57 +00:00
textInput: 'Text input',
voiceUnavailable: 'Speech recognition is disabled.',
voiceUnsupported: 'Your browser does not support audio recording.',
voicePermissionDenied: 'Microphone permission denied. Please allow access in browser settings.',
voiceRecordFail: 'Audio recording failed. Please retry.',
voiceReady: 'Click the mic to start recording',
voiceRecording: 'Recording...',
voiceTranscribing: 'Transcribing...',
voiceStart: 'Start recording',
voiceStop: 'Stop recording',
voiceTranscribeDone: 'Voice converted to text.',
voiceTranscribeEmpty: 'No valid speech detected.',
voiceTranscribeFail: 'Speech transcription failed.',
2026-03-03 16:45:51 +00:00
copyReply: 'Copy reply',
copyReplyDone: 'Reply copied.',
copyReplyFail: 'Failed to copy reply.',
2026-03-09 04:53:15 +00:00
quoteReply: 'Quote reply',
quotedReplyLabel: 'Quoted reply',
clearQuote: 'Clear quote',
quoteOnlyMessage: '[quoted reply]',
2026-03-03 16:45:51 +00:00
goodReply: 'Good reply',
badReply: 'Bad reply',
feedbackUpSaved: 'Marked as good reply.',
feedbackDownSaved: 'Marked as bad reply.',
2026-03-09 04:53:15 +00:00
feedbackCleared: 'Feedback removed.',
2026-03-03 16:45:51 +00:00
feedbackSaveFail: 'Failed to save feedback.',
feedbackMessagePending: 'Message is not synced yet. Please retry in a moment.',
2026-03-01 16:26:03 +00:00
sendFailMsg: (msg: string) => `Command delivery failed: ${msg}`,
providerRequired: 'Set provider/model/new API key before testing.',
connOk: (preview: string) => (preview ? `Connection passed, models: ${preview}` : 'Connection passed'),
connFail: (msg: string) => `Failed: ${msg}`,
2026-03-03 06:09:11 +00:00
configUpdated: 'Configuration updated (effective after bot restart).',
2026-03-01 16:26:03 +00:00
saveFail: 'Save failed.',
deleteBotConfirm: (id: string) => `Delete bot ${id}? Workspace will be removed.`,
deleteBotDone: 'Bot and workspace deleted.',
deleteFail: 'Delete failed.',
titleBots: 'Bots',
2026-03-09 04:53:15 +00:00
botSearchPlaceholder: 'Search by bot name or ID',
botSearchNoResult: 'No matching bots.',
2026-03-09 09:52:42 +00:00
workspaceSearchPlaceholder: 'Search by file name or path',
workspaceSearchNoResult: 'No matching files or folders.',
searchAction: 'Search',
clearSearch: 'Clear search',
2026-03-09 04:53:15 +00:00
paginationPrev: 'Prev',
paginationNext: 'Next',
paginationPage: (current: number, total: number) => `${current} / ${total}`,
2026-03-01 16:26:03 +00:00
newBot: 'New Bot',
manageImages: 'Image Manager',
2026-03-13 06:40:54 +00:00
extensions: 'Extensions',
templateManager: 'Template Manager',
templateManagerTitle: 'Template Manager',
templateTabAgent: 'Agent Templates',
templateTabTopic: 'Topic Presets',
templateAgentFile: 'Agent Templates (5 MD files)',
templateTopicFile: 'Topic Presets Template (3 presets)',
templateJsonHint: 'Edit JSON and save. New configurations will use the latest templates.',
templateLoadFail: 'Failed to load templates.',
templateSaveFail: 'Failed to save templates.',
templateSaved: 'Templates saved.',
batchStart: 'Batch Start',
batchStop: 'Batch Stop',
batchStartNone: 'No bots available for batch start.',
batchStopNone: 'No bots available for batch stop.',
batchStartConfirm: (count: number) => `Start ${count} bots in batch?`,
batchStopConfirm: (count: number) => `Stop ${count} bots in batch?`,
batchStartDone: (ok: number, fail: number) => `Batch start finished: ${ok} succeeded, ${fail} failed`,
batchStopDone: (ok: number, fail: number) => `Batch stop finished: ${ok} succeeded, ${fail} failed`,
templateAgentInvalid: 'Invalid agent template JSON.',
templateTopicInvalid: 'Invalid topic preset JSON.',
templateParseFail: 'Template JSON parse failed.',
2026-03-01 16:26:03 +00:00
image: 'Image',
stop: 'Stop',
start: 'Start',
2026-03-09 04:53:15 +00:00
restart: 'Restart Bot',
2026-03-10 05:47:28 +00:00
restartConfirm: (id: string) => `Restart bot ${id}?`,
2026-03-09 04:53:15 +00:00
restartFail: 'Restart failed. Check backend logs.',
2026-03-01 16:26:03 +00:00
delete: 'Delete',
noConversation: 'No conversation yet. Send a command and bot replies will appear here.',
clearHistory: 'Clear history',
clearHistoryConfirm: (name: string) => `Clear dashboard conversation history for ${name}?`,
clearHistoryDone: 'Conversation history cleared.',
clearHistoryFail: 'Failed to clear conversation history.',
exportHistory: 'Export JSON',
exportHistoryFail: 'Failed to export conversation.',
you: 'You',
user: 'User',
inputPlaceholder: 'Type a command and press Enter (Shift+Enter for newline)',
disabledPlaceholder: 'Bot is not running. Command input is disabled.',
sending: 'Sending...',
send: 'Send',
2026-03-09 04:53:15 +00:00
interrupt: 'Interrupt',
interruptSent: 'Interrupt command sent.',
2026-03-01 16:26:03 +00:00
botStarting: 'Bot is starting...',
botStopping: 'Bot is stopping...',
chatDisabled: 'Bot is stopped. Chat area is disabled.',
selectBot: 'Select a bot to inspect',
runtime: 'Runtime Status',
base: 'Base',
2026-03-05 02:42:39 +00:00
params: 'Model',
2026-03-01 16:26:03 +00:00
channels: 'Channels',
2026-03-13 06:40:54 +00:00
topic: 'Topic',
topicPanel: 'Topic Management',
topicPanelDesc: 'Manage Topic routing targets. Only active topics receive deliveries; no topic means no feed.',
topicActive: 'Active',
topicName: 'Topic Name',
topicDescription: 'Topic Description',
topicPurpose: 'Purpose',
topicIncludeWhen: 'Include When',
topicExcludeWhen: 'Exclude When',
topicExamplesPositive: 'Positive Examples',
topicExamplesNegative: 'Negative Examples',
topicPriority: 'Priority',
topicListHint: 'One rule/example per line',
topicFilterProgress: 'Filter progress system messages',
topicFilterToolHint: 'Filter tool-hint system messages',
topicSystemFilterHint: 'Recommended to keep enabled to avoid feed noise.',
topicEmpty: 'No topics configured.',
topicAdd: 'Add Topic',
topicAddHint: 'Topic key must use lowercase letters, numbers, dot, underscore, or hyphen.',
topicKey: 'Topic Key',
topicKeyPlaceholder: 'e.g. finance_market',
topicKeyRequired: 'Topic key is required.',
topicSaved: 'Topic configuration saved.',
topicSaveFail: 'Failed to save topic configuration.',
topicDeleted: 'Topic deleted.',
topicDeleteFail: 'Failed to delete topic.',
topicDeleteConfirm: (topicKey: string) => `Delete topic ${topicKey}?`,
topicPresetPolitics: 'Preset: Politics',
topicPresetFinance: 'Preset: Finance',
topicPresetTech: 'Preset: Tech',
topicPresetBlank: 'Blank Topic',
topicPresetPoliticsApplied: 'Applied preset: Politics News.',
topicPresetFinanceApplied: 'Applied preset: Finance & Market.',
topicPresetTechApplied: 'Applied preset: Tech Updates.',
2026-03-01 16:26:03 +00:00
skills: 'Skills',
2026-03-11 12:55:42 +00:00
mcp: 'MCP',
2026-03-01 16:26:03 +00:00
tools: 'Tools',
skillsPanel: 'Skills Panel',
skillsEmpty: 'No skills.',
addSkill: 'Add skill',
removeSkill: 'Remove skill',
uploadZipSkill: 'Upload ZIP Skill Pack',
zipOnlyHint: 'Only .zip files are supported',
invalidZipFile: 'Only .zip files are allowed',
envParams: 'Env Params',
envParamsDesc: 'Configure runtime env vars for this bot container.',
noEnvParams: 'No env vars configured.',
envKey: 'Key (e.g. BRAVE_API_KEY)',
envValue: 'Value',
showEnvValue: 'Show value',
hideEnvValue: 'Hide value',
addEnvParam: 'Add env var',
removeEnvParam: 'Remove env var',
envParamsSaved: 'Env params saved.',
envParamsSaveFail: 'Failed to save env params.',
envParamsHint: 'Restart bot to apply updated env vars.',
2026-03-11 12:55:42 +00:00
mcpPanel: 'MCP Configuration',
mcpPanelDesc: 'Configure MCP servers (HTTP/SSE) for this bot. Use dedicated X-Bot-Id / X-Bot-Secret per bot.',
mcpEmpty: 'No MCP servers configured.',
mcpServer: 'MCP Server',
mcpName: 'Server Name',
mcpNamePlaceholder: 'e.g. biz_mcp',
mcpType: 'Transport Type',
mcpUrlPlaceholder: 'e.g. http://mcp.internal:9001/mcp',
mcpBotIdPlaceholder: 'e.g. mula_bot_b02',
mcpBotSecretPlaceholder: 'Secret for this bot identity',
mcpToolTimeout: 'Tool Timeout (seconds)',
2026-03-13 06:40:54 +00:00
mcpDraftRequired: 'MCP server name and URL are required.',
mcpDraftAdded: 'Added to the MCP list. Save config to apply.',
2026-03-11 12:55:42 +00:00
addMcpServer: 'Add MCP Server',
saveMcpConfig: 'Save MCP Config',
mcpSaved: 'MCP config saved.',
mcpSaveFail: 'Failed to save MCP config.',
mcpHint: 'Restart bot to apply MCP changes.',
2026-03-01 16:26:03 +00:00
toolsLoadFail: 'Failed to load tool skills.',
toolsAddFail: 'Failed to add tool.',
toolsRemoveFail: 'Failed to remove tool.',
2026-03-11 14:25:31 +00:00
toolsRemoveConfirm: (name: string) => `Remove skill ${name}? This action cannot be undone.`,
2026-03-01 16:26:03 +00:00
agent: 'Agent',
container: 'Container',
current: 'Current',
lastAction: 'Last action',
workspaceOutputs: 'Workspace',
autoRefresh: 'Auto refresh',
loadingDir: 'Loading directory...',
emptyDir: 'Current directory is empty.',
openingPreview: 'Opening file preview...',
workspaceHint: 'Click folder to enter; click .md/.json to preview.',
noPreviewFile: 'No previewable files in this directory.',
noTelemetry: 'No telemetry selected',
goUpTitle: 'Click to go up',
goUp: 'Go up',
openFolderTitle: 'Click to open folder',
folder: 'Folder',
previewTitle: 'Click to preview',
fileNotPreviewable: 'File type not previewable',
baseConfig: 'Base Configuration',
2026-03-05 02:42:39 +00:00
baseConfigSub: 'Edit name, access password, and resource limits',
accessPassword: 'Access Password',
accessPasswordPlaceholder: 'Leave blank to disable password',
2026-03-01 16:26:03 +00:00
botIdReadonly: 'Bot ID (Read-only)',
botName: 'Bot Name',
botNamePlaceholder: 'Bot name',
2026-03-03 06:09:11 +00:00
baseImageReadonly: 'Base Image',
2026-03-01 16:26:03 +00:00
modelName: 'Model Name',
modelNamePlaceholder: 'e.g. qwen-plus',
newApiKey: 'New API Key (optional)',
newApiKeyPlaceholder: 'Only updated when filled',
testing: 'Testing...',
testModelConnection: 'Test model connection',
cancel: 'Cancel',
save: 'Save',
2026-03-05 02:42:39 +00:00
modelParams: 'Model',
2026-03-01 16:26:03 +00:00
saveParams: 'Save Params',
agentFiles: 'Agent Files',
saveFiles: 'Save Files',
filePreview: 'File Preview',
fileTruncated: 'Large file: preview is truncated.',
download: 'Download',
2026-03-02 07:51:47 +00:00
copyAddress: 'Copy URL',
urlCopied: 'URL copied.',
urlCopyFail: 'Failed to copy URL.',
2026-03-01 16:26:03 +00:00
close: 'Close',
cronViewer: 'Scheduled Jobs',
cronReload: 'Reload jobs',
cronLoading: 'Loading jobs...',
cronEmpty: 'No scheduled jobs.',
cronEnabled: 'Enabled',
cronDisabled: 'Disabled',
cronStop: 'Stop job',
cronDelete: 'Delete job',
cronStopFail: 'Failed to stop job.',
cronDeleteFail: 'Failed to delete job.',
cronDeleteConfirm: (id: string) => `Delete scheduled job ${id}?`,
};