mateclaw/mateclaw-ui/src/i18n/locales/zh-CN.ts

2146 lines
81 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export default {
app: {
title: 'MateClaw - AI 助手',
},
common: {
save: '保存',
cancel: '取消',
reset: '重置',
edit: '编辑',
delete: '删除',
create: '创建',
update: '更新',
loading: '加载中...',
enabled: '启用',
disabled: '停用',
default: '默认',
view: '查看',
copy: '复制',
copied: '已复制',
confirm: '确认',
close: '关闭',
add: '添加',
search: '搜索',
clear: '清除',
expandSidebar: '展开侧边栏',
collapseSidebar: '折叠侧边栏',
manageWorkspaces: '管理工作区',
show: '显示',
hide: '隐藏',
on: '开启',
off: '关闭',
yes: '是',
no: '否',
configure: '配置',
enable: '启用',
disable: '停用',
},
auth: {
changePassword: '修改密码',
oldPassword: '当前密码',
newPassword: '新密码',
confirmPassword: '确认新密码',
fieldsRequired: '请填写当前密码和新密码',
passwordMismatch: '两次输入的新密码不一致',
passwordChanged: '密码修改成功',
passwordChangeFailed: '密码修改失败',
},
chat: {
status: {
idle: '就绪',
streaming: '生成中...',
error: '连接断开',
},
thinking: '深度思考',
thinkingInProgress: '思考中...',
stopped: '已停止生成',
interrupted: '已中断',
expandLines: '展开(还有 {hidden} 行)',
collapse: '收起',
failed: '生成失败',
compressionSummary: '之前的对话已整理为摘要',
compressionWithCount: '之前的 {count} 条对话已整理为摘要',
loadingOlder: '加载更早的消息...',
loadOlderMessages: '点击加载更早的消息',
retry: '重试',
errorCode: '错误码',
error: {
rate_limit: {
title: '请求过于频繁',
description: '您的请求超出了频率限制,服务器暂时无法处理。',
action: '请稍等片刻后重试,或减少连续提交次数。',
},
auth_expired: {
title: '登录已过期',
description: '您的登录凭证已失效,需要重新登录。',
action: '页面将自动跳转到登录页。',
},
provider_auth_error: {
title: '模型认证失败',
description: '当前模型的 API Key 无效或已失效,与你的登录状态无关。',
action: '请到「设置 → 模型」中检查并更新该模型的 API Key。',
},
forbidden: {
title: '没有权限',
description: '您没有执行此操作的权限。',
action: '请联系管理员获取访问权限。',
},
bad_request: {
title: '请求参数有误',
description: '发送的请求格式有误,服务器无法理解。',
action: '请检查输入内容后重试。如果问题持续,请联系管理员。',
},
server_error: {
title: '服务器内部错误',
description: '服务器处理请求时遇到了问题。',
action: '请稍后重试。如果问题持续出现,请联系管理员。',
},
service_unavailable: {
title: '服务暂时不可用',
description: '服务正在维护或暂时过载,无法处理请求。',
action: '请稍后再试。',
},
timeout: {
title: '请求超时',
description: '服务器在规定时间内没有响应,可能是网络问题或服务繁忙。',
action: '请检查网络连接后重试。',
},
network: {
title: '网络连接失败',
description: '无法连接到服务器,请检查您的网络状况。',
action: '请确认网络正常后重试。',
},
unknown: {
title: '发生了未知错误',
description: '请求过程中遇到了意外问题。',
action: '请重试。如果问题持续出现,请联系管理员。',
},
},
copy: '复制',
copied: '已复制',
regenerate: '重新生成',
ttsPlay: '朗读',
ttsStop: '停止朗读',
conversations: '会话列表',
newChat: '新对话',
loadingAgents: '加载 Agent 中...',
selectAgent: '请选择 Agent',
noConversations: '暂无会话',
startNewChat: '开始新对话吧',
messages: '{count} 条消息',
configModel: '配置模型',
clearMessages: '清空消息',
goToModelSettings: '前往模型设置',
configModelFirst: '请先配置模型',
modelUnavailable: '当前模型不可用',
noActiveModel: '当前没有激活模型。先到模型管理中选择一个可用模型,再开始对话。',
providerNotReady: '当前激活模型属于 {name},但这个提供商还没配置完成。请到模型管理中补全 API Key 或 Base URL。',
noAvailableModel: '当前没有可用模型。',
loadAgentsFailed: '加载 Agent 列表失败',
loadModelFailed: '加载模型状态失败',
loadConversationsFailed: '加载会话列表失败',
loadMessagesFailed: '加载消息记录失败',
deleteConversationFailed: '删除会话失败',
deleteConfirm: '确定删除这个会话?此操作不可恢复。',
switchModelFailed: '切换模型失败',
searchModel: '搜索模型…',
noMatchModel: '没有匹配的模型',
// RFC-073: liveness hints shown in the model dropdown header
modelLivenessUnprobed: '正在检查可用性',
modelLivenessCooldown: '冷却中({seconds} 秒后自动恢复)',
// RFC-074 PR-2: empty-state inside the model dropdown
noProvidersConfigured: '还没有可用的模型',
goConfigure: '去配置',
uploadFailed: '文件上传失败',
dropToUpload: '拖放文件或文件夹到此处',
copyFailed: '复制失败',
dateToday: '今天',
dateYesterday: '昨天',
dateLast7Days: '近 7 天',
dateEarlier: '更早',
suggestionIntro: '记住我平时不吃香菜、喜欢喝冰美式,以后点餐时提醒我',
suggestionPoem: '帮我搜一下今天科技圈有什么大新闻,用一句话总结',
suggestionCode: '让写手帮我润色一段文案,我先把草稿发你',
suggestionWeather: '你现在都装了哪些技能和工具?教我怎么给你加新本事',
approvalRequired: '需要审批',
approve: '批准',
deny: '拒绝',
approvalHint: '或输入 <code>/approve</code> / <code>/deny</code>',
approved: '✅ 已允许',
denied: '⛔ 已拒绝',
approvalWaiting: '等待输入框确认...',
pendingApprovalPlaceholder: '输入 /approve 或 /deny 来回复...',
messagePlaceholder: '输入消息... (Enter 发送, Shift+Enter 换行)',
thinkingOn: '深度思考已开启',
thinkingOff: '点击开启深度思考',
thinkingUnsupported: '当前模型不支持深度思考',
subtitle: '基于 Spring AI Alibaba 的智能 AI 助手',
// 排队相关
queuedSending: '正在发送排队消息...',
queuedWillSend: '已排队,当前步骤结束后发送',
queuedCancel: '取消',
queuedReplace: '消息已排队,按回车替换...',
queuedBadge: '{count} 条排队',
// 流状态
streamPreparingContext: '准备上下文...',
streamReadingMemory: '读取记忆...',
streamReasoning: '分析问题...',
streamDraftingAnswer: '生成回答...',
streamSummarizingObservations: '整理信息...',
streamThinking: '思考中...',
streamGenerating: '生成中...',
streamExecutingTool: '执行工具...',
streamAwaitingApproval: '等待审批',
streamFinalizing: '正在收尾...',
streamFailed: '本轮中断',
streamInterrupting: '中断中...',
streamQueued: '排队中...',
streamReconnecting: '重新连接...',
streamStopped: '已停止',
streamCompleted: '已完成',
streamPreparingContextDetail: '正在收集当前问题、历史对话和必要配置。',
streamReadingMemoryDetail: '正在查找与你当前问题最相关的长期记忆和今日记录。',
streamReasoningDetail: '正在基于现有信息进行判断、比较方案并组织回答结构。',
streamDraftingAnswerDetail: '已经完成主要分析,正在把结论写成可直接阅读的答案。',
streamSummarizingObservationsDetail: '刚刚拿到了较多工具结果,正在提炼重点,避免回答冗长或遗漏关键信息。',
streamThinkingDetail: '正在做内部推理,这一步未必会立即产生正文。',
streamGeneratingDetail: '已经进入可见输出阶段,会陆续显示结果。',
streamExecutingToolDetail: '正在读取文件、查询数据或执行必要操作,以便给出更准确的答案。',
streamAwaitingApprovalDetail: '接下来需要你的确认,确认后我会继续执行。',
streamFinalizingDetail: '正在保存结果并结束当前响应。',
streamFailedDetail: '这次处理没有完整完成,但你可以继续追问或重试。',
streamSlowShort: '这一步比平时慢一些,但系统仍在处理中。',
streamSlowSummarizing: '正在整理较长的工具结果。因为信息较多,这一步可能需要更久。',
streamSlowReasoning: '正在做较复杂的分析和取舍,不是卡住。',
streamSlowGeneral: '处理还在继续,当前主要耗时在内部分析,不代表连接中断。',
// 审批栏
approvalAllow: '允许',
approvalExecute: '执行?',
// 时间格式
timeJustNow: '刚刚',
timeMinutesAgo: '{n} 分钟前',
timeHoursAgo: '{n} 小时前',
},
nav: {
dashboard: '仪表盘',
chat: '对话',
control: '控制台',
channels: '渠道',
sessions: '会话',
core: '核心',
connect: '连接',
system: '系统',
agent: '智能体',
workspace: '工作区',
agentContext: '智能体上下文',
skills: '技能',
wiki: 'Wiki 知识库',
tools: '工具',
plugins: '插件',
datasources: '数据源',
mcpServers: 'MCP 服务',
settingsGroup: '设置',
agents: '智能体',
security: '安全',
tokenUsage: 'Token 统计',
cronJobs: '定时任务',
settings: '设置',
logout: '退出登录',
themeLight: '浅色',
themeDark: '深色',
memory: '记忆',
themeSystem: '跟随系统',
themeLabel: '外观',
languageLabel: '语言',
appearance: '外观与语言',
roleUser: '用户',
roleAdmin: '管理员',
},
settings: {
title: '设置',
kicker: '配置中心',
layoutDesc: '调整模型、系统行为与媒体能力,让整个产品在扩张时仍然保持一致。',
sections: {
model: '模型管理',
system: '系统设置',
image: '图片生成',
tts: '语音合成',
stt: '语音识别',
music: '音乐生成',
video: '视频生成',
about: '关于',
advanced: '高级',
},
modelTitle: '模型管理',
modelDesc: '管理模型预设与默认模型选择',
systemTitle: '系统设置',
systemDesc: '语言与运行行为配置',
aboutTitle: '关于 MateClaw',
aboutDesc: '版本与系统信息',
about: {
heroDesc: '一套个人 AI 操作系统,让模型真正进入上下文、记忆、执行、知识和交付的连续流程。',
foundationTitle: '技术栈',
pillars: {
contextTitle: '让上下文保持连续',
contextDesc: '模型、知识、工作区和当前任务在同一个语境里运行,而不是每次重新开始。',
executionTitle: '让执行成为产品本身',
executionDesc: '工具、渠道与异步任务是系统的真实执行面,不是外挂。',
memoryTitle: '让记忆产生复利',
memoryDesc: '记忆被整理、被召回,在下一次任务里变得更有价值。',
},
},
model: {
title: '模型管理',
desc: '配置模型提供商、凭证和模型列表',
addProvider: '新增提供商',
localProviders: '本地模型',
cloudProviders: '云端模型',
active: '当前激活',
setActive: '设为激活',
configured: '已配置',
partial: '部分配置',
unavailable: '未就绪',
builtin: '内置',
custom: '自定义',
notSet: '未设置',
noModels: '暂无模型',
baseUrl: 'Base URL',
apiKey: 'API Key',
apiKeyInput: '输入 API Key',
leaveBlankKeep: '留空则保持当前值不变',
modelCount: '{count} 个模型',
createTitle: '新增提供商',
editTitle: '提供商配置',
manageTitle: '管理模型',
addModel: '新增模型',
// Inline API Key on the provider card — primary entry point for the
// 90% case (paste a key, hit save). Modal stays for advanced fields.
inlineApiKeyTitle: 'API Key',
inlineApiKeyPlaceholder: '粘贴 API Key 后回车保存',
inlineApiKeyMasked: '已设置 ••••••••',
inlineApiKeyChange: '更换',
inlineApiKeySaving: '保存中…',
inlineApiKeySaved: 'API Key 已保存',
inlineApiKeySaveFailed: 'API Key 保存失败',
inlineApiKeyEnvHint: '或在环境变量中设置 {var} 后重启',
// Headline status pill on the card — what the user reads first.
statusNotSet: '未配置',
statusReady: '已就绪',
statusError: '连接失败',
modelCountAvailable: '可用 {count} 个模型',
activeChanged: '激活模型已更新',
providerSaved: '提供商配置已保存',
providerDeleted: '提供商已删除',
modelAdded: '模型已添加',
modelRemoved: '模型已移除',
modelAddFailed: '模型添加失败',
modelRemoveFailed: '模型删除失败',
activeChangeFailed: '激活模型切换失败',
deleteConfirm: '确认删除提供商“{name}”?',
removeConfirm: '确认移除模型 “{name}”?',
generateConfigInvalidJson: 'Generate Kwargs 不是合法 JSON',
generateConfigMustBeObject: 'Generate Kwargs 必须是 JSON 对象',
advancedSettings: '高级设置',
protocolHint: '这里选择的是提供商 API 协议,不是前端或后端里的具体类名。',
protocolOpenAI: 'OpenAI 兼容Chat Completions',
protocolAnthropic: 'AnthropicMessages API',
protocolGemini: 'Gemini 原生',
protocolDashScope: 'DashScope 原生',
advancedHint: '用于补充 temperature、max_tokens、top_p 等生成参数。',
fallbackPriorityHint: '池内尝试顺序数字越小越先0 = 不参与1 = 第一顺位2 = 第二顺位,依此类推。多个提供商共用同一数字时按 ID 字典序。',
fallbackBadge: '偏好 #{priority}',
fallbackBadgeTitle: '可用池内的尝试顺序,数字越小越先尝试',
// RFC-009 Phase 4: provider pool status badges
poolBadgeInPool: '可用',
poolBadgeInPoolTitle: '已通过启动体检,参与失败切换',
poolBadgeRemoved: '已下线',
poolBadgeRemovedTitle: '已从可用池移除({source}{message}',
poolBadgeCooldown: '冷却中',
poolBadgeCooldownTitle: '近期连续失败,{seconds} 秒后自动恢复',
poolSourceAuthError: 'API Key 失效',
poolSourceBilling: '余额/计费问题',
poolSourceModelNotFound: '模型不存在',
poolSourceInitProbe: '启动体检失败',
poolSourceManual: '手动移除',
poolReprobe: '重新检测',
poolReprobing: '检测中...',
poolReprobeOk: '检测通过,已重新加入可用池',
poolReprobeFail: '检测失败:{error}',
// RFC-073: status-pill labels driven by Liveness
livenessLive: '可用',
livenessCooldown: '冷却中',
livenessRemoved: '未连接',
livenessUnprobed: '检测中',
livenessUnprobedTooltip: '启动后正在检测可用性,稍候自动更新',
livenessUnconfigured: '需要配置',
// RFC-074 PR-2: enable / disable / drawer
enableProviderCta: '+ 启用提供商',
addCustomProvider: '+ 自定义提供商',
enable: '启用',
disable: '禁用',
alreadyEnabled: '已启用',
disableConfirm: '确定禁用提供商"{name}"?它将从下拉中消失,但配置保留,可随时再启用。',
defaultSwitchedToast: '已将默认模型切换到 {provider} / {model}',
addProviderDrawerTitle: '添加提供商',
addProviderDrawerSubtitle: '启用后会出现在模型下拉中。如果是云端提供商,启用后还需要填 API Key。',
catalogEmpty: '目录为空',
catalogSearchPlaceholder: '搜索提供商…',
catalogSearchEmpty: '没有匹配“{query}”的提供商',
enabledToast: '已启用 {name}',
emptyTitle: '还没有可用的提供商',
emptyDesc: '从内置目录中启用一个,或新建一个自定义提供商。',
searchHint: '开启后大模型将在回答时自动调用内置搜索引擎获取实时信息DashScope/Kimi/OpenAI 支持)。',
searchStrategyDefault: '默认',
oauthTitle: 'OpenAI OAuth 登录',
oauthLogin: 'OAuth 登录',
oauthConnected: '已连接',
oauthDisconnected: '未连接',
oauthDisconnect: '断开连接',
oauthHint: '通过 OAuth 登录 OpenAI 账号,使用 ChatGPT Plus/Pro 会员额度(非 API 额度)。',
oauthLoginSuccess: 'OpenAI OAuth 登录成功',
oauthRevokeSuccess: '已断开 OpenAI OAuth 连接',
// RFC-062Claude Code OAuth订阅复用
claudeCodeOauthDetect: '检测 Claude Code 登录态',
claudeCodeOauthHint: '复用本地 Claude Code Pro/Max 订阅。请先在 Claude Code 客户端中登录,再点击"检测"读取凭据。',
claudeCodeOauthInstructions: '未检测到 Claude Code 凭据。请安装 Claude Code 客户端,使用 Pro/Max 账号登录后再点击检测。',
claudeCodeOauthRevokeHint: '请在 Claude Code 客户端中退出登录。MateClaw 不会修改 Claude Code 的本地凭据。',
fields: {
providerId: '提供商 ID',
providerName: '提供商名称',
defaultBaseUrl: '默认 Base URL',
apiKeyPrefix: 'API Key 前缀',
protocol: '协议',
generateKwargs: 'Generate Kwargs (JSON)',
fallbackPriority: '池内尝试顺序',
enableSearch: '内置搜索',
searchStrategy: '搜索策略',
modelId: '模型 ID',
modelDisplayName: '显示名称',
},
actions: {
manageModels: '管理模型',
providerSettings: '配置',
},
hints: {
openai: 'OpenAI 默认使用 https://api.openai.com/v1',
azureOpenai: 'Azure OpenAI 请填写资源级 endpoint例如 https://<resource>.openai.azure.com/openai/v1',
anthropic: 'Anthropic 默认使用 https://api.anthropic.com',
ollama: 'Ollama 本地默认地址通常是 http://localhost:11434',
lmstudio: 'LM Studio 本地默认 OpenAI 兼容地址通常是 http://localhost:1234/v1',
gemini: 'Gemini 默认使用 https://generativelanguage.googleapis.com',
openrouter: 'OpenRouter 默认使用 https://openrouter.ai/api/v1支持聚合多家模型',
zhipu: '智谱 AI 默认使用 https://open.bigmodel.cn/api/paas/v4',
zhipuIntl: '智谱 AI 国际版使用 https://open.z.ai/api/paas/v4',
volcengine: '火山引擎(豆包)默认使用 https://ark.cn-beijing.volces.com/api/v3需要在火山方舟平台创建接入点',
openaiCompatible: '兼容 OpenAI 协议的服务通常使用 /v1 结尾的 Base URL',
},
discovery: {
discover: '发现模型',
discovering: '正在发现...',
testConnection: '测试连接',
testing: '测试中...',
testModel: '测试',
testingModel: '测试中...',
discoveredTitle: '发现的新模型',
discoveredCount: '发现 {total} 个模型,其中 {count} 个为新模型',
noNewModels: '未发现新模型,所有远端模型均已存在',
selectAll: '全选',
addSelected: '添加选中模型',
adding: '添加中...',
addedCount: '已添加 {count} 个模型',
connectionOk: '连接成功',
connectionFail: '连接失败',
latency: '延迟 {ms}ms',
modelOk: '模型可用',
modelFail: '模型不可用',
probeVerified: '已验证',
probeVerifiedTitle: '已验证可达',
probeFailedBanner: '⚠ {count} 个模型未通过可达性检测,未列入上方列表:',
probeUnreachable: '无法连接',
},
},
fields: {
name: '显示名称',
provider: '提供商',
modelName: '模型标识',
description: '描述',
temperature: '温度',
maxTokens: '最大 Token',
topP: 'Top P',
language: '界面语言',
streamEnabled: '流式响应',
debugMode: '调试模式',
searchEnabled: '启用搜索',
searchProvider: '搜索提供商',
searchFallbackEnabled: '失败回退',
serperApiKey: 'Serper API Key',
serperBaseUrl: 'Serper 接口地址',
tavilyApiKey: 'Tavily API Key',
tavilyBaseUrl: 'Tavily 接口地址',
duckduckgoEnabled: 'DuckDuckGo免 Key',
searxngBaseUrl: 'SearXNG 地址',
// STT 语音识别
sttEnabled: '启用语音识别',
sttProvider: '首选 STT 提供商',
sttFallbackEnabled: '提供商回退',
// 音乐生成
musicEnabled: '启用音乐生成',
musicProvider: '首选音乐提供商',
musicFallbackEnabled: '提供商回退',
// TTS 语音合成
ttsEnabled: '启用语音合成',
ttsProvider: '首选 TTS 提供商',
ttsFallbackEnabled: '提供商回退',
ttsAutoMode: '自动朗读模式',
ttsSpeed: '语速',
// 图片生成
imageEnabled: '启用图片生成',
imageProvider: '首选图片提供商',
imageFallbackEnabled: '提供商回退',
openaiStatus: 'OpenAI 状态',
// 视频生成
videoEnabled: '启用视频生成',
videoProvider: '首选视频提供商',
videoFallbackEnabled: '提供商回退',
dashscopeStatus: 'DashScope 状态',
zhipuApiKey: '智谱 API Key',
zhipuBaseUrl: '智谱 API 地址',
falApiKey: 'fal.ai API Key',
klingAccessKey: '可灵 Access Key',
klingSecretKey: '可灵 Secret Key',
runwayApiKey: 'Runway API Key',
minimaxApiKey: 'MiniMax API Key',
minimaxRegion: 'MiniMax API 区域',
},
hints: {
provider: '当前版本会把 DashScope 模型参数真实应用到 Agent 调用链路。',
language: '界面语言会持久化到后端设置中。',
streamEnabled: '用于控制前端默认流式响应偏好。',
debugMode: '预留给后续执行明细展示。',
searchEnabled: '关闭后搜索工具将不可用Agent 无法联网搜索。',
searchProvider: '选择主搜索提供商,调用搜索工具时优先使用。',
searchFallbackEnabled: '主提供商调用失败时,自动回退到另一个提供商。',
serperApiKey: '用于 Google Serper 搜索服务,从 serper.dev 获取。',
serperBaseUrl: '通常无需修改,除非使用自定义代理地址。',
tavilyApiKey: '用于 Tavily 搜索服务,从 tavily.com 获取。',
tavilyBaseUrl: '通常无需修改,除非使用自定义代理地址。',
duckduckgoEnabled: '免费搜索兜底,无需 API Key。默认开启作为零配置下的搜索降级方案。',
searxngBaseUrl: '自部署 SearXNG 实例地址。Docker 部署时自动配置。',
// STT 语音识别
sttEnabled: '开启后支持语音消息转文字。OpenAI Whisper 和 DashScope Paraformer 均复用已有 Key。',
sttProvider: '选择首选 STT 提供商auto 模式自动选择可用的提供商。',
sttFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
openaiSttInfo: '复用模型管理中的 OpenAI API Key。使用 Whisper 模型,支持多语言自动识别。',
dashscopeSttInfo: '复用模型管理中的 DashScope API Key。使用 Paraformer RealtimeWebSocket 流式),中文识别效果优秀,亚秒级延迟。',
// 音乐生成
musicEnabled: '开启后 Agent 可通过 music_generate 工具生成音乐。Google Lyria 复用 Google Key。',
musicProvider: '选择首选音乐提供商auto 模式优先使用 Google Lyria。',
musicFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
googleLyriaInfo: '复用模型管理中的 Google API Key。Lyria 3 模型,支持歌词谱曲和纯音乐生成。',
minimaxMusicInfo: '复用视频生成中的 MiniMax API Key。music-2.5+ 模型,支持歌词和纯音乐。',
// TTS 语音合成
ttsEnabled: '开启后可通过消息朗读按钮或自动模式使用语音合成。Edge TTS 免费无需 Key。',
ttsProvider: '选择首选 TTS 提供商auto 模式优先使用免费的 Edge TTS。',
ttsFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
ttsAutoMode: 'off = 仅手动朗读always = 每条 AI 回复自动播放语音。',
ttsSpeed: '语音播放速度1.0 为正常速度。',
edgeTtsInfo: '微软 Edge 内置 TTS 服务,免费使用,支持中文、英文、日文等多语言。自动根据文本语言切换语音。',
dashscopeTtsInfo: '复用模型管理中的 DashScope API Key。使用 CosyVoice 模型,支持多种中文语音。',
openaiTtsInfo: '复用模型管理中的 OpenAI API Key。支持 alloy、echo、nova 等多种语音风格。',
// 图片生成
imageEnabled: '开启后 Agent 可使用图片生成工具。需至少配置一个图片提供商的 API Key。',
imageProvider: '选择首选图片生成提供商auto 模式自动选择第一个可用的。',
imageFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
dashscopeImageStatus: '复用模型管理中配置的 DashScope API Key无需额外配置。',
openaiImageStatus: '复用模型管理中配置的 OpenAI API Key无需额外配置。',
zhipuImageApiKey: '从 bigmodel.cn 获取。CogView-3-Flash 模型免费。与视频生成共用同一 Key。',
falImageApiKey: '从 fal.ai 获取,支持 Flux 系列图片生成模型。与视频生成共用同一 Key。',
googleImagenInfo: '复用模型管理中的 Google API Key。支持 Gemini 图片生成和 Imagen 4.0 模型。',
minimaxImageInfo: '复用视频生成中的 MiniMax API Key。image-01 模型,支持多种画面比例,最多 9 张。',
// 视频生成
videoEnabled: '开启后 Agent 可使用视频生成工具。需至少配置一个视频提供商的 API Key。',
videoProvider: '选择首选视频生成提供商auto 模式自动选择第一个可用的。',
videoFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
dashscopeVideoStatus: '复用模型管理中配置的 DashScope API Key无需额外配置。',
zhipuApiKey: '从 bigmodel.cn 获取CogVideoX-Flash 模型免费。',
zhipuBaseUrl: '通常无需修改,除非使用自定义代理地址。',
falApiKey: '从 fal.ai 获取,一个 Key 可访问 Kling、Runway、Luma 等多个模型。',
klingAccessKey: '从快手开放平台获取,用于调用可灵视频生成 API。',
klingSecretKey: '与 Access Key 配对使用,用于 JWT 签名鉴权。',
runwayApiKey: '从 runwayml.com 获取。支持 gen4.5、gen4_turbo 等旗舰模型。',
minimaxApiKey: '从 minimaxi.com 获取。海螺 Hailuo 视频,有免费额度,中文场景优秀。',
minimaxRegion: '选择 API 入口域名。中国账号用 CN海外账号用 Global。',
},
searchTitle: '搜索服务',
searchDesc: '配置内置搜索工具的提供商与 API 凭证',
sttTitle: '语音识别',
sttDesc: '配置 STT 语音转文字,支持 OpenAI Whisper 和 DashScope Paraformer',
sttProviderOptions: { auto: '自动选择' },
sttProviderTags: { reuseLlmKey: '复用 LLM API Key' },
musicTitle: '音乐生成',
musicDesc: '配置 AI 音乐生成,支持 Google Lyria 和 MiniMax Music',
musicProviderOptions: { auto: '自动选择' },
musicProviderTags: { reuseLlmKey: '复用 LLM API Key', sharedWithVideo: '与视频共用' },
ttsTitle: '语音合成',
ttsDesc: '配置 TTS 语音合成,支持 Edge TTS免费、OpenAI TTS、DashScope CosyVoice',
ttsProviderOptions: {
auto: '自动选择',
},
ttsProviderTags: {
free: '免费',
noKeyNeeded: '无需 API Key',
reuseLlmKey: '复用 LLM API Key',
},
ttsAutoModeOptions: {
off: '关闭(仅手动朗读)',
always: '始终自动朗读',
},
imageTitle: '图片生成',
imageDesc: '配置 AI 图片生成能力,支持 DashScope、OpenAI DALL-E、fal.ai Flux、智谱 CogView',
imageProviderOptions: {
auto: '自动选择',
},
imageProviderTags: {
reuseLlmKey: '复用 LLM API Key',
freeQuota: '有免费额度',
configuredInModels: '前往模型设置查看',
sharedWithVideo: '与视频共用',
},
videoTitle: '视频生成',
videoDesc: '配置 AI 视频生成能力,支持文字生成视频和图片生成视频',
videoProviderOptions: {
auto: '自动选择',
},
videoProviderTags: {
reuseLlmKey: '复用 LLM API Key',
freeQuota: '有免费额度',
configuredInModels: '前往模型设置查看',
},
minimaxRegionGlobal: '海外api.minimax.io',
minimaxRegionCn: '中国大陆api.minimaxi.com',
actions: {
setDefault: '设为默认',
saveSystem: '保存系统设置',
},
messages: {
loadFailed: '加载设置失败',
saveSuccess: '设置已保存',
saveFailed: '保存设置失败',
deleteConfirm: '确认删除该模型预设?',
modelSaved: '模型预设已保存',
modelDeleted: '模型预设已删除',
defaultChanged: '默认模型已更新',
},
languageOptions: {
zhCN: '简体中文',
enUS: 'English',
},
},
agentContext: {
kicker: '上下文工作面',
title: '智能体上下文',
desc: '管理智能体的提示文件和记忆',
selectAgent: '选择智能体',
noAgent: '请先选择一个智能体',
files: '文件列表',
coreFiles: '核心文件',
coreFilesDesc: '启用的文件将按顺序拼接为 Agent 系统提示词',
newFile: '新建文件',
noFiles: '暂无文件',
selectFile: '选择左侧文件查看内容',
fileContent: '在此编辑 Markdown 内容...',
preview: '预览',
editOnly: '编辑',
splitView: '分栏',
modified: '已修改',
saveSuccess: '保存成功',
saveFailed: '保存失败',
deleteConfirm: '确认删除文件 "{name}" 吗?',
deleteSuccess: '文件已删除',
deleteFailed: '删除失败',
promptUpdated: '系统提示文件配置已更新',
promptUpdateFailed: '更新系统提示文件配置失败',
newFileTitle: '新建文件',
newFilePlaceholder: '输入文件名(如 AGENTS.md',
newFileHint: '文件名必须以 .md 结尾',
fileExists: '文件名已存在',
invalidFilename: '请输入有效的 .md 文件名',
loadFailed: '加载文件列表失败',
loadFileFailed: '加载文件内容失败',
},
agents: {
title: '智能体管理',
desc: '创建、编辑和管理你的 AI 智能体',
newAgent: '新建智能体',
templates: {
title: '选择模板',
desc: '选择预配置的 Agent 模板快速开始,或从空白创建。',
skip: '从空白开始',
applied: '已从模板创建 Agent',
},
search: '搜索智能体...',
tabs: {
all: '全部',
react: 'ReAct',
planExecute: 'Plan-Execute',
enabled: '已启用',
disabled: '已停用',
basic: '基本信息',
skills: '技能',
tools: '工具',
providers: '偏好提供商',
context: '上下文',
},
columns: {
name: '名称',
description: '描述',
agentType: '类型',
modelName: '模型',
tags: '标签',
enabled: '状态',
updateTime: '更新时间',
actions: '操作',
},
status: {
enabled: '已启用',
disabled: '已停用',
},
emptyTitle: '暂无智能体',
emptyDesc: '创建你的第一个智能体开始使用',
modal: {
newTitle: '新建智能体',
editTitle: '编辑智能体',
},
fields: {
name: '名称',
icon: '图标',
type: '类型',
description: '描述',
systemPrompt: '系统提示词',
maxIterations: '最大迭代次数',
defaultThinkingLevel: '默认思考深度',
tags: '标签',
enabled: '启用',
},
thinkingLevels: {
auto: '跟随模型',
off: '关闭',
low: '低',
medium: '标准',
high: '深度',
max: '极限',
},
types: {
react: 'ReAct工具调用',
planExecute: 'Plan-and-Execute',
},
actions: {
edit: '编辑',
delete: '删除',
create: '创建',
update: '保存',
},
placeholders: {
name: '智能体名称',
icon: 'Emoji 或 URL',
description: '简短描述',
systemPrompt: '你是一个有帮助的 AI 助手...',
tags: 'tag1,tag2',
},
messages: {
noDescription: '暂无描述',
deleteConfirm: '确认删除该智能体吗?删除后不可恢复。',
loadFailed: '加载智能体列表失败',
saveFailed: '保存智能体失败',
saveSuccess: '智能体已保存',
deleteFailed: '删除智能体失败',
deleteSuccess: '智能体已删除',
toggleFailed: '切换状态失败',
toggleSuccess: '状态已更新',
},
binding: {
skillsHint: '选择此智能体可使用的技能。留空则使用所有已启用的技能。',
toolsHint: '选择此智能体可使用的工具。留空则使用所有已启用的工具。',
providersHint: '此智能体优先使用的提供商顺序(数字越小越先尝试)。留空则按全局可用池顺序回退。提供商进入冷却或被移出池时仍会被自动跳过。',
providersAddHint: '点击下方提供商加入偏好列表:',
noSkills: '暂无可用技能',
noTools: '暂无可用工具',
noProviderPreferences: '尚未配置偏好顺序,将按全局回退链顺序使用。',
contextHint: '管理此智能体的上下文文件(如 AGENT.md定义智能体的行为、知识和指令。',
goToContext: '前往编辑上下文',
},
},
security: {
title: '安全管理',
kicker: '治理中心',
layoutDesc: '边界、审批、审计和工作区治理必须在这里说同一种语言,否则系统不值得被信任。',
sections: {
toolGuard: '工具防护',
fileGuard: '文件防护',
auditLogs: '审计日志',
members: '成员管理',
workspaces: '工作区',
activity: '操作日志',
},
activity: {
title: '操作日志',
desc: '查看工作区内所有资源的创建、修改、删除操作记录。',
allActions: '全部操作',
allResources: '全部资源',
loading: '加载中...',
noEvents: '暂无操作记录',
columns: {
time: '时间',
user: '用户',
action: '操作',
resource: '资源类型',
name: '名称',
ip: 'IP',
},
},
members: {
title: '工作区成员',
desc: '管理当前工作区的成员和角色。',
addMember: '添加成员',
noMembers: '暂无成员。',
loading: '加载中...',
columns: {
user: '用户',
role: '角色',
joined: '加入时间',
actions: '操作',
},
roles: {
owner: '所有者',
admin: '管理员',
member: '成员',
viewer: '查看者',
},
addDialog: {
title: '添加成员',
userId: '用户 ID',
userIdPlaceholder: '输入用户 ID',
user: '选择用户',
userPlaceholder: '搜索用户名…',
username: '用户名',
usernamePlaceholder: '输入用户名',
usernameHint: '如果用户不存在,将自动创建账号',
password: '密码',
passwordPlaceholder: '新用户需填写密码',
passwordHint: '已有用户无需填写,新用户必填',
nickname: '昵称',
nicknamePlaceholder: '可选,用户显示名称',
role: '角色',
},
actions: {
remove: '移除',
cancel: '取消',
confirm: '确认',
},
messages: {
addSuccess: '成员添加成功',
addFailed: '添加成员失败',
updateSuccess: '角色更新成功',
updateFailed: '更新角色失败',
removeConfirm: '确定要移除该成员吗?',
removeSuccess: '成员已移除',
removeFailed: '移除成员失败',
},
},
workspaces: {
title: '工作区管理',
desc: '管理组织的工作区。',
manage: '管理工作区',
newWorkspace: '新建工作区',
loading: '加载中...',
noWorkspaces: '暂无工作区。',
current: '当前',
columns: {
name: '名称',
slug: '标识',
description: '描述',
basePath: '活动目录',
created: '创建时间',
actions: '操作',
},
createDialog: {
title: '新建工作区',
name: '名称',
namePlaceholder: '例如:工程团队',
slug: '标识',
slugPlaceholder: '例如engineering',
slugHint: '标识创建后不可修改。',
description: '描述',
descriptionPlaceholder: '可选描述',
basePath: '活动目录',
basePathPlaceholder: '例如:/home/user/project 或 D:\\codes\\MyProject',
basePathHint: '限制 Agent 文件操作的根目录,留空不限制。',
},
editDialog: {
title: '编辑工作区',
},
deleteDialog: {
title: '删除工作区',
confirm: '确定要删除 {name} 吗?这将移除该工作区下的所有资源。',
},
actions: {
edit: '编辑',
delete: '删除',
cancel: '取消',
create: '创建',
save: '保存',
},
messages: {
saveSuccess: '工作区保存成功',
saveFailed: '保存工作区失败',
deleteSuccess: '工作区已删除',
deleteFailed: '删除工作区失败',
},
},
toolGuard: {
title: '工具防护',
desc: '管理工具调用安全规则和全局防护配置',
enabled: '启用工具防护',
enabledHint: '开启后将对工具调用进行安全检查和规则匹配',
guardScope: '防护范围',
scopeAll: '所有工具',
scopeSelected: '指定工具',
guardedTools: '受保护工具',
guardedToolsPlaceholder: '输入工具名后回车',
deniedTools: '禁止调用工具',
deniedToolsPlaceholder: '输入工具名后回车',
rules: '安全规则',
rulesDesc: '管理内置和自定义安全规则',
addRule: '新增规则',
editRule: '编辑规则',
columns: {
name: '规则名称',
severity: '严重度',
category: '分类',
pattern: '匹配模式',
decision: '决策',
enabled: '状态',
builtin: '类型',
actions: '操作',
},
builtinBadge: '内置',
customBadge: '自定义',
deleteConfirm: '确认删除规则 "{name}" 吗?',
fields: {
ruleId: '规则 ID',
name: '名称',
description: '描述',
toolName: '目标工具',
pattern: '正则模式',
excludePattern: '排除模式',
category: '分类',
severity: '严重度',
decision: '决策',
remediation: '修复建议',
priority: '优先级',
},
},
fileGuard: {
title: '文件防护',
desc: '管理敏感文件路径保护',
enabled: '启用文件防护',
enabledHint: '开启后将保护敏感文件路径免受未授权访问',
sensitivePaths: '敏感路径',
sensitivePathsDesc: '配置需要保护的文件路径(支持通配符)',
addPath: '添加路径',
pathPlaceholder: '输入路径后回车 (例: ~/.ssh/)',
},
audit: {
title: '审计日志',
desc: '查看工具安全检查记录',
config: {
title: '审计配置',
enabled: '启用审计日志',
enabledHint: '关闭后将不再记录工具调用审计日志',
minSeverity: '最低记录等级',
minSeverityHint: '仅记录达到此等级及以上的审计事件',
retentionDays: '保留天数',
retentionDaysHint: '超过此天数的审计日志将被自动清理0=永不清理)',
},
stats: {
total: '总检查',
blocked: '已阻止',
needsApproval: '需审批',
allowed: '已放行',
},
filters: {
toolName: '工具名称',
decision: '决策',
severity: '严重度',
conversationId: '会话 ID',
},
columns: {
time: '时间',
tool: '工具',
decision: '决策',
severity: '严重度',
conversationId: '会话',
},
noLogs: '暂无审计记录',
expandFindings: '展开详情',
},
severity: {
CRITICAL: '严重',
HIGH: '高',
MEDIUM: '中',
LOW: '低',
INFO: '信息',
},
decision: {
ALLOW: '放行',
NEEDS_APPROVAL: '需审批',
BLOCK: '阻止',
},
messages: {
loadFailed: '加载安全配置失败',
saveSuccess: '安全配置已保存',
saveFailed: '保存安全配置失败',
ruleCreated: '规则已创建',
ruleUpdated: '规则已更新',
ruleDeleted: '规则已删除',
ruleToggled: '规则状态已更新',
},
approval: {
title: '需要审批',
severity: '风险等级',
summary: '摘要',
findings: '发现的问题',
remediation: '修复建议',
approved: '已批准',
denied: '已拒绝',
hint: '输入 /approve 批准执行,或输入 /deny 拒绝',
},
},
tokenUsage: {
kicker: '运行成本',
title: 'Token 统计',
desc: '查看 Token 使用量和模型调用统计',
refresh: '刷新',
startDate: '开始日期',
endDate: '结束日期',
promptTokens: 'Prompt Tokens',
completionTokens: 'Completion Tokens',
assistantMessages: 'Assistant Messages',
byModel: '按模型统计',
byDate: '按日期统计',
model: '模型',
provider: '提供商',
date: '日期',
messageCount: '消息数',
loadFailed: '加载 Token 统计失败',
noData: '暂无 Token 使用数据',
},
mcp: {
kicker: '能力桥接',
title: 'MCP 服务管理',
desc: '管理 MCP (Model Context Protocol) 服务器连接',
addServer: '添加服务',
refreshAll: '全量刷新',
columns: {
name: '名称',
transport: '协议',
enabled: '状态',
lastStatus: '连接状态',
lastConnectedTime: '最后连接',
toolCount: '工具数',
description: '描述',
actions: '操作',
},
status: {
connected: '已连接',
disconnected: '未连接',
error: '连接失败',
},
transport: {
stdio: 'Stdio',
sse: 'SSE',
streamable_http: 'HTTP',
},
modal: {
newTitle: '添加 MCP 服务',
editTitle: '编辑 MCP 服务',
},
fields: {
name: '名称',
description: '描述',
transport: '传输协议',
url: 'URL',
headers: 'HTTP Headers (JSON)',
command: '命令',
args: '参数 (JSON 数组)',
env: '环境变量 (JSON)',
cwd: '工作目录',
connectTimeout: '连接超时 (秒)',
readTimeout: '读取超时 (秒)',
enabled: '启用',
},
placeholders: {
name: '服务名称',
description: '简短描述',
url: 'http://localhost:8080/sse',
headers: '',
command: 'npx',
args: '',
env: '',
cwd: '/path/to/dir',
},
actions: {
test: '测试连接',
testing: '测试中...',
},
testResult: {
success: '连接成功',
failed: '连接失败',
tools: '发现 {count} 个工具',
latency: '延迟 {ms}ms',
},
messages: {
loadFailed: '加载 MCP 服务列表失败',
createSuccess: 'MCP 服务已创建',
updateSuccess: 'MCP 服务已更新',
deleteSuccess: 'MCP 服务已删除',
deleteConfirm: '确认删除 MCP 服务 "{name}" 吗?',
toggleSuccess: '状态已更新',
refreshSuccess: '全量刷新完成',
saveFailed: '保存失败',
empty: '暂无 MCP 服务',
emptyDesc: '添加一个 MCP 服务来扩展 Agent 的能力',
},
},
sessions: {
title: '会话管理',
desc: '查看和管理所有会话',
search: '搜索会话...',
columns: {
session: '会话',
source: '来源',
agent: 'Agent',
messages: '消息',
status: '状态',
lastActive: '最后活跃',
actions: '操作',
},
status: {
active: '活跃',
closed: '已关闭',
},
empty: '暂无会话',
loadFailed: '加载会话列表失败',
deleteConfirm: '确定要删除这个会话吗?',
deleteTitle: '确认删除',
deleteFailed: '删除会话失败',
time: {
justNow: '刚刚',
minutesAgo: '{n} 分钟前',
hoursAgo: '{n} 小时前',
},
},
tools: {
title: '工具管理',
desc: '管理 Agent 可用的工具',
registerButton: '注册工具',
columns: {
tool: '工具',
beanName: 'Bean 名称',
type: '类型',
status: '状态',
actions: '操作',
},
empty: '暂无已注册工具',
modal: {
editTitle: '编辑工具',
newTitle: '注册工具',
},
fields: {
name: '名称',
beanName: 'Bean 名称',
type: '类型',
description: '描述',
},
placeholders: {
name: '工具名称',
beanName: 'Spring Bean 名称',
description: '工具描述',
},
types: {
builtin: '内置',
mcp: 'MCP',
custom: '自定义',
},
messages: {
saveFailed: '保存工具失败',
deleteConfirm: '确定要删除这个工具吗?',
deleteTitle: '确认删除',
deleteFailed: '删除工具失败',
toggleFailed: '切换工具状态失败',
},
},
plugins: {
title: '插件',
desc: '管理从 JAR 文件加载的外部插件',
refresh: '刷新',
type: '类型',
author: '作者',
status: '状态',
tools: '工具',
channels: '渠道',
provider: '提供商',
memoryProvider: '记忆',
noDescription: '暂无描述',
emptyTitle: '暂无已安装插件',
emptyHint: '将插件 JAR 文件放入 ~/.mateclaw/plugins/ 目录后重启服务',
loading: '加载插件中...',
loadFailed: '加载插件失败',
enabled: '{name} 已启用',
disabled: '{name} 已禁用',
toggleFailed: '切换插件状态失败',
},
datasources: {
kicker: '数据接入',
title: '数据源管理',
desc: '管理外部数据库连接,用于自然语言查数',
addButton: '添加数据源',
empty: '暂无数据源,点击添加开始配置',
columns: {
name: '名称',
type: '类型',
connection: '连接',
status: '状态',
actions: '操作',
},
sections: {
basic: '基本信息',
connection: '连接信息',
auth: '认证',
advanced: '高级配置',
},
modal: {
editTitle: '编辑数据源',
newTitle: '添加数据源',
},
fields: {
name: '名称',
dbType: '数据库类型',
host: '主机',
port: '端口',
databaseName: '数据库名',
schemaName: 'Schema',
username: '用户名',
password: '密码',
description: '描述',
extraParams: 'JDBC 参数',
},
placeholders: {
name: '例如:业务数据库',
host: '127.0.0.1',
port: '3306',
databaseName: '数据库名',
schemaName: 'public默认',
username: '数据库用户名',
password: '数据库密码',
description: '数据源用途说明(可选)',
extraParams: 'useSSL=false&serverTimezone=UTC',
},
hints: {
extraParams: 'JDBC URL 附加参数,多个参数用 & 分隔',
},
testButton: '测试连接',
messages: {
saveFailed: '保存数据源失败',
deleteConfirm: '确定要删除这个数据源吗?删除后 Agent 将无法访问此数据源。',
deleteTitle: '确认删除',
deleteFailed: '删除数据源失败',
toggleFailed: '切换数据源状态失败',
testSuccess: '连接成功',
testFailed: '连接失败,请检查配置',
},
},
doctor: {
title: '系统诊断',
checking: '检查中...',
allGood: '所有系统正常',
hasWarnings: '{count} 个警告',
hasErrors: '{count} 个问题',
refresh: '重新检查',
lastChecked: '{time} 前检查',
diagnose: '诊断问题',
},
wiki: {
kicker: '知识引擎',
desc: 'AI 驱动的结构化知识库,自动消化原始材料为 Wiki 页面',
createKB: '新建知识库',
knowledgeBases: '知识库',
noKB: '暂无知识库',
selectKB: '请选择一个知识库',
selectPage: '从左侧选择一个页面查看',
pageKicker: '知识页面',
confirmDelete: '确认删除页面「{title}」?此操作不可撤销。',
confirmBatchDelete: '确认删除 {count} 个页面?此操作不可撤销。',
batchSelect: '批量选择',
selectAll: '全选',
kbName: '名称',
kbNamePlaceholder: '输入知识库名称',
kbDescription: '描述',
kbDescPlaceholder: '简要描述知识库用途',
rawMaterials: '原始材料',
pages: 'Wiki 页面',
config: '处理配置',
searchPages: '搜索页面...',
dropFiles: '拖拽文件到此处或点击上传',
dropToUpload: '松开即开始上传',
uploading: '上传中…',
uploadFailed: '上传失败:{name}',
addText: '添加文本',
noRawMaterials: '暂无原始材料',
reprocess: '重新处理',
resume: '继续生成',
download: '下载原始文件',
downloadFailed: '下载失败',
processAll: '处理所有待处理材料',
materialTitle: '标题',
materialContent: '内容',
pasteContent: '粘贴或输入文本内容...',
backlinks: '反向链接',
generatedByAi: 'AI 生成',
editedManually: '人工编辑',
configTitle: '知识库处理规则',
configDesc: '配置 AI 消化原始材料时遵循的规则',
configPlaceholder: '在此编辑 Wiki 处理规则...',
pageCount: '{count} 页',
sourceCount: '{count} 份材料',
dirPlaceholder: '输入本地目录路径,如 /Users/me/docs',
scan: '扫描',
scanning: '扫描中...',
scanResult: '已扫描 {scanned} 个文件,新增 {added} 个,跳过 {skipped} 个',
saving: '保存中...',
status: {
active: '启用',
uploading: '上传中',
processing: '处理中',
error: '错误',
pending: '待处理',
completed: '已完成',
partial: '部分完成',
failed: '失败',
},
progress: {
preparing: '准备中…',
uploading: '上传 {pct}%',
},
jobStage: {
queued: '排队中',
routing: '选择模型',
phase_a_running: '分析中',
phase_a_done: '分析完成',
phase_b_running: '生成页面',
enriching: '补充链接',
embedding: '向量化',
completed: '已完成',
failed: '处理失败',
cancelled: '已取消',
},
jobInfo: {
currentModel: '当前模型',
fallbackActive: '已启用备用模型',
elapsedTime: '已用时',
pagesProgress: '已生成 {done}/{total} 页',
},
page: {
type: {
entity: '实体',
concept: '概念',
source: '来源',
synthesis: '综合',
},
enriched: '已链接',
notEnriched: '未链接',
enrich: '添加交叉链接',
repair: '修复页面',
citations: '来源 {count} 个 chunk',
noCitations: '未找到来源引用',
citationUnknownSource: '未知来源',
citationChunkN: '第 {n} 段',
citationChunkUnknown: '段落未知',
citationOffset: '偏移 {start}{end}',
},
relation: {
shared_chunk: '共享片段',
shared_raw: '共享来源',
direct_link: '直接引用',
semantic_near: '语义相近',
relatedPages: '相关页面',
explainRelation: '查看关联原因',
},
configPanel: {
embeddingModel: '向量化模型',
embeddingModelHint: '语义搜索模型,留空使用系统默认',
ingestMode: '入库模式',
ingestModeEager: '立即生成页面',
ingestModeLazy: '先入索引',
ingestModeEagerHint: '上传后立即调用 LLM 生成完整 Wiki 页面。',
ingestModeLazyHint: '上传仅抽取、切片、向量化,跳过页面生成;上传即可搜索,页面按需编译。',
modelStrategy: '模型策略',
globalDefault: '跟随全局默认',
selectModel: '选择可用模型…',
otherProvider: '其他',
searchModel: '搜索模型…',
noModelMatch: '未找到匹配模型',
addFallback: '+ 添加备选',
stepModel: {
route: '分析/路由',
create_page: '页面生成',
merge_page: '页面合并',
enrich: '链接标注',
summary: '摘要更新',
},
fallbackModels: '备选模型',
searchPreview: '检索测试',
searchPreviewPlaceholder: '输入用户消息,预览 Agent 检索结果…',
searchPreviewRun: '测试',
},
stats: {
enrichedRatio: '{enriched}/{total} 已链接',
failedJobs: '{count} 个失败',
},
noPages: '暂无页面',
noResults: '未找到匹配页面',
loadMore: '加载更多 {n} 条',
filteredByRaw: '按原始材料过滤',
clearFilter: '清除过滤',
systemPageBadge: '系统页',
systemPageHint: 'overview / log 是知识库自带的系统页,无法删除',
lockedPageBadge: '已锁定',
lockedPageHint: '该页被手动锁定AI 工具与批量操作不会修改或删除',
archivedSection: '已归档',
noArchived: '没有已归档的页面',
unarchive: '恢复',
pageTypes: {
concept: '概念',
person: '人物',
place: '地点',
event: '事件',
technology: '技术',
organization: '组织',
product: '产品',
term: '术语',
process: '流程',
other: '其他',
},
graph: {
tab: '知识图谱',
nodes: '节点',
edges: '连接',
orphans: '孤立节点',
showOrphans: '显示孤立节点',
allTypes: '全部类型',
resetView: '重置视图',
fullscreen: '全屏',
exitFullscreen: '退出全屏',
linksTo: '链接到',
openPage: '打开页面',
empty: '暂无图谱数据,请先处理原始材料',
},
},
cronJobs: {
kicker: '自动执行',
title: '定时任务',
desc: '定时触发 Agent 执行消息或目标任务',
createJob: '新建任务',
editJob: '编辑任务',
noJobs: '暂无定时任务',
createFirst: '新建第一个定时任务',
columns: {
name: '任务名称',
agent: '关联 Agent',
taskType: '类型',
cron: 'Cron 表达式',
timezone: '时区',
nextRun: '下次执行',
lastRun: '上次执行',
enabled: '启用',
actions: '操作',
// RFC-063r §2.14: 列表页"最近投递"列
lastDelivery: '最近投递',
// RFC-063r post-deploy: 关联渠道列
channel: '关联渠道',
targetId: '投递目标',
},
// RFC-063r §2.14: delivery_status 状态机展示
lastDelivery: {
none: '无投递',
pending: '投递中',
delivered: '已送达',
not_delivered: '投递失败',
},
taskTypes: { text: '文字消息', agent: 'Agent 目标' },
cronTypes: { hourly: '每小时', daily: '每天', weekly: '每周', custom: '自定义' },
days: { mon: '周一', tue: '周二', wed: '周三', thu: '周四', fri: '周五', sat: '周六', sun: '周日' },
fields: {
name: '任务名称',
namePlaceholder: '输入任务名称',
agent: '关联 Agent',
agentPlaceholder: '选择执行的 Agent',
taskType: '任务类型',
triggerMessage: '触发消息',
triggerMessagePlaceholder: '输入发送给 Agent 的消息',
requestBody: '执行目标',
requestBodyPlaceholder: '直接描述 Agent 要完成的目标',
cronFrequency: '执行频率',
cronTime: '执行时间',
cronDays: '执行星期',
cronExpression: '自定义表达式',
cronExpressionPlaceholder: '分 时 日 月 周,如: 0 9 * * 1-5',
timezone: '时区',
enabled: '立即启用',
},
actions: { runNow: '立即执行', edit: '编辑', delete: '删除' },
messages: {
createSuccess: '定时任务创建成功',
updateSuccess: '定时任务更新成功',
deleteSuccess: '定时任务删除成功',
deleteConfirm: '确定删除任务「{name}」?删除后不可恢复。',
runTriggered: '任务已触发请到会话列表查看「cron:{id}」对应对话',
enableSuccess: '任务已启用',
disableSuccess: '任务已停用',
invalidCron: 'Cron 表达式格式不正确,请使用 5 字段格式(分 时 日 月 周)',
agentRequired: '请选择关联 Agent',
textRequired: '触发消息不能为空',
goalRequired: '执行目标不能为空',
},
},
login: {
kicker: 'AI Operating System',
subtitle: '你的智能 AI 助手',
heroTitle: '让 AI 不止会回答,而是真正进入持续工作的系统。',
heroDesc: 'MateClaw 的重点不是把更多能力堆进聊天框,而是把上下文、知识、执行和记忆收拢成一个可靠的工作面。',
pointContext: '上下文保持连续',
pointKnowledge: '知识被组织起来',
pointExecution: '能力真正能执行',
cardTitle: '登录并进入工作面',
cardDesc: '从这里进入你的 AI 工作系统。模型、知识、工作区和运行状态会在同一个界面里协同。 ',
fields: {
username: '用户名',
password: '密码',
},
placeholders: {
username: '请输入用户名',
password: '请输入密码',
},
signIn: '登录',
hint: '默认账号: <code>admin</code> / <code>admin123</code>',
failed: '登录失败,请检查账号密码',
},
channels: {
title: '渠道管理',
desc: '将 Agent 连接到各消息平台和 API',
newChannel: '新建渠道',
addChannel: '添加渠道',
status: {
active: '已启用',
inactive: '未启用',
},
configure: '配置',
enable: '启用',
disable: '停用',
modal: {
editTitle: '编辑渠道',
newTitle: '新建渠道',
},
fields: {
name: '名称',
type: '类型',
description: '描述',
bindAgent: '绑定 Agent',
},
placeholders: {
name: '渠道名称',
description: '渠道用途说明',
selectAgent: '选择 Agent...',
},
types: {
web: 'Web API',
dingtalk: '钉钉',
feishu: '飞书',
telegram: 'Telegram',
discord: 'Discord',
wecom: '企业微信',
weixin: '微信',
qq: 'QQ',
slack: 'Slack',
webchat: '网页嵌入',
webhook: 'Webhook',
},
tabs: {
form: '表单配置',
json: '原始 JSON',
},
webhook: {
url: 'Webhook URL',
copy: '复制',
copied: '已复制',
copyFailed: '复制失败,请手动复制',
localhostWarn: '当前为本地开发环境IM 平台无法回调 localhost。请使用 ngrok、frp 等内网穿透工具将本地服务暴露到公网后,将公网地址替换上方 URL 中的 host 部分。',
},
weixin: {
authHint: '点击下方按钮获取微信登录二维码,使用微信扫一扫确认后 Bot Token 将自动填入。需要 iLink Bot 内测资格。',
qrcodeButton: '获取登录二维码',
rescanButton: '重新扫码(将替换当前账号)',
qrcodeLoading: '正在获取...',
qrcodeFailed: '获取二维码失败,请检查网络连接',
qrcodeExpired: '二维码已过期,请重新获取',
scanHint: '请使用微信扫描二维码登录',
polling: '等待扫码...',
scanned: '已扫码,请在手机上确认',
confirmed: '登录成功',
expired: '二维码已过期',
loginSuccess: '微信扫码登录成功Token 已自动填入',
replaceWarning: '重新扫码将替换当前绑定的微信账号。如需绑定额外的微信账号,请点击下方按钮添加新渠道。',
addNewAccount: '绑定新微信账号(添加新渠道)',
newAccountName: '微信',
},
wecom: {
authHint: '点击按钮后会弹出企业微信二维码窗口,使用企业微信扫码确认后 Bot ID 与 Secret 将自动填入。',
authButton: '扫码授权企业微信机器人',
authLoading: '正在加载...',
authSuccess: '企业微信机器人授权成功',
sdkFailed: '企业微信 SDK 加载失败,请检查网络连接',
windowBlocked: '弹窗被浏览器拦截,请允许弹窗后重试',
authCancelled: '授权已取消',
authFailed: '授权失败',
},
webHint: 'Web 渠道使用内置 SSE 通信,无需额外配置。',
webchatHint: 'WebChat 用于把 MateClaw 聊天挂件嵌入外部网站。请配置 API Key、标题和主题色然后在网站中引入 WebChat SDK。',
webchatApiKeyGenerated: '保存后平台会自动生成 API Key。创建完成后返回此页面即可复制。',
webchatApiKeyReadOnly: '该 API Key 由平台自动生成并托管,你只能复制,不能手动修改。',
webhookHint: 'Webhook 渠道配置请在下方「原始 JSON」标签页中编辑。',
jsonHint: '直接编辑渠道的完整 JSON 配置。切换到「表单配置」标签页时会自动同步。',
advanced: '高级配置',
accessControl: {
title: '访问控制',
dmPolicy: '私聊策略',
dmPolicyTooltip: '控制是否允许用户与机器人私聊',
groupPolicy: '群聊策略',
groupPolicyTooltip: '控制是否在群聊中响应消息',
policyOpen: '开放',
policyClosed: '关闭',
allowFrom: '允许的用户',
allowFromTooltip: '逗号分隔的用户 ID 白名单,留空则允许所有人',
allowFromPlaceholder: '逗号分隔用户 ID留空 = 全部允许)',
denyMessage: '拒绝提示',
denyMessagePlaceholder: '抱歉,您没有使用权限',
requireMention: "需要 {'@'}提及",
requireMentionTooltip: "群聊中是否需要 {'@'}机器人才响应",
},
messageFilter: {
title: '消息过滤',
filterThinking: '过滤思维链',
filterThinkingTooltip: '发送给用户前过滤 <think> 标签内容',
filterToolMessages: '过滤工具消息',
filterToolMessagesTooltip: '过滤 tool_call / tool_result 和 ReAct Action/Observation 行',
messageFormat: '消息格式',
formatAuto: '自动',
formatMarkdown: 'Markdown',
formatText: '纯文本',
formatHtml: 'HTML',
},
feishuPermissions: {
title: '所需飞书权限',
goToPermissions: '前往权限管理 →',
},
connection: {
connected: '已连接',
reconnecting: '重连中',
error: '断开',
disconnected: '未连接',
outOfService: '未启动',
retryCount: '重试 #{n}',
errorLabel: '错误',
},
messages: {
loadFailed: '加载渠道列表失败',
saveFailed: '保存渠道失败',
saveSuccess: '渠道已保存',
deleteFailed: '删除渠道失败',
deleteConfirm: '确定要删除这个渠道吗?',
deleteTitle: '确认删除',
toggleFailed: '切换渠道状态失败',
invalidJson: '配置 JSON 格式不正确',
},
guide: {
dingtalk: {
step1: '在 <a href="https://open-dev.dingtalk.com/" target="_blank" rel="noopener">钉钉开放平台</a> 创建机器人,填入 <b>AppKey</b> 和 <b>AppSecret</b>',
step2: 'Stream 模式推荐消息接收模式选「Stream 模式」,无需公网 IP 即可使用',
step3: 'Webhook 模式消息接收模式选「HTTP 模式」,将 Webhook URL 填入回调地址',
},
feishu: {
step1: '前往 <a href="https://open.feishu.cn/" target="_blank" rel="noopener">飞书开放平台</a> 创建企业自建应用',
step2: '将应用的 <b>App ID</b> 和 <b>App Secret</b> 填入下方配置',
webhookStep: '在飞书后台「事件订阅」中将请求地址设置为上方 Webhook URL订阅 <code>im.message.receive_v1</code> 事件',
websocketStep: '在飞书后台「事件订阅」中选择「长连接」订阅方式,订阅 <code>im.message.receive_v1</code> 事件(无需公网 IP',
permissionStep: '如需昵称显示,请在「权限管理」中申请 <code>contact:user.base:readonly</code> 权限',
},
telegram: {
step1: '在 Telegram 中搜索 <a href="https://t.me/BotFather" target="_blank" rel="noopener">{at}BotFather</a>,发送 <code>/newbot</code> 创建 Bot',
step2: '将 BotFather 返回的 <b>Bot Token</b> 填入下方配置',
step3: '<b>Long-Polling 模式</b>(推荐):启动后自动通过 <code>getUpdates</code> 轮询接收消息,<b>无需公网 IP</b>',
step4: '<b>Webhook 模式</b>:需要公网可访问的回调地址,切换接入模式后填入 Webhook URL',
},
discord: {
step1: '前往 <a href="https://discord.com/developers/applications" target="_blank" rel="noopener">Discord Developer Portal</a> 创建 Application',
step2: '在 Bot 页面创建 Bot 并复制 <b>Bot Token</b> 填入下方配置',
step3: '在 Bot 页面开启 <b>MESSAGE CONTENT Intent</b>Privileged Gateway Intents 区域)',
step4: '在 OAuth2 → URL Generator 中勾选 <b>bot</b> scope 和 <b>Send Messages / Read Message History</b> 权限,生成邀请链接将 Bot 添加到目标服务器',
step5: '启动后通过 <b>Gateway WebSocket</b> 自动接收消息,<b>无需公网 IP 和回调 URL</b>',
},
wecom: {
step1: '前往 <a href="https://work.weixin.qq.com/wework_admin/frame" target="_blank" rel="noopener">企业微信管理后台</a>,进入「应用管理 → 智能机器人」创建一个新的智能机器人',
step2: '在机器人配置中选择「<b>API 模式 → 配置长连接</b>」',
step3: '记录机器人的 <b>Bot ID</b> 和 <b>Secret</b>,填入下方配置',
step4: '启动渠道后即可在企业微信中扫码添加机器人对话,<b>无需公网 IP 和回调 URL</b>',
},
weixin: {
step1: '确保已获得微信 <b>iLink Bot</b> 内测资格(目前为受邀内测阶段)',
step2: '点击下方「获取登录二维码」按钮,用微信扫码登录',
step3: '扫码成功后系统自动获取 <b>bot_token</b> 并填入配置',
step4: '启动渠道后通过 <b>HTTP 长轮询</b>自动接收消息,<b>无需公网 IP 和回调 URL</b>',
},
qq: {
step1: '前往 <a href="https://q.qq.com/" target="_blank" rel="noopener">QQ 开放平台</a> 创建机器人应用',
step2: '在应用管理页面获取 <b>AppID</b> 和 <b>AppSecret</b>,填入下方配置',
step3: "在「功能配置 → 消息订阅」中开启需要的消息类型C2C 消息、群聊 {'@'}消息、频道消息等)",
step4: '启动渠道后通过 <b>WebSocket 长连接</b>自动接收消息,<b>无需公网 IP 和回调 URL</b>',
},
},
dingtalkRegister: {
title: '一键创建钉钉机器人',
hint: '点击按钮获取二维码使用钉钉扫一扫并授权后会自动在你的企业里创建机器人应用Client ID / Client Secret 自动填入下方。',
button: '扫码自动创建机器人',
buttonLoading: '正在准备二维码…',
qrcodeLoading: '正在生成二维码',
scanHint: '请使用钉钉 App 扫描上方二维码并确认授权',
confirmed: '机器人创建成功Client ID 和 Secret 已自动填入',
expired: '二维码已过期,请重新生成',
denied: '授权被拒绝',
startFailed: '获取二维码失败,请检查网络',
},
feishuRegister: {
title: '一键创建飞书应用',
hint: '点击按钮获取二维码使用飞书扫一扫并确认授权后会自动在你的企业里创建自建应用App ID / App Secret 自动填入下方。',
button: '扫码自动创建应用',
buttonLoading: '正在准备二维码…',
qrcodeLoading: '正在生成二维码',
scanHint: '请使用飞书 App 扫描上方二维码并确认授权',
confirmed: '应用创建成功App ID 和 Secret 已自动填入',
expired: '二维码已过期,请重新生成',
denied: '授权被拒绝',
error: '注册过程出错,请稍后重试',
startFailed: '获取二维码失败,请检查网络',
},
feishu: {
perm: {
message: '获取与发送单聊、群组消息',
messageReason: '基础:收发消息',
receive: '接收消息事件',
receiveReason: '基础:接收用户消息',
resource: '获取消息中的资源文件',
resourceReason: 'WebSocket 模式下获取消息内容',
reactions: '管理消息表情回复',
reactionsReason: '消息反应:添加 👍 表情',
contact: '获取用户基本信息',
contactReason: '昵称获取:显示用户真实姓名',
media: '获取消息中的资源文件',
mediaReason: '媒体下载:下载图片和文件',
},
},
},
skills: {
title: '技能管理',
desc: '管理 Agent 可用的工具和技能',
newSkill: '新建技能',
importSkill: '导入技能',
refreshRuntime: '刷新运行时',
refreshing: '刷新中...',
refreshSuccess: '运行时技能已刷新',
refreshFailed: '刷新运行时失败',
tabs: {
all: '全部',
builtin: '内置',
mcp: 'MCP',
dynamic: '动态',
},
search: {
placeholder: '搜索技能名称、描述或标签...',
},
filter: {
all: '全部状态',
enabled: '已启用',
disabled: '已禁用',
scanFailed: '扫描失败',
},
security: {
scanned: '已扫描',
scanFailed: '扫描失败',
findingsTitle: '安全扫描失败',
rescan: '重新扫描',
rescanning: '扫描中...',
rescanPassed: '重新扫描通过',
rescanStillFailed: '重新扫描仍未通过,请查看详情',
rescanFailed: '重新扫描失败',
noPersistedFindings: '本次尚无持久化的扫描详情,点击"重新扫描"以重新生成。',
fix: '修复建议',
},
empty: '暂无技能',
emptyDesc: '添加技能以增强 Agent 的能力',
noDescription: '暂无描述',
modal: {
configureTitle: '配置技能',
newTitle: '新建技能',
},
fields: {
name: '名称',
nameZh: '中文显示名',
nameEn: '英文显示名',
type: '类型',
icon: '图标',
version: '版本',
author: '作者',
tags: '标签',
description: '描述',
configJson: '配置 (JSON)',
skillContent: '技能内容 (SKILL.md)',
sourceCode: '源代码 / 脚本',
},
placeholders: {
name: '技能名称',
nameZh: '可选 — 留空则显示原始 name',
nameEn: 'Optional — leave blank to show the slug',
icon: '🛠️ (emoji 或 URL)',
version: '1.0.0',
author: '作者名称',
tags: 'tag1,tag2,tag3',
description: '这个技能做什么?',
configJson: '',
sourceCode: '# Python 或脚本内容...',
},
hints: {
directorySkill: '— 目录技能:当目录不可用时用作备用',
primaryContent: '— Agent 提示注入的主要内容',
},
types: {
builtin: '内置',
mcp: 'MCP',
dynamic: '动态',
},
actions: {
configure: '配置',
delete: '删除',
saveChanges: '保存更改',
createSkill: '创建技能',
},
runtime: {
disabled: '已停用',
unknown: '未知',
securityBlocked: '安全阻止',
depsMissing: '缺少依赖',
directoryActive: '目录激活',
databaseFallback: '数据库回退',
databaseActive: '数据库激活',
unresolved: '未解析',
},
messages: {
saveFailed: '保存技能失败',
deleteConfirm: '确定要删除这个技能吗?此操作不可撤销。',
deleteTitle: '确认删除',
deleteFailed: '删除技能失败',
toggleFailed: '切换技能状态失败',
},
import: {
title: '导入技能',
urlTab: '从 URL 安装',
searchTab: '搜索市场',
urlPlaceholder: '输入 GitHub 仓库 URL 或 ClawHub 技能 URL',
urlHint: '支持 GitHub 仓库和 ClawHub 市场链接',
examples: '示例',
install: '安装',
installing: '安装中...',
installed: '安装成功',
failed: '安装失败',
cancelled: '已取消',
cancel: '取消',
overwrite: '覆盖已有技能',
enableAfterInstall: '安装后启用',
searchPlaceholder: '搜索 ClawHub 市场...',
search: '搜索',
searching: '搜索中...',
searchFailed: '搜索失败',
noResults: '未找到匹配的技能',
statusPending: '等待中',
zipTab: 'ZIP 导入',
dropHint: '拖拽 .zip 文件到此处,或点击选择',
zipRequirement: 'ZIP 包需包含 SKILL.md 文件',
uploading: '正在安装...',
uploadSuccess: '技能安装成功',
uploadFailed: '安装失败',
invalidZip: '请选择 .zip 格式的文件',
tooLarge: '文件过大(最大 50MB',
},
},
onboarding: {
title: '欢迎使用 MateClaw',
subtitle: '配置你的第一个 AI 模型',
stepPath: '选择方式',
stepConfigure: '配置模型',
stepVerify: '验证',
localTitle: '本地模型',
localDesc: '已安装 Ollama一键启用本地模型',
localDetected: '已检测到',
cloudTitle: '云端 API',
cloudDesc: '使用 OpenAI、DashScope 等云端模型',
selectModel: '选择模型',
setDefault: '设为默认',
enterApiKey: '输入 API Key',
testConnection: '测试连接',
testSuccess: '连接成功',
testFailed: '连接失败',
saveAndContinue: '保存并继续',
verifyTitle: '验证你的模型',
verifyMessage: '你好!简单介绍一下你自己。',
send: '发送',
startUsing: '开始使用 MateClaw',
skip: '跳过',
back: '返回',
},
talk: {
title: '语音模式',
ready: '就绪',
connecting: '连接中...',
listening: '收听中...',
processing: '思考中...',
speaking: '回复中...',
holdToTalk: '按住说话',
releaseToSend: '松开发送',
retry: '点击重新连接',
you: '你',
ai: 'AI',
micError: '无法访问麦克风',
connectionError: '连接错误,点击按钮重试',
playbackError: '音频播放失败',
tooShort: '录音过短,请按住按钮多说几秒',
},
browser: {
timeline: {
title: '浏览器({count} 个操作)',
},
actions: {
start: '启动',
stop: '停止',
open: '打开',
click: '点击',
type: '输入',
screenshot: '截图',
},
},
dashboard: {
title: '仪表盘',
kicker: '运营脉搏',
desc: '系统用量概览与运行状态',
conversations: '对话数',
messages: '消息数',
tokens: 'Token 消耗',
toolCalls: '工具调用',
periodDesc: '从日、周、月三个维度观察系统运行状况。',
runsDesc: '定时任务执行记录,包含耗时、消耗和结果。',
trend: {
title: '本周活跃度',
subtitle: '你和 AI 的互动频率。',
},
periodComparison: '周期对比',
periods: {
today: '今日',
thisWeek: '本周',
thisMonth: '本月',
},
recentRuns: '最近定时任务执行',
noRuns: '暂无执行记录',
runColumns: {
time: '时间',
job: '任务',
status: '状态',
trigger: '触发方式',
duration: '耗时',
tokens: 'Token',
},
},
memory: {
kicker: '记忆',
title: '记忆',
desc: '你的智能体在想什么、记住了什么、遗忘了什么。',
selectAgent: '选择智能体',
selectAgentHint: '请先选择一个智能体查看其记忆',
tabTimeline: '整理时间线',
tabMemory: '长期记忆',
tabFacts: '事实库',
noReports: '暂无整理记录',
modeFocused: '专题',
modeNightly: '夜间',
candidates: '条候选',
loadMore: '加载更多',
retry: '重试',
memoryBrowser: {
header: '概述',
empty: '暂无记忆内容',
userEdited: '用户编辑',
files: {
memory: '记忆',
profile: '档案',
soul: '灵魂',
userFacts: '用户事实',
references: '参考资料',
},
},
time: {
justNow: '刚刚',
hoursAgo: '{n}小时前',
daysAgo: '{n}天前',
},
status: {
success: '成功',
failed: '失败',
skipped: '跳过',
running: '运行中',
pending: '等待中',
},
report: {
mode: '模式',
topic: '主题',
status: '状态',
time: '时间',
candidates: '候选数',
promoted: '已整合',
rejected: '未采纳',
trigger: '触发方式',
reason: '整理理由',
diff: '变更摘要',
},
morningCard: {
title: '昨夜 Dream 回顾',
dismiss: '我知道了',
promoted: '整合了 {count} 条记忆',
},
hil: {
confirm: '确认',
edit: '编辑',
cancel: '取消',
save: '保存',
editPlaceholder: '修改记忆内容...',
confirmed: '已确认',
saved: '已保存到 MEMORY.md',
},
facts: {
searchPlaceholder: '搜索事实…',
empty: '暂无事实数据(需启用事实投影)',
trust: '信任度',
used: '使用 {n} 次',
helpful: '有用',
unhelpful: '没用',
forget: '遗忘',
forgotten: '已遗忘',
resolved: '已解决',
contradictions: '{count} 条矛盾待处理',
resolve: {
KEEP_A: '保留 A',
KEEP_B: '保留 B',
MERGE: '合并',
IGNORE: '忽略',
},
},
focused: {
desc: '围绕一个主题让智能体重新整理记忆,优先提炼相关信息。',
placeholder: '输入主题,如"项目架构"、"用户偏好"…',
trigger: '开始整理',
success: '整理完成,时间线已更新',
skipped: '没有需要整合的内容',
},
},
// Tool display labels consumed by useToolLabel() — keys must mirror en-US.ts exactly.
// Unknown tools (MCP / custom skills) fall back to humanizeToolName() and are not listed here.
toolLabels: {
// Delegation
delegateToAgent: '委派给智能体',
delegateParallel: '并行委派',
listAvailableAgents: '列出可用智能体',
// Wiki
wiki_search_pages: '搜索知识库',
wiki_semantic_search: '语义检索知识库',
wiki_read_page: '读取知识库页面',
wiki_list_pages: '列出知识库页面',
wiki_related_pages: '查找相关页面',
wiki_trace_source: '溯源知识库',
wiki_create_page: '创建知识库页面',
wiki_delete_page: '删除知识库页面',
wiki_enrich_page: '丰富知识库页面',
wiki_explain_relation: '解释关联关系',
// Web search
search: '联网搜索',
// Memory
recall_structured: '检索记忆',
remember_structured: '保存记忆',
forget_structured: '清除记忆',
fact_probe: '探查事实',
fact_related: '查询关联事实',
fact_list_contradictions: '检查矛盾事实',
session_search: '搜索会话',
read_workspace_memory_file: '读取记忆文件',
write_workspace_memory_file: '写入记忆文件',
edit_workspace_memory_file: '编辑记忆文件',
list_workspace_memory_files: '列出记忆文件',
// Files & shell
read_file: '读取文件',
execute_shell_command: '执行命令',
extract_document_text: '提取文档内容',
extract_pdf_text: '提取 PDF 内容',
extract_docx_text: '提取文档内容',
detect_file_type: '识别文件类型',
readMateClawDoc: '查阅系统文档',
// Generative
image_generate: '生成图片',
video_generate: '生成视频',
music_generate: '生成音乐',
// Data
query_datasource: '查询数据源',
execute_sql: '执行 SQL',
// Browser
browser_use: '浏览器操作',
// Cron
create_cron_job: '创建定时任务',
list_cron_jobs: '查看定时任务',
toggle_cron_job: '启停定时任务',
delete_cron_job: '删除定时任务',
// Time
getCurrentDateTime: '获取当前时间',
getCurrentTime: '获取当前时间',
getCurrentDate: '获取当前日期',
// Skills
skill_manage: '管理技能',
runSkillScript: '运行技能',
listSkillFiles: '列出技能文件',
listAvailableSkills: '列出可用技能',
readSkillFile: '读取技能文件',
},
} as const