From 44b2d09e63b85284c0ce44fb8d6e6caed34e7298 Mon Sep 17 00:00:00 2001 From: Phantom <59059173+EurFelux@users.noreply.github.com> Date: Fri, 22 Aug 2025 00:05:04 +0800 Subject: [PATCH] fix: throw error when translate language detection failed (#9393) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs(ApiService): 为语言检测函数添加详细注释并修改错误处理 移除冗余的try-catch块,改为依赖shouldThrow参数控制错误抛出 * fix(翻译动作): 添加语言检测错误处理 捕获语言检测时的异常并记录错误日志,防止未处理的异常导致应用崩溃 * docs(ApiService): 修正语言检测函数的返回注释说明 原注释说明检测失败会返回空字符串,实际实现会抛出错误,修正注释以反映实际行为 * fix: 移除语言检测中多余的或空字符串检查 --- src/renderer/src/services/ApiService.ts | 15 ++++++++++----- .../action/components/ActionTranslate.tsx | 12 ++++++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/renderer/src/services/ApiService.ts b/src/renderer/src/services/ApiService.ts index c01769ae84..e6d2c5655c 100644 --- a/src/renderer/src/services/ApiService.ts +++ b/src/renderer/src/services/ApiService.ts @@ -615,6 +615,14 @@ interface FetchLanguageDetectionProps { onResponse?: (text: string, isComplete: boolean) => void } +/** + * 检测文本语言 + * @param params - 参数对象 + * @param {string} params.text - 需要检测语言的文本内容 + * @param {function} [params.onResponse] - 流式响应回调函数,用于实时获取检测结果 + * @returns {Promise} 返回检测到的语言代码,如果检测失败会抛出错误 + * @throws {Error} + */ export async function fetchLanguageDetection({ text, onResponse }: FetchLanguageDetectionProps) { const translateLanguageOptions = await getTranslateOptions() const listLang = translateLanguageOptions.map((item) => item.langCode) @@ -661,16 +669,13 @@ export async function fetchLanguageDetection({ text, onResponse }: FetchLanguage assistant, streamOutput: stream, enableReasoning: false, + shouldThrow: true, onResponse } const AI = new AiProvider(provider) - try { - return (await AI.completions(params)).getText() || '' - } catch (error: any) { - return '' - } + return (await AI.completions(params)).getText() } export async function fetchMessagesSummary({ messages, assistant }: { messages: Message[]; assistant: Assistant }) { diff --git a/src/renderer/src/windows/selection/action/components/ActionTranslate.tsx b/src/renderer/src/windows/selection/action/components/ActionTranslate.tsx index d50b2fef61..9dd9cbeb40 100644 --- a/src/renderer/src/windows/selection/action/components/ActionTranslate.tsx +++ b/src/renderer/src/windows/selection/action/components/ActionTranslate.tsx @@ -9,7 +9,7 @@ import { useSettings } from '@renderer/hooks/useSettings' import useTranslate from '@renderer/hooks/useTranslate' import MessageContent from '@renderer/pages/home/Messages/MessageContent' import { getDefaultTopic, getDefaultTranslateAssistant } from '@renderer/services/AssistantService' -import { Assistant, Topic, TranslateLanguage } from '@renderer/types' +import { Assistant, Topic, TranslateLanguage, TranslateLanguageCode } from '@renderer/types' import type { ActionItem } from '@renderer/types/selectionTypes' import { runAsyncFunction } from '@renderer/utils' import { abortCompletion } from '@renderer/utils/abortController' @@ -114,7 +114,15 @@ const ActionTranslate: FC = ({ action, scrollToBottom }) => { setIsLoading(true) - const sourceLanguageCode = await detectLanguage(action.selectedText) + let sourceLanguageCode: TranslateLanguageCode + + try { + sourceLanguageCode = await detectLanguage(action.selectedText) + } catch (err) { + onError(err instanceof Error ? err : new Error('An error occurred')) + logger.error('Error detecting language:', err as Error) + return + } let translateLang: TranslateLanguage