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]) => (
+
+ ))}
+
+
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 (
<>