diff --git a/src/config/api.js b/src/config/api.js index 714044a..1d30682 100644 --- a/src/config/api.js +++ b/src/config/api.js @@ -56,6 +56,13 @@ export const OPT_ALL_TYPES = [ OPT_TRANS_CUSTOMIZE, ]; +export const OPT_LANGDETECTOR_ALL = [ + OPT_TRANS_GOOGLE, + OPT_TRANS_MICROSOFT, + OPT_TRANS_BAIDU, + OPT_TRANS_TENCENT, +]; + // 翻译引擎特殊集合 export const API_SPE_TYPES = { // 内置翻译 @@ -114,15 +121,9 @@ export const API_SPE_TYPES = { OPT_TRANS_OPENROUTER, OPT_TRANS_CUSTOMIZE, ]), + detector: new Set(OPT_LANGDETECTOR_ALL), }; -export const OPT_LANGDETECTOR_ALL = [ - OPT_TRANS_GOOGLE, - OPT_TRANS_MICROSOFT, - OPT_TRANS_BAIDU, - OPT_TRANS_TENCENT, -]; - export const BUILTIN_STONES = [ "formal", // 正式风格 "casual", // 口语风格 diff --git a/src/config/i18n.js b/src/config/i18n.js index 9850da4..9447de1 100644 --- a/src/config/i18n.js +++ b/src/config/i18n.js @@ -344,6 +344,11 @@ export const I18N = { en: `Translate Service`, zh_TW: `翻譯服務`, }, + translate_service_multiple: { + zh: `翻译服务 (支持多选)`, + en: `Translation service (multiple supported)`, + zh_TW: `翻譯服務 (支援多選)`, + }, translate_timing: { zh: `翻译时机`, en: `Translate Timing`, diff --git a/src/config/setting.js b/src/config/setting.js index 6066974..e4d52e0 100644 --- a/src/config/setting.js +++ b/src/config/setting.js @@ -74,7 +74,7 @@ export const OPT_TRANBOX_TRIGGER_ALL = [ export const DEFAULT_TRANBOX_SHORTCUT = ["AltLeft", "KeyS"]; export const DEFAULT_TRANBOX_SETTING = { transOpen: true, // 是否启用划词翻译 - apiSlug: OPT_TRANS_MICROSOFT, + apiSlugs: [OPT_TRANS_MICROSOFT], fromLang: "auto", toLang: "zh-CN", toLang2: "en", @@ -127,7 +127,7 @@ export const DEFAULT_SETTING = { injectRules: true, // 是否注入订阅规则 fabClickAction: 0, // 悬浮按钮点击行为 // injectWebfix: true, // 是否注入修复补丁(作废) - detectRemote: false, // 是否使用远程语言检测 (从rule移回) + // detectRemote: false, // 是否使用远程语言检测 (从rule移回) // contextMenus: true, // 是否添加右键菜单(作废) contextMenuType: 1, // 右键菜单类型(0不显示,1简单菜单,2多级菜单) // transTag: DEFAULT_TRANS_TAG, // 译文元素标签(移至rule,作废) @@ -146,7 +146,7 @@ export const DEFAULT_SETTING = { // disableLangs: [], // 不翻译的语言(移至rule,作废) skipLangs: [], // 不翻译的语言(从rule移回) transInterval: 100, // 翻译等待时间 - langDetector: OPT_TRANS_MICROSOFT, // 远程语言识别服务 + langDetector: "-", // 远程语言识别服务 mouseHoverSetting: DEFAULT_MOUSE_HOVER_SETTING, // 鼠标悬停翻译 preInit: true, // 是否预加载脚本 transAllnow: false, // 是否立即全部翻译 diff --git a/src/libs/detect.js b/src/libs/detect.js index 7745a53..98caff2 100644 --- a/src/libs/detect.js +++ b/src/libs/detect.js @@ -5,6 +5,7 @@ import { OPT_TRANS_TENCENT, OPT_LANGS_TO_CODE, OPT_LANGS_MAP, + API_SPE_TYPES, } from "../config"; import { browser } from "./browser"; import { @@ -27,15 +28,11 @@ const langdetectFns = { * @param {*} text * @returns */ -export const tryDetectLang = async ( - text, - detectRemote = true, - langDetector = OPT_TRANS_MICROSOFT -) => { +export const tryDetectLang = async (text, langDetector = "-") => { let deLang = ""; // 远程识别 - if (detectRemote && langDetector) { + if (API_SPE_TYPES.detector.has(langDetector)) { try { const lang = await langdetectFns[langDetector](text); if (lang) { diff --git a/src/libs/translator.js b/src/libs/translator.js index ef1bee6..844364e 100644 --- a/src/libs/translator.js +++ b/src/libs/translator.js @@ -849,14 +849,9 @@ export class Translator { // 提前进行语言检测 let deLang = ""; const { fromLang = "auto", toLang } = this.#rule; - const { detectRemote, skipLangs = [] } = this.#setting; + const { langDetector, skipLangs = [] } = this.#setting; if (fromLang === "auto") { - const { langDetector } = this.#setting; - deLang = await tryDetectLang( - node.textContent, - detectRemote, - langDetector - ); + deLang = await tryDetectLang(node.textContent, langDetector); if ( deLang && (toLang.slice(0, 2) === deLang.slice(0, 2) || diff --git a/src/views/Options/Setting.js b/src/views/Options/Setting.js index c7d0c5d..e62259e 100644 --- a/src/views/Options/Setting.js +++ b/src/views/Options/Setting.js @@ -13,7 +13,6 @@ import { UI_LANGS, TRANS_NEWLINE_LENGTH, CACHE_NAME, - OPT_TRANS_MICROSOFT, OPT_LANGDETECTOR_ALL, OPT_SHORTCUT_TRANSLATE, OPT_SHORTCUT_STYLE, @@ -118,10 +117,10 @@ export default function Settings() { blacklist = DEFAULT_BLACKLIST.join(",\n"), csplist = DEFAULT_CSPLIST.join(",\n"), transInterval = 100, - langDetector = OPT_TRANS_MICROSOFT, + langDetector = "-", preInit = true, skipLangs = [], - detectRemote = true, + // detectRemote = true, transAllnow = false, } = setting; const { isHide = false, fabClickAction = 0 } = fab || {}; @@ -315,7 +314,7 @@ export default function Settings() { {i18n("mk_pageopen")} - + {/* {i18n("enable")} {i18n("disable")} - + */} + {i18n("disable")} {OPT_LANGDETECTOR_ALL.map((item) => ( {item} diff --git a/src/views/Options/Tranbox.js b/src/views/Options/Tranbox.js index 66cbc23..1e2ddd6 100644 --- a/src/views/Options/Tranbox.js +++ b/src/views/Options/Tranbox.js @@ -51,7 +51,7 @@ export default function Tranbox() { const { transOpen, - apiSlug, + apiSlugs, fromLang, toLang, toLang2 = "en", @@ -88,15 +88,18 @@ export default function Tranbox() { - + {enabledApis.map((api) => ( diff --git a/src/views/Selection/TranBox.js b/src/views/Selection/TranBox.js index 223dcf9..28ac672 100644 --- a/src/views/Selection/TranBox.js +++ b/src/views/Selection/TranBox.js @@ -287,7 +287,7 @@ function TranForm({ /> )} - {enDict !== "-" && ( + {enDict !== "-" && isValidWord(text) && ( <> diff --git a/src/views/Selection/TranCont.js b/src/views/Selection/TranCont.js index 12108c8..fef744c 100644 --- a/src/views/Selection/TranCont.js +++ b/src/views/Selection/TranCont.js @@ -18,7 +18,7 @@ export default function TranCont({ toLang, toLang2 = "en", transApis, - simpleStyle, + simpleStyle = false, langDetector, }) { const i18n = useI18n(); @@ -27,6 +27,10 @@ export default function TranCont({ const [error, setError] = useState(""); useEffect(() => { + if (!text?.trim()) { + return; + } + (async () => { try { setLoading(true);