优化: CR-08 i18n batch2全量(ProjectDetail5处+TaskDetail16key+AiChat3处+store error fallback 23处+useAiSend 3处)+@/i18n路径统一+vite别名

This commit is contained in:
2026-06-15 15:06:21 +08:00
parent d6eb8551da
commit 6254d06c7a
24 changed files with 181 additions and 34 deletions

View File

@@ -13,10 +13,13 @@ import { invoke } from '@tauri-apps/api/core'
import { aiApi } from '../../api'
import { useAppSettingsStore } from '../../stores/appSettings'
import { state } from '../../stores/ai'
import i18n from '../../i18n'
import { resetStreamWatchdog, clearStreamWatchdog } from './useAiStream'
import { startListener, findToolCall } from './useAiEvents'
import { nextMsgId } from './aiShared'
const t = ((i18n as any).global.t as (k: string, named?: Record<string, unknown>) => string).bind((i18n as any).global)
const appSettings = useAppSettingsStore()
/// 待发送队列上限(超过抛错提示用户)
@@ -46,7 +49,7 @@ async function sendMessage(text: string, skill?: string) {
}
if (backendGenerating) {
if (state.queue.length >= QUEUE_LIMIT) {
throw new Error(`待发送队列已满(最多 ${QUEUE_LIMIT} 条)`)
throw new Error(t('ai.queueFull', { limit: QUEUE_LIMIT }))
}
// 后端真在生成但本地 streaming 已复位(false):状态不同步——对齐本地 streaming=true
// 让用户感知(禁用输入框等),并入队等待 AiCompleted 续发;不入队则消息静默丢失。
@@ -62,7 +65,7 @@ async function sendMessage(text: string, skill?: string) {
// 生成中:进入待发送队列,当前对话完成后(AiCompleted)由 drainQueue 自动续发
if (state.streaming) {
if (state.queue.length >= QUEUE_LIMIT) {
throw new Error(`待发送队列已满(最多 ${QUEUE_LIMIT} 条)`)
throw new Error(t('ai.queueFull', { limit: QUEUE_LIMIT }))
}
state.queue.push({ text: text.trim(), skill: skill || undefined })
return
@@ -127,7 +130,7 @@ async function approveToolCall(toolCallId: string, approved: boolean) {
console.error('[AI] 审批操作未送达后端:', e)
if (tc) {
tc.status = 'completed'
tc.result = `审批操作未送达后端:${e instanceof Error ? e.message : String(e)}`
tc.result = t('ai.approvalNotDelivered', { error: e instanceof Error ? e.message : String(e) })
}
throw e
}