feat: mutual translation effect with the target language

This commit is contained in:
Gabe Yuan
2023-12-11 15:54:54 +08:00
parent 95d19417c3
commit bdd5ed7fc7
5 changed files with 54 additions and 2 deletions

View File

@@ -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`,

View File

@@ -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,

View File

@@ -44,6 +44,7 @@ export default function Tranbox() {
translator,
fromLang,
toLang,
toLang2 = "en",
tranboxShortcut,
btnOffsetX,
btnOffsetY,
@@ -112,6 +113,22 @@ export default function Tranbox() {
))}
</TextField>
<TextField
select
size="small"
name="toLang2"
value={toLang2}
label={i18n("to_lang2")}
helperText={i18n("to_lang2_helper")}
onChange={handleChange}
>
{[["none", "None"], ...OPT_LANGS_TO].map(([lang, name]) => (
<MenuItem key={lang} value={lang}>
{name}
</MenuItem>
))}
</TextField>
<TextField
size="small"
label={i18n("tranbtn_offset_x")}

View File

@@ -24,6 +24,7 @@ function TranForm({ text, setText, tranboxSetting, transApis }) {
const [translator, setTranslator] = useState(tranboxSetting.translator);
const [fromLang, setFromLang] = useState(tranboxSetting.fromLang);
const [toLang, setToLang] = useState(tranboxSetting.toLang);
const [toLang2, setToLang2] = useState(tranboxSetting.toLang2);
const inputRef = useRef(null);
return (
@@ -150,6 +151,9 @@ function TranForm({ text, setText, tranboxSetting, transApis }) {
translator={translator}
fromLang={fromLang}
toLang={toLang}
toLang2={toLang2}
setToLang={setToLang}
setToLang2={setToLang2}
transApis={transApis}
/>
</Stack>

View File

@@ -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 (
<>