diff --git a/src/apis/index.js b/src/apis/index.js index d60efe2..ab07fcc 100644 --- a/src/apis/index.js +++ b/src/apis/index.js @@ -15,6 +15,7 @@ import { URL_CACHE_TRAN, KV_SALT_SYNC, URL_BAIDU_LANGDETECT, + URL_BAIDU_SUGGEST, OPT_LANGS_BAIDU, URL_TENCENT_TRANSMART, OPT_LANGS_TENCENT, @@ -70,6 +71,30 @@ export const apiBaiduLangdetect = async (text) => { return ""; }; +/** + * 百度翻译建议 + * @param {*} text + * @returns + */ +export const apiBaiduSuggest = async (text) => { + const res = await fetchPolyfill(URL_BAIDU_SUGGEST, { + headers: { + "Content-type": "application/json", + }, + method: "POST", + body: JSON.stringify({ + kw: text, + }), + useCache: true, + }); + + if (res.errno === 0) { + return res.data; + } + + return []; +}; + /** * 腾讯语言识别 * @param {*} text diff --git a/src/config/index.js b/src/config/index.js index 3efa843..9b75f61 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -82,6 +82,7 @@ export const URL_MICROSOFT_TRAN = "https://api-edge.cognitive.microsofttranslator.com/translate"; export const URL_MICROSOFT_AUTH = "https://edge.microsoft.com/translate/auth"; export const URL_BAIDU_LANGDETECT = "https://fanyi.baidu.com/langdetect"; +export const URL_BAIDU_SUGGEST = "https://fanyi.baidu.com/sug"; export const URL_BAIDU_WEB = "https://fanyi.baidu.com/"; export const URL_BAIDU_TRANSAPI = "https://fanyi.baidu.com/transapi"; export const URL_BAIDU_TRANSAPI_V2 = "https://fanyi.baidu.com/v2transapi"; diff --git a/src/views/Selection/SugCont.js b/src/views/Selection/SugCont.js new file mode 100644 index 0000000..39d2d02 --- /dev/null +++ b/src/views/Selection/SugCont.js @@ -0,0 +1,17 @@ +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; + +export default function SugCont({ sugs }) { + return ( + + {sugs.map(({ k, v }) => ( + + {k} + + + ))} + + ); +} diff --git a/src/views/Selection/TranCont.js b/src/views/Selection/TranCont.js index dddd365..d8b9e94 100644 --- a/src/views/Selection/TranCont.js +++ b/src/views/Selection/TranCont.js @@ -6,10 +6,11 @@ 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, apiBaiduLangdetect } from "../../apis"; +import { apiTranslate, apiBaiduLangdetect, apiBaiduSuggest } from "../../apis"; import { isValidWord } from "../../libs/utils"; import CopyBtn from "./CopyBtn"; import DictCont from "./DictCont"; +import SugCont from "./SugCont"; export default function TranCont({ text, @@ -26,6 +27,7 @@ export default function TranCont({ const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const [dictResult, setDictResult] = useState(null); + const [sugs, setSugs] = useState([]); useEffect(() => { (async () => { @@ -34,6 +36,7 @@ export default function TranCont({ setTrText(""); setError(""); setDictResult(null); + setSugs([]); // 互译 if (toLang !== toLang2 && toLang2 !== "none") { @@ -45,6 +48,7 @@ export default function TranCont({ } } + // 翻译 const apiSetting = transApis[translator] || DEFAULT_TRANS_APIS[translator]; const tranRes = await apiTranslate({ @@ -72,6 +76,11 @@ export default function TranCont({ setDictResult(JSON.parse(dictRes[2].result)); } } + + // 建议 + if (text.length < 20) { + setSugs(await apiBaiduSuggest(text)); + } } catch (err) { setError(err.message); } finally { @@ -119,6 +128,7 @@ export default function TranCont({ {loading && } {error && {error}} {dictResult && } + {sugs.length > 0 && } ); }