MCPcopy Index your code
hub / github.com/Bistutu/FluentRead / translate

Function translate

userscripts.js:918–979  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

916}
917
918function translate(node) {
919 let model = util.getValue('model')
920
921 if (!node.innerText.trim()) return; // 空文本,跳过
922
923 // 检测语言类型,如果是中文则不翻译
924 baiduDetectLang(node.innerText).then(lang => {
925 if (lang === langManager.getTo()) return; // 与目标语言相同,不翻译
926
927 // 如果是机器翻译,则翻译 outerHTML,否则递归获取文本
928 let origin = isMachineTrans(model) ? node.outerHTML : getTextWithNode(node);
929
930 let spinner = createLoadingSpinner(node); // 插入转圈动画
931 let timeout = setTimeout(() => {
932 createFailedTip(node, new Error(errorManager.netError).toString(), spinner);
933 }, 60000);
934
935 // 调用翻译服务
936 transModelFn[model](origin).then(text => {
937
938 clearTimeout(timeout) // 取消超时
939 spinner.remove() // 移除 spinner
940
941 // console.log("翻译前的句子:", origin);
942 // console.log("翻译后的句子:", text);
943
944 if (!text || origin === text) return;
945
946 let oldOuterHtml = node.outerHTML // 保存旧的 outerHTML
947
948 let newOuterHtml = text
949 if (isMachineTrans(model)) {
950 // 机器翻译
951 if (!node.parentNode) return;
952 let fn = compatFn[url.host];
953 if (fn) {
954 oldOuterHtml = node.outerHTML;
955 fn(node, text);
956 newOuterHtml = node.outerHTML;
957 } else {
958 node.outerHTML = safeFluentRead ? safeFluentRead.createHTML(text) : text;
959 }
960 } else {
961 // LLM 翻译
962 node.innerHTML = safeFluentRead ? safeFluentRead.createHTML(text) : text;
963 newOuterHtml = node.outerHTML;
964 }
965
966 localStorageManager.setTransCache(oldOuterHtml, newOuterHtml); // 设置缓存
967 // 延迟 newOuterHtml,删除 oldOuterHtml
968 delayRemoveCache(newOuterHtml);
969 outerHTMLSet.delete(oldOuterHtml);
970 }).catch(e => {
971 console.log(e)
972 clearTimeout(timeout);
973 createFailedTip(node, e.toString() || errorManager.unknownError, spinner);
974 })
975 }).catch(e => {

Callers 2

handlerFunction · 0.85
createFailedTipFunction · 0.85

Calls 6

baiduDetectLangFunction · 0.85
isMachineTransFunction · 0.85
getTextWithNodeFunction · 0.85
createLoadingSpinnerFunction · 0.85
createFailedTipFunction · 0.85
delayRemoveCacheFunction · 0.85

Tested by

no test coverage detected