mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-15 20:08:18 +08:00
1261 lines
47 KiB
TypeScript
1261 lines
47 KiB
TypeScript
export default {
|
|
app: {
|
|
title: 'MateClaw - AI Assistant',
|
|
},
|
|
common: {
|
|
save: 'Save',
|
|
cancel: 'Cancel',
|
|
reset: 'Reset',
|
|
edit: 'Edit',
|
|
delete: 'Delete',
|
|
create: 'Create',
|
|
update: 'Update',
|
|
loading: 'Loading...',
|
|
enabled: 'Enabled',
|
|
disabled: 'Disabled',
|
|
default: 'Default',
|
|
view: 'View',
|
|
copy: 'Copy',
|
|
copied: 'Copied',
|
|
confirm: 'Confirm',
|
|
add: 'Add',
|
|
search: 'Search',
|
|
expandSidebar: 'Expand sidebar',
|
|
collapseSidebar: 'Collapse sidebar',
|
|
show: 'Show',
|
|
hide: 'Hide',
|
|
on: 'On',
|
|
off: 'Off',
|
|
yes: 'Yes',
|
|
no: 'No',
|
|
configure: 'Configure',
|
|
enable: 'Enable',
|
|
disable: 'Disable',
|
|
},
|
|
chat: {
|
|
thinking: 'Thinking',
|
|
stopped: 'Generation stopped',
|
|
failed: 'Generation failed',
|
|
retry: 'Retry',
|
|
errorCode: 'Error code',
|
|
error: {
|
|
rate_limit: {
|
|
title: 'Too many requests',
|
|
description: 'You\'ve exceeded the rate limit. The server is temporarily unable to process your request.',
|
|
action: 'Please wait a moment before retrying, or reduce consecutive submissions.',
|
|
},
|
|
auth_expired: {
|
|
title: 'Session expired',
|
|
description: 'Your login session has expired and you need to sign in again.',
|
|
action: 'You will be redirected to the login page.',
|
|
},
|
|
forbidden: {
|
|
title: 'Access denied',
|
|
description: 'You don\'t have permission to perform this action.',
|
|
action: 'Please contact the administrator for access.',
|
|
},
|
|
bad_request: {
|
|
title: 'Invalid request',
|
|
description: 'The request was malformed and could not be processed by the server.',
|
|
action: 'Please check your input and try again. If the problem persists, contact the administrator.',
|
|
},
|
|
server_error: {
|
|
title: 'Server error',
|
|
description: 'The server encountered an error while processing your request.',
|
|
action: 'Please try again later. If the problem persists, contact the administrator.',
|
|
},
|
|
service_unavailable: {
|
|
title: 'Service unavailable',
|
|
description: 'The service is currently under maintenance or temporarily overloaded.',
|
|
action: 'Please try again later.',
|
|
},
|
|
timeout: {
|
|
title: 'Request timed out',
|
|
description: 'The server did not respond within the expected time. This may be due to network issues or high server load.',
|
|
action: 'Please check your network connection and try again.',
|
|
},
|
|
network: {
|
|
title: 'Network error',
|
|
description: 'Unable to connect to the server. Please check your network connection.',
|
|
action: 'Verify your network is working and try again.',
|
|
},
|
|
unknown: {
|
|
title: 'Unexpected error',
|
|
description: 'An unexpected problem occurred during the request.',
|
|
action: 'Please try again. If the problem persists, contact the administrator.',
|
|
},
|
|
},
|
|
copy: 'Copy',
|
|
copied: 'Copied',
|
|
regenerate: 'Regenerate',
|
|
ttsPlay: 'Read Aloud',
|
|
ttsStop: 'Stop Reading',
|
|
conversations: 'Conversations',
|
|
newChat: 'New Chat',
|
|
loadingAgents: 'Loading agents...',
|
|
selectAgent: 'Please select an agent',
|
|
noConversations: 'No conversations yet',
|
|
startNewChat: 'Start a new chat above',
|
|
messages: '{count} messages',
|
|
configModel: 'Configure Model',
|
|
clearMessages: 'Clear Messages',
|
|
goToModelSettings: 'Go to Model Settings',
|
|
configModelFirst: 'Please configure a model first',
|
|
modelUnavailable: 'Current model is unavailable',
|
|
noActiveModel: 'No active model. Go to Model Management to select an available model before chatting.',
|
|
providerNotReady: 'The active model belongs to {name}, but this provider is not fully configured. Please complete the API Key or Base URL in Model Management.',
|
|
noAvailableModel: 'No available model.',
|
|
loadAgentsFailed: 'Failed to load agents',
|
|
loadModelFailed: 'Failed to load model state',
|
|
loadConversationsFailed: 'Failed to load conversations',
|
|
loadMessagesFailed: 'Failed to load messages',
|
|
deleteConversationFailed: 'Failed to delete conversation',
|
|
switchModelFailed: 'Failed to switch model',
|
|
uploadFailed: 'File upload failed',
|
|
dropToUpload: 'Drop files or folders here',
|
|
copyFailed: 'Copy failed',
|
|
dateToday: 'Today',
|
|
dateYesterday: 'Yesterday',
|
|
dateLast7Days: 'Last 7 Days',
|
|
dateEarlier: 'Earlier',
|
|
suggestionIntro: 'Remember I hate cilantro and love iced Americanos — remind me when ordering',
|
|
suggestionPoem: 'Search for today\'s biggest tech news and summarize it in one sentence',
|
|
suggestionCode: 'Ask the writer agent to polish a draft I\'m about to send you',
|
|
suggestionWeather: 'What skills and tools do you have right now? Show me how to add more',
|
|
approvalRequired: 'Approval Required',
|
|
approve: 'Approve',
|
|
deny: 'Deny',
|
|
approvalHint: 'or type <code>/approve</code> / <code>/deny</code>',
|
|
approved: '✅ Approved',
|
|
denied: '⛔ Denied',
|
|
approvalWaiting: 'Awaiting confirmation below...',
|
|
pendingApprovalPlaceholder: 'Type /approve or /deny to respond...',
|
|
messagePlaceholder: 'Type a message... (Enter to send, Shift+Enter for new line)',
|
|
subtitle: 'Your intelligent AI assistant powered by Spring AI Alibaba',
|
|
// Queue related
|
|
queuedSending: 'Sending queued message...',
|
|
queuedWillSend: 'Queued, will send after current step',
|
|
queuedCancel: 'Cancel',
|
|
queuedReplace: 'Message queued. Press Enter to replace...',
|
|
queuedBadge: '{count} queued',
|
|
// Stream status
|
|
streamPreparingContext: 'Preparing context...',
|
|
streamReadingMemory: 'Reading memory...',
|
|
streamReasoning: 'Analyzing...',
|
|
streamDraftingAnswer: 'Drafting answer...',
|
|
streamSummarizingObservations: 'Organizing information...',
|
|
streamThinking: 'Thinking...',
|
|
streamGenerating: 'Generating...',
|
|
streamExecutingTool: 'Executing tool...',
|
|
streamAwaitingApproval: 'Awaiting approval',
|
|
streamFinalizing: 'Finalizing...',
|
|
streamFailed: 'Interrupted',
|
|
streamInterrupting: 'Interrupting...',
|
|
streamQueued: 'Queued, waiting...',
|
|
streamReconnecting: 'Reconnecting...',
|
|
streamStopped: 'Stopped',
|
|
streamCompleted: 'Completed',
|
|
streamPreparingContextDetail: 'Collecting the current question, conversation history, and required context.',
|
|
streamReadingMemoryDetail: 'Looking up the most relevant long-term memory and recent notes for this question.',
|
|
streamReasoningDetail: 'Comparing options and organizing the answer structure based on the available information.',
|
|
streamDraftingAnswerDetail: 'The main analysis is done. Turning it into a readable answer now.',
|
|
streamSummarizingObservationsDetail: 'A larger tool result just came back. Condensing the key points before continuing.',
|
|
streamThinkingDetail: 'The model is still reasoning internally. Visible text may not appear immediately.',
|
|
streamGeneratingDetail: 'Visible output has started and more content should appear shortly.',
|
|
streamExecutingToolDetail: 'Reading files, querying data, or running the necessary operation for a more accurate answer.',
|
|
streamAwaitingApprovalDetail: 'Your confirmation is required before continuing.',
|
|
streamFinalizingDetail: 'Saving the result and closing out this response.',
|
|
streamFailedDetail: 'This run did not finish cleanly, but you can retry or keep asking follow-up questions.',
|
|
streamSlowShort: 'This step is taking a bit longer than usual, but it is still running.',
|
|
streamSlowSummarizing: 'Organizing a larger tool result. This step often takes longer.',
|
|
streamSlowReasoning: 'The model is doing heavier analysis here. This is not a frozen connection.',
|
|
streamSlowGeneral: 'Processing is still ongoing. The time is currently being spent in internal analysis.',
|
|
// Approval bar
|
|
approvalAllow: 'Allow',
|
|
approvalExecute: 'to execute?',
|
|
// Time format
|
|
timeJustNow: 'Just now',
|
|
timeMinutesAgo: '{n}m ago',
|
|
timeHoursAgo: '{n}h ago',
|
|
},
|
|
nav: {
|
|
chat: 'Chat',
|
|
control: 'Control',
|
|
channels: 'Channels',
|
|
sessions: 'Sessions',
|
|
agent: 'Agent',
|
|
workspace: 'Workspace',
|
|
skills: 'Skills',
|
|
wiki: 'Wiki KB',
|
|
tools: 'Tools',
|
|
datasources: 'Datasources',
|
|
mcpServers: 'MCP Servers',
|
|
settingsGroup: 'Settings',
|
|
agents: 'Agents',
|
|
security: 'Security',
|
|
tokenUsage: 'Token Usage',
|
|
cronJobs: 'Cron Jobs',
|
|
settings: 'Settings',
|
|
logout: 'Logout',
|
|
themeLight: 'Light',
|
|
themeDark: 'Dark',
|
|
themeSystem: 'System',
|
|
roleUser: 'User',
|
|
roleAdmin: 'Admin',
|
|
},
|
|
settings: {
|
|
title: 'Settings',
|
|
sections: {
|
|
model: 'Model Management',
|
|
system: 'System',
|
|
image: 'Image Generation',
|
|
tts: 'Text-to-Speech',
|
|
stt: 'Speech Recognition',
|
|
music: 'Music Generation',
|
|
video: 'Video Generation',
|
|
about: 'About',
|
|
},
|
|
modelTitle: 'Model Management',
|
|
modelDesc: 'Manage provider presets and default model selection',
|
|
systemTitle: 'System',
|
|
systemDesc: 'Language and runtime behavior settings',
|
|
aboutTitle: 'About MateClaw',
|
|
aboutDesc: 'Version and system information',
|
|
model: {
|
|
title: 'Model Management',
|
|
desc: 'Configure model providers, credentials, and model lists',
|
|
addProvider: 'Add Provider',
|
|
localProviders: 'Local Models',
|
|
cloudProviders: 'Cloud Models',
|
|
active: 'Active',
|
|
setActive: 'Set Active',
|
|
configured: 'Configured',
|
|
partial: 'Partial',
|
|
unavailable: 'Unavailable',
|
|
builtin: 'Built-in',
|
|
custom: 'Custom',
|
|
notSet: 'Not set',
|
|
noModels: 'No models',
|
|
baseUrl: 'Base URL',
|
|
apiKey: 'API Key',
|
|
apiKeyInput: 'Enter API Key',
|
|
leaveBlankKeep: 'Leave blank to keep the current value',
|
|
modelCount: '{count} models',
|
|
createTitle: 'Add Provider',
|
|
editTitle: 'Provider Settings',
|
|
manageTitle: 'Manage Models',
|
|
addModel: 'Add Model',
|
|
activeChanged: 'Active model updated',
|
|
providerSaved: 'Provider settings saved',
|
|
providerDeleted: 'Provider deleted',
|
|
modelAdded: 'Model added',
|
|
modelRemoved: 'Model removed',
|
|
deleteConfirm: 'Delete provider "{name}"?',
|
|
removeConfirm: 'Remove model "{name}"?',
|
|
generateConfigInvalidJson: 'Generate kwargs is not valid JSON',
|
|
generateConfigMustBeObject: 'Generate kwargs must be a JSON object',
|
|
advancedSettings: 'Advanced Settings',
|
|
protocolHint: 'This selects the provider API protocol, not an internal class name.',
|
|
protocolOpenAI: 'OpenAI Compatible (Chat Completions)',
|
|
protocolAnthropic: 'Anthropic (Messages API)',
|
|
protocolGemini: 'Gemini Native',
|
|
protocolDashScope: 'DashScope Native',
|
|
advancedHint: 'Use this for generation options such as temperature, max_tokens, and top_p.',
|
|
searchHint: 'When enabled, the LLM will use its built-in search engine to retrieve real-time information (DashScope/Kimi/OpenAI supported).',
|
|
searchStrategyDefault: 'Default',
|
|
oauthTitle: 'OpenAI OAuth Login',
|
|
oauthLogin: 'OAuth Login',
|
|
oauthConnected: 'Connected',
|
|
oauthDisconnected: 'Not Connected',
|
|
oauthDisconnect: 'Disconnect',
|
|
oauthHint: 'Sign in with your OpenAI account to use ChatGPT Plus/Pro member quota (not API credits).',
|
|
oauthLoginSuccess: 'OpenAI OAuth login successful',
|
|
oauthRevokeSuccess: 'OpenAI OAuth disconnected',
|
|
fields: {
|
|
providerId: 'Provider ID',
|
|
providerName: 'Provider Name',
|
|
defaultBaseUrl: 'Default Base URL',
|
|
apiKeyPrefix: 'API Key Prefix',
|
|
protocol: 'Protocol',
|
|
generateKwargs: 'Generate Kwargs (JSON)',
|
|
enableSearch: 'Built-in Search',
|
|
searchStrategy: 'Search Strategy',
|
|
modelId: 'Model ID',
|
|
modelDisplayName: 'Display Name',
|
|
},
|
|
actions: {
|
|
manageModels: 'Manage Models',
|
|
providerSettings: 'Settings',
|
|
},
|
|
hints: {
|
|
openai: 'OpenAI defaults to https://api.openai.com/v1',
|
|
azureOpenai: 'Use an Azure resource endpoint such as https://<resource>.openai.azure.com/openai/v1',
|
|
anthropic: 'Anthropic defaults to https://api.anthropic.com',
|
|
ollama: 'Ollama usually runs locally at http://localhost:11434',
|
|
lmstudio: 'LM Studio usually exposes an OpenAI-compatible endpoint at http://localhost:1234/v1',
|
|
gemini: 'Gemini defaults to https://generativelanguage.googleapis.com',
|
|
openrouter: 'OpenRouter defaults to https://openrouter.ai/api/v1, aggregating multiple model providers',
|
|
zhipu: 'Zhipu AI defaults to https://open.bigmodel.cn/api/paas/v4',
|
|
zhipuIntl: 'Zhipu AI International uses https://open.z.ai/api/paas/v4',
|
|
volcengine: 'Volcano Engine (Doubao) defaults to https://ark.cn-beijing.volces.com/api/v3, requires an endpoint created on the Volcengine Ark platform',
|
|
openaiCompatible: 'OpenAI-compatible services usually use a Base URL ending with /v1',
|
|
},
|
|
discovery: {
|
|
discover: 'Discover Models',
|
|
discovering: 'Discovering...',
|
|
testConnection: 'Test Connection',
|
|
testing: 'Testing...',
|
|
testModel: 'Test',
|
|
testingModel: 'Testing...',
|
|
discoveredTitle: 'Discovered New Models',
|
|
discoveredCount: 'Found {total} models, {count} are new',
|
|
noNewModels: 'No new models found, all remote models already exist',
|
|
selectAll: 'Select All',
|
|
addSelected: 'Add Selected',
|
|
adding: 'Adding...',
|
|
addedCount: '{count} models added',
|
|
connectionOk: 'Connection successful',
|
|
connectionFail: 'Connection failed',
|
|
latency: 'Latency {ms}ms',
|
|
modelOk: 'Model available',
|
|
modelFail: 'Model unavailable',
|
|
},
|
|
},
|
|
fields: {
|
|
name: 'Display Name',
|
|
provider: 'Provider',
|
|
modelName: 'Model Name',
|
|
description: 'Description',
|
|
temperature: 'Temperature',
|
|
maxTokens: 'Max Tokens',
|
|
topP: 'Top P',
|
|
language: 'Language',
|
|
streamEnabled: 'Stream Response',
|
|
debugMode: 'Debug Mode',
|
|
searchEnabled: 'Enable Search',
|
|
searchProvider: 'Search Provider',
|
|
searchFallbackEnabled: 'Fallback on Failure',
|
|
serperApiKey: 'Serper API Key',
|
|
serperBaseUrl: 'Serper Base URL',
|
|
tavilyApiKey: 'Tavily API Key',
|
|
tavilyBaseUrl: 'Tavily Base URL',
|
|
duckduckgoEnabled: 'DuckDuckGo (Keyless)',
|
|
searxngBaseUrl: 'SearXNG Base URL',
|
|
sttEnabled: 'Enable Speech Recognition',
|
|
sttProvider: 'Preferred STT Provider',
|
|
sttFallbackEnabled: 'Provider Fallback',
|
|
musicEnabled: 'Enable Music Generation',
|
|
musicProvider: 'Preferred Music Provider',
|
|
musicFallbackEnabled: 'Provider Fallback',
|
|
ttsEnabled: 'Enable Text-to-Speech',
|
|
ttsProvider: 'Preferred TTS Provider',
|
|
ttsFallbackEnabled: 'Provider Fallback',
|
|
ttsAutoMode: 'Auto Read Aloud',
|
|
ttsSpeed: 'Speed',
|
|
imageEnabled: 'Enable Image Generation',
|
|
imageProvider: 'Preferred Image Provider',
|
|
imageFallbackEnabled: 'Provider Fallback',
|
|
openaiStatus: 'OpenAI Status',
|
|
videoEnabled: 'Enable Video Generation',
|
|
videoProvider: 'Preferred Video Provider',
|
|
videoFallbackEnabled: 'Provider Fallback',
|
|
dashscopeStatus: 'DashScope Status',
|
|
zhipuApiKey: 'Zhipu API Key',
|
|
zhipuBaseUrl: 'Zhipu API Base URL',
|
|
falApiKey: 'fal.ai API Key',
|
|
klingAccessKey: 'Kling Access Key',
|
|
klingSecretKey: 'Kling Secret Key',
|
|
runwayApiKey: 'Runway API Key',
|
|
minimaxApiKey: 'MiniMax API Key',
|
|
},
|
|
hints: {
|
|
provider: 'Current implementation applies DashScope model options at runtime.',
|
|
language: 'Interface language preference stored in backend settings.',
|
|
streamEnabled: 'Controls whether chat prefers streaming output in UI settings.',
|
|
debugMode: 'Reserved for showing more execution details later.',
|
|
searchEnabled: 'When disabled, the search tool will be unavailable to agents.',
|
|
searchProvider: 'Primary search provider used when the search tool is invoked.',
|
|
searchFallbackEnabled: 'Automatically try the other provider when the primary one fails.',
|
|
serperApiKey: 'API key for Google Serper search, get it from serper.dev.',
|
|
serperBaseUrl: 'Usually no need to change unless using a custom proxy.',
|
|
tavilyApiKey: 'API key for Tavily search, get it from tavily.com.',
|
|
tavilyBaseUrl: 'Usually no need to change unless using a custom proxy.',
|
|
duckduckgoEnabled: 'Free keyless search fallback. No API key required. Enabled by default as a zero-config fallback.',
|
|
searxngBaseUrl: 'Self-hosted SearXNG instance URL. Auto-configured when deploying via Docker.',
|
|
sttEnabled: 'Enable speech-to-text for voice messages. Both providers reuse existing API keys.',
|
|
sttProvider: 'Select preferred STT provider. Auto mode picks the first available one.',
|
|
sttFallbackEnabled: 'Automatically try other configured providers if the preferred one fails.',
|
|
openaiSttInfo: 'Reuses OpenAI API Key from Model Management. Whisper model, supports multilingual auto-detection.',
|
|
dashscopeSttInfo: 'Reuses DashScope API Key from Model Management. Paraformer model, excellent Chinese recognition.',
|
|
musicEnabled: 'Enable to let Agent use the music generation tool. Google Lyria reuses Google Key.',
|
|
musicProvider: 'Select preferred music provider. Auto mode prioritizes Google Lyria.',
|
|
musicFallbackEnabled: 'Automatically try other configured providers if the preferred one fails.',
|
|
googleLyriaInfo: 'Reuses Google API Key from Model Management. Lyria 3 model, supports lyrics and instrumental.',
|
|
minimaxMusicInfo: 'Reuses MiniMax API Key from video settings. music-2.5+ model, supports lyrics and instrumental.',
|
|
ttsEnabled: 'Enable to use TTS via Read Aloud button or auto mode. Edge TTS is free, no API key needed.',
|
|
ttsProvider: 'Select preferred TTS provider. Auto mode prioritizes free Edge TTS.',
|
|
ttsFallbackEnabled: 'Automatically try other configured providers if the preferred one fails.',
|
|
ttsAutoMode: 'off = manual read aloud only, always = auto-play voice for every AI reply.',
|
|
ttsSpeed: 'Speech playback speed. 1.0 is normal speed.',
|
|
edgeTtsInfo: 'Microsoft Edge built-in TTS. Free to use, supports Chinese, English, Japanese and more. Auto-detects language.',
|
|
dashscopeTtsInfo: 'Reuses DashScope API Key from Model Management. Uses CosyVoice model with multiple Chinese voices.',
|
|
openaiTtsInfo: 'Reuses OpenAI API Key from Model Management. Supports alloy, echo, nova and other voice styles.',
|
|
imageEnabled: 'Enable to let Agent use the image generation tool. Requires at least one configured image provider.',
|
|
imageProvider: 'Select preferred image provider. Auto mode picks the first available one.',
|
|
imageFallbackEnabled: 'Automatically try other configured providers if the preferred one fails.',
|
|
dashscopeImageStatus: 'Reuses the DashScope API Key configured in Model Management. No extra setup needed.',
|
|
openaiImageStatus: 'Reuses the OpenAI API Key configured in Model Management. No extra setup needed.',
|
|
zhipuImageApiKey: 'Get from bigmodel.cn. CogView-3-Flash model is free. Shared with video generation.',
|
|
falImageApiKey: 'Get from fal.ai for Flux image generation models. Shared with video generation.',
|
|
googleImagenInfo: 'Reuses Google API Key from Model Management. Supports Gemini image generation and Imagen 4.0.',
|
|
minimaxImageInfo: 'Reuses MiniMax API Key from video settings. image-01 model, multiple aspect ratios, up to 9 images.',
|
|
videoEnabled: 'Enable to let Agent use the video generation tool. Requires at least one configured video provider.',
|
|
videoProvider: 'Select preferred video provider. Auto mode picks the first available one.',
|
|
videoFallbackEnabled: 'Automatically try other configured providers if the preferred one fails.',
|
|
dashscopeVideoStatus: 'Reuses the DashScope API Key configured in Model Management. No extra setup needed.',
|
|
zhipuApiKey: 'Get from bigmodel.cn. CogVideoX-Flash model is free.',
|
|
zhipuBaseUrl: 'Usually no need to change unless using a custom proxy.',
|
|
falApiKey: 'Get from fal.ai. One key accesses Kling, Runway, Luma and more.',
|
|
klingAccessKey: 'Get from Kuaishou Open Platform for Kling video generation API.',
|
|
klingSecretKey: 'Paired with Access Key for JWT authentication.',
|
|
runwayApiKey: 'Get from runwayml.com. Supports gen4.5, gen4_turbo flagship models.',
|
|
minimaxApiKey: 'Get from minimaxi.com. Hailuo video with free quota, excellent for Chinese scenes.',
|
|
},
|
|
searchTitle: 'Search Service',
|
|
searchDesc: 'Configure the built-in search tool provider and API credentials',
|
|
sttTitle: 'Speech Recognition',
|
|
sttDesc: 'Configure STT speech-to-text with OpenAI Whisper and DashScope Paraformer',
|
|
sttProviderOptions: { auto: 'Auto Select' },
|
|
sttProviderTags: { reuseLlmKey: 'Reuses LLM API Key' },
|
|
musicTitle: 'Music Generation',
|
|
musicDesc: 'Configure AI music generation with Google Lyria and MiniMax Music',
|
|
musicProviderOptions: { auto: 'Auto Select' },
|
|
musicProviderTags: { reuseLlmKey: 'Reuses LLM API Key', sharedWithVideo: 'Shared with Video' },
|
|
ttsTitle: 'Text-to-Speech',
|
|
ttsDesc: 'Configure TTS with Edge TTS (free), OpenAI TTS, and DashScope CosyVoice',
|
|
ttsProviderOptions: {
|
|
auto: 'Auto Select',
|
|
},
|
|
ttsProviderTags: {
|
|
free: 'Free',
|
|
noKeyNeeded: 'No API Key Needed',
|
|
reuseLlmKey: 'Reuses LLM API Key',
|
|
},
|
|
ttsAutoModeOptions: {
|
|
off: 'Off (Manual only)',
|
|
always: 'Always Auto Read',
|
|
},
|
|
imageTitle: 'Image Generation',
|
|
imageDesc: 'Configure AI image generation with DashScope, OpenAI DALL-E, fal.ai Flux, and Zhipu CogView',
|
|
imageProviderOptions: {
|
|
auto: 'Auto Select',
|
|
},
|
|
imageProviderTags: {
|
|
reuseLlmKey: 'Reuses LLM API Key',
|
|
freeQuota: 'Free Quota Available',
|
|
configuredInModels: 'See Model Settings',
|
|
sharedWithVideo: 'Shared with Video',
|
|
},
|
|
videoTitle: 'Video Generation',
|
|
videoDesc: 'Configure AI video generation capabilities, supporting text-to-video and image-to-video',
|
|
videoProviderOptions: {
|
|
auto: 'Auto Select',
|
|
},
|
|
videoProviderTags: {
|
|
reuseLlmKey: 'Reuses LLM API Key',
|
|
freeQuota: 'Free Quota Available',
|
|
configuredInModels: 'See Model Settings',
|
|
},
|
|
actions: {
|
|
setDefault: 'Set Default',
|
|
saveSystem: 'Save System Settings',
|
|
},
|
|
messages: {
|
|
loadFailed: 'Failed to load settings',
|
|
saveSuccess: 'Settings saved successfully',
|
|
saveFailed: 'Failed to save settings',
|
|
deleteConfirm: 'Delete this model preset?',
|
|
modelSaved: 'Model preset saved',
|
|
modelDeleted: 'Model preset deleted',
|
|
defaultChanged: 'Default model updated',
|
|
},
|
|
languageOptions: {
|
|
zhCN: 'Simplified Chinese',
|
|
enUS: 'English',
|
|
},
|
|
},
|
|
workspace: {
|
|
title: 'Workspace',
|
|
desc: 'Manage Agent Markdown system prompt files',
|
|
selectAgent: 'Select Agent',
|
|
noAgent: 'Please select an agent first',
|
|
files: 'Files',
|
|
coreFiles: 'Core Files',
|
|
coreFilesDesc: 'Enabled files are concatenated in order as Agent system prompt',
|
|
newFile: 'New File',
|
|
noFiles: 'No files yet',
|
|
selectFile: 'Select a file from the left to view its content',
|
|
fileContent: 'Edit Markdown content here...',
|
|
preview: 'Preview',
|
|
editOnly: 'Edit',
|
|
splitView: 'Split',
|
|
modified: 'Modified',
|
|
saveSuccess: 'Saved successfully',
|
|
saveFailed: 'Failed to save',
|
|
deleteConfirm: 'Delete file "{name}"?',
|
|
deleteSuccess: 'File deleted',
|
|
deleteFailed: 'Failed to delete',
|
|
promptUpdated: 'System prompt files updated',
|
|
promptUpdateFailed: 'Failed to update system prompt files',
|
|
newFileTitle: 'New File',
|
|
newFilePlaceholder: 'Enter filename (e.g. AGENTS.md)',
|
|
newFileHint: 'Filename must end with .md',
|
|
fileExists: 'Filename already exists',
|
|
invalidFilename: 'Please enter a valid .md filename',
|
|
loadFailed: 'Failed to load file list',
|
|
loadFileFailed: 'Failed to load file content',
|
|
},
|
|
agents: {
|
|
title: 'Agent Management',
|
|
desc: 'Create, edit, and manage your AI agents',
|
|
newAgent: 'New Agent',
|
|
search: 'Search agents...',
|
|
tabs: {
|
|
all: 'All',
|
|
react: 'ReAct',
|
|
planExecute: 'Plan-Execute',
|
|
enabled: 'Enabled',
|
|
disabled: 'Disabled',
|
|
},
|
|
columns: {
|
|
name: 'Name',
|
|
description: 'Description',
|
|
agentType: 'Type',
|
|
modelName: 'Model',
|
|
tags: 'Tags',
|
|
enabled: 'Status',
|
|
updateTime: 'Updated',
|
|
actions: 'Actions',
|
|
},
|
|
status: {
|
|
enabled: 'Enabled',
|
|
disabled: 'Disabled',
|
|
},
|
|
emptyTitle: 'No Agents',
|
|
emptyDesc: 'Create your first agent to get started',
|
|
modal: {
|
|
newTitle: 'New Agent',
|
|
editTitle: 'Edit Agent',
|
|
},
|
|
fields: {
|
|
name: 'Name',
|
|
icon: 'Icon',
|
|
type: 'Type',
|
|
description: 'Description',
|
|
systemPrompt: 'System Prompt',
|
|
maxIterations: 'Max Iterations',
|
|
tags: 'Tags',
|
|
enabled: 'Enabled',
|
|
},
|
|
types: {
|
|
react: 'ReAct (Tool Calling)',
|
|
planExecute: 'Plan-and-Execute',
|
|
},
|
|
actions: {
|
|
edit: 'Edit',
|
|
delete: 'Delete',
|
|
create: 'Create',
|
|
update: 'Save',
|
|
},
|
|
placeholders: {
|
|
name: 'Agent name',
|
|
icon: 'Emoji or URL',
|
|
description: 'Brief description',
|
|
systemPrompt: 'You are a helpful AI assistant...',
|
|
tags: 'tag1,tag2',
|
|
},
|
|
messages: {
|
|
noDescription: 'No description',
|
|
deleteConfirm: 'Are you sure you want to delete this agent? This cannot be undone.',
|
|
loadFailed: 'Failed to load agents',
|
|
saveFailed: 'Failed to save agent',
|
|
saveSuccess: 'Agent saved',
|
|
deleteFailed: 'Failed to delete agent',
|
|
deleteSuccess: 'Agent deleted',
|
|
toggleFailed: 'Failed to toggle agent status',
|
|
toggleSuccess: 'Status updated',
|
|
},
|
|
},
|
|
security: {
|
|
title: 'Security',
|
|
sections: {
|
|
toolGuard: 'Tool Guard',
|
|
fileGuard: 'File Guard',
|
|
auditLogs: 'Audit Logs',
|
|
},
|
|
toolGuard: {
|
|
title: 'Tool Guard',
|
|
desc: 'Manage tool invocation security rules and global guard settings',
|
|
enabled: 'Enable Tool Guard',
|
|
enabledHint: 'When enabled, tool invocations will be checked against security rules',
|
|
guardScope: 'Guard Scope',
|
|
scopeAll: 'All Tools',
|
|
scopeSelected: 'Selected Tools',
|
|
guardedTools: 'Guarded Tools',
|
|
guardedToolsPlaceholder: 'Type tool name and press Enter',
|
|
deniedTools: 'Denied Tools',
|
|
deniedToolsPlaceholder: 'Type tool name and press Enter',
|
|
rules: 'Security Rules',
|
|
rulesDesc: 'Manage built-in and custom security rules',
|
|
addRule: 'Add Rule',
|
|
editRule: 'Edit Rule',
|
|
columns: {
|
|
name: 'Rule Name',
|
|
severity: 'Severity',
|
|
category: 'Category',
|
|
pattern: 'Pattern',
|
|
decision: 'Decision',
|
|
enabled: 'Status',
|
|
builtin: 'Type',
|
|
actions: 'Actions',
|
|
},
|
|
builtinBadge: 'Built-in',
|
|
customBadge: 'Custom',
|
|
deleteConfirm: 'Delete rule "{name}"?',
|
|
fields: {
|
|
ruleId: 'Rule ID',
|
|
name: 'Name',
|
|
description: 'Description',
|
|
toolName: 'Target Tool',
|
|
pattern: 'Regex Pattern',
|
|
excludePattern: 'Exclude Pattern',
|
|
category: 'Category',
|
|
severity: 'Severity',
|
|
decision: 'Decision',
|
|
remediation: 'Remediation',
|
|
priority: 'Priority',
|
|
},
|
|
},
|
|
fileGuard: {
|
|
title: 'File Guard',
|
|
desc: 'Manage sensitive file path protection',
|
|
enabled: 'Enable File Guard',
|
|
enabledHint: 'When enabled, sensitive file paths will be protected from unauthorized access',
|
|
sensitivePaths: 'Sensitive Paths',
|
|
sensitivePathsDesc: 'Configure file paths to protect (supports wildcards)',
|
|
addPath: 'Add Path',
|
|
pathPlaceholder: 'Type path and press Enter (e.g. ~/.ssh/)',
|
|
},
|
|
audit: {
|
|
title: 'Audit Logs',
|
|
desc: 'View tool security check records',
|
|
config: {
|
|
title: 'Audit Configuration',
|
|
enabled: 'Enable Audit Logging',
|
|
enabledHint: 'When disabled, tool invocation audit logs will not be recorded',
|
|
minSeverity: 'Minimum Severity',
|
|
minSeverityHint: 'Only record audit events at this severity level and above',
|
|
retentionDays: 'Retention Days',
|
|
retentionDaysHint: 'Audit logs older than this will be auto-cleaned (0=never)',
|
|
},
|
|
stats: {
|
|
total: 'Total Checks',
|
|
blocked: 'Blocked',
|
|
needsApproval: 'Needs Approval',
|
|
allowed: 'Allowed',
|
|
},
|
|
filters: {
|
|
toolName: 'Tool Name',
|
|
decision: 'Decision',
|
|
severity: 'Severity',
|
|
conversationId: 'Conversation ID',
|
|
},
|
|
columns: {
|
|
time: 'Time',
|
|
tool: 'Tool',
|
|
decision: 'Decision',
|
|
severity: 'Severity',
|
|
conversationId: 'Conversation',
|
|
},
|
|
noLogs: 'No audit logs yet',
|
|
expandFindings: 'Expand Details',
|
|
},
|
|
severity: {
|
|
CRITICAL: 'Critical',
|
|
HIGH: 'High',
|
|
MEDIUM: 'Medium',
|
|
LOW: 'Low',
|
|
INFO: 'Info',
|
|
},
|
|
decision: {
|
|
ALLOW: 'Allow',
|
|
NEEDS_APPROVAL: 'Needs Approval',
|
|
BLOCK: 'Block',
|
|
},
|
|
messages: {
|
|
loadFailed: 'Failed to load security config',
|
|
saveSuccess: 'Security config saved',
|
|
saveFailed: 'Failed to save security config',
|
|
ruleCreated: 'Rule created',
|
|
ruleUpdated: 'Rule updated',
|
|
ruleDeleted: 'Rule deleted',
|
|
ruleToggled: 'Rule status updated',
|
|
},
|
|
approval: {
|
|
title: 'Approval Required',
|
|
severity: 'Risk Level',
|
|
summary: 'Summary',
|
|
findings: 'Findings',
|
|
remediation: 'Remediation',
|
|
approved: 'Approved',
|
|
denied: 'Denied',
|
|
hint: 'Type /approve to allow, or /deny to reject',
|
|
},
|
|
},
|
|
tokenUsage: {
|
|
title: 'Token Usage',
|
|
desc: 'View token consumption and model invocation statistics',
|
|
refresh: 'Refresh',
|
|
promptTokens: 'Prompt Tokens',
|
|
completionTokens: 'Completion Tokens',
|
|
assistantMessages: 'Assistant Messages',
|
|
byModel: 'By Model',
|
|
byDate: 'By Date',
|
|
model: 'Model',
|
|
provider: 'Provider',
|
|
date: 'Date',
|
|
messageCount: 'Messages',
|
|
loadFailed: 'Failed to load token usage',
|
|
noData: 'No token usage data',
|
|
},
|
|
mcp: {
|
|
title: 'MCP Server Management',
|
|
desc: 'Manage MCP (Model Context Protocol) server connections',
|
|
addServer: 'Add Server',
|
|
refreshAll: 'Refresh All',
|
|
columns: {
|
|
name: 'Name',
|
|
transport: 'Transport',
|
|
enabled: 'Status',
|
|
lastStatus: 'Connection',
|
|
lastConnectedTime: 'Last Connected',
|
|
toolCount: 'Tools',
|
|
description: 'Description',
|
|
actions: 'Actions',
|
|
},
|
|
status: {
|
|
connected: 'Connected',
|
|
disconnected: 'Disconnected',
|
|
error: 'Error',
|
|
},
|
|
transport: {
|
|
stdio: 'Stdio',
|
|
sse: 'SSE',
|
|
streamable_http: 'HTTP',
|
|
},
|
|
modal: {
|
|
newTitle: 'Add MCP Server',
|
|
editTitle: 'Edit MCP Server',
|
|
},
|
|
fields: {
|
|
name: 'Name',
|
|
description: 'Description',
|
|
transport: 'Transport',
|
|
url: 'URL',
|
|
headers: 'HTTP Headers (JSON)',
|
|
command: 'Command',
|
|
args: 'Arguments (JSON array)',
|
|
env: 'Environment Variables (JSON)',
|
|
cwd: 'Working Directory',
|
|
connectTimeout: 'Connect Timeout (seconds)',
|
|
readTimeout: 'Read Timeout (seconds)',
|
|
enabled: 'Enabled',
|
|
},
|
|
placeholders: {
|
|
name: 'Server name',
|
|
description: 'Brief description',
|
|
url: 'http://localhost:8080/sse',
|
|
headers: '',
|
|
command: 'npx',
|
|
args: '',
|
|
env: '',
|
|
cwd: '/path/to/dir',
|
|
},
|
|
actions: {
|
|
test: 'Test Connection',
|
|
testing: 'Testing...',
|
|
},
|
|
testResult: {
|
|
success: 'Connection successful',
|
|
failed: 'Connection failed',
|
|
tools: 'Discovered {count} tools',
|
|
latency: 'Latency {ms}ms',
|
|
},
|
|
messages: {
|
|
loadFailed: 'Failed to load MCP servers',
|
|
createSuccess: 'MCP server created',
|
|
updateSuccess: 'MCP server updated',
|
|
deleteSuccess: 'MCP server deleted',
|
|
deleteConfirm: 'Delete MCP server "{name}"?',
|
|
toggleSuccess: 'Status updated',
|
|
refreshSuccess: 'All servers refreshed',
|
|
saveFailed: 'Failed to save',
|
|
empty: 'No MCP servers',
|
|
emptyDesc: 'Add an MCP server to extend your agents\' capabilities',
|
|
},
|
|
},
|
|
sessions: {
|
|
title: 'Sessions',
|
|
desc: 'View and manage all conversation sessions',
|
|
search: 'Search sessions...',
|
|
columns: {
|
|
session: 'Session',
|
|
source: 'Source',
|
|
agent: 'Agent',
|
|
messages: 'Messages',
|
|
status: 'Status',
|
|
lastActive: 'Last Active',
|
|
actions: 'Actions',
|
|
},
|
|
status: {
|
|
active: 'Active',
|
|
closed: 'Closed',
|
|
},
|
|
empty: 'No sessions found',
|
|
loadFailed: 'Failed to load sessions',
|
|
deleteConfirm: 'Are you sure you want to delete this session?',
|
|
deleteTitle: 'Confirm Delete',
|
|
deleteFailed: 'Failed to delete session',
|
|
time: {
|
|
justNow: 'Just now',
|
|
minutesAgo: '{n}m ago',
|
|
hoursAgo: '{n}h ago',
|
|
},
|
|
},
|
|
tools: {
|
|
title: 'Tools',
|
|
desc: 'Manage tools available to your agents',
|
|
registerButton: 'Register Tool',
|
|
columns: {
|
|
tool: 'Tool',
|
|
beanName: 'Bean Name',
|
|
type: 'Type',
|
|
status: 'Status',
|
|
actions: 'Actions',
|
|
},
|
|
empty: 'No tools registered',
|
|
modal: {
|
|
editTitle: 'Edit Tool',
|
|
newTitle: 'Register Tool',
|
|
},
|
|
fields: {
|
|
name: 'Name',
|
|
beanName: 'Bean Name',
|
|
type: 'Type',
|
|
description: 'Description',
|
|
},
|
|
placeholders: {
|
|
name: 'Tool name',
|
|
beanName: 'Spring Bean name',
|
|
description: 'Tool description',
|
|
},
|
|
types: {
|
|
builtin: 'Built-in',
|
|
mcp: 'MCP',
|
|
custom: 'Custom',
|
|
},
|
|
messages: {
|
|
saveFailed: 'Failed to save tool',
|
|
deleteConfirm: 'Are you sure you want to delete this tool?',
|
|
deleteTitle: 'Confirm Delete',
|
|
deleteFailed: 'Failed to delete tool',
|
|
toggleFailed: 'Failed to toggle tool status',
|
|
},
|
|
},
|
|
datasources: {
|
|
title: 'Datasources',
|
|
desc: 'Manage external database connections for natural language queries',
|
|
addButton: 'Add Datasource',
|
|
empty: 'No datasources configured. Click Add to get started.',
|
|
columns: {
|
|
name: 'Name',
|
|
type: 'Type',
|
|
connection: 'Connection',
|
|
status: 'Status',
|
|
actions: 'Actions',
|
|
},
|
|
sections: {
|
|
basic: 'Basic Info',
|
|
connection: 'Connection',
|
|
auth: 'Authentication',
|
|
advanced: 'Advanced',
|
|
},
|
|
modal: {
|
|
editTitle: 'Edit Datasource',
|
|
newTitle: 'Add Datasource',
|
|
},
|
|
fields: {
|
|
name: 'Name',
|
|
dbType: 'Database Type',
|
|
host: 'Host',
|
|
port: 'Port',
|
|
databaseName: 'Database Name',
|
|
schemaName: 'Schema',
|
|
username: 'Username',
|
|
password: 'Password',
|
|
description: 'Description',
|
|
extraParams: 'JDBC Parameters',
|
|
},
|
|
placeholders: {
|
|
name: 'e.g. Business Database',
|
|
host: '127.0.0.1',
|
|
port: '3306',
|
|
databaseName: 'Database name',
|
|
schemaName: 'public (default)',
|
|
username: 'Database username',
|
|
password: 'Database password',
|
|
description: 'What this datasource is for (optional)',
|
|
extraParams: 'useSSL=false&serverTimezone=UTC',
|
|
},
|
|
hints: {
|
|
extraParams: 'Additional JDBC URL parameters, separated by &',
|
|
},
|
|
testButton: 'Test Connection',
|
|
messages: {
|
|
saveFailed: 'Failed to save datasource',
|
|
deleteConfirm: 'Are you sure you want to delete this datasource? The agent will no longer be able to query it.',
|
|
deleteTitle: 'Confirm Delete',
|
|
deleteFailed: 'Failed to delete datasource',
|
|
toggleFailed: 'Failed to toggle datasource status',
|
|
testSuccess: 'Connection successful',
|
|
testFailed: 'Connection failed. Please check configuration.',
|
|
},
|
|
},
|
|
wiki: {
|
|
desc: 'AI-powered structured knowledge base that digests raw materials into Wiki pages',
|
|
createKB: 'New Knowledge Base',
|
|
knowledgeBases: 'Knowledge Bases',
|
|
noKB: 'No knowledge bases yet',
|
|
selectKB: 'Select a knowledge base',
|
|
selectPage: 'Select a page from the sidebar',
|
|
kbName: 'Name',
|
|
kbNamePlaceholder: 'Enter knowledge base name',
|
|
kbDescription: 'Description',
|
|
kbDescPlaceholder: 'Briefly describe the knowledge base purpose',
|
|
rawMaterials: 'Raw Materials',
|
|
pages: 'Wiki Pages',
|
|
config: 'Config',
|
|
searchPages: 'Search pages...',
|
|
dropFiles: 'Drop files here or click to upload',
|
|
addText: 'Add Text',
|
|
noRawMaterials: 'No raw materials yet',
|
|
reprocess: 'Reprocess',
|
|
processAll: 'Process All Pending',
|
|
materialTitle: 'Title',
|
|
materialContent: 'Content',
|
|
pasteContent: 'Paste or type content here...',
|
|
backlinks: 'Backlinks',
|
|
configTitle: 'Wiki Processing Rules',
|
|
configDesc: 'Configure the rules AI follows when digesting raw materials',
|
|
configPlaceholder: 'Edit wiki processing rules here...',
|
|
dirPlaceholder: 'Enter local directory path, e.g. /Users/me/docs',
|
|
scan: 'Scan',
|
|
scanning: 'Scanning...',
|
|
scanResult: 'Scanned {scanned} files, added {added}, skipped {skipped}',
|
|
},
|
|
cronJobs: {
|
|
title: 'Cron Jobs',
|
|
desc: 'Schedule agents to run messages or goals on a timer',
|
|
createJob: 'New Job',
|
|
editJob: 'Edit Job',
|
|
noJobs: 'No cron jobs yet',
|
|
createFirst: 'Create your first cron job',
|
|
columns: {
|
|
name: 'Name',
|
|
agent: 'Agent',
|
|
taskType: 'Type',
|
|
cron: 'Cron Expression',
|
|
timezone: 'Timezone',
|
|
nextRun: 'Next Run',
|
|
lastRun: 'Last Run',
|
|
enabled: 'Enabled',
|
|
actions: 'Actions',
|
|
},
|
|
taskTypes: { text: 'Text Message', agent: 'Agent Goal' },
|
|
cronTypes: { hourly: 'Hourly', daily: 'Daily', weekly: 'Weekly', custom: 'Custom' },
|
|
days: { mon: 'Mon', tue: 'Tue', wed: 'Wed', thu: 'Thu', fri: 'Fri', sat: 'Sat', sun: 'Sun' },
|
|
fields: {
|
|
name: 'Job Name',
|
|
namePlaceholder: 'Enter job name',
|
|
agent: 'Agent',
|
|
agentPlaceholder: 'Select agent',
|
|
taskType: 'Task Type',
|
|
triggerMessage: 'Trigger Message',
|
|
triggerMessagePlaceholder: 'Message to send to the agent',
|
|
requestBody: 'Goal',
|
|
requestBodyPlaceholder: 'Describe the goal for the agent',
|
|
cronFrequency: 'Frequency',
|
|
cronTime: 'Time',
|
|
cronDays: 'Days',
|
|
cronExpression: 'Custom Expression',
|
|
cronExpressionPlaceholder: 'min hour day month weekday, e.g. 0 9 * * 1-5',
|
|
timezone: 'Timezone',
|
|
enabled: 'Enable immediately',
|
|
},
|
|
actions: { runNow: 'Run Now', edit: 'Edit', delete: 'Delete' },
|
|
messages: {
|
|
createSuccess: 'Cron job created',
|
|
updateSuccess: 'Cron job updated',
|
|
deleteSuccess: 'Cron job deleted',
|
|
deleteConfirm: 'Delete job "{name}"? This cannot be undone.',
|
|
runTriggered: 'Job triggered. Check conversation "cron:{id}" for results.',
|
|
enableSuccess: 'Job enabled',
|
|
disableSuccess: 'Job disabled',
|
|
invalidCron: 'Invalid cron expression. Use 5-field format (min hour day month weekday).',
|
|
agentRequired: 'Please select an agent',
|
|
textRequired: 'Trigger message is required',
|
|
goalRequired: 'Goal is required',
|
|
},
|
|
},
|
|
login: {
|
|
subtitle: 'Your intelligent AI assistant',
|
|
fields: {
|
|
username: 'Username',
|
|
password: 'Password',
|
|
},
|
|
placeholders: {
|
|
username: 'Enter username',
|
|
password: 'Enter password',
|
|
},
|
|
signIn: 'Sign In',
|
|
hint: 'Default: <code>admin</code> / <code>admin123</code>',
|
|
failed: 'Login failed. Please check your credentials.',
|
|
},
|
|
channels: {
|
|
title: 'Channels',
|
|
desc: 'Connect your agents to messaging platforms and APIs',
|
|
newChannel: 'New Channel',
|
|
addChannel: 'Add Channel',
|
|
status: {
|
|
active: 'Active',
|
|
inactive: 'Inactive',
|
|
},
|
|
configure: 'Configure',
|
|
enable: 'Enable',
|
|
disable: 'Disable',
|
|
modal: {
|
|
editTitle: 'Edit Channel',
|
|
newTitle: 'New Channel',
|
|
},
|
|
fields: {
|
|
name: 'Name',
|
|
type: 'Type',
|
|
description: 'Description',
|
|
bindAgent: 'Bind Agent',
|
|
},
|
|
placeholders: {
|
|
name: 'Channel name',
|
|
description: 'Channel description',
|
|
selectAgent: 'Select Agent...',
|
|
},
|
|
types: {
|
|
web: 'Web API',
|
|
dingtalk: 'DingTalk',
|
|
feishu: 'Feishu / Lark',
|
|
telegram: 'Telegram',
|
|
discord: 'Discord',
|
|
wecom: 'WeChat Work',
|
|
weixin: 'WeChat',
|
|
qq: 'QQ',
|
|
webhook: 'Webhook',
|
|
},
|
|
tabs: {
|
|
form: 'Form',
|
|
json: 'Raw JSON',
|
|
},
|
|
webhook: {
|
|
url: 'Webhook URL',
|
|
copy: 'Copy',
|
|
copied: 'Copied',
|
|
copyFailed: 'Copy failed, please copy manually',
|
|
localhostWarn: 'You are running on localhost. IM platforms cannot reach localhost. Use ngrok, frp or similar tools to expose your local service to the internet, then replace the host in the URL above.',
|
|
},
|
|
weixin: {
|
|
authHint: 'Click the button below to get a WeChat login QR code. After scanning with WeChat, the Bot Token will be automatically filled in. Requires iLink Bot beta access.',
|
|
qrcodeButton: 'Get Login QR Code',
|
|
qrcodeLoading: 'Fetching...',
|
|
qrcodeFailed: 'Failed to get QR code. Please check your network.',
|
|
qrcodeExpired: 'QR code expired. Please get a new one.',
|
|
scanHint: 'Scan this QR code with WeChat to log in',
|
|
polling: 'Waiting for scan...',
|
|
scanned: 'Scanned, please confirm on your phone',
|
|
confirmed: 'Login successful',
|
|
expired: 'QR code expired',
|
|
loginSuccess: 'WeChat login successful, token has been filled in',
|
|
},
|
|
wecom: {
|
|
authHint: 'Click the button to open a WeChat Work QR code window. After scanning, the Bot ID and Secret will be automatically filled in.',
|
|
authButton: 'Authorize WeChat Work Bot',
|
|
authLoading: 'Loading...',
|
|
authSuccess: 'WeChat Work bot authorized successfully',
|
|
sdkFailed: 'WeChat Work SDK failed to load. Please check your network.',
|
|
windowBlocked: 'Popup blocked by browser. Please allow popups and try again.',
|
|
authCancelled: 'Authorization cancelled',
|
|
authFailed: 'Authorization failed',
|
|
},
|
|
webHint: 'Web channel uses built-in SSE communication, no additional configuration needed.',
|
|
webhookHint: 'Webhook channel configuration should be edited in the "Raw JSON" tab below.',
|
|
jsonHint: 'Edit the complete JSON configuration directly. Switching to "Form" tab will sync automatically.',
|
|
advanced: 'Advanced',
|
|
accessControl: {
|
|
title: 'Access Control',
|
|
dmPolicy: 'DM Policy',
|
|
dmPolicyTooltip: 'Controls whether users can chat with the bot privately',
|
|
groupPolicy: 'Group Policy',
|
|
groupPolicyTooltip: 'Controls whether the bot responds in group chats',
|
|
policyOpen: 'Open',
|
|
policyClosed: 'Closed',
|
|
allowFrom: 'Allowed Users',
|
|
allowFromTooltip: 'Comma-separated user ID whitelist, leave empty to allow all',
|
|
allowFromPlaceholder: 'Comma-separated user IDs (empty = allow all)',
|
|
denyMessage: 'Deny Message',
|
|
denyMessagePlaceholder: 'Sorry, you do not have permission',
|
|
requireMention: 'Require @mention',
|
|
requireMentionTooltip: 'Whether the bot requires @mention in group chats',
|
|
},
|
|
messageFilter: {
|
|
title: 'Message Filter',
|
|
filterThinking: 'Filter Thinking',
|
|
filterThinkingTooltip: 'Filter <think> tag content before sending to users',
|
|
filterToolMessages: 'Filter Tool Messages',
|
|
filterToolMessagesTooltip: 'Filter tool_call / tool_result and ReAct Action/Observation lines',
|
|
messageFormat: 'Message Format',
|
|
formatAuto: 'Auto',
|
|
formatMarkdown: 'Markdown',
|
|
formatText: 'Plain Text',
|
|
formatHtml: 'HTML',
|
|
},
|
|
feishuPermissions: {
|
|
title: 'Required Feishu Permissions',
|
|
goToPermissions: 'Go to Permission Management →',
|
|
},
|
|
connection: {
|
|
connected: 'Connected',
|
|
reconnecting: 'Reconnecting',
|
|
error: 'Disconnected',
|
|
disconnected: 'Not Connected',
|
|
retryCount: 'Retry #{n}',
|
|
errorLabel: 'Error',
|
|
},
|
|
messages: {
|
|
loadFailed: 'Failed to load channels',
|
|
saveFailed: 'Failed to save channel',
|
|
saveSuccess: 'Channel saved',
|
|
deleteFailed: 'Failed to delete channel',
|
|
deleteConfirm: 'Are you sure you want to delete this channel?',
|
|
deleteTitle: 'Confirm Delete',
|
|
toggleFailed: 'Failed to toggle channel status',
|
|
invalidJson: 'Invalid config JSON format',
|
|
},
|
|
},
|
|
skills: {
|
|
title: 'Skills',
|
|
desc: 'Manage tools and skills available to your agents',
|
|
newSkill: 'New Skill',
|
|
importSkill: 'Import Skill',
|
|
refreshRuntime: 'Refresh Runtime',
|
|
refreshing: 'Refreshing...',
|
|
refreshSuccess: 'Active skills refreshed',
|
|
refreshFailed: 'Failed to refresh runtime',
|
|
tabs: {
|
|
all: 'All',
|
|
builtin: 'Built-in',
|
|
mcp: 'MCP',
|
|
dynamic: 'Dynamic',
|
|
},
|
|
empty: 'No skills found',
|
|
emptyDesc: 'Add skills to enhance your agents\' capabilities',
|
|
noDescription: 'No description',
|
|
modal: {
|
|
configureTitle: 'Configure Skill',
|
|
newTitle: 'New Skill',
|
|
},
|
|
fields: {
|
|
name: 'Name',
|
|
type: 'Type',
|
|
icon: 'Icon',
|
|
version: 'Version',
|
|
author: 'Author',
|
|
tags: 'Tags',
|
|
description: 'Description',
|
|
configJson: 'Configuration (JSON)',
|
|
skillContent: 'Skill Content (SKILL.md)',
|
|
sourceCode: 'Source Code / Script',
|
|
},
|
|
placeholders: {
|
|
name: 'Skill name',
|
|
icon: '🛠️ (emoji or URL)',
|
|
version: '1.0.0',
|
|
author: 'Author name',
|
|
tags: 'tag1,tag2,tag3',
|
|
description: 'What does this skill do?',
|
|
configJson: '',
|
|
sourceCode: '# Python or script content...',
|
|
},
|
|
hints: {
|
|
directorySkill: '— Directory skill: used as fallback when directory is unavailable',
|
|
primaryContent: '— Primary content for agent prompt injection',
|
|
},
|
|
types: {
|
|
builtin: 'Built-in',
|
|
mcp: 'MCP',
|
|
dynamic: 'Dynamic',
|
|
},
|
|
actions: {
|
|
configure: 'Configure',
|
|
delete: 'Delete',
|
|
saveChanges: 'Save Changes',
|
|
createSkill: 'Create Skill',
|
|
},
|
|
runtime: {
|
|
disabled: 'Disabled',
|
|
unknown: 'Unknown',
|
|
securityBlocked: 'Security Blocked',
|
|
depsMissing: 'Dependencies Missing',
|
|
directoryActive: 'Directory Active',
|
|
databaseFallback: 'Database Fallback',
|
|
databaseActive: 'Database Active',
|
|
unresolved: 'Unresolved',
|
|
},
|
|
messages: {
|
|
saveFailed: 'Failed to save skill',
|
|
deleteConfirm: 'Are you sure you want to delete this skill? This cannot be undone.',
|
|
deleteTitle: 'Confirm Delete',
|
|
deleteFailed: 'Failed to delete skill',
|
|
toggleFailed: 'Failed to toggle skill status',
|
|
},
|
|
import: {
|
|
title: 'Import Skill',
|
|
urlTab: 'From URL',
|
|
searchTab: 'Search Hub',
|
|
urlPlaceholder: 'Enter GitHub repo URL or ClawHub skill URL',
|
|
urlHint: 'Supports GitHub repositories and ClawHub marketplace links',
|
|
examples: 'Examples',
|
|
install: 'Install',
|
|
installing: 'Installing...',
|
|
installed: 'Installed successfully',
|
|
failed: 'Installation failed',
|
|
cancelled: 'Cancelled',
|
|
cancel: 'Cancel',
|
|
overwrite: 'Overwrite existing skill',
|
|
enableAfterInstall: 'Enable after install',
|
|
searchPlaceholder: 'Search ClawHub marketplace...',
|
|
search: 'Search',
|
|
searching: 'Searching...',
|
|
searchFailed: 'Search failed',
|
|
noResults: 'No matching skills found',
|
|
statusPending: 'Pending',
|
|
},
|
|
},
|
|
} as const
|