Files
DevFlow/src/i18n/zh-CN/aiChat.ts
T
lxy 5cebfcd864 新增: 压缩失败降级前端透出与vite看门修复
- E2:LLM压缩失败走关键词摘要兜底时新发AiContextDegraded事件,
  前端toast「上下文已降级」不再静默失忆(实证76730ce8 seq166
  用户被迫原句重发);不发AiError防误判生成结束
- keyword_fallback_commit返回inserted供emit判定,双调用点
  (LLM失败/provider重建失败)透出
- vite watch忽略target/:cargo编译写.o触发EBUSY杀掉dev进程

验收:cargo check 0 error;keyword_fallback 3 passed;vue-tsc EXIT 0
2026-10-19 00:00:55 +08:00

386 lines
18 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 {
aiChat: {
// ── 多 Agent 并行执行 ──
conflictsPending: '{n} 处冲突待处理',
acceptA: '接受 A',
acceptB: '接受 B',
mergeBoth: '合并两者',
manualResolve: '手动处理',
// ── 对话侧栏 ──
sidebarTitle: '对话',
newConversation: '新对话',
doubleClickToRename: '双击重命名',
generating: '生成中…',
archive: '归档',
unarchive: '取消归档',
pinConversation: '置顶',
unpinConversation: '取消置顶',
// UX走查 P3-1/P2-6: 会话「...」菜单重命名入口(搜索态无双击降级补齐 + 键盘可达的重命名路径)
renameConversation: '重命名',
moreActions: '更多操作',
archived: '已归档',
archivedCount: '已归档 ({n})',
recoverableCount: '可恢复 ({n})',
recoverableHint: '任务已安全停靠,点击恢复继续执行',
// ── 挂机引擎态徽章(TopBar;开启时显示,熔断红徽点击复位) ──
unattendedOn: '挂机中',
unattendedExecuting: '执行中',
unattendedTripped: '挂机熔断',
unattendedBadgeHint: '挂机模式运行中,点击前往设置',
unattendedResetHint: '连续启动失败已自动熔断,点击复位并重新开启',
recoverableDone: '任务已恢复,继续后台执行',
recoverableFail: '恢复失败: {msg}',
emptyConversation: '暂无对话',
// UX-06 §3.1:对话搜索(实时过滤标题,Ctrl+K 聚焦)
searchPlaceholder: '搜索对话…',
searchEmpty: '无匹配对话',
searchShortcutHint: 'Ctrl+K',
// ── 时间分组(侧栏) ──
today: '今天',
yesterday: '昨天',
earlier: '更早',
groupEmpty: '暂无',
// ── Header 按钮 ──
conversationList: '对话列表',
maximize: '最大化',
pendingApprovalCount: '{n} 项待审批',
pendingApprovalHint: '点击跳转到第一个待审批项',
// UX 走查 B1:审批卡到达但用户上滚读历史,不强拉滚动,只出轻提示(ToolCardList 5s 去重)
newApprovalPending: '有新的审批待处理',
restoreSidebar: '还原侧栏',
sidebarResizeHint: '拖拽调整侧栏宽度',
detachWindow: '分离窗口',
reattachToMain: '收回主面板',
closePanel: '关闭面板',
dockRight: '吸附到主窗口右侧',
undock: '取消吸附',
pinOnTop: '置顶',
unpin: '取消置顶',
closeWindow: '关闭窗口',
// I9(2026-10-05)文本/代码文件附件
pickFileTitle: '选择文本/代码文件',
textFileFilter: '文本/代码文件',
fileTooLargeTruncated: '文件过大,已截断插入',
fileReadFailed: '文件读取失败,已跳过',
shortcutsTitle: '键盘快捷键',
scNewConv: '新建对话',
scFocusInput: '聚焦输入框',
scRegenerate: '重新生成回复',
scClearChat: '清空当前对话',
scSearch: '聚焦会话搜索',
scToggleSidebar: '展开/收起侧栏',
scCloseOverlay: '关闭弹窗/面板',
// ── 审批浮层(全局右上角)──
approvalWaitingTitle: '有待审批请求',
approvalWaitingDesc: '点击查看并处理',
// ── 系统级审批浮窗(独立窗口,应用失焦时可见)──
popupTitle: '审批待办',
popupTagPath: '路径授权',
popupTagRisk: '风险操作',
popupOpenPanel: '打开审批面板',
// 空态文案:正常空态会被 maybeAutoClose 即时关窗,此 hint 仅 close 失败时兜底
popupEmptyHint: '正在关闭…',
// ── Provider 状态 ──
clickToSwitchProvider: '点击切换 Provider',
// UX 走查 B5:顶栏切换与设置页「设为默认」同一条 IPC(ai_set_provider 互斥写 is_default),文案如实标注
providerSwitchSetsDefault: '点击切换 Provider(切换即设为全局默认)',
providerNotConfigured: '未配置 AI 提供商,请在设置中添加',
notConfigured: '未配置',
// ── F-01 阶段6: 模型选择器(自动/指定 toggle + 下拉) ──
autoMode: '自动',
specifyMode: '指定',
autoModeHint: '自动模式:路由器按场景自动选最优模型',
specifyModeHint: '指定模式:使用下拉所选模型覆盖路由(仅主对话)',
selectModel: '选择模型',
noModels: '无可用模型,请在设置中拉取',
// ── 空状态示例问题卡片 + 无 provider 引导) ──
emptyNoProvider: '未配置 AI 提供商',
emptyNoProviderHint: '请在设置中添加 Provider 后开始对话',
emptyTitle: '与 AI 助手对话',
emptyHint: '可以说"帮我创建一个项目"或"列出所有任务"',
// 示例问题卡片:点击自动填入并发送(4 条,DevFlow 场景相关)
examplePrompt1: '分析这个项目的依赖关系',
examplePrompt2: '帮我写一个工作流节点',
examplePrompt3: '列出当前所有任务',
examplePrompt4: '生成一个项目灵感',
goToSettings: '去设置',
goToSettingsHint: '分离窗口无法直接打开设置,请在主窗口的设置页配置 AI 提供商',
goToSettingsOpened: '已在主窗口打开设置页',
goToTaskHint: '分离窗口无法直接打开任务,请在主窗口查看任务详情',
// ── Provider 切换反馈──
providerSwitched: '已切换到 {model}',
providerSwitchHint: '当前模型:{model}',
// ── 回到底部 ──
backToBottom: '回到底部',
// ── 待发送队列 ──
queueTitle: '待发送 {n}/10',
clearQueue: '清空',
// UI-4(看板 943):清空队列二次确认(一键全清不可恢复)
clearQueueConfirm: '确定清空全部待发送消息?清空后不可恢复',
// 队列项编辑 + 立即发送
queueEdit: '编辑',
queueSave: '保存',
queueCancel: '取消',
queueSendNow: '立即发送',
// 走查-信息UX 面二 F2-1:发送钮 title/aria(原误绑 queueSendNow,语义是插队而非发送)
send: '发送',
// 3c UX 批追加(I4 队列回填:取出排队项填回输入框重新编辑)
queueBackfill: '回填',
// ── 技能 ──
clearSkill: '取消技能',
skillBadgeTip: '已注入技能「{name}」的完整规程',
placeholderWithSkill: '已选技能,输入参数后回车',
placeholderDefault: "输入消息...(/ 触发技能,{'@'} 引用实体)",
skillNoMatch: '无匹配技能',
skillNotLoaded: '未读取到本机技能',
// ── @ 实体引用(@ 触发 popover,选中插入 [类型:名] 标记) ──
mentionHint: "{'@'} 引用项目/任务",
mentionGroupProject: '项目',
mentionGroupTask: '任务',
mentionGroupIdea: '灵感',
mentionNoMatch: '无匹配实体',
mentionEmpty: '暂无可引用的项目/任务',
// ── 发送 ──
stopGenerating: '停止生成',
// L2 状态机停止按钮三态(ConvState 派生)
stopping: '停止中',
stopFailedRetry: '停止失败,点击重试',
// ── 输入提示 ──
inputHint: 'Enter 发送 · Shift+Enter 换行',
// ── F-260614-05 Phase 2b: 图片输入(粘贴/拖拽) ──
// 粘贴/拖拽图片到输入框,发送时构造多模态 ContentPart[] 渲染到用户气泡
pickImage: '选择图片',
pickImageTitle: '选择图片(可粘贴/拖拽)',
imageFilter: '图片文件',
removeImage: '移除图片',
imagePreviewAlt: '待发送图片',
imageTooLarge: '图片过大(上限 10MB),已跳过',
imageLimit: '最多 {n} 张图片,已忽略多余的',
imageReadFailed: '图片读取失败',
imageIgnoredWarn: '当前模型不支持图片,发送时图片将被忽略',
imageOnlyBlocked: '当前模型不支持图片,请改用视觉模型或补充文字说明',
// ── 确认弹层 ──
confirmDeleteConversation: '确定删除对话「{title}」?该操作不可恢复。',
// 删除当前活跃对话的醒目提示(活跃对话误删会清空当前视图,影响更大)
confirmDeleteActiveConversation: '「{title}」是当前正在查看的对话,删除后将清空当前视图且不可恢复,确定继续?',
clearChat: '清空',
confirmClearChat: '确定清空当前对话的所有消息?此操作不可恢复。',
toastSendFail: '发送失败:{msg}',
// ── 消息拷贝──
copyMsg: '复制消息',
copied: '已复制',
copyFailed: '复制失败',
// F1-1:代码块复制按钮(v-html 渲染层注入,decorateCodeHtml 传参)
copyCode: '复制',
// F1-1:长文折叠条带量按钮(展开态复用 collapse 键)
foldedSummary: '已折叠 {chars} 字符 / 约 {tokens} tokens,点击展开',
// 气泡复制为图片(html2canvas 渲染 → 剪贴板;失败降级下载)
copyAsImage: '复制为图片',
copiedAsImage: '已复制为图片',
copyAsImageFailed: '复制为图片失败',
// ── 消息操作栏──
// regenerateUnavailable:Ctrl+R / 重试链仍走 store.regenerate(),前置校验失败 toast 用
// (I6 回滚只撤了 UI 按钮,此键仍被 useAiSend.ts 引用——review 2026-10-05 ②)
regenerateUnavailable: '没有可重新生成的回复',
regenerateFailed: '重新生成失败:{msg}',
// fetch_url "AI 帮装 obscura" 按钮触发 sendMessage 失败的 toast(对齐 editMessageFailed 模式)
sendFailed: '发送失败:{msg}',
// ── 编辑末条 user 消息并重新生成 ──
editMessage: '编辑',
editMessageFailed: '编辑失败:{msg}',
editNotLastUser: '只能编辑最后一条用户消息',
// UX 走查 B3:editMessage IPC 不接 parts,编辑重发会静默丢图,入口禁止并提示
editImageBlocked: '该消息包含图片,暂不支持编辑(重新生成会丢失图片)',
placeholderEditing: '编辑消息后回车重新生成(Esc 取消)',
// ── 错误气泡操作入口(UX-03 / ) ──
retry: '重试',
goToSettingsAction: '去设置',
// ── 达 max_iterations 暂停态操作卡 ──
maxRoundsReached: '已达最大轮次,是否继续?',
maxRoundsHint: '继续将再跑一轮上限;停止则按当前结果收尾',
continueLoop: '继续',
stopLoop: '停止',
continueLoopFailed: '继续失败:{msg}',
stopLoopFailed: '停止失败:{msg}',
// ── L1 求助协议(aichat 体验与 agent 能力系统化重构 §2.3,2026-06-21):断路器熔断求助卡 ──
helpRequiredAck: '已记录选择,请重新描述需求以换思路/继续',
// ── F-260619-03 Phase B: 路径授权弹窗(LLM 访问白名单外目录挂起) ──
dirAuthRequired: '需要路径授权',
dirAuthHint: '{tool} 想访问:{path}',
dirAuthOnce: '本次',
dirAuthSession: '当前会话',
dirAuthAlways: '始终放行',
dirAuthDeny: '拒绝',
dirAuthFailed: '授权失败:{msg}',
// M5:path 类拒绝二次确认(拒绝不可逆——工具返 Err、loop 续跑不再重试,与 approve 不对称,防误点)
dirAuthDenyConfirm: '确定拒绝授权吗?该工具将立即失败,且本轮不会重试。',
// 「信任所有目录」总开关开启期间的常驻放行横幅(对话区顶部)
pathAuthBypassBanner: '授权已完全放行(含敏感目录):AI 可直接访问任意文件',
// ── Input Augmentation 层: mention/skill 注入反馈 ──
// search_files 盲搜被白名单兜底拒绝(不应弹授权窗,直接友好提示用户改用 @引用或绝对路径)
searchFilesBlocked: "search_files 仅在已授权目录可用,请用 {'@'}[项目] 引用或提供绝对路径",
// /技能 热重载(ai_reload_skills IPC)成功后提示
skillReloaded: '技能已重新加载',
// @引用 实体 resolve 失败(id 指向的项目/任务/灵感/技能已被删除或不可用)
mentionUnresolved: '引用的 {kind} 已删除或不可用',
// 同名技能冲突(scan_skills 返回 conflicts,前端提示,注入按 skills>commands>plugins 优先级取首份)
skillConflict: '技能 {name} 存在多份定义,已采用 skills 优先级',
// ── ⑥.4 Phase 4: @项目展开摘要(输入区预览 ──
enrichmentBadge: '📎 已关联「{project}」({tasks} 项任务, {ideas} 项灵感)',
enrichmentExpand: '展开上下文参考',
enrichmentCollapse: '收起上下文参考',
enrichmentLabel: '上下文参考',
// ── F-15 阶段2: 手动上下文管理(清空 / 压缩) ──
// 按钮(Header 操作区:垃圾桶 + 压缩图标)
clearContext: '清空上下文',
compressContext: '压缩上下文',
// 二次确认(清空不可逆语义,防误触;历史归档保留不删)
// 标题「清空上下文」融入正文首句;强调不可逆 + 归档分段 + AI 不再看到历史
clearContextConfirm: '清空上下文?此操作不可逆,当前对话上下文将被归档为分段(AI 将不再看到这些历史消息)。新对话不受影响。',
// 二次确认弹窗的危险按钮文案(ConfirmDialog dangerLabel);不传则回退 common.confirm
clearContextDangerLabel: '清空',
// 折叠分隔条(连续同 status 合并一条;{n}=合并的消息条数)
contextArchived: '已归档 {n} 条消息',
compressed: '已压缩上下文',
compressing: '压缩中…',
clearSuccess: '上下文已清空',
compressSuccess: '上下文已压缩',
// B4: 自动压缩完成一次性提示(loop 自动压缩不再全程静默)
autoCompressed: '上下文已自动压缩(较早消息已折叠为摘要)',
compressError: '压缩失败:{msg}',
// E2:压缩失败走关键词摘要兜底,loop 继续——提示降级而非静默失忆
contextDegraded: '上下文已降级:{reason},AI 可能缺失部分早前细节',
clearError: '清空失败:{msg}',
initError: 'AI 面板初始化失败:{msg}(重开面板可重试)',
initDegraded: '列表加载失败,面板降级继续:{msg}',
// 折叠条展开 / 收起
expand: '展开',
collapse: '收起',
// 压缩摘要块标题(展开后 system 摘要消息前的标签)
compressedSummaryLabel: '上下文摘要',
// ── TopBar 底部上下文徽章(tooltip + L3 完整上下文 popover 标签) ──
viewGoals: '查看目标',
runningTasks: '后台进行中任务',
runningRounds: '进行中 {n} 轮',
untitledConversation: '未命名会话',
recoverableTask: '中断·可恢复',
recoverNow: '恢复',
viewHistory: '查看历史消息',
viewSummary: '查看上下文摘要',
// 走查-信息UX 面六 F6-1:历史/摘要项点击定位未命中(目标在折叠段内未渲染 DOM)的行内提示
historyLocateInSegment: '该消息在折叠段(已归档/已压缩)内,请先在消息流中展开对应分隔条',
viewContext: '查看 AI 上下文',
contextSystemPrompt: '系统提示',
contextEnvironment: '环境',
contextCompressedSummary: '压缩摘要',
contextEnrichment: '增强上下文',
contextCountUnit: '条',
// ── EnrichmentPanel ──
enrichmentDismiss: '取消关联',
// ── AE-2025-04 会话级信任(Session Trust) ──
// 自动放行 toast(同会话已批准过同类操作:同工具+同目录,轻量 info 非审批气泡)
autoApprovedToast: '已自动放行: {tool}({dir})',
// ── 技能注入反馈闭环(/ 技能 resolve 成功/失败轻 toast) ──
skillInjectedToast: '已注入技能《{name}》',
skillNotFoundToast: '技能 {name} 未找到',
// ── CIStatus.vue(代码提交 CI 检查状态卡)──
ciTitle: 'CI 检查',
ciNFailed: '{n} 项失败',
ciNPending: '{n} 项进行中',
ciNPassed: '{n} 项通过',
// ── MessageList token 详情面板(分计费:输入/缓存命中/输出/思考) ──
tokenDetailTitle: 'Token 用量详情',
estimated: '估算',
tokenInLabel: '输入(未命中,全价)',
tokenCacheLabel: '缓存命中(低价)',
tokenOutLabel: '输出',
// #12 会话累计 token(token 详情面板尾部段)
tokenConvTotal: '会话累计',
tokenConvTotalIn: '会话累计·输入',
tokenConvTotalOut: '会话累计·输出',
tokenReasonLabel: '思考(reasoning)',
tokenCacheRateLabel: '缓存命中率',
tokenModelLabel: '模型',
tokenUsageNoteLabel: '用量说明',
tokenUsageNote: 'prompt_tokens 缺失,按估算展示',
// ── TopBar 目标/项目上下文标签 ──
goalsCount: '目标({n})',
none: '无',
projectLabel: "{'@'}项目",
// ── 3c UX 批追加(I5 发送失败错误分类文案):按错误内容映射友好提示,
// {msg} 保留原始错误串供排查,不丢线索 ──
sendErrRateLimit: '发送频率超限,请稍后重试(原始错误:{msg})',
sendErrQuota: 'AI 服务额度或余额不足,请检查 Provider 账户(原始错误:{msg})',
sendErrNetwork: '网络异常或请求超时,请检查网络后重试(原始错误:{msg})',
// ── UX-P3 对话域打磨追加 ──
editEmptyBlocked: '编辑内容为空,已取消提交',
skillNoMatchQuery: '未找到技能「{q}」,已阻止发送',
backfillOverwriteConfirm: '输入框已有未发送草稿,回填将覆盖,确定继续?',
// 走查-信息UX 面二 F2-4:示例问题卡覆盖草稿二次确认(对齐回填确认语义)
exampleOverwriteConfirm: '输入框已有未发送草稿,点击示例将覆盖,确定继续?',
// ── 待发箱/定时消息(OutboxDrawer + ChatInput ⏰ 入口,设计 2026-10-10 §3.4)──
outboxEntry: '定时消息',
outboxTitle: '定时与待发',
outboxEmpty: '暂无定时或待发消息',
outboxNewTitle: '新建定时消息',
outboxNewPlaceholder: '输入要定时发送的内容',
outboxTimeLabel: '发送时间',
outboxCreate: '定时发送',
outboxReschedule: '改期',
outboxSendNow: '立即发送',
outboxCancel: '取消',
outboxQueueAsap: '尽快',
outboxStatusPending: '待发',
outboxStatusSending: '发送中',
outboxStatusSent: '已发送',
outboxStatusFailed: '失败',
outboxStatusCanceled: '已取消',
outboxActionFail: '操作失败,请重试',
outboxDuePast: '定时时间必须晚于当前时刻',
outboxNeedConv: '无目标会话,请先创建会话',
contextBriefsToggle: '展开或收起项目脉络',
contextBriefsTitle: '项目脉络',
contextBriefsLoading: '加载中…',
contextBriefsEmpty: '暂无知识沉淀。会话结束时会自动提炼对话要点,沉淀到这里',
contextBriefsBringIn: '带入上下文',
},
}