diff --git a/src/apis/baidu.js b/src/apis/baidu.js index 6d09322..6da8713 100644 --- a/src/apis/baidu.js +++ b/src/apis/baidu.js @@ -1,6 +1,10 @@ import queryString from "query-string"; import { getBdauth, setBdauth } from "../libs/storage"; -import { URL_BAIDU_WEB, URL_BAIDU_TRAN } from "../config"; +import { + URL_BAIDU_WEB, + URL_BAIDU_TRANSAPI_V2, + URL_BAIDU_TRANSAPI, +} from "../config"; import { fetchApi } from "../libs/fetch"; /* eslint-disable */ @@ -203,7 +207,12 @@ const _bdAuth = () => { const bdAuth = _bdAuth(); -export const genBaidu = async ({ text, from, to }) => { +/** + * 失效作废 + * @param {*} param0 + * @returns + */ +export const genBaiduV2 = async ({ text, from, to }) => { const { token, gtk } = await bdAuth(); const sign = getSign(text, gtk); const data = { @@ -217,7 +226,7 @@ export const genBaidu = async ({ text, from, to }) => { ts: Date.now(), }; - const input = `${URL_BAIDU_TRAN}?from=${from}&to=${to}`; + const input = `${URL_BAIDU_TRANSAPI_V2}?from=${from}&to=${to}`; const init = { headers: { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", @@ -228,3 +237,22 @@ export const genBaidu = async ({ text, from, to }) => { return [input, init]; }; + +export const genBaidu = async ({ text, from, to }) => { + const data = { + from, + to, + query: text, + source: "txt", + }; + + const init = { + headers: { + "content-type": "application/x-www-form-urlencoded; charset=UTF-8", + }, + method: "POST", + body: queryString.stringify(data), + }; + + return [URL_BAIDU_TRANSAPI, init]; +}; diff --git a/src/apis/index.js b/src/apis/index.js index 8ccb9ad..2e18c74 100644 --- a/src/apis/index.js +++ b/src/apis/index.js @@ -125,11 +125,14 @@ export const apiTranslate = async ({ return [trText, isSame]; } + // 版本号一/二位升级,旧缓存失效 + const [v1, v2] = process.env.REACT_APP_VERSION.split("."); const cacheOpts = { translator, text, fromLang, toLang, + version: [v1, v2].join("."), }; const transOpts = { @@ -171,8 +174,15 @@ export const apiTranslate = async ({ isSame = to === res.source_lang; break; case OPT_TRANS_BAIDU: - trText = res.trans_result?.data.map((item) => item.dst).join(" "); - isSame = res.trans_result?.to === res.trans_result?.from; + // trText = res.trans_result?.data.map((item) => item.dst).join(" "); + // isSame = res.trans_result?.to === res.trans_result?.from; + if (res.type === 1) { + trText = Object.keys(JSON.parse(res.result).content[0].mean[0].cont)[0]; + isSame = to === res.from; + } else if (res.type === 2) { + trText = res.data[0].dst; + isSame = to === res.from; + } break; case OPT_TRANS_TENCENT: trText = res.auto_translation; diff --git a/src/config/index.js b/src/config/index.js index 303bada..96564be 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -83,7 +83,8 @@ export const URL_MICROSOFT_TRAN = 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_WEB = "https://fanyi.baidu.com/"; -export const URL_BAIDU_TRAN = "https://fanyi.baidu.com/v2transapi"; +export const URL_BAIDU_TRANSAPI = "https://fanyi.baidu.com/transapi"; +export const URL_BAIDU_TRANSAPI_V2 = "https://fanyi.baidu.com/v2transapi"; export const URL_DEEPLFREE_TRAN = "https://www2.deepl.com/jsonrpc"; export const URL_TENCENT_TRANSMART = "https://transmart.qq.com/api/imt"; @@ -101,11 +102,11 @@ export const OPT_TRANS_CUSTOMIZE = "Custom"; export const OPT_TRANS_ALL = [ OPT_TRANS_GOOGLE, OPT_TRANS_MICROSOFT, + OPT_TRANS_BAIDU, + OPT_TRANS_TENCENT, OPT_TRANS_DEEPL, OPT_TRANS_DEEPLFREE, OPT_TRANS_DEEPLX, - OPT_TRANS_BAIDU, - OPT_TRANS_TENCENT, OPT_TRANS_OPENAI, OPT_TRANS_GEMINI, OPT_TRANS_CLOUDFLAREAI, diff --git a/src/views/Options/FavWords.js b/src/views/Options/FavWords.js index 3d1ff6d..5e45415 100644 --- a/src/views/Options/FavWords.js +++ b/src/views/Options/FavWords.js @@ -35,7 +35,7 @@ function DictField({ word }) { fromLang: "en", toLang: "zh-CN", }); - setDictResult(dictRes[2].dict_result); + dictRes[2].type === 1 && setDictResult(JSON.parse(dictRes[2].result)); } catch (err) { setError(err.message); } finally { diff --git a/src/views/Selection/DictCont.js b/src/views/Selection/DictCont.js index 67ff005..638f43d 100644 --- a/src/views/Selection/DictCont.js +++ b/src/views/Selection/DictCont.js @@ -1,16 +1,11 @@ import Box from "@mui/material/Box"; -import Chip from "@mui/material/Chip"; import Stack from "@mui/material/Stack"; import FavBtn from "./FavBtn"; import Typography from "@mui/material/Typography"; -const exchangeMap = { - word_third: "第三人称单数", - word_ing: "现在分词", - word_done: "过去式", - word_past: "过去分词", - word_pl: "复数", - word_proto: "词源", +const phonicMap = { + en_phonic: "英", + us_phonic: "美", }; export default function DictCont({ dictResult }) { @@ -26,40 +21,28 @@ export default function DictCont({ dictResult }) { alignItems="flex-start" > - {dictResult.simple_means?.word_name} + {dictResult.src} - + - {dictResult.simple_means?.symbols?.map(({ ph_en, ph_am, parts }, idx) => ( - - {(ph_en || ph_am) && ( - {`英 /${ph_en || ""}/ 美 /${ph_am || ""}/`} - )} -
    - {parts.map(({ part, means }, idx) => ( -
  • - {part ? `[${part}] ${means.join("; ")}` : means.join("; ")} -
  • - ))} -
+ + + {dictResult.voice + .map(Object.entries) + .map((item) => item[0]) + .map(([key, val]) => `${phonicMap[key] || key} ${val}`) + .join(" ")} - ))} - - - {Object.entries(dictResult.simple_means?.exchange || {}) - .map(([key, val]) => `${exchangeMap[key] || key}: ${val.join(", ")}`) - .join("; ")} - - - - {Object.values(dictResult.simple_means?.tags || {}) - .flat() - .filter((item) => item) - .map((item) => ( - +
    + {dictResult.content[0].mean.map(({ pre, cont }, idx) => ( +
  • + {pre && `[${pre}] `} + {Object.keys(cont).join("; ")} +
  • ))} - +
+
); } diff --git a/src/views/Selection/DictContV2.js b/src/views/Selection/DictContV2.js new file mode 100644 index 0000000..67ff005 --- /dev/null +++ b/src/views/Selection/DictContV2.js @@ -0,0 +1,65 @@ +import Box from "@mui/material/Box"; +import Chip from "@mui/material/Chip"; +import Stack from "@mui/material/Stack"; +import FavBtn from "./FavBtn"; +import Typography from "@mui/material/Typography"; + +const exchangeMap = { + word_third: "第三人称单数", + word_ing: "现在分词", + word_done: "过去式", + word_past: "过去分词", + word_pl: "复数", + word_proto: "词源", +}; + +export default function DictCont({ dictResult }) { + if (!dictResult) { + return; + } + + return ( + + + + {dictResult.simple_means?.word_name} + + + + + {dictResult.simple_means?.symbols?.map(({ ph_en, ph_am, parts }, idx) => ( + + {(ph_en || ph_am) && ( + {`英 /${ph_en || ""}/ 美 /${ph_am || ""}/`} + )} +
    + {parts.map(({ part, means }, idx) => ( +
  • + {part ? `[${part}] ${means.join("; ")}` : means.join("; ")} +
  • + ))} +
+
+ ))} + + + {Object.entries(dictResult.simple_means?.exchange || {}) + .map(([key, val]) => `${exchangeMap[key] || key}: ${val.join(", ")}`) + .join("; ")} + + + + {Object.values(dictResult.simple_means?.tags || {}) + .flat() + .filter((item) => item) + .map((item) => ( + + ))} + +
+ ); +} diff --git a/src/views/Selection/TranCont.js b/src/views/Selection/TranCont.js index af7c597..dddd365 100644 --- a/src/views/Selection/TranCont.js +++ b/src/views/Selection/TranCont.js @@ -59,7 +59,8 @@ export default function TranCont({ // 词典 if (isValidWord(text) && toLang.startsWith("zh")) { if (fromLang === "en" && translator === OPT_TRANS_BAIDU) { - setDictResult(tranRes[2].dict_result); + tranRes[2].type === 1 && + setDictResult(JSON.parse(tranRes[2].result)); } else { const dictRes = await apiTranslate({ text, @@ -67,7 +68,8 @@ export default function TranCont({ fromLang: "en", toLang: "zh-CN", }); - setDictResult(dictRes[2].dict_result); + dictRes[2].type === 1 && + setDictResult(JSON.parse(dictRes[2].result)); } } } catch (err) {