Wenchao An a246c928e9
feat(frontend): move capability management out of Settings (#5468)
* feat(frontend): move capability management out of settings

* fix(frontend): address capability center review feedback
2026-09-16 18:39:24 +08:00

1479 lines
59 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.

import {
CompassIcon,
GraduationCapIcon,
ImageIcon,
MicroscopeIcon,
PenLineIcon,
ShapesIcon,
SparklesIcon,
VideoIcon,
} from "lucide-react";
import type { Translations } from "./types";
export const zhCN: Translations = {
// Locale meta
locale: {
localName: "中文",
},
capabilities: {
integrationSkills: "来自插件",
sharedSkills: "共享技能",
title: "能力中心",
description: "为你的工作添加工具与技能,让 DeerFlow 更懂你的工作方式。",
plugins: "插件",
skills: "技能",
searchPlugins: "搜索插件名称或用途",
searchSkills: "搜索技能名称或用途",
allPlugins: "全部插件",
installed: "已安装",
enabled: "已启用",
disabled: "未启用",
configure: "配置",
details: "查看详情",
addPlugin: "添加 MCP 插件",
builtin: "官方内置",
community: "社区",
custom: "我的技能",
allSkills: "全部技能",
availablePlugins: "可用插件",
availableSkills: "可用技能",
pluginHint: "连接常用应用,让 Agent 直接访问资料、处理工作。",
skillHint: "把常用方法变成技能,在对话中按需使用。",
noResults: "没有找到匹配的内容",
larkName: "飞书 / Lark",
larkDescription: "连接飞书文档、消息、日历与多维表格,在对话中协同办公。",
larkTag: "办公协作",
connect: "连接",
notInstalled: "未安装",
mcpDescription: "让 Agent 调用此插件提供的工具。",
mcpLabel: "MCP 插件",
pluginSettings: "插件配置",
communityTitle: "从社区带来新的技能",
communityDescription:
"导入你找到的 .skill 文件,即可在「我的技能」中管理和使用。",
skillEnabled: "启用技能",
manage: "管理",
},
// Common
common: {
home: "首页",
settings: "设置",
delete: "删除",
edit: "编辑",
rename: "重命名",
renameFailed: "重命名会话失败。",
share: "分享",
openInNewWindow: "在新窗口打开",
close: "关闭",
more: "更多",
search: "搜索",
loadMore: "加载更多",
download: "下载",
thinking: "思考",
artifacts: "文件",
public: "公共",
custom: "自定义",
notAvailableInDemoMode: "在演示模式下不可用",
loading: "加载中...",
error: "错误:",
version: "版本",
lastUpdated: "最后更新",
code: "代码",
preview: "预览",
cancel: "取消",
save: "保存",
install: "安装",
create: "创建",
import: "导入",
export: "导出",
exportAsMarkdown: "导出为 Markdown",
exportAsJSON: "导出为 JSON",
exportSuccess: "对话已导出",
exportFailed: "导出对话失败。",
regenerate: "重新生成",
editAndRerun: "编辑并重新运行",
updateAndRerun: "更新并重新运行",
editRerunWarning:
"重新运行只恢复对话状态,不会撤销文件、Memory 或外部操作。",
branch: "分叉",
showArtifacts: "查看此对话的文件",
browser: "浏览器",
showBrowser: "打开浏览器面板",
},
runDuration: {
reasoning: "思考过程",
working: "执行中…",
completedIn: (duration) => `本次任务耗时 ${duration}`,
description: "任务总耗时,包括模型推理、工具调用和等待时间。",
lessThanSecond: "不足 1 秒",
hours: (value) => `${value} 小时`,
minutes: (value) => `${value} 分`,
seconds: (value) => `${value} 秒`,
separator: " ",
},
// Home
home: {
docs: "文档",
blog: "博客",
},
// Welcome
welcome: {
greeting: "你好,欢迎回来!",
description:
"欢迎使用 🦌 DeerFlow,一个完全开源的超级智能体。通过内置和自定义的 Skills,\nDeerFlow 可以帮你搜索网络、分析数据,还能为你生成幻灯片、\n图片、视频、播客及网页等,几乎可以做任何事情。",
createYourOwnSkill: "创建你自己的 Agent SKill",
createYourOwnSkillDescription:
"创建你的 Agent Skill 来释放 DeerFlow 的潜力。通过自定义技能,DeerFlow\n可以帮你搜索网络、分析数据,还能为你生成幻灯片、\n网页等作品,几乎可以做任何事情。",
},
// Clipboard
clipboard: {
copyToClipboard: "复制到剪贴板",
copiedToClipboard: "已复制到剪贴板",
failedToCopyToClipboard: "复制到剪贴板失败",
linkCopied: "链接已复制到剪贴板",
},
artifactEditing: {
unsaved: "未保存",
saving: "正在保存...",
saved: "文件已保存",
exit: "退出编辑",
discard: "放弃修改",
discardChanges: "要放弃对此文件的未保存修改吗?",
conflict: "开始编辑后文件已发生变化。请放弃草稿并重新加载后再保存。",
conflictShort: "远端已更新",
runInProgress: "请等待当前 Agent 运行结束后再保存。",
saveFailed: "保存文件失败",
},
artifactPreview: {
limited: (previewSize, totalSize) =>
totalSize
? `当前显示 ${totalSize} 中的前 ${previewSize}。`
: `当前显示前 ${previewSize}。`,
loadFullFile: "加载完整文件",
loadingFullFile: "正在加载完整文件...",
previewFailed: "无法预览此文件,但仍可下载原始文件。",
viewSource: "查看原始文件",
missingTarget: "该链接没有指明要展示哪个文件。",
},
artifactTable: {
title: "表格预览",
header: "首行作为表头",
column: (index) => `列 ${index}`,
total: (count) => `共 ${count} 行`,
sample: (count) => `预览前 ${count} 行`,
range: (start, end, limited) =>
`${limited ? "预览 " : ""}${start}–${end} 行`,
columnsLimited: "仅展示预览样本的前 50 列。",
uneven: "部分行的字段数量不同,缺失字段已标记。",
empty: "文件为空。",
incomplete: "当前预览范围内没有完整记录,请查看源码或下载文件。",
failed: "无法可靠预览此表格,请查看源码或下载文件。",
retry: "重新预览",
previous: "上一页",
next: "下一页",
cell: (row, column) => `查看第 ${row} 行、第 ${column} 列`,
cellValue: "单元格内容",
missing: "缺失",
savedVersion: "打开或下载的是已保存文件,当前草稿尚未保存。",
},
artifactArchive: {
downloadCurrent: (count) => `下载当前版本(${count} 个文件)`,
currentVersionNotice:
"文件列表来自此回复;内容为当前版本,可能已发生变化。",
downloadFailed: "文件压缩包下载失败。",
},
// Citations
citations: {
sourcesSummary: (count) => `使用了 ${count} 个来源`,
citeCount: (count) => `${count} 次引用`,
copyReference: (title) => `复制 ${title} 引用`,
copiedReference: (title) => `已复制 ${title} 引用`,
},
// Workspace Changes
workspaceChanges: {
title: "工作区变更",
editedTitle: (count) => `已编辑 ${count} 个文件`,
badge: (count, additions, deletions) =>
`${count} 个文件已更改 +${additions} -${deletions}`,
viewChanges: "查看更改",
created: "新增",
modified: "修改",
deleted: "删除",
openFile: "打开文件",
loading: "正在加载工作区变更...",
noChanges: "没有记录到工作区变更。",
diffUnavailable: "无法展示 diff",
binaryUnavailable: "二进制文件,无法展示 diff。",
largeUnavailable: "文件过大,已省略 diff。",
sensitiveUnavailable: "敏感路径,已隐藏内容。",
truncatedUnavailable: "变更集过大,已省略 diff。",
symlinkUnavailable: "符号链接变更,无法展示 diff。",
truncatedSummary: "部分变更已被截断。",
},
// Input Box
inputBox: {
placeholder: "今天我能为你做些什么?",
disclaimer: "内容由AI生成,重要信息请务必核查",
createSkillPrompt:
"我们一起用 skill-creator 技能来创建一个技能吧。先问问我希望这个技能能做什么。",
addAttachments: "添加附件",
inputPolish: "优化输入",
inputPolishing: "正在优化输入...",
inputPolishNoChanges: "当前输入已经足够清晰。",
inputPolishFailed: "优化输入失败。",
inputPolishUndo: "撤销优化",
inputPolishCancel: "取消优化",
voiceInputStartLabel: "语音输入",
voiceInputStopLabel: "停止语音输入",
voiceInputStart:
"语音输入。DeerFlow 只接收转写文本,音频由浏览器或系统语音服务处理。",
voiceInputStop: "停止语音输入",
voiceInputListening: "正在聆听... 点击停止语音输入。",
voiceInputUnsupported:
"当前浏览器不支持语音输入。建议使用 Chrome 或 Edge。",
voiceInputPermissionDenied: "麦克风权限被拒绝。请允许麦克风访问后重试。",
voiceInputMicrophoneUnavailable: "未检测到麦克风。请检查设备输入后重试。",
voiceInputUnsupportedLanguage: "当前浏览器不支持该语言的语音输入。",
voiceInputNetworkError: "无法连接浏览器语音识别服务。",
voiceInputNoSpeech: "没有检测到语音,请重试。",
voiceInputFailed: "语音输入失败,请重试。",
mode: "模式",
flashMode: "闪速",
flashModeDescription: "快速且高效的完成任务,但可能不够精准",
reasoningMode: "思考",
reasoningModeDescription: "思考后再行动,在时间与准确性之间取得平衡",
proMode: "Pro",
proModeDescription: "思考、计划再执行,获得更精准的结果,可能需要更多时间",
ultraMode: "Ultra",
ultraModeDescription:
"继承自 Pro 模式,可调用子代理分工协作,适合复杂多步骤任务,能力最强",
reasoningEffort: "推理深度",
reasoningEffortMinimal: "最低",
reasoningEffortMinimalDescription: "检索 + 直接输出",
reasoningEffortLow: "低",
reasoningEffortLowDescription: "简单逻辑校验 + 浅层推演",
reasoningEffortMedium: "中",
reasoningEffortMediumDescription: "多层逻辑分析 + 基础验证",
reasoningEffortHigh: "高",
reasoningEffortHighDescription: "全维度逻辑推演 + 多路径验证 + 反推校验",
searchModels: "搜索模型...",
surpriseMe: "小惊喜",
surpriseMePrompt: "给我一个小惊喜吧",
followupLoading: "正在生成可能的后续问题...",
followupConfirmTitle: "发送建议问题?",
followupConfirmDescription: "当前输入框已有内容,选择发送方式。",
followupConfirmAppend: "追加并发送",
followupConfirmReplace: "替换并发送",
suggestionPlaceholderRequired: "发送前请先填写建议模板中的占位内容。",
goalCommandDescription: "设置、查看或清除当前目标",
compactCommandDescription: "压缩早期上下文,保留完整聊天记录",
goalLabel: "目标",
goalContinuing: "续跑中 {count}/{max}",
goalContinuationTooltip:
"为达成目标已自动续跑 {count}/{max} 次,达上限后自动停止",
goalSet: "目标已设置。",
goalCleared: "目标已清除。",
goalNone: "当前没有目标。",
goalActive: "当前目标:{goal}",
goalFailed: "目标命令执行失败。",
goalTooLong: "目标过长,请控制在 {max} 个字符以内。",
goalLengthCounter: "目标长度:{length}/{max} 字符",
compactSuccess:
"已压缩早期上下文。完整聊天记录仍保留,后续模型将基于摘要和最近消息继续。",
compactSkipped: "当前上下文还不需要压缩。",
compactFailed: "上下文压缩失败。",
suggestions: [
{
suggestion: "写作",
prompt: "撰写一篇关于[主题]的博客文章",
icon: PenLineIcon,
},
{
suggestion: "研究",
prompt: "深入浅出的研究一下[主题],并总结发现。",
icon: MicroscopeIcon,
},
{
suggestion: "收集",
prompt: "从[来源]收集数据并创建报告。",
icon: ShapesIcon,
},
{
suggestion: "学习",
prompt: "学习关于[主题]并创建教程。",
icon: GraduationCapIcon,
},
],
suggestionsCreate: [
{
suggestion: "网页",
prompt: "生成一个关于[主题]的网页",
icon: CompassIcon,
},
{
suggestion: "图片",
prompt: "生成一个关于[主题]的图片",
icon: ImageIcon,
},
{
suggestion: "视频",
prompt: "生成一个关于[主题]的视频",
icon: VideoIcon,
},
{
type: "separator",
},
{
suggestion: "技能",
prompt:
"我们一起用 skill-creator 技能来创建一个技能吧。先问问我希望这个技能能做什么。",
icon: SparklesIcon,
},
],
pleaseWaitStreaming: "请等待当前响应完成。",
stopStreamingUnavailable: "你的角色无权停止正在运行的回合。",
},
// Sidebar
sidebar: {
newChat: "新对话",
chats: "对话",
channels: "渠道",
recentChats: "最近的对话",
demoChats: "演示对话",
agents: "智能体",
scheduledTasks: "定时任务",
agentsDisabledTooltip: "功能未启用",
},
// Sidebar projects section
projects: {
title: "项目",
newProject: "新建项目",
namePlaceholder: "项目名称",
moveToProject: "移动到项目",
moveToProjectHint: "移动对话不会移除其中已有的内容。",
removeFromProject: "移出项目",
archive: "归档",
restore: "恢复",
deleteProject: "删除项目",
deleteProjectConfirm:
"删除项目将解除其对话的关联。对话、历史记录及文件均不会被删除。",
archived: "已归档",
empty: "该项目下还没有对话。",
newChat: "新建对话",
create: "创建",
createFailed: "创建项目失败",
moveFailed: "移动对话失败",
archiveFailed: "归档项目失败",
restoreFailed: "恢复项目失败",
deleteFailed: "删除项目失败",
switchToGrouped: "按项目分组对话",
switchToFlat: "显示平铺对话列表",
threads: "对话",
threadsLoadFailed: "无法加载项目对话",
untitled: "未命名",
settings: "设置",
notFound: "项目不存在或已被删除。",
projectUnavailable: "无法关联到该项目,消息未发送。请重试。",
},
backgroundTasks: {
label: "后台任务",
title: "后台任务",
description: "当前对话中的 MCP 长程任务。",
active: "进行中",
recent: "最近任务",
empty: "暂无后台任务",
emptyHint: "在当前对话中启动的 MCP 长程任务会显示在这里。",
loadFailed: "无法加载后台任务",
retry: "重试",
cancel: "取消任务",
cancelling: "正在取消…",
cancelFailed: "取消任务失败",
cancellationRetrying: (attempt) =>
`第 ${attempt} 次取消失败;DeerFlow 将继续重试。`,
notificationRetrying: (attempt) =>
`第 ${attempt} 次聊天通知失败;DeerFlow 将退避后重试。`,
notificationStopped: "聊天通知因反复失败或永久拒绝,已停止重试。",
trackingDegraded: "状态检查有所延迟,DeerFlow 仍在重试。",
viewDetails: "查看详情",
hideDetails: "收起详情",
detailsFailed: "无法加载任务详情",
result: "结果",
resultArtifact: "结果产物",
inputRequired: "需要输入",
inputUnavailable: "当前集成暂时无法将你的回复发回远端任务。",
lastPollError: "最近一次状态错误",
created: (time) => `开始于${time}`,
updated: (time) => `更新于${time}`,
status: {
submitted: "已提交",
working: "进行中",
inputRequired: "需要输入",
completed: "已完成",
failed: "已失败",
cancelled: "已取消",
},
},
subagentBatches: {
label: "批处理",
title: "子智能体批处理",
description: "面向大量独立条目的持久化、可恢复执行。",
workerUnavailable:
"批处理 worker 未运行。历史批次仍可查看和导出,当前为只读模式。",
empty: "暂无子智能体批处理",
emptyHint: "当前对话通过 batch_task 提交的批处理会显示在这里。",
loadFailed: "无法加载子智能体批处理",
active: "进行中",
recent: "最近任务",
pause: "暂停",
resume: "继续",
cancel: "取消",
retryItem: "重试",
exportResults: "导出 JSONL",
viewItems: "查看条目",
hideItems: "收起条目",
itemsFailed: "无法加载批处理条目",
progress: (completed, total) => `${completed}/${total} 已结束`,
limits: (live, running) => `存活 ${live} · 运行 ${running}`,
status: {
queued: "排队中",
running: "运行中",
paused: "已暂停",
completed: "已完成",
failed: "已失败",
cancelled: "已取消",
},
},
// 定时任务
scheduledTasks: {
scheduleType: {
cron: "重复",
once: "单次",
interval: "间隔",
},
preset: {
label: "重复方式",
hourly: "每小时",
daily: "每天",
weekly: "每周",
monthly: "每月",
custom: "自定义 cron",
},
fields: {
minute: "分钟",
time: "时间",
weekday: "在",
dayOfMonth: "几号",
cron: "cron 表达式",
cronPlaceholder: "0 9 * * *",
runAt: "运行时间",
timezone: "时区",
intervalAmount: "每",
intervalUnitSeconds: "秒",
intervalUnitMinutes: "分钟",
intervalUnitHours: "小时",
intervalMinHint: "最短 60 秒(默认服务端下限)。",
},
weekdays: {
mon: "周一",
tue: "周二",
wed: "周三",
thu: "周四",
fri: "周五",
sat: "周六",
sun: "周日",
},
preview: "预览",
cronHelp: "打开 crontab.guru",
create: {
title: "创建定时任务",
taskTitle: "任务标题",
prompt: "提示词",
agent: "Agent",
leadAgent: "默认 Agent(lead_agent)",
submit: "创建",
fillRequired: "请填写所有必填项",
},
context: {
fresh: "新线程",
reuse: "复用线程",
threadIdPlaceholder: "线程 ID",
reuseNoticeTitle: "使用该线程的历史对话",
reuseNoticeDescription:
"如果触发时该线程正在运行,DeerFlow 会将本次执行排队,并在线程空闲后启动;超过配置的最长等待时间后会标记为失败。",
},
filters: {
allStatuses: "全部状态",
enabled: "已启用",
paused: "已暂停",
completed: "已完成",
failed: "已失败",
allTypes: "全部类型",
cron: "定时",
once: "单次",
interval: "间隔",
},
detail: {
contextMode: "上下文模式",
agent: "Agent",
thread: "线程",
lastThread: "上个线程",
schedule: "调度",
nextRun: "下次运行",
lastRun: "上次运行",
lastRunId: "上次运行 ID",
lastError: "上次错误",
runsCount: "{count} 次运行",
runsCountOne: "{count} 次运行",
noRuns: "暂无运行",
noSelection: "未选择定时任务",
filteredByThread: "按线程筛选:{id}",
loadFailed: "加载定时任务失败",
},
actions: {
edit: "编辑",
cancelEdit: "取消编辑",
pause: "暂停",
resume: "恢复",
trigger: "立即触发",
duplicate: "复制",
duplicateTitleSuffix: "(副本)",
delete: "删除",
},
deleteConfirm: "确定要删除该定时任务吗?此操作不可撤销。",
errors: {
create: "创建定时任务失败",
update: "更新定时任务失败",
pause: "暂停定时任务失败",
resume: "恢复定时任务失败",
trigger: "触发定时任务失败",
delete: "删除定时任务失败",
},
edit: {
titlePlaceholder: "编辑标题",
promptPlaceholder: "编辑提示词",
submit: "保存编辑",
},
status: {
enabled: "已启用",
paused: "已暂停",
running: "运行中",
completed: "已完成",
failed: "已失败",
cancelled: "已取消",
},
history: {
navigation: "执行记录分页",
newer: "较新记录",
older: "更早记录",
latest: "最新记录",
page: "第 {page} 页",
paused: "浏览历史页时暂停自动刷新,返回最新记录可查看当前执行情况。",
loading: "正在加载执行记录…",
loadFailed: "无法加载执行记录。",
retry: "重试加载",
},
runTrigger: { scheduled: "定时", manual: "手动" },
runStatus: {
queued: "排队中",
launching: "启动中",
running: "运行中",
success: "成功",
failed: "失败",
skipped: "跳过",
interrupted: "已中断",
},
recipes: {
label: "快速创建",
trending: {
title: "GitHub Trending 日榜",
desc: "总结今日 Trending 前十仓库",
},
news: {
title: "每日科技新闻摘要",
desc: "收集并总结当日科技要闻",
},
issues: {
title: "GitHub Issue 分诊",
desc: "分诊某仓库的 open issues(填入 {{repo}})",
},
weekly: {
title: "每周周报",
desc: "每周一汇总一周工作",
},
},
},
// Agents
agents: {
title: "智能体",
description: "创建和管理具有专属 Prompt 与能力的自定义智能体。",
newAgent: "新建智能体",
emptyTitle: "还没有自定义智能体",
emptyDescription: "创建你的第一个自定义智能体,设置专属系统提示词。",
featureDisabledTitle: "智能体功能未启用",
featureDisabledDescription: "该功能未在此服务器上启用,请联系管理员。",
chat: "对话",
delete: "删除",
deleteConfirm: "确定要删除该智能体吗?此操作不可撤销。",
deleteSuccess: "智能体已删除",
newChat: "新对话",
createPageTitle: "设计你的智能体",
createPageSubtitle: "描述你想要的智能体,我来帮你通过对话创建。",
nameStepTitle: "给新智能体起个名字",
nameStepHint:
"只允许字母、数字和连字符,存储时自动转为小写(例如 code-reviewer)",
nameStepPlaceholder: "例如 code-reviewer",
nameStepContinue: "继续",
nameStepInvalidError: "名称无效,只允许字母、数字和连字符",
nameStepAlreadyExistsError: "已存在同名智能体",
nameStepNetworkError: "网络请求失败,请检查网络或后端连接",
nameStepCheckError: "无法验证名称可用性,请稍后重试",
nameStepCheckErrorWithDetail: "名称校验失败:{detail}",
nameStepApiDisabledError:
"服务器未开启自定义智能体管理功能,请联系管理员。",
nameStepBootstrapMessage:
"新智能体的名称是 {name}。请先帮我设计它的用途、行为方式和 SOUL.md,再保存它。",
save: "保存智能体",
saving: "正在保存智能体...",
saveRequested:
"已提交保存请求,DeerFlow 正在根据当前对话生成并保存初版智能体。",
saveHint:
"你可以在右上角的菜单里随时保存这个智能体,就算目前还只是初稿也可以。",
saveCommandMessage:
"请现在根据我们目前已经讨论的全部内容保存这个自定义智能体。这就是我明确的保存确认。如果仍有少量细节缺失,请根据上下文做出合理假设,生成一份简洁的英文初始 SOUL.md,并直接调用 setup_agent,不要再向我索要额外确认。",
agentCreatedPendingRefresh:
"智能体已创建,但 DeerFlow 暂时还无法读取到它。请稍后刷新当前页面。",
more: "更多操作",
agentCreated: "智能体已创建!",
startChatting: "开始对话",
backToGallery: "返回 Gallery",
settings: "智能体设置",
settingsTitle: "智能体设置",
settingsDisplayName: "显示名称",
settingsDisplayNameTooLong: "显示名称不能超过 100 个 Unicode 码点。",
settingsDisplayNameHint: "支持中文等 Unicode 字符,留空时使用智能体标识",
settingsDescription:
"为该智能体设置显示名称和默认模型,模型修改在下一条消息生效。",
settingsModel: "默认模型",
settingsModelDefault: "使用全局默认",
settingsTemperature: "温度",
settingsTemperatureHint: "0 = 确定性输出,越高越发散(0–2)。",
settingsMaxTokens: "最大输出 token",
settingsMaxTokensPlaceholder: "继承模型配置",
settingsThinking: "思考模式",
settingsThinkingOn: "开启",
settingsThinkingOff: "关闭",
settingsReasoningEffort: "推理强度",
settingsInherit: "继承",
settingsSaved: "智能体设置已保存",
settingsInvalidTemperature: "温度必须在 0 到 2 之间",
settingsInvalidMaxTokens: "最大输出 token 必须为不超过 200,000 的正整数",
},
// Breadcrumb
breadcrumb: {
workspace: "工作区",
chats: "对话",
},
// Workspace
workspace: {
officialWebsite: "访问 DeerFlow 官方网站",
githubTooltip: "访问 DeerFlow 的 GitHub 仓库",
settingsAndMore: "设置和更多",
visitGithub: "在 GitHub 上查看 DeerFlow",
reportIssue: "报告问题",
contactUs: "联系我们",
about: "关于 DeerFlow",
logout: "退出登录",
gatewayUnavailable: "网关暂时不可用。",
gatewayUnavailableRetrying: "正在后台重试…",
modelLoadFailed:
"模型列表加载失败,模型选择和 Token 用量信息可能暂时不可用。",
modelLoadRetry: "重试",
modelLoadRetrying: "正在重试…",
},
// Conversation
conversation: {
noMessages: "还没有消息",
startConversation: "开始新的对话以查看消息",
branchCreated: "已创建分叉对话",
branchFailed: "创建分叉对话失败。",
streamReplayGap: "部分实时更新已过期,已从持久化状态恢复对话。",
outlineLabel: "对话章节",
outlineAttachmentFallback: "图片或文件消息",
},
// Chats
chats: {
deleteChat: "删除对话",
deleteConfirm: (title) =>
`确定删除“${title}”吗?这将删除对话及其文件,此操作不可撤销。`,
deleteFailed: "删除对话失败,请重试。",
noActiveChats: "暂无近期会话",
activeChats: "近期会话",
archivedChats: "已归档",
archiveChat: "归档",
restoreChat: "恢复",
archiveSuccess: "已归档",
restoreSuccess: "已恢复",
archiveFailed: "更新会话归档状态失败",
archiveDescription:
"归档会保留消息和文件,不会停止运行中的任务或暂停定时任务。",
undoArchive: "撤销",
noArchivedChats: "暂无已归档会话",
noMatchingChats: "已加载的会话中没有匹配结果",
loadChatsFailed: "加载会话失败",
retryLoadChats: "重试",
searchChats: "搜索对话",
branchLabel: (title, parentTitle) => `${title},分叉自 ${parentTitle}`,
loadMoreToSearch: "加载更多以搜索更早的对话",
loadingMore: "正在加载...",
loadOlderChats: "加载更早的对话",
pinChat: "置顶对话",
unpinChat: "取消置顶",
pinChatFailed: "更新对话置顶状态失败",
},
// Sidecar
sidecar: {
title: "侧边对话",
open: "打开侧边对话",
close: "关闭侧边对话",
delete: "删除侧边对话",
deleteConfirm:
"确定要删除该侧边对话吗?此操作不可撤销。如果只是想隐藏,请使用顶部的侧边对话开关。",
deleteSuccess: "侧边对话已删除",
deleteFailed: "删除侧边对话失败。",
addToConversation: "添加到对话",
askInSideChat: "在侧边聊天中提问",
reference: "引用",
selectedTextFragment: "{count} 个已选文本片段",
selectedTextFragments: "{count} 个已选文本片段",
clearReferences: "清除已选引用",
emptyTitle: "继续深入追问",
emptyDescription: "基于引用内容单独追问。",
placeholder: "继续深入追问...",
send: "发送",
sendFailed: "侧边对话发送失败。",
noContext: "未选择上下文",
continuing: "继续当前侧边对话",
selectionCrossesMessages:
"选区跨越了多条消息,请在同一条回复内选择要引用的文本。",
},
// Channels
channels: {
title: "渠道",
connect: "连接",
modify: "修改",
reconnect: "重新连接",
disconnect: "断开连接",
connected: "已连接",
notConnected: "未连接",
pending: "待完成",
revoked: "已断开",
disabled: "已停用",
unconfigured: "未配置",
unavailable: "当前无法使用渠道连接。",
unavailableShort: "不可用",
setupTitle: (name: string) => `连接 ${name}`,
setupEditTitle: (name: string) => `修改 ${name}`,
setupDescription:
"填写当前服务进程需要的配置值。这些内容不会写入 config.yaml。",
saveAndConnect: "保存并连接",
saveChanges: "保存修改",
descriptions: {
buzz: "通过 DeerFlow 智能体接收 Buzz 频道消息和私聊。",
telegram: "通过 DeerFlow Bot 接收 Telegram 私聊消息。",
slack: "接收 Slack 工作区消息和提及。",
discord: "通过 DeerFlow Bot 接收 Discord 服务器消息。",
feishu: "通过 DeerFlow 应用接收飞书和 Lark 消息。",
dingtalk: "通过 DeerFlow Bot 接收钉钉 Stream Push 消息。",
wechat: "通过 DeerFlow Bot 接收微信 iLink 消息。",
wecom: "通过 DeerFlow AI Bot 接收企业微信消息。",
},
connectedAs: (name: string) => `已连接为 ${name}。`,
},
// Page titles (document title)
pages: {
appName: "DeerFlow",
chats: "对话",
newChat: "新对话",
untitled: "未命名",
},
// Tool calls
toolCalls: {
details: "工具详情",
toolName: "工具名称",
callId: "调用 ID",
input: "输入",
result: "结果",
error: "错误",
noResult: "尚未收到结果",
emptyResult: "空结果",
truncated: "预览已截断;复制仅包含当前显示的内容。",
moreSteps: (count: number) => `查看其他 ${count} 个步骤`,
lessSteps: "隐藏步骤",
executeCommand: "执行命令",
presentFiles: "展示文件",
needYourHelp: "需要你的协助",
useTool: (toolName: string) => `使用 “${toolName}” 工具`,
searchFor: (query: string) => `搜索 “${query}”`,
searchForRelatedInfo: "搜索相关信息",
searchForRelatedImages: "搜索相关图片",
searchForRelatedImagesFor: (query: string) => `搜索相关图片 “${query}”`,
searchOnWebFor: (query: string) => `在网络上搜索 “${query}”`,
viewWebPage: "查看网页",
listFolder: "列出文件夹",
readFile: "读取文件",
writeFile: "写入文件",
clickToViewContent: "点击查看文件内容",
writeTodos: "更新 To-do 列表",
skillInstallTooltip: "安装技能并使其可在 DeerFlow 中使用",
browserNavigate: (url: string) => `在浏览器中打开 ${url}`,
browserNavigateGeneric: "在浏览器中打开页面",
browserClick: "在浏览器中点击元素",
browserType: "在浏览器中输入内容",
browserSnapshot: "在浏览器中读取页面",
browserGetText: "在浏览器中读取页面文本",
browserBack: "在浏览器中返回上一页",
browserScreenshot: "浏览器截图",
browserClose: "关闭浏览器",
},
humanInput: {
answered: "已回答",
pending: "发送中...",
readOnly: "只读",
otherLabel: "其他回答",
otherPlaceholder: "输入其他回答...",
submit: "提交",
emptyError: "请输入回答后再提交。",
requiredError: "请填写所有必填字段后再提交。",
requiredA11yLabel: "必填",
selectPlaceholder: "请选择...",
answeredValue: (value: string) => `已回答:${value}`,
},
uploads: {
uploading: "上传中...",
uploadingFiles: "文件上传中,请稍候...",
limitsHint: (maxFiles: number, maxFileSize: string, maxTotalSize: string) =>
`添加附件(最多 ${maxFiles} 个,单文件不超过 ${maxFileSize},总计不超过 ${maxTotalSize})。支持常规文件类型;macOS .app 应先压缩。`,
filesTooLarge: (files: string, maxFileSize: string) =>
`${files} 超过单文件 ${maxFileSize} 的限制,未被添加。`,
tooManyFiles: (count: number, maxFiles: number) =>
`有 ${count} 个文件未被添加;一次最多添加 ${maxFiles} 个文件。`,
totalSizeTooLarge: (count: number, maxTotalSize: string) =>
`有 ${count} 个文件未被添加;附件总大小不能超过 ${maxTotalSize}。`,
},
subtasks: {
subtask: "子任务",
executing: (count: number) =>
`${count > 1 ? "并行" : ""}执行 ${count} 个子任务`,
in_progress: "子任务运行中",
completed: "子任务已完成",
failed: "子任务失败",
},
// Token Usage
tokenUsage: {
title: "Token 用量",
label: "Tokens",
input: "输入",
output: "输出",
total: "总计",
view: "显示方式",
unavailable:
"暂无 Token 用量。只有模型成功返回且供应商提供 usage_metadata 时才会显示。",
unavailableShort: "未返回用量",
collecting: "统计中",
note: "顶部总量优先使用后端持久化的线程用量;当当前回复仍在流式返回时,还会叠加可见的进行中用量。每轮和调试用量只来自当前可见消息,可能与平台账单页不完全一致。",
presets: {
off: "关闭",
summary: "总览",
perTurn: "每轮",
debug: "调试",
},
presetDescriptions: {
off: "隐藏顶部和会话内的 token 展示。",
summary: "只在顶部显示当前对话累计 token。",
perTurn: "显示顶部累计,并为每轮 assistant 回复显示一条汇总 token。",
debug: "显示顶部累计,并展示按步骤归类的 token 调试信息。",
},
finalAnswer: "最终回复",
stepTotal: "步骤总计",
sharedAttribution: "该 token 由此步骤中的多个动作共同消耗",
subagent: (description: string) => `子任务:${description}`,
startTodo: (content: string) => `开始 To-do:${content}`,
completeTodo: (content: string) => `完成 To-do:${content}`,
updateTodo: (content: string) => `更新 To-do:${content}`,
removeTodo: (content: string) => `移除 To-do:${content}`,
},
contextUsage: {
label: "上下文",
title: "上下文窗口",
badgeAriaLabel: (percentage: string) => `上下文窗口已使用 ${percentage}%`,
},
// Shortcuts
shortcuts: {
searchActions: "搜索操作...",
noResults: "未找到结果。",
actions: "操作",
keyboardShortcuts: "键盘快捷键",
keyboardShortcutsDescription: "使用键盘快捷键更快地操作 DeerFlow。",
openCommandPalette: "打开命令面板",
toggleSidebar: "切换侧边栏",
},
// Settings
settings: {
title: "设置",
description: "根据你的偏好调整 DeerFlow 的界面和行为。",
sections: {
account: "账号",
appearance: "外观",
channels: "渠道",
memory: "记忆",
subagents: "子智能体",
notification: "通知",
about: "关于",
},
memory: {
title: "记忆",
description:
"DeerFlow 会在后台不断从你的对话中自动学习。这些记忆能帮助 DeerFlow 更好地理解你,并提供更个性化的体验。",
empty: "暂无可展示的记忆数据。",
rawJson: "原始 JSON",
exportButton: "导出记忆",
exportSuccess: "记忆已导出",
importButton: "导入记忆",
importConfirmTitle: "导入记忆?",
importConfirmDescription: "这会用选中的 JSON 备份覆盖当前记忆。",
importFileLabel: "已选择文件",
importInvalidFile: "读取记忆文件失败,请选择有效的 JSON 导出文件。",
importSuccess: "记忆已导入",
manualFactSource: "手动添加",
addFact: "添加事实",
addFactTitle: "添加记忆事实",
editFactTitle: "编辑记忆事实",
addFactSuccess: "事实已创建",
editFactSuccess: "事实已更新",
clearAll: "清空全部记忆",
clearAllConfirmTitle: "要清空全部记忆吗?",
clearAllConfirmDescription:
"这会删除所有已保存的摘要和事实。此操作无法撤销。",
clearAllSuccess: "已清空全部记忆",
factDeleteConfirmTitle: "要删除这条事实吗?",
factDeleteConfirmDescription:
"这条事实会立即从记忆中删除。此操作无法撤销。",
factDeleteSuccess: "事实已删除",
factContentLabel: "内容",
factCategoryLabel: "类别",
factConfidenceLabel: "置信度",
factContentPlaceholder: "描述你想保存的记忆事实",
factCategoryPlaceholder: "context",
factConfidenceHint: "请输入 0 到 1 之间的数字。",
factSave: "保存事实",
factValidationContent: "事实内容不能为空。",
factValidationConfidence: "置信度必须是 0 到 1 之间的数字。",
noFacts: "还没有保存的事实。",
summaryReadOnly:
"摘要分区当前仍为只读。现在你可以清空全部记忆或删除单条事实。",
memoryFullyEmpty: "还没有保存任何记忆。",
factPreviewLabel: "即将删除的事实",
searchPlaceholder: "搜索记忆",
filterAll: "全部",
filterFacts: "事实",
filterSummaries: "摘要",
noMatches: "没有找到匹配的记忆。",
markdown: {
overview: "概览",
userContext: "用户上下文",
work: "工作",
personal: "个人",
topOfMind: "近期关注(Top of mind)",
historyBackground: "历史背景",
recentMonths: "近几个月",
earlierContext: "更早上下文",
longTermBackground: "长期背景",
updatedAt: "更新于",
facts: "事实",
empty: "(空)",
table: {
category: "类别",
confidence: "置信度",
confidenceLevel: {
veryHigh: "极高",
high: "较高",
normal: "一般",
unknown: "未知",
},
content: "内容",
source: "来源",
createdAt: "创建时间",
view: "查看",
},
},
},
appearance: {
themeTitle: "主题",
themeDescription: "跟随系统或选择固定的界面模式。",
system: "系统",
light: "浅色",
dark: "深色",
systemDescription: "自动跟随系统主题。",
lightDescription: "更明亮的配色,适合日间使用。",
darkDescription: "更暗的配色,减少眩光方便专注。",
languageTitle: "语言",
languageDescription: "在不同语言之间切换。",
},
tools: {
adminRequired: "需要管理员权限才能管理 MCP 工具。",
empty: "暂无 MCP 工具。",
addServer: "添加服务器",
addServerDescription:
"粘贴 MCP 服务器提供的 JSON 定义。直接的服务器映射和带 `mcpServers` 外层的写法都可以。已有名称请通过“编辑”修改。",
addServerPlaceholder: `{
"mcpServers": {
"my-server": {
"command": "npx",
"args": ["-y", "@my-org/my-mcp-server"]
}
}
}`,
serverDefinitionLabel: "MCP 服务器 JSON 定义",
definitionEmpty: "请粘贴 MCP 服务器定义。",
definitionInvalidJson: "请输入有效的 JSON。",
definitionRootNotObject: "请输入描述一个或多个 MCP 服务器的 JSON 对象。",
definitionNoServers: "定义中未找到 MCP 服务器。",
definitionServerNotObject: "服务器“{name}”的配置必须是 JSON 对象。",
editServer: "编辑 MCP 服务器",
editServerDescription:
"编辑“{name}”的完整 JSON 定义。服务器名称不可修改;如需重命名,请添加新服务器后移除当前服务器。",
editSingleServer: "每次只能编辑一个 MCP 服务器。",
editServerNameMismatch: "编辑时请保留现有服务器名称“{name}”。",
serverAlreadyExists: "MCP 服务器“{name}”已存在,请使用“编辑”。",
removeServer: "移除 MCP 服务器",
removeServerDescription:
"确定从 MCP 配置中移除“{name}”吗?它的工具将不再提供给智能体。",
unnamedServer: "(空名称)",
},
subagents: {
title: "子智能体",
description:
"可由 Lead Agent 和已授权 Custom Agent 派遣、执行边界明确任务的复用型工作智能体。",
executionNote:
"每次调用都使用全新的临时上下文,没有独立持久会话或记忆,也不能向用户追问。系统提示词只改变工作方式;工具和技能才提供实际能力。",
adminNote:
"你可以查看目录;只有管理员可以添加、编辑、启停或删除子智能体。",
create: "添加子智能体",
empty: "暂无可用子智能体。",
sourceBuiltin: "内置",
sourceConfig: "config.yaml",
sourceManaged: "设置页管理",
conflict: "名称冲突,已从运行时排除",
overridden: "部分运行参数已被 config.yaml 覆盖",
createTitle: "添加子智能体",
editTitle: "编辑子智能体",
name: "名称",
nameHint: "仅可使用字母、数字和连字符。",
displayName: "显示名称",
descriptionLabel: "派遣说明",
systemPrompt: "系统提示词",
model: "模型",
inheritModel: "继承调用者模型",
tools: "允许的工具(逗号分隔)",
skills: "技能(逗号分隔)",
listModeAll: "继承全部可用项",
listModeNone: "全部禁用",
listModeSelected: "仅允许指定名称",
listNamesPlaceholder: "多个名称用逗号分隔",
maxTurns: "最大轮次",
timeout: "超时时间(秒)",
created: "子智能体已创建",
saved: "子智能体已保存",
deleted: "子智能体已删除",
deleteConfirm:
"确定删除这个子智能体吗?Custom Agent 可能仍保留对该名称的引用;以同名重建后,这些绑定会重新生效。此操作无法撤销。",
bindingTitle: "子智能体权限",
bindingDescription:
"选择这个 Custom Agent 可以派遣哪些子智能体;服务端会强制执行该范围。",
allAllowed: "全部已启用子智能体",
noneAllowed: "不允许使用子智能体",
selectedAllowed: "仅允许选中的子智能体",
missing: "已缺失或不可用;取消勾选后移除",
},
channels: {
title: "渠道",
description: "连接可在浏览器外向 DeerFlow 发送消息的即时通讯账号。",
disabled:
"当前服务器未启用渠道连接。请联系管理员开启 channel_connections。",
},
integrations: {
title: "集成",
description: "连接第三方工具和办公生态,让 Agent 能直接使用对应能力。",
refresh: "刷新",
install: "安装",
reinstall: "重新安装",
installing: "安装中...",
ready: "就绪",
pending: "待处理",
available: "可用",
unavailable: "不可用",
connected: "已连接",
loadFailed: "加载集成状态失败",
adminRequired: "需要管理员权限才能安装集成。",
lark: {
title: "Lark / 飞书 CLI",
description:
"安装官方 Lark/Feishu Agent Skills,并在授权后让 Agent 直接使用飞书能力。",
skillPack: "技能包",
gatewayCli: "Gateway CLI",
auth: "授权",
sandboxRuntime: "沙箱运行时",
sandboxRuntimeInitContainer: "由 init container 提供",
sandboxRuntimeBroker: "由 broker sidecar 提供",
sandboxRuntimeGatewayDownload: "由 Gateway 提供",
sandboxRuntimeNotReady: "未就绪 —— 对话时 lark-cli 可能不可用",
notInstalled: "尚未安装",
skillsInstalled: (installed, expected) =>
`已安装 ${installed}/${expected} 个技能`,
installedVersion: (version) => `已安装版本:${version}`,
updateAvailable: (version) =>
`有新版本:${version} —— 管理员重新安装会更新 managed Gateway CLI 和技能包`,
runtimeVersionMismatch:
"技能包版本与 Gateway 运行时 lark-cli 不一致;管理员重新安装会尝试更新 managed Gateway CLI 并重新对齐技能包",
authNotConfigured: "尚未连接",
authConfigured: "凭证已配置(未实时验证)",
authConfiguredFor: (user) => `${user} · 凭证已配置(未实时验证)`,
connect: "连接飞书",
authStarting: "正在打开连接链接...",
checkingConnection: "正在检查连接状态...",
connectedAction: "重新连接飞书",
requestPermissions: "申请新权限",
alreadyConnected:
"飞书已连接,无需重复授权。如果授权已过期,刷新状态后可重新连接。",
changeAppButton: "切换飞书 Bot",
changeAppTitle: "切换到其他飞书 App",
changeAppDescription:
"把你的 DeerFlow 账号指向另一个 Lark/飞书 App。只影响你自己的账号,不影响其他用户。",
changeAppIdLabel: "App ID",
changeAppSecretLabel: "App Secret",
changeAppAuthResetNote:
"切换时会撤销旧 App 的授权,随后需要授权新 App。",
changeAppSubmit: "切换 App",
changeAppReRegister: "在浏览器重新注册",
changeAppSwitched: "已切换飞书 App。请重新连接以授权新 App。",
brandFeishu: "飞书",
brandLark: "Lark",
connectionStarted: "连接链接已打开",
connectionReady: "连接准备已完成,正在打开授权链接",
authStarted: "授权页已打开,DeerFlow 会自动检测授权结果。",
authorizationStillPending:
"还没有检测到授权完成。请在浏览器完成授权;DeerFlow 会继续自动检测。如果页面没有更新,可点击“我已完成授权”。",
permissionTitle: "授权范围",
permissionDescription:
"默认只完成基础登录,不会申请任何业务权限。按需在这里勾选要授权的业务域;已连接用户可以重新授权继续追加(scope 会累积)。",
authDomains: {
calendar: {
label: "日历",
description: "日程、忙闲、日程回复与会议室预定。",
},
im: {
label: "消息",
description: "收发/回复消息、管理群聊、搜索记录、下载媒体。",
},
docs: {
label: "文档",
description: "创建、读取、编辑和搜索云文档。",
},
drive: {
label: "云空间",
description: "上传/下载文件、搜索文档与知识库、管理评论。",
},
sheets: {
label: "电子表格",
description: "读取、写入、追加、查找和导出电子表格。",
},
base: {
label: "多维表格",
description: "多维表格的表、字段、记录、视图、仪表盘与工作流。",
},
wiki: {
label: "知识库",
description: "知识空间、节点与知识库文档。",
},
task: {
label: "任务",
description: "任务、清单、子任务、评论与提醒。",
},
mail: {
label: "邮件",
description: "浏览、搜索、阅读、发送、回复、转发与管理草稿。",
},
vc: {
label: "视频会议",
description: "会议记录、纪要产物与录制。",
},
minutes: {
label: "妙记",
description: "会议纪要内容与逐字稿。",
},
note: {
label: "笔记",
description: "会议笔记及相关内容。",
},
slides: {
label: "幻灯片",
description: "演示文稿与幻灯片内容。",
},
markdown: {
label: "Markdown",
description: "创建、获取、局部修改和覆盖云盘原生 .md 文件。",
},
mindnotes: {
label: "思维笔记",
description: "思维笔记内容。",
},
contact: {
label: "通讯录",
description: "按姓名/邮箱/电话查用户并读取资料。",
},
approval: {
label: "审批",
description: "查询和处理审批任务、撤销与抄送实例。",
},
attendance: {
label: "考勤",
description: "查询个人考勤打卡记录。",
},
okr: {
label: "OKR",
description: "目标、关键结果、对齐、指标与进展。",
},
event: {
label: "实时事件",
description: "订阅并消费平台实时事件。",
},
apps: {
label: "妙搭应用",
description: "创建 Spark/妙搭应用、发布站点并管理可见范围。",
},
all: {
label: "全部",
description:
"申请 lark-cli 支持的全部业务域权限。仅在不确定缺哪个权限时使用。",
},
},
customScopeLabel: "具体 OAuth scope",
customScopePlaceholder: "例如 calendar:calendar.event:read",
customScopeDescription:
"高级用法:如果错误里给出了缺失 scope,可直接填在这里。例如 calendar:calendar.event:read、calendar:calendar.free_busy:read。",
openConnectionLinkTitle: "继续完成飞书连接",
openConnectionLinkDescription:
"首次连接需要在浏览器里完成一次飞书确认。打开下面的链接按提示完成;完成后回到这里继续授权。",
openAuthLinkTitle: "在浏览器中完成飞书授权",
openAuthLinkDescription:
"打开下面的链接完成授权。DeerFlow 会持续自动检测,并在授权通过后保存连接状态。",
waitingAuthTitle: "等待飞书授权完成",
waitingAuthDescription:
"请在刚打开的浏览器页面完成授权。DeerFlow 会自动更新这里的状态;下方按钮只是兜底操作。",
openAuthLink: "打开链接",
copyAuthLink: "复制链接",
completeAuth: "我已完成授权",
continueAuth: "我已完成浏览器确认,继续授权",
preparingAuthorization: "正在准备授权...",
completingAuth: "确认中...",
authExpiresIn: (seconds) => `链接将在约 ${seconds} 秒后过期。`,
installingTitle: "正在安装官方技能包",
installingDescription:
"通常 30 秒内完成,网络较慢时可能需要约 1 分钟。安装完成后会自动刷新状态。",
installNextTitle: "先安装官方技能包",
installNextDescription:
"安装后,/lark-doc、/lark-im、/lark-sheets 等技能会出现在技能索引中。",
cliNextTitle: "需要安装 Gateway CLI",
cliNextDescription:
"技能包已安装,但 Gateway 找不到 lark-cli。管理员重新安装集成会尝试下载 managed Gateway CLI;离线部署可使用内置 @larksuite/cli 的镜像。",
configuredTitle: "飞书凭证已在本地配置",
configuredDescription:
"当前只确认本地存在凭证,尚未向飞书实时验证有效性。重新连接可刷新并实时验证授权。",
connectedTitle: "飞书授权已实时验证",
connectedDescription:
"本次连接流程已向飞书验证当前用户授权。需要刷新授权或追加权限时,可重新连接。",
authNextTitle: "下一步完成浏览器授权",
authNextDescription:
"点击“连接飞书”后,DeerFlow 会先检查当前状态;未连接或授权过期时会拉起浏览器授权。",
},
},
skills: {
exportPrevious: "上 50 项",
exportNotices: {
skill_export_yaml_alias:
"导出暂不支持 YAML 别名,请在 SKILL.md 中改为明确的值。",
skill_export_yaml_complexity:
"YAML 声明的嵌套层级或结构复杂度超出导出限制。",
skill_export_invalid_declaration:
"已忽略格式无效的凭据声明,请检查 SKILL.md。",
skill_export_link: "外链文件或目录暂不支持导出。",
skill_export_unsupported_node:
"仅支持普通文件和目录;硬链接和特殊文件无法导出。",
skill_export_invalid_path: "此路径不符合跨平台要求,或与其他路径重名。",
skill_export_nested_skill: "安装器不接受嵌套的 SKILL.md 文件。",
skill_export_executable_binary: "安装器不接受可执行二进制文件。",
skill_export_invalid_frontmatter:
"SKILL.md 的声明必须有效,且名称须与技能目录一致。",
skill_export_sensitive_filename:
"此文件名可能对应本地凭据或代码仓库元数据。",
skill_export_platform_declarations:
"请在目标环境重新配置已声明的工具和凭据。",
},
exportSkill: "导出",
exportTitle: "导出技能",
exportDescription: "将当前已保存的技能下载为 .skill 文件。",
exportLoading: "正在准备文件清单…",
exportFiles: "文件",
exportDirectories: "目录",
exportSize: "未压缩体积",
exportContents: "包内文件",
exportMore: "下 50 项",
exportRequirements: "已声明的环境要求",
exportCompatibility: "运行环境",
exportTools: "允许的工具",
exportSecrets: "凭据名称",
exportOptional: "可选",
exportRequired: "必需",
exportUndeclared: "未声明",
exportScope:
"包含此技能目录内的全部文件。账号配置、对话和目录外的历史不会导出;目标环境需重新配置工具与凭据。",
exportWarnings: "请检查包内文件",
exportWarningDescription:
"以下提示来自文件名和声明。写在包内文件中的秘密也会原样导出;此操作不进行安全扫描。",
exportBlocked: "此技能包暂时无法导出",
exportDownload: "下载 .skill",
exportDownloading: "正在准备下载…",
exportHandedOff: "文件已交给浏览器下载。",
exportChanged: "技能已修改,请刷新文件清单后下载。",
exportRefresh: "刷新文件清单",
exportFailed: "导出失败,请重试。",
exportBusy: "当前导出任务已满,请稍后重试。",
exportTimeout: "准备技能包超时,请稍后重试。",
exportLimit: "技能包超出导出的大小、数量或路径限制。",
exportNotFound: "此自定义技能已不存在,请刷新技能列表。",
createSkill: "新建技能",
emptyTitle: "还没有技能",
emptyDescription:
"将你的 Agent Skill 文件夹放在 DeerFlow 根目录下的 `/skills/custom` 文件夹中。",
emptyButton: "创建你的第一个技能",
adminRequired: "需要管理员权限才能管理 Agent Skill。",
installAdminRequired: "需要管理员权限才能安装 Agent Skill。",
installFromFile: "安装 .skill",
installingArchive: "正在安装…",
invalidArchive: "请选择扩展名为 .skill 的文件。",
archiveTooLarge: "技能包大小不能超过 100 MiB。",
installFailed: "安装技能包失败。",
},
notification: {
title: "通知",
description:
"DeerFlow 只会在窗口不活跃时发送完成通知,特别适合长时间任务:你可以先去做别的事,完成后会收到提醒。",
requestPermission: "请求通知权限",
deniedHint:
"通知权限已被拒绝。可在浏览器的网站设置中重新开启,以接收完成提醒。",
testButton: "发送测试通知",
testTitle: "DeerFlow",
testBody: "这是一条测试通知。",
notSupported: "当前浏览器不支持通知功能。",
disableNotification: "关闭通知",
},
account: {
profileTitle: "个人信息",
email: "邮箱",
role: "角色",
ssoProvider: "SSO",
changePasswordTitle: "修改密码",
changePasswordDescription: "更新你的账号密码。",
ssoPasswordDescription: "密码由你的 SSO 提供商管理。",
ssoPasswordMessage:
"此账号通过 {provider} 登录,DeerFlow 无法在此管理或修改密码。请前往你的 SSO 提供商账号设置中进行操作。",
currentPassword: "当前密码",
newPassword: "新密码",
confirmNewPassword: "确认新密码",
passwordMismatch: "两次输入的新密码不一致",
passwordTooShort: "密码长度至少为 8 个字符",
passwordChangedSuccess: "密码修改成功",
networkError: "网络错误,请重试。",
updating: "更新中...",
updatePassword: "修改密码",
signOut: "退出登录",
},
acknowledge: {
emptyTitle: "致谢",
emptyDescription: "相关的致谢信息会展示在这里。",
},
},
login: {
signInTitle: "登录你的账号",
createAccountTitle: "创建新账号",
email: "邮箱",
emailPlaceholder: "you@example.com",
password: "密码",
passwordPlaceholder: "•••••••",
rememberMe: "保持登录",
rememberMeDescription:
"下次打开 DeerFlow 时尽量保持当前会话,仅保存邮箱,不保存密码。",
pleaseWait: "请稍候...",
signIn: "登录",
createAccount: "创建账号",
createAdminAccount: "创建管理员账号",
adminSetupRequiredTitle: "需要先完成管理员初始化",
adminSetupRequiredDescription:
"DeerFlow 需要先创建管理员账号,然后才能创建新的普通账号。",
orContinueWith: "或使用以下方式登录",
ssoHint: "如果你的账号使用单点登录(SSO),请改用下方的选项登录。",
continueWith: (provider: string) => `使用 ${provider} 登录`,
noAccountSignUp: "还没有账号?立即注册",
haveAccountSignIn: "已有账号?立即登录",
backToHome: "← 返回首页",
networkError: "网络错误,请重试。",
serviceUnavailableTitle: "服务暂时不可用",
serviceUnavailableDescription:
"网关响应时间过长。请确认服务正在运行,然后重试。",
retry: "重试",
authFailed: "身份验证失败。",
errors: {
sso_failed: "SSO 登录失败,请重试或使用邮箱登录。",
sso_cancelled: "SSO 登录已取消。",
sso_account_exists:
"该邮箱对应的账号已存在。请使用密码登录或联系管理员。",
sso_not_allowed: "你的账号不允许使用 SSO 登录。请联系管理员。",
},
},
};