diff --git a/src/config/i18n.js b/src/config/i18n.js index cd1ba1d..0cbed87 100644 --- a/src/config/i18n.js +++ b/src/config/i18n.js @@ -215,6 +215,14 @@ export const I18N = { zh: `目标语言`, en: `Target Language`, }, + to_lang2: { + zh: `第二目标语言`, + en: `Target Language 2`, + }, + to_lang2_helper: { + zh: `设定后,与目标语言产生互译效果,但依赖远程语言识别。`, + en: `After setting, it will produce mutual translation effect with the target language, but it relies on remote language recognition.`, + }, text_style: { zh: `文字样式`, en: `Text Style`, diff --git a/src/config/index.js b/src/config/index.js index b25edcc..c3fc4c8 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -345,6 +345,7 @@ export const DEFAULT_TRANBOX_SETTING = { translator: OPT_TRANS_MICROSOFT, fromLang: "auto", toLang: "zh-CN", + toLang2: "en", tranboxShortcut: DEFAULT_TRANBOX_SHORTCUT, btnOffsetX: 10, btnOffsetY: 10, diff --git a/src/views/Options/Tranbox.js b/src/views/Options/Tranbox.js index 8813343..1b41a51 100644 --- a/src/views/Options/Tranbox.js +++ b/src/views/Options/Tranbox.js @@ -44,6 +44,7 @@ export default function Tranbox() { translator, fromLang, toLang, + toLang2 = "en", tranboxShortcut, btnOffsetX, btnOffsetY, @@ -112,6 +113,22 @@ export default function Tranbox() { ))} + + {[["none", "None"], ...OPT_LANGS_TO].map(([lang, name]) => ( + + {name} + + ))} + + diff --git a/src/views/Selection/TranCont.js b/src/views/Selection/TranCont.js index 7a04432..af7c597 100644 --- a/src/views/Selection/TranCont.js +++ b/src/views/Selection/TranCont.js @@ -6,7 +6,7 @@ import Stack from "@mui/material/Stack"; import { useI18n } from "../../hooks/I18n"; import { DEFAULT_TRANS_APIS, OPT_TRANS_BAIDU } from "../../config"; import { useEffect, useState } from "react"; -import { apiTranslate } from "../../apis"; +import { apiTranslate, apiBaiduLangdetect } from "../../apis"; import { isValidWord } from "../../libs/utils"; import CopyBtn from "./CopyBtn"; import DictCont from "./DictCont"; @@ -16,6 +16,9 @@ export default function TranCont({ translator, fromLang, toLang, + toLang2 = "en", + setToLang, + setToLang2, transApis, }) { const i18n = useI18n(); @@ -32,6 +35,16 @@ export default function TranCont({ setError(""); setDictResult(null); + // 互译 + if (toLang !== toLang2 && toLang2 !== "none") { + const detectLang = await apiBaiduLangdetect(text); + if (detectLang === toLang) { + setToLang(toLang2); + setToLang2(toLang); + return; + } + } + const apiSetting = transApis[translator] || DEFAULT_TRANS_APIS[translator]; const tranRes = await apiTranslate({ @@ -63,7 +76,16 @@ export default function TranCont({ setLoading(false); } })(); - }, [text, translator, fromLang, toLang, transApis]); + }, [ + text, + translator, + fromLang, + toLang, + toLang2, + setToLang, + setToLang2, + transApis, + ]); return ( <>