292 lines
12 KiB
TypeScript
292 lines
12 KiB
TypeScript
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.',
|
|
channelSaved: 'Channel saved (effective after bot restart).',
|
|
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.',
|
|
attachmentAdded: (count: number) => `${count} attachment(s) added.`,
|
|
uploadTooLarge: (files: string, limitMb: number) => `These files exceed the upload limit (${limitMb}MB): ${files}`,
|
|
uploadTypeNotAllowed: (files: string, allowed: string) => `These files are not allowed to upload: ${files}. Allowed extensions: ${allowed}`,
|
|
attachmentMessage: '[attachment message]',
|
|
removeAttachment: 'Remove attachment',
|
|
copyPrompt: 'Copy prompt',
|
|
editPrompt: 'Edit prompt',
|
|
copyPromptDone: 'Prompt copied.',
|
|
copyPromptFail: 'Failed to copy prompt.',
|
|
editPromptDone: 'Inserted into composer.',
|
|
voiceInput: 'Voice input',
|
|
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.',
|
|
copyReply: 'Copy reply',
|
|
copyReplyDone: 'Reply copied.',
|
|
copyReplyFail: 'Failed to copy reply.',
|
|
quoteReply: 'Quote reply',
|
|
quotedReplyLabel: 'Quoted reply',
|
|
clearQuote: 'Clear quote',
|
|
quoteOnlyMessage: '[quoted reply]',
|
|
goodReply: 'Good reply',
|
|
badReply: 'Bad reply',
|
|
feedbackUpSaved: 'Marked as good reply.',
|
|
feedbackDownSaved: 'Marked as bad reply.',
|
|
feedbackCleared: 'Feedback removed.',
|
|
feedbackSaveFail: 'Failed to save feedback.',
|
|
feedbackMessagePending: 'Message is not synced yet. Please retry in a moment.',
|
|
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}`,
|
|
configUpdated: 'Configuration updated (effective after bot restart).',
|
|
saveFail: 'Save failed.',
|
|
deleteBotConfirm: (id: string) => `Delete bot ${id}? Workspace will be removed.`,
|
|
deleteBotDone: 'Bot and workspace deleted.',
|
|
deleteFail: 'Delete failed.',
|
|
titleBots: 'Bots',
|
|
botSearchPlaceholder: 'Search by bot name or ID',
|
|
botSearchNoResult: 'No matching bots.',
|
|
workspaceSearchPlaceholder: 'Search by file name or path',
|
|
workspaceSearchNoResult: 'No matching files or folders.',
|
|
searchAction: 'Search',
|
|
clearSearch: 'Clear search',
|
|
syncingPageSize: 'Syncing page size...',
|
|
paginationPrev: 'Prev',
|
|
paginationNext: 'Next',
|
|
paginationPage: (current: number, total: number) => `${current} / ${total}`,
|
|
newBot: 'New Bot',
|
|
manageImages: 'Image Manager',
|
|
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.',
|
|
image: 'Image',
|
|
disabled: 'Disabled',
|
|
stop: 'Stop',
|
|
start: 'Start',
|
|
enable: 'Enable',
|
|
disable: 'Disable',
|
|
disableConfirm: (id: string) => `Disable bot ${id}? It will be stopped and locked from operations.`,
|
|
enableDone: 'Bot enabled.',
|
|
disableDone: 'Bot disabled and stopped.',
|
|
enableFail: 'Enable failed. Check backend logs.',
|
|
disableFail: 'Disable failed. Check backend logs.',
|
|
restart: 'Restart Bot',
|
|
restartConfirm: (id: string) => `Restart bot ${id}?`,
|
|
restartFail: 'Restart failed. Check backend logs.',
|
|
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.',
|
|
controlCommands: 'Control Commands',
|
|
controlCommandsDesc: 'Send built-in nanobot slash commands',
|
|
controlCommandNew: 'New session',
|
|
controlCommandStop: 'Stop task',
|
|
controlCommandRestart: 'Restart bot',
|
|
controlCommandHelp: 'Show commands',
|
|
controlCommandsShow: 'Show control commands',
|
|
controlCommandsHide: 'Hide control commands',
|
|
controlCommandSent: (command: string) => `Control command sent: ${command}`,
|
|
sending: 'Sending...',
|
|
send: 'Send',
|
|
interrupt: 'Interrupt',
|
|
interruptSent: 'Interrupt command sent.',
|
|
botStarting: 'Bot is starting...',
|
|
botStopping: 'Bot is stopping...',
|
|
botDisabledHint: 'Bot is disabled. Enable it before operating.',
|
|
chatDisabled: 'Bot is stopped. Chat area is disabled.',
|
|
selectBot: 'Select a bot to inspect',
|
|
runtime: 'Runtime Status',
|
|
base: 'Base',
|
|
params: 'Model',
|
|
channels: 'Channels',
|
|
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.',
|
|
skills: 'Skills',
|
|
mcp: 'MCP',
|
|
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.',
|
|
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)',
|
|
mcpDraftRequired: 'MCP server name and URL are required.',
|
|
mcpDraftAdded: 'Added to the MCP list. Save config to apply.',
|
|
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.',
|
|
toolsLoadFail: 'Failed to load tool skills.',
|
|
toolsAddFail: 'Failed to add tool.',
|
|
toolsRemoveFail: 'Failed to remove tool.',
|
|
toolsRemoveConfirm: (name: string) => `Remove skill ${name}? This action cannot be undone.`,
|
|
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',
|
|
accessPassword: 'Access Password',
|
|
accessPasswordPlaceholder: 'Leave blank to disable password',
|
|
botIdReadonly: 'Bot ID (Read-only)',
|
|
botName: 'Bot Name',
|
|
botNamePlaceholder: 'Bot name',
|
|
baseImageReadonly: 'Base Image',
|
|
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',
|
|
modelParams: 'Model',
|
|
saveParams: 'Save Params',
|
|
agentFiles: 'Agent Files',
|
|
saveFiles: 'Save Files',
|
|
filePreview: 'File Preview',
|
|
editFile: 'Edit Markdown',
|
|
previewMode: 'Preview Mode',
|
|
fileTruncated: 'Large file: preview is truncated.',
|
|
fileEditDisabled: 'Truncated previews cannot be edited directly.',
|
|
fileSaved: 'Markdown saved.',
|
|
fileSaveFail: 'Failed to save markdown.',
|
|
download: 'Download',
|
|
copyAddress: 'Copy URL',
|
|
urlCopied: 'URL copied.',
|
|
urlCopyFail: 'Failed to copy URL.',
|
|
close: 'Close',
|
|
cronViewer: 'Scheduled Jobs',
|
|
cronReload: 'Reload jobs',
|
|
cronLoading: 'Loading jobs...',
|
|
cronEmpty: 'No scheduled jobs.',
|
|
cronEnabled: 'Enabled',
|
|
cronDisabled: 'Disabled',
|
|
cronStart: 'Enable job',
|
|
cronStop: 'Stop job',
|
|
cronDelete: 'Delete job',
|
|
cronStartFail: 'Failed to enable job.',
|
|
cronStopFail: 'Failed to stop job.',
|
|
cronDeleteFail: 'Failed to delete job.',
|
|
cronDeleteConfirm: (id: string) => `Delete scheduled job ${id}?`,
|
|
};
|