Files
DevFlow/src/i18n/en/ai.ts
T
lxy 3e3c6f4d0f 优化: 界面交互完善与设置体验
- 审批卡尊重滚动意图,等长切换回底,排队超时按钮修活
- 带图编辑提示不静默丢,删除目标回写,切换文案消歧
- 会话键盘可达+搜索态重命名,筛选计数口径对齐
- 子任务提示正名,看板加载态
- 主题跟随系统,表单脏态拦截,密钥显隐留空提示
2026-10-03 16:28:38 +08:00

95 lines
6.1 KiB
TypeScript

export default {
ai: {
assistant: 'AI Assistant',
toolName: {
readFile: 'Read File',
listDirectory: 'List Directory',
writeFile: 'Write File',
fileInfo: 'File Info',
appendFile: 'Append File',
searchFiles: 'Search Files',
patchFile: 'Patch File',
deleteFile: 'Delete File',
renameFile: 'Rename/Move File',
},
aiTool: {
fileInfoDesc: 'Get file or directory metadata (exists, size, line count, modified time, is binary, is directory) without reading content',
appendFileDesc: 'Append content to end of file. Creates file if not exists. Returns bytes written and new file size',
searchFilesDesc: 'Search for files matching a pattern (case-insensitive substring match) in a directory. Supports recursive search, max 50 results with total count and has_more flag',
renameFileDesc: 'Rename or move a file (one tool covers both rename and move). from=source path, to=target path, overwrite=default false (reject if target exists). Atomic rename on same volume, auto copy+remove across volumes',
},
errorNotFound: 'Request failed: the endpoint or model does not exist. Please check the Provider configuration.',
errorAuth: 'Request failed: the API key is invalid or lacks permission.',
errorTimeout: 'The response timed out. Please try again.',
errorNetwork: 'Network connection failed. Please check your network.',
// CR-30-2 / F-260616-07(d) / decision a1: copy for the auto-retry transition line
// (neutral wording: a retry is transient, not a terminal failure; exhausted retries still surface the AiError card)
aiStreamRetry: 'Connection interrupted, auto-retrying ({attempt}/{max})…',
// Fatal errors (4xx/auth) are not retryable — prompt user to check settings instead
notRetryable: 'This error cannot be resolved by retrying. Please check the configuration.',
streamInterruptedAfterTool: '⚠ The tool finished, but the following reply was interrupted (no data stream for a long time). You can click Continue to retry.',
streamInterrupted: '⚠ The response was interrupted (no data stream for a long time). This may be due to a network disconnection or a backend error. Please try again.',
// Light-convergence notice when the watchdog probe reports the backend already finished (only the closing event was lost)
streamFinishedConverged: 'The response was interrupted during finalization and has been converged.',
// First-time notice when the watchdog probe finds the backend loop alive/auto-resumed (only the first probe posts; subsequent re-arms stay silent)
streamAutoResuming: 'The response stalled and is auto-resuming (no action needed)...',
// UX-2025-04 / CR-30-2 / decision a1: system notice bubble after mid-stream failure preserve (frontend mirrors backend session.messages)
responseIncomplete: '⚠ The response is incomplete due to a network interruption. The above is the partial content received. You can resend to get a full reply.',
// Backend auto-finalized after reaching the max rounds (not a network interruption; reuses the incomplete bubble with distinct semantics)
responseIncompleteMaxRounds: 'Maximum rounds reached. The AI has finalized this round with the results so far; continue the conversation to have it refine and complete the answer.',
queueFull: 'Send queue is full (max {limit} items)',
forceSendConfirm: 'AI generation appears stuck. Force-stop and send anyway? (This may interrupt the current response)',
forceSendBtn: 'Force Send',
queueTimedOut: 'Queue timed out',
approvalNotDelivered: 'Approval operation failed to reach the backend: {error}',
queuedSendFailed: 'Failed to send queued message: {error}',
// UX-P2-A2: toast when queued messages get dropped by error/regenerate/edit (was silent)
queueCleared: 'Cleared {n} queued message(s)',
approvalTimeout: '⚰ Approval timed out, automatically rejected: {toolName}',
// conversation load/switch failure feedback (network jitter/IPC down → empty list/blank, was silent)
loadConvFail: 'Failed to load conversations. Please check your network or backend connection.',
switchConvFail: 'Failed to switch conversation. Please retry.',
// M30: rename/archive/pin IPC failure feedback (was no try/catch, exceptions leaked to unhandledrejection)
renameConvFail: 'Failed to rename. Please retry.',
archiveConvFail: 'Failed to {action}. Please retry.',
pinConvFail: 'Failed to {action}. Please retry.',
// G3.4: new/delete conversation failure feedback (was bare await → unhandledrejection, user no feedback)
newConvFail: 'Failed to create a new conversation. Please retry.',
deleteConvFail: 'Failed to delete conversation. Please retry.',
archiveAction: 'archive',
unarchiveAction: 'unarchive',
pinAction: 'pin',
unpinAction: 'unpin',
// Agentic loop progress bar copy (status semantics: round N · M calls total · running/pending)
// total is aggregated on the frontend from current-turn toolCalls (useTurnTrace), not a backend field
// Note: max round is not surfaced by backend; template conditionally omits it.
agenticProgress: 'Round {round} · {total} calls total · ⏳{pending} pending',
agenticProgressNoPending: 'Round {round} · {total} calls total · running',
// Shared semantics for execution trace card / live step summary (A) and aggregate group row (B)
trace: {
title: 'Execution Trace',
calls: '{n} calls',
ok: '{n} ok',
fail: '{n} failed',
rejected: '{n} rejected',
duration: 'total {time}',
expand: 'Expand trace',
collapse: 'Collapse trace',
roundN: 'Round {n}',
processOnly: 'Process log',
stepDone: '✓ {n} calls done',
stepRunning: 'running {name}',
stepPending: '⏳ {n} pending approval',
},
// S1 sub-agent finished card (AiAgentFinished): lightweight terminal-state card at the
// end of the parent conversation message flow
agentFinished: {
title: 'Sub-agent',
completed: 'completed',
truncated: 'truncated',
failed: 'failed',
meta: '{rounds} rounds · {tokens} tokens',
},
},
}