From cf230c4f9b7985d79957b6aa88480667ec43d29a Mon Sep 17 00:00:00 2001 From: FischLu Date: Tue, 10 Jun 2025 10:25:22 +0200 Subject: [PATCH] =?UTF-8?q?=E7=BF=BB=E8=AF=91=E5=8A=9F=E8=83=BD=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=89=8B=E5=8A=A8=E9=80=89=E6=8B=A9=E6=BA=90=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E7=9A=84=E9=80=89=E9=A1=B9=20(#6916)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(TranslatePage): add user-selectable source language with auto-detection * fix: update detected language label for consistency across translations --------- Co-authored-by: Pleasurecruise <3196812536@qq.com> --- src/renderer/src/i18n/locales/en-us.json | 2 +- src/renderer/src/i18n/locales/ja-jp.json | 2 +- src/renderer/src/i18n/locales/ru-ru.json | 2 +- src/renderer/src/i18n/locales/zh-cn.json | 2 +- src/renderer/src/i18n/locales/zh-tw.json | 2 +- .../src/pages/translate/TranslatePage.tsx | 41 ++++++++++++++----- 6 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index ecd278585d..5792038d29 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -1820,7 +1820,7 @@ "close": "Close", "closed": "Translation closed", "copied": "Translation content copied", - "detected.language": "Detected Language", + "detected.language": "Auto Detect", "empty": "Translation content is empty", "not.found": "Translation content not found", "confirm": { diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 99e29e6a8e..d7e5491ea7 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -1853,7 +1853,7 @@ "menu": { "description": "對當前輸入框內容進行翻譯" }, - "detected.language": "検出された言語" + "detected.language": "自動検出" }, "tray": { "quit": "終了", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 5a5308ed2c..a7a759d0ba 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -1853,7 +1853,7 @@ "menu": { "description": "Перевести содержимое текущего ввода" }, - "detected.language": "Обнаруженный язык" + "detected.language": "Автоматическое обнаружение" }, "tray": { "quit": "Выйти", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 3b8ab324c2..5d7b05fe37 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -1853,7 +1853,7 @@ }, "title": "翻译", "tooltip.newline": "换行", - "detected.language": "检测到的语言" + "detected.language": "自动检测" }, "tray": { "quit": "退出", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 05a658b74d..a17ae514b0 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -1853,7 +1853,7 @@ "menu": { "description": "對當前輸入框內容進行翻譯" }, - "detected.language": "檢測到的語言" + "detected.language": "自動檢測" }, "tray": { "quit": "結束", diff --git a/src/renderer/src/pages/translate/TranslatePage.tsx b/src/renderer/src/pages/translate/TranslatePage.tsx index 7653aba898..470ada1c7c 100644 --- a/src/renderer/src/pages/translate/TranslatePage.tsx +++ b/src/renderer/src/pages/translate/TranslatePage.tsx @@ -215,6 +215,7 @@ const TranslatePage: FC = () => { const [bidirectionalPair, setBidirectionalPair] = useState<[string, string]>(['english', 'chinese']) const [settingsVisible, setSettingsVisible] = useState(false) const [detectedLanguage, setDetectedLanguage] = useState(null) + const [sourceLanguage, setSourceLanguage] = useState('auto') // 添加用户选择的源语言状态 const contentContainerRef = useRef(null) const textAreaRef = useRef(null) const outputTextRef = useRef(null) @@ -288,10 +289,17 @@ const TranslatePage: FC = () => { setLoading(true) try { - const sourceLanguage = await detectLanguage(text) - console.log('检测到的语言:', sourceLanguage) - setDetectedLanguage(sourceLanguage) - const result = determineTargetLanguage(sourceLanguage, targetLanguage, isBidirectional, bidirectionalPair) + // 确定源语言:如果用户选择了特定语言,使用用户选择的;如果选择'auto',则自动检测 + let actualSourceLanguage: string + if (sourceLanguage === 'auto') { + actualSourceLanguage = await detectLanguage(text) + console.log('检测到的语言:', actualSourceLanguage) + setDetectedLanguage(actualSourceLanguage) // 更新检测到的语言 + } else { + actualSourceLanguage = sourceLanguage + } + + const result = determineTargetLanguage(actualSourceLanguage, targetLanguage, isBidirectional, bidirectionalPair) if (!result.success) { let errorMessage = '' if (result.errorType === 'same_language') { @@ -324,7 +332,7 @@ const TranslatePage: FC = () => { } }) - await saveTranslateHistory(text, translatedText, sourceLanguage, actualTargetLanguage) + await saveTranslateHistory(text, translatedText, actualSourceLanguage, actualTargetLanguage) setLoading(false) } catch (error) { console.error('Translation error:', error) @@ -498,15 +506,28 @@ const TranslatePage: FC = () => {