优化: 聊天体验批与Web规范合规
This commit is contained in:
+5
-1
@@ -27,7 +27,7 @@ export default {
|
||||
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.',
|
||||
streamInterruptedAfterTool: '⚠ The tool finished, but the following reply was interrupted (no data stream for a long time). Click Retry to continue (reruns the whole turn; completed tools will execute again).',
|
||||
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.',
|
||||
@@ -45,6 +45,7 @@ export default {
|
||||
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)',
|
||||
queueWillContinue: 'Stopped. {n} queued message(s) will still send automatically.',
|
||||
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.',
|
||||
@@ -181,6 +182,9 @@ export default {
|
||||
echoDirs: '{n} dirs',
|
||||
echoBudget: 'budget {rounds} rounds / {tokens} tokens / {secs}s',
|
||||
echoNoBudget: 'no budget limit',
|
||||
// A12: budget validation field locator; A11: dirty-edit kept notice
|
||||
budgetInvalidField: '{field} must be a positive integer',
|
||||
dirtyKept: 'Unsaved edits kept (target conversation switched, verify before confirming)',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
+22
-2
@@ -49,6 +49,19 @@ export default {
|
||||
pinOnTop: 'Pin on top',
|
||||
unpin: 'Unpin',
|
||||
closeWindow: 'Close window',
|
||||
// I9(2026-10-05) text/code file attachment
|
||||
pickFileTitle: 'Select text/code files',
|
||||
textFileFilter: 'Text/code files',
|
||||
fileTooLargeTruncated: 'File too large, truncated on insert',
|
||||
fileReadFailed: 'Failed to read file, skipped',
|
||||
shortcutsTitle: 'Keyboard shortcuts',
|
||||
scNewConv: 'New conversation',
|
||||
scFocusInput: 'Focus message input',
|
||||
scRegenerate: 'Regenerate last reply',
|
||||
scClearChat: 'Clear current conversation',
|
||||
scSearch: 'Focus conversation search',
|
||||
scToggleSidebar: 'Toggle sidebar',
|
||||
scCloseOverlay: 'Close dialog / panel',
|
||||
|
||||
// ── Approval overlay (global top-right) ──
|
||||
approvalWaitingTitle: 'Approval required',
|
||||
@@ -163,9 +176,10 @@ export default {
|
||||
copyAsImageFailed: 'Failed to copy as image',
|
||||
|
||||
// ── Message actions bar ──
|
||||
regenerate: 'Regenerate',
|
||||
regenerateFailed: 'Regenerate failed: {msg}',
|
||||
// regenerateUnavailable: Ctrl+R / retry paths still call store.regenerate(); precheck toast key
|
||||
// (I6 revert removed the UI button only — key still referenced by useAiSend.ts, review 2026-10-05 ②)
|
||||
regenerateUnavailable: 'No reply to regenerate',
|
||||
regenerateFailed: 'Regenerate failed: {msg}',
|
||||
// fetch_url "Install obscura via AI" button triggers sendMessage; failure toast (mirrors editMessageFailed)
|
||||
sendFailed: 'Send failed: {msg}',
|
||||
|
||||
@@ -237,6 +251,8 @@ export default {
|
||||
compressing: 'Compressing…',
|
||||
clearSuccess: 'Context cleared',
|
||||
compressSuccess: 'Context compressed',
|
||||
// B4: one-shot auto-compress notice (loop auto-compress no longer fully silent)
|
||||
autoCompressed: 'Context auto-compressed (earlier messages folded into summary)',
|
||||
compressError: 'Compression failed: {msg}',
|
||||
clearError: 'Clear failed: {msg}',
|
||||
// Separator expand / collapse
|
||||
@@ -279,6 +295,10 @@ export default {
|
||||
tokenInLabel: 'Input (cache miss, full price)',
|
||||
tokenCacheLabel: 'Cache hit (low price)',
|
||||
tokenOutLabel: 'Output',
|
||||
// #12 conversation-cumulative tokens (token detail popover footer)
|
||||
tokenConvTotal: 'Conversation total',
|
||||
tokenConvTotalIn: 'Total in',
|
||||
tokenConvTotalOut: 'Total out',
|
||||
tokenReasonLabel: 'Reasoning',
|
||||
tokenCacheRateLabel: 'Cache hit rate',
|
||||
tokenModelLabel: 'Model',
|
||||
|
||||
@@ -14,6 +14,10 @@ export default {
|
||||
argsCollapse: 'Collapse args',
|
||||
// batch approve high-risk interception (count badge + confirm text)
|
||||
batchHighRiskHint: '{n} high-risk',
|
||||
// R7 group-header failure badge: folded group contains failed tool cards
|
||||
groupFailCount: '{n} failed',
|
||||
// #14 batch approve partial failure toast
|
||||
batchPartialFail: 'Batch done: {ok} approved, {fail} failed.',
|
||||
batchHighRiskConfirm: 'Batch approval includes {n} high-risk operations (e.g. delete/command execution/network requests). Approve all?',
|
||||
rejectedHint: 'User rejected this action',
|
||||
// tool execution slow hint (frontend fallback, no backend cancel IPC)
|
||||
@@ -30,6 +34,8 @@ export default {
|
||||
// Singular expand/collapse (ToolCard single-card content, command output toggle)
|
||||
expand: 'Expand',
|
||||
collapse: 'Collapse',
|
||||
diffExpand: 'Expand all {n} lines',
|
||||
diffCollapse: 'Collapse diff',
|
||||
written: 'written',
|
||||
items: 'items',
|
||||
lines: 'lines',
|
||||
|
||||
Reference in New Issue
Block a user