diff --git a/kiss-translator-ios-safari.user.js b/kiss-translator-ios-safari.user.js index d2f74d5..a1d4242 100644 --- a/kiss-translator-ios-safari.user.js +++ b/kiss-translator-ios-safari.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name KISS Translator // @namespace https://github.com/fishjar/kiss-translator -// @version 2.0.4 +// @version 2.0.5 // @description A simple bilingual translation extension & Greasemonkey script (一个简约的双语对照翻译扩展 & 油猴脚本) // @author Gabe // @homepageURL https://github.com/fishjar/kiss-translator @@ -29407,7 +29407,7 @@ __webpack_require__.d(base_namespaceObject, { }); ;// CONCATENATED MODULE: ./src/config/app.js -const APP_NAME="KISS Translator".trim().split(/\s+/).join("-");const APP_LCNAME=APP_NAME.toLowerCase();const APP_UPNAME=APP_NAME.toUpperCase();const APP_CONSTS={fabID:"".concat(APP_LCNAME,"-fab"),boxID:"".concat(APP_LCNAME,"-box"),popupID:"".concat(APP_LCNAME,"-popup")};const APP_VERSION="2.0.4".split(".");const THEME_LIGHT="light";const THEME_DARK="dark"; +const APP_NAME="KISS Translator".trim().split(/\s+/).join("-");const APP_LCNAME=APP_NAME.toLowerCase();const APP_UPNAME=APP_NAME.toUpperCase();const APP_CONSTS={fabID:"".concat(APP_LCNAME,"-fab"),boxID:"".concat(APP_LCNAME,"-box"),popupID:"".concat(APP_LCNAME,"-popup")};const APP_VERSION="2.0.5".split(".");const THEME_LIGHT="light";const THEME_DARK="dark"; ;// CONCATENATED MODULE: ./src/config/api.js const DEFAULT_HTTP_TIMEOUT=10000;// 调用超时时间 const DEFAULT_FETCH_LIMIT=10;// 默认最大任务数量 @@ -29424,10 +29424,10 @@ const INPUT_PLACE_KEY="{{key}}";// 占位符 const INPUT_PLACE_MODEL="{{model}}";// 占位符 // export const OPT_DICT_BAIDU = "Baidu"; const OPT_DICT_BING="Bing";const OPT_DICT_YOUDAO="Youdao";const OPT_DICT_ALL=[OPT_DICT_BING,OPT_DICT_YOUDAO];const OPT_DICT_MAP=new Set(OPT_DICT_ALL);const OPT_SUG_BAIDU="Baidu";const OPT_SUG_YOUDAO="Youdao";const OPT_SUG_ALL=[OPT_SUG_BAIDU,OPT_SUG_YOUDAO];const OPT_SUG_MAP=new Set(OPT_SUG_ALL);const OPT_TRANS_BUILTINAI="BuiltinAI";const OPT_TRANS_GOOGLE="Google";const OPT_TRANS_GOOGLE_2="Google2";const OPT_TRANS_MICROSOFT="Microsoft";const OPT_TRANS_AZUREAI="AzureAI";const OPT_TRANS_DEEPL="DeepL";const OPT_TRANS_DEEPLX="DeepLX";const OPT_TRANS_DEEPLFREE="DeepLFree";const OPT_TRANS_NIUTRANS="NiuTrans";const OPT_TRANS_BAIDU="Baidu";const OPT_TRANS_TENCENT="Tencent";const OPT_TRANS_VOLCENGINE="Volcengine";const OPT_TRANS_OPENAI="OpenAI";const OPT_TRANS_GEMINI="Gemini";const OPT_TRANS_GEMINI_2="Gemini2";const OPT_TRANS_CLAUDE="Claude";const OPT_TRANS_CLOUDFLAREAI="CloudflareAI";const OPT_TRANS_OLLAMA="Ollama";const OPT_TRANS_OPENROUTER="OpenRouter";const OPT_TRANS_CUSTOMIZE="Custom";// 内置支持的翻译引擎 -const OPT_ALL_TYPES=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_GOOGLE_2,OPT_TRANS_MICROSOFT,OPT_TRANS_AZUREAI,// OPT_TRANS_BAIDU, +const OPT_ALL_TRANS_TYPES=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_GOOGLE_2,OPT_TRANS_MICROSOFT,OPT_TRANS_AZUREAI,// OPT_TRANS_BAIDU, OPT_TRANS_TENCENT,OPT_TRANS_VOLCENGINE,OPT_TRANS_DEEPL,OPT_TRANS_DEEPLFREE,OPT_TRANS_DEEPLX,OPT_TRANS_NIUTRANS,OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_CLAUDE,OPT_TRANS_CLOUDFLAREAI,OPT_TRANS_OLLAMA,OPT_TRANS_OPENROUTER,OPT_TRANS_CUSTOMIZE];const OPT_LANGDETECTOR_ALL=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_MICROSOFT,OPT_TRANS_BAIDU,OPT_TRANS_TENCENT];const OPT_LANGDETECTOR_MAP=new Set(OPT_LANGDETECTOR_ALL);// 翻译引擎特殊集合 const API_SPE_TYPES={// 内置翻译 -builtin:new Set(OPT_ALL_TYPES),// 机器翻译 +builtin:new Set(OPT_ALL_TRANS_TYPES),// 机器翻译 machine:new Set([OPT_TRANS_MICROSOFT,OPT_TRANS_DEEPLFREE,OPT_TRANS_BAIDU,OPT_TRANS_TENCENT,OPT_TRANS_VOLCENGINE]),// AI翻译 ai:new Set([OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_CLAUDE,OPT_TRANS_OLLAMA,OPT_TRANS_OPENROUTER]),// 支持多key mulkeys:new Set([OPT_TRANS_AZUREAI,OPT_TRANS_DEEPL,OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_CLAUDE,OPT_TRANS_CLOUDFLAREAI,OPT_TRANS_OLLAMA,OPT_TRANS_OPENROUTER,OPT_TRANS_NIUTRANS,OPT_TRANS_CUSTOMIZE]),// 支持批处理 @@ -29447,7 +29447,7 @@ context:new Set([OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_ "concise"// 简明风格 ];const BUILTIN_PLACEHOLDERS=["{ }","{{ }}","[ ]","[[ ]]"];const BUILTIN_PLACETAGS=["i","a","b","x"];const OPT_LANGS_TO=[["en","English - English"],["zh-CN","Simplified Chinese - 简体中文"],["zh-TW","Traditional Chinese - 繁體中文"],["ar","Arabic - العربية"],["bg","Bulgarian - Български"],["ca","Catalan - Català"],["hr","Croatian - Hrvatski"],["cs","Czech - Čeština"],["da","Danish - Dansk"],["nl","Dutch - Nederlands"],["fi","Finnish - Suomi"],["fr","French - Français"],["de","German - Deutsch"],["el","Greek - Ελληνικά"],["hi","Hindi - हिन्दी"],["hu","Hungarian - Magyar"],["id","Indonesian - Indonesia"],["it","Italian - Italiano"],["ja","Japanese - 日本語"],["ko","Korean - 한국어"],["ms","Malay - Melayu"],["mt","Maltese - Malti"],["nb","Norwegian - Norsk Bokmål"],["pl","Polish - Polski"],["pt","Portuguese - Português"],["ro","Romanian - Română"],["ru","Russian - Русский"],["sk","Slovak - Slovenčina"],["sl","Slovenian - Slovenščina"],["es","Spanish - Español"],["sv","Swedish - Svenska"],["ta","Tamil - தமிழ்"],["te","Telugu - తెలుగు"],["th","Thai - ไทย"],["tr","Turkish - Türkçe"],["uk","Ukrainian - Українська"],["vi","Vietnamese - Tiếng Việt"]];const OPT_LANGS_LIST=OPT_LANGS_TO.map(_ref=>{let[lang]=_ref;return lang;});const OPT_LANGS_FROM=[["auto","Auto-detect"],...OPT_LANGS_TO];const OPT_LANGS_MAP=new Map(OPT_LANGS_TO);// CODE->名称 const OPT_LANGS_SPEC_NAME=new Map(OPT_LANGS_FROM.map(_ref2=>{let[key,val]=_ref2;return[key,val.split(" - ")[0]];}));const OPT_LANGS_SPEC_DEFAULT=new Map(OPT_LANGS_FROM.map(_ref3=>{let[key]=_ref3;return[key,key];}));const OPT_LANGS_SPEC_DEFAULT_UC=new Map(OPT_LANGS_FROM.map(_ref4=>{let[key]=_ref4;return[key,key.toUpperCase()];}));const OPT_LANGS_TO_SPEC={[OPT_TRANS_BUILTINAI]:new Map([...OPT_LANGS_SPEC_DEFAULT,["zh-CN","zh"],["zh-TW","zh"]]),[OPT_TRANS_GOOGLE]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_GOOGLE_2]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_MICROSOFT]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto",""],["zh-CN","zh-Hans"],["zh-TW","zh-Hant"]]),[OPT_TRANS_AZUREAI]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto",""],["zh-CN","zh-Hans"],["zh-TW","zh-Hant"]]),[OPT_TRANS_DEEPL]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto",""],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_DEEPLFREE]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto","auto"],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_DEEPLX]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto","auto"],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_NIUTRANS]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto","auto"],["zh-CN","zh"],["zh-TW","cht"]]),[OPT_TRANS_VOLCENGINE]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto","auto"],["zh-CN","zh"],["zh-TW","zh-Hant"]]),[OPT_TRANS_BAIDU]:new Map([...OPT_LANGS_SPEC_DEFAULT,["zh-CN","zh"],["zh-TW","cht"],["ar","ara"],["bg","bul"],["ca","cat"],["hr","hrv"],["da","dan"],["fi","fin"],["fr","fra"],["hi","mai"],["ja","jp"],["ko","kor"],["ms","may"],["mt","mlt"],["nb","nor"],["ro","rom"],["ru","ru"],["sl","slo"],["es","spa"],["sv","swe"],["ta","tam"],["te","tel"],["uk","ukr"],["vi","vie"]]),[OPT_TRANS_TENCENT]:new Map([["auto","auto"],["zh-CN","zh"],["zh-TW","zh"],["en","en"],["ar","ar"],["de","de"],["ru","ru"],["fr","fr"],["fi","fil"],["ko","ko"],["ms","ms"],["pt","pt"],["ja","ja"],["th","th"],["tr","tr"],["es","es"],["it","it"],["hi","hi"],["id","id"],["vi","vi"]]),[OPT_TRANS_OPENAI]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_GEMINI]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_GEMINI_2]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_CLAUDE]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_OLLAMA]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_OPENROUTER]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_CLOUDFLAREAI]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_CUSTOMIZE]:OPT_LANGS_SPEC_DEFAULT};const specToCode=m=>new Map(Array.from(m.entries()).map(_ref5=>{let[k,v]=_ref5;if(v===""){return["auto","auto"];}if(v==="zh"||v==="ZH"){return[v,"zh-CN"];}return[v,k];}));// 名称->CODE -const OPT_LANGS_TO_CODE={};Object.entries(OPT_LANGS_TO_SPEC).forEach(_ref6=>{let[t,m]=_ref6;OPT_LANGS_TO_CODE[t]=specToCode(m);});const defaultSystemPrompt="Act as a translation API. Output a single raw JSON object only. No extra text or fences.\n\nInput:\n{\"targetLanguage\":\"\",\"title\":\"\",\"description\":\"\",\"segments\":[{\"id\":1,\"text\":\"...\"}],\"glossary\":{\"sourceTerm\":\"targetTerm\"},\"tone\":\"\"}\n\nOutput:\n{\"translations\":[{\"id\":1,\"text\":\"...\",\"sourceLanguage\":\"\"}]}\n\nRules:\n1. Use title/description for context only; do not output them.\n2. Keep id, order, and count of segments.\n3. Preserve whitespace, HTML entities, and all HTML-like tags (e.g., , ). Translate inner text only.\n4. Highest priority: Follow 'glossary'. Use value for translation; if value is \"\", keep the key.\n5. Do not translate: content in ,
, text enclosed in backticks, or placeholders like {1}, {{1}}, [1], [[1]].\n6.  Apply the specified tone to the translation.\n7.  Detect sourceLanguage for each segment.\n8.  Return empty or unchanged inputs as is.\n\nExample:\nInput: {\"targetLanguage\":\"zh-CN\",\"segments\":[{\"id\":1,\"text\":\"A React component.\"}],\"glossary\":{\"component\":\"\u7EC4\u4EF6\",\"React\":\"\"}}\nOutput: {\"translations\":[{\"id\":1,\"text\":\"\u4E00\u4E2AReact\u7EC4\u4EF6\",\"sourceLanguage\":\"en\"}]}\n\nFail-safe: On any error, return {\"translations\":[]}.";// const defaultSubtitlePrompt = `Goal: Convert raw subtitle event JSON into a clean, sentence-based JSON array.
+const OPT_LANGS_TO_CODE={};Object.entries(OPT_LANGS_TO_SPEC).forEach(_ref6=>{let[t,m]=_ref6;OPT_LANGS_TO_CODE[t]=specToCode(m);});const defaultNobatchPrompt="You are a professional, authentic machine translation engine.";const defaultNobatchUserPrompt="Translate the following source text from ".concat(INPUT_PLACE_FROM," to ").concat(INPUT_PLACE_TO,". Output translation directly without any additional text.\n\nSource Text: ").concat(INPUT_PLACE_TEXT,"\n\nTranslated Text:");const defaultSystemPrompt="Act as a translation API. Output a single raw JSON object only. No extra text or fences.\n\nInput:\n{\"targetLanguage\":\"\",\"title\":\"\",\"description\":\"\",\"segments\":[{\"id\":1,\"text\":\"...\"}],\"glossary\":{\"sourceTerm\":\"targetTerm\"},\"tone\":\"\"}\n\nOutput:\n{\"translations\":[{\"id\":1,\"text\":\"...\",\"sourceLanguage\":\"\"}]}\n\nRules:\n1.  Use title/description for context only; do not output them.\n2.  Keep id, order, and count of segments.\n3.  Preserve whitespace, HTML entities, and all HTML-like tags (e.g., , ). Translate inner text only.\n4.  Highest priority: Follow 'glossary'. Use value for translation; if value is \"\", keep the key.\n5.  Do not translate: content in , 
, text enclosed in backticks, or placeholders like {1}, {{1}}, [1], [[1]].\n6.  Apply the specified tone to the translation.\n7.  Detect sourceLanguage for each segment.\n8.  Return empty or unchanged inputs as is.\n\nExample:\nInput: {\"targetLanguage\":\"zh-CN\",\"segments\":[{\"id\":1,\"text\":\"A React component.\"}],\"glossary\":{\"component\":\"\u7EC4\u4EF6\",\"React\":\"\"}}\nOutput: {\"translations\":[{\"id\":1,\"text\":\"\u4E00\u4E2AReact\u7EC4\u4EF6\",\"sourceLanguage\":\"en\"}]}\n\nFail-safe: On any error, return {\"translations\":[]}.";// const defaultSubtitlePrompt = `Goal: Convert raw subtitle event JSON into a clean, sentence-based JSON array.
 // Output (valid JSON array, output ONLY this array):
 // [{
 //   "text": "string",        // Full sentence with correct punctuation
@@ -29466,7 +29466,7 @@ const defaultApi={apiSlug:"",// 唯一标识
 apiName:"",// 接口名称
 apiType:"",// 接口类型
 url:"",key:"",model:"",// 模型名称
-systemPrompt:defaultSystemPrompt,subtitlePrompt:defaultSubtitlePrompt,userPrompt:"",tone:BUILTIN_STONES[0],// 翻译风格
+systemPrompt:defaultSystemPrompt,subtitlePrompt:defaultSubtitlePrompt,nobatchPrompt:defaultNobatchPrompt,nobatchUserPrompt:defaultNobatchUserPrompt,userPrompt:"",tone:BUILTIN_STONES[0],// 翻译风格
 placeholder:BUILTIN_PLACEHOLDERS[0],// 占位符
 placetag:[BUILTIN_PLACETAGS[0]],// 占位标签
 // aiTerms: false, // AI智能专业术语 (todo: 备用)
@@ -29481,10 +29481,12 @@ batchLength:DEFAULT_BATCH_LENGTH,// 每次发送最大文字数量
 useBatchFetch:false,// 是否启用聚合发送请求
 useContext:false,// 是否启用智能上下文
 contextSize:DEFAULT_CONTEXT_SIZE,// 智能上下文保留会话数
-temperature:0.0,maxTokens:20480,think:false,thinkIgnore:"qwen3,deepseek-r1",isDisabled:false,// 是否不显示,
+temperature:0.0,maxTokens:20480,// think: false, // (OpenAI 兼容接口未支持,暂时移除)
+// thinkIgnore: "qwen3,deepseek-r1", // (OpenAI 兼容接口未支持,暂时移除)
+isDisabled:false,// 是否不显示,
 region:""// Azure 专用
-};const defaultApiOpts={[OPT_TRANS_BUILTINAI]:defaultApi,[OPT_TRANS_GOOGLE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single"},[OPT_TRANS_GOOGLE_2]:{...defaultApi,url:"https://translate-pa.googleapis.com/v1/translateHtml",key:"AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520",useBatchFetch:true},[OPT_TRANS_MICROSOFT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_AZUREAI]:{...defaultApi,url:"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0",useBatchFetch:true},[OPT_TRANS_BAIDU]:{...defaultApi},[OPT_TRANS_TENCENT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_VOLCENGINE]:{...defaultApi},[OPT_TRANS_DEEPL]:{...defaultApi,url:"https://api-free.deepl.com/v2/translate",useBatchFetch:true},[OPT_TRANS_DEEPLFREE]:{...defaultApi,fetchLimit:1},[OPT_TRANS_DEEPLX]:{...defaultApi,url:"http://localhost:1188/translate",fetchLimit:1},[OPT_TRANS_NIUTRANS]:{...defaultApi,url:"https://api.niutrans.com/NiuTransServer/translation",dictNo:"",memoryNo:""},[OPT_TRANS_OPENAI]:{...defaultApi,url:"https://api.openai.com/v1/chat/completions",model:"gpt-4",useBatchFetch:true,fetchLimit:1},[OPT_TRANS_GEMINI]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1/models/".concat(INPUT_PLACE_MODEL,":generateContent?key=").concat(INPUT_PLACE_KEY),model:"gemini-2.5-flash",useBatchFetch:true},[OPT_TRANS_GEMINI_2]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",model:"gemini-2.0-flash",useBatchFetch:true},[OPT_TRANS_CLAUDE]:{...defaultApi,url:"https://api.anthropic.com/v1/messages",model:"claude-3-haiku-20240307",useBatchFetch:true},[OPT_TRANS_CLOUDFLAREAI]:{...defaultApi,url:"https://api.cloudflare.com/client/v4/accounts/{{ACCOUNT_ID}}/ai/run/@cf/meta/m2m100-1.2b"},[OPT_TRANS_OLLAMA]:{...defaultApi,url:"http://localhost:11434/v1/chat/completions",model:"llama3.1",useBatchFetch:true},[OPT_TRANS_OPENROUTER]:{...defaultApi,url:"https://openrouter.ai/api/v1/chat/completions",model:"openai/gpt-4o",useBatchFetch:true},[OPT_TRANS_CUSTOMIZE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN",reqHook:defaultRequestHook,resHook:defaultResponseHook}};// 内置翻译接口列表(带参数)
-const DEFAULT_API_LIST=OPT_ALL_TYPES.map(apiType=>({...defaultApiOpts[apiType],apiSlug:apiType,apiName:apiType,apiType}));const DEFAULT_API_TYPE=OPT_TRANS_MICROSOFT;const DEFAULT_API_SETTING=DEFAULT_API_LIST[DEFAULT_API_TYPE];
+};const defaultApiOpts={[OPT_TRANS_BUILTINAI]:defaultApi,[OPT_TRANS_GOOGLE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single"},[OPT_TRANS_GOOGLE_2]:{...defaultApi,url:"https://translate-pa.googleapis.com/v1/translateHtml",key:"AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520",useBatchFetch:true},[OPT_TRANS_MICROSOFT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_AZUREAI]:{...defaultApi,url:"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0",useBatchFetch:true},[OPT_TRANS_BAIDU]:{...defaultApi},[OPT_TRANS_TENCENT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_VOLCENGINE]:{...defaultApi},[OPT_TRANS_DEEPL]:{...defaultApi,url:"https://api-free.deepl.com/v2/translate",useBatchFetch:true},[OPT_TRANS_DEEPLFREE]:{...defaultApi,fetchLimit:1},[OPT_TRANS_DEEPLX]:{...defaultApi,url:"http://localhost:1188/translate"},[OPT_TRANS_NIUTRANS]:{...defaultApi,url:"https://api.niutrans.com/NiuTransServer/translation",dictNo:"",memoryNo:""},[OPT_TRANS_OPENAI]:{...defaultApi,url:"https://api.openai.com/v1/chat/completions",model:"gpt-4",useBatchFetch:true},[OPT_TRANS_GEMINI]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1/models/".concat(INPUT_PLACE_MODEL,":generateContent?key=").concat(INPUT_PLACE_KEY),model:"gemini-2.5-flash",useBatchFetch:true},[OPT_TRANS_GEMINI_2]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",model:"gemini-2.0-flash",useBatchFetch:true},[OPT_TRANS_CLAUDE]:{...defaultApi,url:"https://api.anthropic.com/v1/messages",model:"claude-3-haiku-20240307",useBatchFetch:true},[OPT_TRANS_CLOUDFLAREAI]:{...defaultApi,url:"https://api.cloudflare.com/client/v4/accounts/{{ACCOUNT_ID}}/ai/run/@cf/meta/m2m100-1.2b"},[OPT_TRANS_OLLAMA]:{...defaultApi,url:"http://localhost:11434/v1/chat/completions",model:"llama3.1",useBatchFetch:true},[OPT_TRANS_OPENROUTER]:{...defaultApi,url:"https://openrouter.ai/api/v1/chat/completions",model:"openai/gpt-4o",useBatchFetch:true},[OPT_TRANS_CUSTOMIZE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN",reqHook:defaultRequestHook,resHook:defaultResponseHook}};// 内置翻译接口列表(带参数)
+const DEFAULT_API_LIST=OPT_ALL_TRANS_TYPES.map(apiType=>({...defaultApiOpts[apiType],apiSlug:apiType,apiName:apiType,apiType}));const DEFAULT_API_TYPE=OPT_TRANS_MICROSOFT;const DEFAULT_API_SETTING=DEFAULT_API_LIST.find(a=>a.apiType===DEFAULT_API_TYPE);
 ;// CONCATENATED MODULE: ./src/config/rules.js
 const GLOBAL_KEY="*";const REMAIN_KEY="-";const SHADOW_KEY=">>>";const DEFAULT_COLOR="#209CEE";// 默认高亮背景色/线条颜色
 const DEFAULT_TRANS_TAG="font";const DEFAULT_SELECT_STYLE="-webkit-line-clamp: unset; max-height: none; height: auto;";const OPT_STYLE_NONE="style_none";// 无
@@ -29520,7 +29522,7 @@ selectStyle:"",// 选择器节点样式
 parentStyle:"",// 选择器父节点样式
 grandStyle:"",// 选择器父节点样式
 injectJs:"",// 注入JS
-injectCss:"",// 注入CSS
+// injectCss: "", // 注入CSS (作废)
 transOnly:GLOBAL_KEY,// 是否仅显示译文
 // transTiming: GLOBAL_KEY, // 翻译时机/鼠标悬停翻译  (暂时作废)
 transTag:GLOBAL_KEY,// 译文元素标签
@@ -29560,7 +29562,7 @@ selectStyle:DEFAULT_SELECT_STYLE,// 选择器节点样式
 parentStyle:DEFAULT_SELECT_STYLE,// 选择器父节点样式
 grandStyle:DEFAULT_SELECT_STYLE,// 选择器祖节点样式
 injectJs:"",// 注入JS
-injectCss:"",// 注入CSS
+// injectCss: "", // 注入CSS(作废)
 transOnly:"false",// 是否仅显示译文
 // transTiming: OPT_TIMING_PAGESCROLL, // 翻译时机/鼠标悬停翻译 (暂时作废)
 transTag:DEFAULT_TRANS_TAG,// 译文元素标签
@@ -29585,7 +29587,7 @@ highlightWords:OPT_HIGHLIGHT_WORDS_DISABLE// 高亮词汇
 const RULES_MAP={// "www.google.com/search": {
 //   rootsSelector: `#rcnt`,
 // },
-"en.wikipedia.org":{ignoreSelector:".button, code, footer, form, mark, pre, .mwe-math-element, .mw-editsection"},"news.ycombinator.com":{selector:"p, .titleline, .commtext, .hn-item-title, .hn-comment-text, .hn-story-title",keepSelector:"code, img, svg, pre, .sitebit",ignoreSelector:"button, code, footer, form, header, mark, nav, pre, .reply",autoScan:"false"},"twitter.com, https://x.com":{selector:"[data-testid='tweetText']",keepSelector:"img, svg, a, span:has(a), div:has(a)",ignoreSelector:"button, [data-testid='videoPlayer'], [role='group']",autoScan:"false"},"www.youtube.com/live_chat":{rootsSelector:"div#items",selector:"span.yt-live-chat-text-message-renderer",autoScan:"false"},"www.youtube.com":{rootsSelector:"ytd-page-manager",ignoreSelector:"aside, button, footer, form, header, pre, mark, nav, #player, #container, .caption-window, .ytp-settings-menu"}};const rules_BUILTIN_RULES=Object.entries(RULES_MAP).map(_ref=>{let[pattern,rule]=_ref;return{// ...DEFAULT_RULE,
+"en.wikipedia.org":{ignoreSelector:".button, code, footer, form, mark, pre, .mwe-math-element, .mw-editsection"},"news.ycombinator.com":{selector:"p, .titleline, .commtext, .hn-item-title, .hn-comment-text, .hn-story-title",keepSelector:"code, img, svg, pre, .sitebit",ignoreSelector:"button, code, footer, form, header, mark, nav, pre, .reply",autoScan:"false"},"twitter.com, https://x.com":{selector:"[data-testid='tweetText']",keepSelector:"img, svg, a, span:has(a), div:has(a)",ignoreSelector:"button, [data-testid='videoPlayer'], [role='group']",autoScan:"false"},"www.youtube.com/live_chat":{rootsSelector:"div#items",selector:"span.yt-live-chat-text-message-renderer",autoScan:"false"},"www.youtube.com":{rootsSelector:"ytd-page-manager",ignoreSelector:"aside, button, footer, form, header, pre, mark, nav, #player, #container, .caption-window, .ytp-settings-menu"},"web.telegram.org":{autoScan:"false",selector:".text-content, .embedded-text-wrapper",rootsSelector:".Transition"}};const rules_BUILTIN_RULES=Object.entries(RULES_MAP).map(_ref=>{let[pattern,rule]=_ref;return{// ...DEFAULT_RULE,
 ...rule,pattern};});
 ;// CONCATENATED MODULE: ./src/libs/log.js
 // 定义日志级别
@@ -29662,6 +29664,7 @@ apiSlug:OPT_TRANS_MICROSOFT,segSlug:"-",// AI智能断句
 chunkLength:1000,// AI处理切割长度
 // fromLang: "en",
 toLang:"zh-CN",isBilingual:true,// 是否双语显示
+skipAd:false,// 是否快进广告
 windowStyle:SUBTITLE_WINDOW_STYLE,// 背景样式
 originStyle:SUBTITLE_ORIGIN_STYLE,// 原文样式
 translationStyle:SUBTITLE_TRANSLATION_STYLE// 译文样式
@@ -29702,10 +29705,11 @@ mouseHoverSetting:DEFAULT_MOUSE_HOVER_SETTING,// 鼠标悬停翻译
 preInit:true,// 是否预加载脚本
 transAllnow:false,// 是否立即全部翻译
 subtitleSetting:DEFAULT_SUBTITLE_SETTING,// 字幕设置
-logLevel:LogLevel.INFO.value// 日志级别
+logLevel:LogLevel.INFO.value,// 日志级别
+rootMargin:500// 提前触发翻译
 };
 ;// CONCATENATED MODULE: ./src/config/i18n.js
-const UI_LANGS=(/* unused pure expression or super */ null && ([["en","English"],["zh","简体中文"],["zh_TW","繁體中文"]]));const customApiLangs="[\"en\", \"English - English\"],\n[\"zh-CN\", \"Simplified Chinese - \u7B80\u4F53\u4E2D\u6587\"],\n[\"zh-TW\", \"Traditional Chinese - \u7E41\u9AD4\u4E2D\u6587\"],\n[\"ar\", \"Arabic - \u0627\u0644\u0639\u0631\u0628\u064A\u0629\"],\n[\"bg\", \"Bulgarian - \u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438\"],\n[\"ca\", \"Catalan - Catal\xE0\"],\n[\"hr\", \"Croatian - Hrvatski\"],\n[\"cs\", \"Czech - \u010Ce\u0161tina\"],\n[\"da\", \"Danish - Dansk\"],\n[\"nl\", \"Dutch - Nederlands\"],\n[\"fi\", \"Finnish - Suomi\"],\n[\"fr\", \"French - Fran\xE7ais\"],\n[\"de\", \"German - Deutsch\"],\n[\"el\", \"Greek - \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\"],\n[\"hi\", \"Hindi - \u0939\u093F\u0928\u094D\u0926\u0940\"],\n[\"hu\", \"Hungarian - Magyar\"],\n[\"id\", \"Indonesian - Indonesia\"],\n[\"it\", \"Italian - Italiano\"],\n[\"ja\", \"Japanese - \u65E5\u672C\u8A9E\"],\n[\"ko\", \"Korean - \uD55C\uAD6D\uC5B4\"],\n[\"ms\", \"Malay - Melayu\"],\n[\"mt\", \"Maltese - Malti\"],\n[\"nb\", \"Norwegian - Norsk Bokm\xE5l\"],\n[\"pl\", \"Polish - Polski\"],\n[\"pt\", \"Portuguese - Portugu\xEAs\"],\n[\"ro\", \"Romanian - Rom\xE2n\u0103\"],\n[\"ru\", \"Russian - \u0420\u0443\u0441\u0441\u043A\u0438\u0439\"],\n[\"sk\", \"Slovak - Sloven\u010Dina\"],\n[\"sl\", \"Slovenian - Sloven\u0161\u010Dina\"],\n[\"es\", \"Spanish - Espa\xF1ol\"],\n[\"sv\", \"Swedish - Svenska\"],\n[\"ta\", \"Tamil - \u0BA4\u0BAE\u0BBF\u0BB4\u0BCD\"],\n[\"te\", \"Telugu - \u0C24\u0C46\u0C32\u0C41\u0C17\u0C41\"],\n[\"th\", \"Thai - \u0E44\u0E17\u0E22\"],\n[\"tr\", \"Turkish - T\xFCrk\xE7e\"],\n[\"uk\", \"Ukrainian - \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430\"],\n[\"vi\", \"Vietnamese - Ti\u1EBFng Vi\u1EC7t\"],\n";const customApiHelpZH="// \u8BF7\u6C42\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n  \"url\": \"{{url}}\",\n  \"method\": \"POST\",\n  \"headers\": {\n    \"Content-type\": \"application/json\",\n    \"Authorization\": \"Bearer {{key}}\"\n  },\n  \"body\": {\n    \"text\": \"{{text}}\", // \u5F85\u7FFB\u8BD1\u6587\u5B57\n    \"from\": \"{{from}}\", // \u6587\u5B57\u7684\u8BED\u8A00\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09\n    \"to\": \"{{to}}\",     // \u76EE\u6807\u8BED\u8A00\n  },\n}\n\n\n// \u8FD4\u56DE\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n  text: \"\", // \u7FFB\u8BD1\u540E\u7684\u6587\u5B57\n  from: \"\", // \u8BC6\u522B\u7684\u6E90\u8BED\u8A00\n  to: \"\",   // \u76EE\u6807\u8BED\u8A00\uFF08\u53EF\u9009\uFF09\n}\n\n\n// Hook \u8303\u4F8B\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n  headers: {\n      \"Content-type\": \"application/json\",\n  },\n  method: \"GET\",\n  body: null,\n}]\n\n// Response Hook\n// \u5176\u4E2D\u8FD4\u56DE\u6570\u7EC4\u7B2C\u4E00\u4E2A\u503C\u8868\u793A\u8BD1\u6587\u5B57\u7B26\u4E32\uFF0C\u7B2C\u4E8C\u4E2A\u503C\u4E3A\u5E03\u5C14\u503C\uFF0C\u8868\u793A\u539F\u6587\u8BED\u8A00\u4E0E\u76EE\u6807\u8BED\u8A00\u662F\u5426\u76F8\u540C\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// \u652F\u6301\u7684\u8BED\u8A00\u4EE3\u7801\u5982\u4E0B\n".concat(customApiLangs,"\n");const customApiHelpEN="// Default request\n{\n  \"url\": \"{{url}}\",\n  \"method\": \"POST\",\n  \"headers\": {\n    \"Content-type\": \"application/json\",\n    \"Authorization\": \"Bearer {{key}}\"\n  },\n  \"body\": {\n    \"text\": \"{{text}}\", // Text to be translated\n    \"from\": \"{{from}}\", // The language of the text (may be empty)\n    \"to\": \"{{to}}\",     // Target language\n  },\n}\n\n\n// Default response\n{\n  text: \"\", // translated text\n  from: \"\", // Recognized source language\n  to: \"\",   // Target language (optional)\n}\n\n\n/// Hook Example\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n  headers: {\n      \"Content-type\": \"application/json\",\n  },\n  method: \"GET\",\n  body: null,\n}]\n\n// Response Hook\n// In the returned array, the first value is the translated string, while the second value is a boolean\n// that indicates whether the source language is the same as the target language.\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// The supported language codes are as follows\n".concat(customApiLangs,"\n");const requestHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'url', 'body', 'headers', 'method'\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n  return { url, body, headers, userMsg, method };\n}";const requestHookHelperEN="1. The first parameter contains the following fields: 'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2. The return value must be an object containing the following fields: 'url', 'body', 'headers', 'method'\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n  return { url, body, headers, userMsg, method };\n}";const responsetHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'res', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'translations'\n  \uFF08'translations' \u5E94\u4E3A\u4E00\u4E2A\u4E8C\u7EF4\u6570\u7EC4\uFF1A[[\u8BD1\u6587, \u539F\u6587\u8BED\u8A00]]\uFF09\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync ({ res, ...args }) => {\n  const translations = [[\"\u4F60\u597D\", \"en\"]];\n  const modelMsg = {}; // \u7528\u4E8EAI\u4E0A\u4E0B\u6587\n  return { translations, modelMsg };\n}";const responsetHookHelperEN="1. The first parameter contains the following fields: 'res', ...\n2. The return value must be an object containing the following fields: 'translations'\n  ('translations' should be a two-dimensional array: [[translation, source language]]).\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync ({ res, ...args }) => {\n  const translations = [[\"\u4F60\u597D\", \"en\"]];\n  const modelMsg = {}; // For AI context\n  return { translations, modelMsg };\n}";const I18N={app_name:{zh:"\u7B80\u7EA6\u7FFB\u8BD1",en:"KISS Translator",zh_TW:"\u7C21\u7D04\u7FFB\u8B6F"},translate:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},custom_api_help:{zh:customApiHelpZH,en:customApiHelpEN,zh_TW:customApiHelpZH},request_hook_helper:{zh:requestHookHelperZH,en:requestHookHelperEN,zh_TW:requestHookHelperZH},response_hook_helper:{zh:responsetHookHelperZH,en:responsetHookHelperEN,zh_TW:responsetHookHelperZH},translate_alt:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},basic_setting:{zh:"\u57FA\u672C\u8BBE\u7F6E",en:"Basic Setting",zh_TW:"\u57FA\u672C\u8A2D\u5B9A"},rules_setting:{zh:"\u89C4\u5219\u8BBE\u7F6E",en:"Rules Setting",zh_TW:"\u898F\u5247\u8A2D\u5B9A"},apis_setting:{zh:"\u63A5\u53E3\u8BBE\u7F6E",en:"Apis Setting",zh_TW:"API\u8A2D\u5B9A"},sync_setting:{zh:"\u540C\u6B65\u8BBE\u7F6E",en:"Sync Setting",zh_TW:"\u540C\u6B65\u8A2D\u5B9A"},patch_setting:{zh:"\u8865\u4E01\u8BBE\u7F6E",en:"Patch Setting",zh_TW:"\u4FEE\u88DC\u8A2D\u5B9A"},patch_setting_help:{zh:"\u9488\u5BF9\u4E00\u4E9B\u7279\u6B8A\u7F51\u7AD9\u7684\u4FEE\u6B63\u811A\u672C\uFF0C\u4EE5\u4FBF\u7FFB\u8BD1\u8F6F\u4EF6\u5F97\u5230\u66F4\u597D\u7684\u5C55\u793A\u6548\u679C\u3002",en:"Corrected scripts for some special websites so that the translation software can get better display results.",zh_TW:"\u91DD\u5C0D\u67D0\u4E9B\u7279\u6B8A\u7DB2\u7AD9\u7684\u4FEE\u6B63\u8173\u672C\uFF0C\u8B93\u7FFB\u8B6F\u8EDF\u9AD4\u6709\u66F4\u597D\u7684\u986F\u793A\u6548\u679C\u3002"},inject_webfix:{zh:"\u6CE8\u5165\u4FEE\u590D\u8865\u4E01",en:"Inject Webfix",zh_TW:"\u6CE8\u5165\u4FEE\u6B63\u88DC\u4E01"},about:{zh:"\u5173\u4E8E",en:"About",zh_TW:"\u95DC\u65BC"},about_md:{zh:"README.md",en:"README.en.md",zh_TW:"README.md"},about_md_local:{zh:"\u8BF7 [\u70B9\u51FB\u8FD9\u91CC](".concat("https://github.com/fishjar/kiss-translator",") \u67E5\u770B\u8BE6\u60C5\u3002"),en:"Please [click here](".concat("https://github.com/fishjar/kiss-translator",") for details."),zh_TW:"\u8ACB\u3010\u9EDE\u9019\u88E1\u3011\u67E5\u770B\u8A73\u7D30\u5167\u5BB9\u3002"},ui_lang:{zh:"\u754C\u9762\u8BED\u8A00",en:"Interface Language",zh_TW:"\u4ECB\u9762\u8A9E\u8A00"},fetch_limit:{zh:"\u6700\u5927\u5E76\u53D1\u8BF7\u6C42\u6570\u91CF (1-100)",en:"Maximum Number Of Concurrent Requests (1-100)",zh_TW:"\u6700\u5927\u540C\u6642\u8ACB\u6C42\u6578\u91CF (1-100)"},if_think:{zh:"\u542F\u7528\u6216\u7981\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B",en:"Enable or disable the model\u2019s thinking behavior ",zh_TW:"\u555F\u7528\u6216\u505C\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B"},think:{zh:"\u542F\u7528\u6DF1\u5EA6\u601D\u8003",en:"enable thinking",zh_TW:"\u555F\u7528\u6DF1\u5EA6\u601D\u8003"},nothink:{zh:"\u7981\u7528\u6DF1\u5EA6\u601D\u8003",en:"disable thinking",zh_TW:"\u505C\u7528\u6DF1\u5EA6\u601D\u8003"},think_ignore:{zh:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684\u8F93\u51FA,\u9017\u53F7(,)\u5206\u5272,\u5F53\u6A21\u578B\u652F\u6301\u601D\u8003\u4F46ollama\u4E0D\u652F\u6301\u65F6\u9700\u8981\u586B\u5199\u672C\u53C2\u6570",en:"Ignore the  block for the following models, comma (,) separated",zh_TW:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684  \u8F38\u51FA\uFF0C\u4EE5\u9017\u865F (,) \u5206\u9694\uFF1B\u7576\u6A21\u578B\u652F\u63F4\u601D\u8003\u4F46 ollama \u4E0D\u652F\u63F4\u6642\u9700\u8981\u586B\u5BEB\u6B64\u53C3\u6578"},fetch_interval:{zh:"\u6BCF\u6B21\u8BF7\u6C42\u95F4\u9694\u65F6\u95F4 (0-5000ms)",en:"Time Between Requests (0-5000ms)",zh_TW:"\u6BCF\u6B21\u8ACB\u6C42\u9593\u9694\u6642\u9593 (0-5000ms)"},translate_interval:{zh:"\u7FFB\u8BD1\u95F4\u9694\u65F6\u95F4 (10-2000ms)",en:"Translation Interval (10-2000ms)",zh_TW:"\u7FFB\u8B6F\u9593\u9694\u6642\u9593 (10-2000ms)"},http_timeout:{zh:"\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4 (5000-60000ms)",en:"Request Timeout Time (5000-60000ms)",zh_TW:"\u8ACB\u6C42\u903E\u6642\u6642\u9593 (5000-60000ms)"},custom_header:{zh:"\u81EA\u5B9A\u4E49Header\u53C2\u6570",en:"Custom Header Params"},custom_header_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\"",en:"Use JSON format, for example \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\""},custom_body:{zh:"\u81EA\u5B9A\u4E49Body\u53C2\u6570",en:"Custom Body Params"},custom_body_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"top_p\": 0.7",en:"Use JSON format, for example \"top_p\": 0.7"},min_translate_length:{zh:"\u6700\u5C0F\u7FFB\u8BD1\u5B57\u7B26\u6570 (1-100)",en:"Minimum number Of Translated Characters (1-100)",zh_TW:"\u6700\u5C0F\u7FFB\u8B6F\u5B57\u5143\u6578 (1-100)"},max_translate_length:{zh:"\u6700\u5927\u7FFB\u8BD1\u5B57\u7B26\u6570 (100-100000)",en:"Maximum number Of Translated Characters (100-100000)",zh_TW:"\u6700\u5927\u7FFB\u8B6F\u5B57\u5143\u6578 (100-100000)"},num_of_newline_characters:{zh:"\u6362\u884C\u5B57\u7B26\u6570 (1-1000)",en:"Number of Newline Characters (1-1000)",zh_TW:"\u63DB\u884C\u5B57\u5143\u6578 (1-1000)"},translate_service:{zh:"\u7FFB\u8BD1\u670D\u52A1",en:"Translate Service",zh_TW:"\u7FFB\u8B6F\u670D\u52D9"},translate_service_multiple:{zh:"\u7FFB\u8BD1\u670D\u52A1 (\u652F\u6301\u591A\u9009)",en:"Translation service (multiple supported)",zh_TW:"\u7FFB\u8B6F\u670D\u52D9 (\u652F\u63F4\u591A\u9078)"},translate_timing:{zh:"\u7FFB\u8BD1\u65F6\u673A",en:"Translate Timing",zh_TW:"\u7FFB\u8B6F\u6642\u6A5F"},mk_pagescroll:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u7FFB\u8BD1\uFF08\u63A8\u8350\uFF09",en:"Rolling Loading (Suggested)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u7FFB\u8B6F\uFF08\u5EFA\u8B70\uFF09"},mk_pageopen:{zh:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8BD1",en:"Translate all now",zh_TW:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8B6F"},mk_mouseover:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},mk_ctrlKey:{zh:"Control + \u9F20\u6807\u60AC\u505C",en:"Control + Mouseover",zh_TW:"Control + \u6ED1\u9F20\u61F8\u505C"},mk_shiftKey:{zh:"Shift + \u9F20\u6807\u60AC\u505C",en:"Shift + Mouseover",zh_TW:"Shift + \u6ED1\u9F20\u61F8\u505C"},mk_altKey:{zh:"Alt + \u9F20\u6807\u60AC\u505C",en:"Alt + Mouseover",zh_TW:"Alt + \u6ED1\u9F20\u61F8\u505C"},from_lang:{zh:"\u539F\u6587\u8BED\u8A00",en:"Source Language",zh_TW:"\u539F\u6587\u8A9E\u8A00"},to_lang:{zh:"\u76EE\u6807\u8BED\u8A00",en:"Target Language",zh_TW:"\u76EE\u6A19\u8A9E\u8A00"},to_lang2:{zh:"\u7B2C\u4E8C\u76EE\u6807\u8BED\u8A00",en:"Target Language 2",zh_TW:"\u7B2C\u4E8C\u76EE\u6A19\u8A9E\u8A00"},to_lang2_helper:{zh:"\u8BBE\u5B9A\u540E\uFF0C\u4E0E\u76EE\u6807\u8BED\u8A00\u4EA7\u751F\u4E92\u8BD1\u6548\u679C\uFF0C\u4F46\u4F9D\u8D56\u8FDC\u7A0B\u8BED\u8A00\u8BC6\u522B\u3002",en:"After setting, it will produce mutual translation effect with the target language, but it relies on remote language recognition.",zh_TW:"\u8A2D\u5B9A\u5F8C\u6703\u8207\u76EE\u6A19\u8A9E\u8A00\u4E92\u8B6F\uFF0C\u4F46\u4F9D\u8CF4\u9060\u7AEF\u8A9E\u8A00\u8B58\u5225\u3002"},text_style:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},text_style_alt:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},bg_color:{zh:"\u6837\u5F0F\u989C\u8272",en:"Style Color",zh_TW:"\u6A23\u5F0F\u984F\u8272"},remain_unchanged:{zh:"\u4FDD\u7559\u4E0D\u53D8",en:"Remain Unchanged",zh_TW:"\u4FDD\u7559\u4E0D\u8B8A"},google_api:{zh:"\u8C37\u6B4C\u7FFB\u8BD1\u63A5\u53E3",en:"Google Translate API",zh_TW:"Google \u7FFB\u8B6F\u4ECB\u9762"},default_selector:{zh:"\u9ED8\u8BA4\u9009\u62E9\u5668",en:"Default selector",zh_TW:"\u9810\u8A2D\u9078\u64C7\u5668"},selector_rules:{zh:"\u9009\u62E9\u5668\u89C4\u5219",en:"Selector Rules",zh_TW:"\u9078\u64C7\u5668\u898F\u5247"},save:{zh:"\u4FDD\u5B58",en:"Save",zh_TW:"\u5132\u5B58"},edit:{zh:"\u7F16\u8F91",en:"Edit",zh_TW:"\u7DE8\u8F2F"},cancel:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},delete:{zh:"\u5220\u9664",en:"Delete",zh_TW:"\u522A\u9664"},reset:{zh:"\u91CD\u7F6E",en:"Reset",zh_TW:"\u91CD\u8A2D"},add:{zh:"\u6DFB\u52A0",en:"Add",zh_TW:"\u65B0\u589E"},inject_rules:{zh:"\u6CE8\u5165\u8BA2\u9605\u89C4\u5219",en:"Inject Subscribe Rules",zh_TW:"\u6CE8\u5165\u8A02\u95B1\u898F\u5247"},personal_rules:{zh:"\u4E2A\u4EBA\u89C4\u5219",en:"Rules",zh_TW:"\u500B\u4EBA\u898F\u5247"},subscribe_rules:{zh:"\u8BA2\u9605\u89C4\u5219",en:"Subscribe",zh_TW:"\u8A02\u95B1\u898F\u5247"},overwrite_subscribe_rules:{zh:"\u8986\u5199\u8BA2\u9605\u89C4\u5219",en:"Overwrite",zh_TW:"\u8986\u5BEB\u8A02\u95B1\u898F\u5247"},subscribe_url:{zh:"\u8BA2\u9605\u5730\u5740",en:"Subscribe URL",zh_TW:"\u8A02\u95B1\u7DB2\u5740"},rules_warn_1:{zh:"1\u3001\u89C4\u5219\u751F\u6548\u7684\u4F18\u5148\u7EA7\u4F9D\u6B21\u4E3A\uFF1A\u4E2A\u4EBA\u89C4\u5219 > \u8BA2\u9605\u89C4\u5219 > \u5168\u5C40\u89C4\u5219\u3002\"\u5168\u5C40\u89C4\u5219\"\u76F8\u5F53\u4E8E\u515C\u5E95\u89C4\u5219\u3002",en:"1. The priority of rules is: personal rules > subscription rules > global rules. \"Global rules\" are like a fallback rule.",zh_TW:"1.\u898F\u5247\u751F\u6548\u7684\u512A\u5148\u9806\u5E8F\u4F9D\u5E8F\u70BA\uFF1A\u500B\u4EBA\u898F\u5247 > \u8A02\u95B1\u898F\u5247 > \u5168\u57DF\u898F\u5247\u3002 \"\u5168\u57DF\u898F\u5247\"\u76F8\u7576\u65BC\u515C\u5E95\u898F\u5247\u3002"},rules_warn_2:{zh:"2\u3001\u201C\u8BA2\u9605\u89C4\u5219\u201D\u9009\u62E9\u6CE8\u5165\u540E\u624D\u4F1A\u751F\u6548\u3002",en:"2. \"Subscription rules\" will take effect only after injection is selected.",zh_TW:"2\u3001\u300C\u8A02\u95B1\u898F\u5247\u300D\u9078\u64C7\u6CE8\u5165\u5F8C\u624D\u6703\u751F\u6548\u3002"},rules_warn_3:{zh:"3\u3001\u5173\u4E8E\u89C4\u5219\u586B\u5199\uFF1A\u8F93\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u6846\u9009\u201C*\u201D\u8868\u793A\u91C7\u7528\u5168\u5C40\u89C4\u5219\u3002",en:"3. Regarding filling in the rules: Leave the input box blank or select \"*\" in the drop-down box to use global rule.",zh_TW:"3. \u898F\u5247\u586B\u5BEB\u8AAA\u660E\uFF1A\u8F38\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u9078\u64C7\u300C*\u300D\u8868\u793A\u4F7F\u7528\u5168\u57DF\u898F\u5247\u3002"},sync_warn:{zh:"\u6D89\u53CA\u9690\u79C1\u6570\u636E\u7684\u540C\u6B65\u8BF7\u8C28\u614E\u9009\u62E9\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52A1\uFF0C\u5EFA\u8BAE\u81EA\u884C\u642D\u5EFA kiss-worker \u6216 WebDAV \u670D\u52A1\u3002",en:"When synchronizing data that involves privacy, please be cautious about choosing third-party sync services. It is recommended to set up your own sync service using kiss-worker or WebDAV.",zh_TW:"\u540C\u6B65\u6D89\u53CA\u96B1\u79C1\u8CC7\u6599\u6642\uFF0C\u8ACB\u8B39\u614E\u9078\u64C7\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52D9\uFF1B\u5EFA\u8B70\u81EA\u5EFA kiss-worker \u6216 WebDAV \u670D\u52D9\u3002"},sync_warn_2:{zh:"\u5982\u679C\u670D\u52A1\u5668\u5B58\u5728\u5176\u4ED6\u5BA2\u6237\u7AEF\u540C\u6B65\u7684\u6570\u636E\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u5C06\u76F4\u63A5\u8986\u76D6\u672C\u5730\u914D\u7F6E\uFF0C\u540E\u9762\u5219\u6839\u636E\u4FEE\u6539\u65F6\u95F4\uFF0C\u65B0\u7684\u8986\u76D6\u65E7\u7684\u3002",en:"If the server has data synchronized by other clients, the first synchronization will directly overwrite the local configuration, and later, according to the modification time, the new one will overwrite the old one.",zh_TW:"\u82E5\u4F3A\u670D\u5668\u4E0A\u5B58\u5728\u5176\u4ED6\u7528\u6236\u7AEF\u540C\u6B65\u7684\u8CC7\u6599\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u6703\u76F4\u63A5\u8986\u84CB\u672C\u6A5F\u8A2D\u5B9A\uFF1B\u4E4B\u5F8C\u5247\u4F9D\u4FEE\u6539\u6642\u9593\uFF0C\u7531\u65B0\u7684\u8986\u84CB\u820A\u7684\u3002"},about_sync_api:{zh:"\u81EA\u5EFAkiss-wroker\u6570\u636E\u540C\u6B65\u670D\u52A1",en:"Self-hosting a Kiss-worker data sync service",zh_TW:"\u81EA\u5EFA kiss-wroker \u8CC7\u6599\u540C\u6B65\u670D\u52D9"},about_api:{zh:"1\u3001\u5176\u4E2D BuiltinAI \u4E3A\u6D4F\u89C8\u5668\u5185\u7F6EAI\u7FFB\u8BD1\uFF0C\u76EE\u524D\u4EC5 Chrome 138 \u53CA\u4EE5\u4E0A\u7248\u672C\u5F97\u5230\u652F\u6301\u3002",en:"1. BuiltinAI is the browser's built-in AI translation, which is currently only supported by Chrome 138 and above.",zh_TW:"1.\u5176\u4E2D BuiltinAI \u70BA\u700F\u89BD\u5668\u5167\u5EFAAI\u7FFB\u8B6F\uFF0C\u76EE\u524D\u50C5 Chrome 138 \u4EE5\u4E0A\u7248\u672C\u652F\u63F4\u3002"},about_api_2:{zh:"2\u3001\u5927\u90E8\u5206AI\u63A5\u53E3\u90FD\u4E0EOpenAI\u517C\u5BB9\uFF0C\u56E0\u6B64\u9009\u62E9\u6DFB\u52A0OpenAI\u7C7B\u578B\u5373\u53EF\u3002",en:"2. Most AI interfaces are compatible with OpenAI, so just choose to add the OpenAI type.",zh_TW:"2.\u5927\u90E8\u5206AI\u4ECB\u9762\u90FD\u8207OpenAI\u76F8\u5BB9\uFF0C\u56E0\u6B64\u9078\u64C7\u65B0\u589EOpenAI\u985E\u578B\u5373\u53EF\u3002"},about_api_3:{zh:"3\u3001\u6682\u672A\u5217\u51FA\u7684\u63A5\u53E3\uFF0C\u7406\u8BBA\u4E0A\u90FD\u53EF\u4EE5\u901A\u8FC7\u81EA\u5B9A\u4E49\u63A5\u53E3 (Custom) \u7684\u5F62\u5F0F\u652F\u6301\u3002",en:"3. Interfaces that have not yet been launched can theoretically be supported through custom interfaces.",zh_TW:"3\u3001\u66AB\u672A\u5217\u51FA\u7684\u4ECB\u9762\uFF0C\u7406\u8AD6\u4E0A\u90FD\u53EF\u900F\u904E\u81EA\u8A02\u4ECB\u9762  (Custom)  \u7684\u5F62\u5F0F\u652F\u63F4\u3002"},about_api_proxy:{zh:"\u67E5\u770B\u81EA\u5EFA\u4E00\u4E2A\u7FFB\u8BD1\u63A5\u53E3\u4EE3\u7406",en:"Check out the self-built translation interface proxy",zh_TW:"\u67E5\u770B\u5982\u4F55\u81EA\u5EFA\u7FFB\u8B6F\u4ECB\u9762 Proxy"},setting_helper:{zh:"\u65B0\u65E7\u914D\u7F6E\u5E76\u4E0D\u517C\u5BB9\uFF0C\u5BFC\u51FA\u7684\u65E7\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u5BFC\u5165\u3002",en:"The old and new configurations are not compatible. Do not import the exported old configuration again.",zh_TW:"\u65B0\u820A\u914D\u7F6E\u4E26\u4E0D\u76F8\u5BB9\uFF0C\u532F\u51FA\u7684\u820A\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u532F\u5165\u3002"},style_none:{zh:"\u65E0",en:"None",zh_TW:"\u7121"},under_line:{zh:"\u4E0B\u5212\u76F4\u7EBF",en:"Underline",zh_TW:"\u4E0B\u5283\u76F4\u7DDA"},dot_line:{zh:"\u4E0B\u5212\u70B9\u72B6\u7EBF",en:"Dotted Underline",zh_TW:"\u4E0B\u5283\u9EDE\u72C0\u7DDA"},dash_line:{zh:"\u4E0B\u5212\u865A\u7EBF",en:"Dashed Underline",zh_TW:"\u4E0B\u5283\u865B\u7DDA"},dash_box:{zh:"\u865A\u7EBF\u6846",en:"Dashed Box"},wavy_line:{zh:"\u4E0B\u5212\u6CE2\u6D6A\u7EBF",en:"Wavy Underline",zh_TW:"\u4E0B\u5283\u6CE2\u6D6A\u7DDA"},fuzzy:{zh:"\u6A21\u7CCA",en:"Fuzzy",zh_TW:"\u6A21\u7CCA"},highlight:{zh:"\u9AD8\u4EAE",en:"Highlight",zh_TW:"\u53CD\u767D\u6A19\u793A"},blockquote:{zh:"\u5F15\u7528",en:"Blockquote",zh_TW:"\u5F15\u7528"},gradient:{zh:"\u6E10\u53D8",en:"Gradient",zh_TW:"\u6F38\u8B8A"},blink:{zh:"\u95EA\u73B0",en:"Blink",zh_TW:"\u9583\u73FE"},glow:{zh:"\u53D1\u5149",en:"Glow",zh_TW:"\u767C\u5149"},diy_style:{zh:"\u81EA\u5B9A\u4E49\u6837\u5F0F",en:"Custom Style",zh_TW:"\u81EA\u8A02\u6A23\u5F0F"},diy_style_helper:{zh:"\u9075\u5FAA\u201CCSS\u201D\u7684\u8BED\u6CD5",en:"Follow the syntax of \"CSS\"",zh_TW:"\u9075\u5FAA CSS \u8A9E\u6CD5"},setting:{zh:"\u8BBE\u7F6E",en:"Setting",zh_TW:"\u8A2D\u5B9A"},pattern:{zh:"\u5339\u914D\u7F51\u5740",en:"URL pattern",zh_TW:"\u5339\u914D\u7DB2\u5740"},pattern_helper:{zh:"1\u3001\u652F\u6301\u661F\u53F7(*)\u901A\u914D\u7B26\u30022\u3001\u591A\u4E2AURL\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\u3002",en:"1. Supports the asterisk (*) wildcard character. 2. Separate multiple URLs with newlines or English commas \",\".",zh_TW:"1. \u652F\u63F4\u661F\u865F (*) \u842C\u7528\u5B57\u5143\u30022. \u591A\u500B URL \u8ACB\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u3002"},selector_helper:{zh:"1\u3001\u9700\u8981\u7FFB\u8BD1\u7684\u76EE\u6807\u5143\u7D20\u30022\u3001\u5F00\u542F\u81EA\u52A8\u626B\u63CF\u9875\u9762\u540E\uFF0C\u672C\u8BBE\u7F6E\u65E0\u6548\u30023\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The target element to be translated. 2. This setting is invalid when automatic page scanning is enabled. 3. Follow the CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u7FFB\u8B6F\u7684\u76EE\u6A19\u5143\u7D20\u3002 2.\u958B\u555F\u81EA\u52D5\u6383\u63CF\u9801\u9762\u5F8C\uFF0C\u672C\u8A2D\u5B9A\u7121\u6548\u3002 3.\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},translate_switch:{zh:"\u5F00\u542F\u7FFB\u8BD1",en:"Translate Switch",zh_TW:"\u958B\u555F\u7FFB\u8B6F"},default_enabled:{zh:"\u9ED8\u8BA4\u5F00\u542F",en:"Enabled",zh_TW:"\u9810\u8A2D\u958B\u555F"},default_disabled:{zh:"\u9ED8\u8BA4\u5173\u95ED",en:"Disabled",zh_TW:"\u9810\u8A2D\u95DC\u9589"},selector:{zh:"\u9009\u62E9\u5668",en:"Selector",zh_TW:"\u9078\u64C7\u5668"},target_selector:{zh:"\u76EE\u6807\u5143\u7D20\u9009\u62E9\u5668",en:"Target element selector",zh_TW:"\u76EE\u6A19\u5143\u7D20\u9078\u64C7\u5668"},keep_selector:{zh:"\u4FDD\u7559\u5143\u7D20\u9009\u62E9\u5668",en:"Keep unchanged selector",zh_TW:"\u4FDD\u7559\u5143\u7D20\u9078\u64C7\u5668"},keep_selector_helper:{zh:"1\u3001\u76EE\u6807\u5143\u7D20\u4E0B\u9762\u9700\u8981\u539F\u6837\u4FDD\u7559\u7684\u5B50\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The child nodes under the target element need to remain intact. 2. Follow the CSS selector syntax.",zh_TW:"1. \u76EE\u6A19\u5143\u7D20\u4E0B\u7684\u5B50\u7BC0\u9EDE\u9700\u8981\u4FDD\u6301\u539F\u6A23\u3002 2. \u9075\u5FAA CSS \u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},root_selector:{zh:"\u6839\u8282\u70B9\u9009\u62E9\u5668",en:"Root node selector",zh_TW:"\u6839\u7BC0\u9EDE\u9078\u64C7\u5668"},root_selector_helper:{zh:"1\u3001\u7528\u4E8E\u7F29\u5C0F\u9875\u9762\u7FFB\u8BD1\u8303\u56F4\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Used to narrow the translation scope of the page. 2. Follow the CSS selector syntax.",zh_TW:"1.\u7528\u65BC\u7E2E\u5C0F\u9801\u9762\u7FFB\u8B6F\u7BC4\u570D\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},ignore_selector:{zh:"\u4E0D\u7FFB\u8BD1\u8282\u70B9\u9009\u62E9\u5668",en:"Ignore node selectors",zh_TW:"\u4E0D\u7FFB\u8B6F\u7BC0\u9EDE\u9078\u64C7\u5668"},ignore_selector_helper:{zh:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Nodes to be ignored. 2. Follow CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u7BC0\u9EDE\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},terms:{zh:"\u4E13\u4E1A\u672F\u8BED",en:"Terms",zh_TW:"\u5C08\u696D\u8853\u8A9E"},terms_helper:{zh:"1\u3001\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u65E0\u9700\u659C\u6746\uFF0C\u4E0D\u652F\u6301\u4FEE\u9970\u7B26\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. Supports regular expression matching, no slash required, and no modifiers are supported. 2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1. \u652F\u63F4\u6B63\u5247\u8868\u9054\u5F0F\u6BD4\u5C0D\uFF0C\u7121\u9700\u659C\u7DDA\uFF0C\u4E14\u4E0D\u652F\u63F4\u4FEE\u98FE\u7B26\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},ai_terms:{zh:"AI\u4E13\u4E1A\u672F\u8BED",en:"AI Terms",zh_TW:"AI\u5C08\u696D\u8853\u8A9E"},ai_terms_helper:{zh:"1\u3001AI\u667A\u80FD\u66FF\u6362\uFF0C\u4E0D\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. AI intelligent replacement does not support regular expressions.2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1.AI\u667A\u80FD\u66FF\u63DB\uFF0C\u4E0D\u652F\u63F4\u6B63\u898F\u8868\u793A\u5F0F\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},selector_style:{zh:"\u9009\u62E9\u5668\u8282\u70B9\u6837\u5F0F",en:"Selector Style",zh_TW:"\u9078\u64C7\u5668\u7BC0\u9EDE\u6A23\u5F0F"},terms_style:{zh:"\u4E13\u4E1A\u672F\u8BED\u6837\u5F0F",en:"Terms Style",zh_TW:"\u5C08\u696D\u8853\u8A9E\u6A23\u5F0F"},highlight_style:{zh:"\u8BCD\u6C47\u9AD8\u4EAE\u6837\u5F0F",en:"Fav Words highlight style",zh_TW:"\u8A5E\u5F59\u9AD8\u4EAE\u6A23\u5F0F"},selector_style_helper:{zh:"\u5F00\u542F\u7FFB\u8BD1\u65F6\u6CE8\u5165\u3002",en:"It is injected when translation is turned on.",zh_TW:"\u5728\u958B\u555F\u7FFB\u8B6F\u6642\u6CE8\u5165\u3002"},selector_parent_style:{zh:"\u9009\u62E9\u5668\u7236\u8282\u70B9\u6837\u5F0F",en:"Parent Selector Style",zh_TW:"\u9078\u64C7\u5668\u7236\u7BC0\u9EDE\u6A23\u5F0F"},selector_grand_style:{zh:"\u9009\u62E9\u5668\u7956\u8282\u70B9\u6837\u5F0F",en:"Grand Selector Style",zh_TW:"\u9078\u64C7\u5668\u7956\u7BC0\u9EDE\u6A23\u5F0F"},inject_js:{zh:"\u6CE8\u5165JS",en:"Inject JS",zh_TW:"\u6CE8\u5165 JS"},inject_js_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},inject_css:{zh:"\u6CE8\u5165CSS",en:"Inject CSS",zh_TW:"\u6CE8\u5165 CSS"},inject_css_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},fixer_function:{zh:"\u4FEE\u590D\u51FD\u6570",en:"Fixer Function",zh_TW:"\u4FEE\u5FA9\u51FD\u5F0F"},fixer_function_helper:{zh:"1\u3001br\u662F\u5C06
\u6362\u884C\u66FF\u6362\u6210

\u30022\u3001bn\u662F\u5C06\\n\u6362\u884C\u66FF\u6362\u6210

\u30023\u3001brToDiv\u548CbnToDiv\u662F\u66FF\u6362\u6210

\u3002",en:"1. br replaces
line breaks with

. 2. bn replaces \\n newline with

. 3. brToDiv and bnToDiv are replaced with

.",zh_TW:"1. br \u6703\u5C07
\u63DB\u884C\u66FF\u63DB\u70BA

\u30022. bn \u6703\u5C07 \\n \u63DB\u884C\u66FF\u63DB\u70BA

\u30023. brToDiv \u8207 bnToDiv \u6703\u66FF\u63DB\u70BA

\u3002"},import:{zh:"\u5BFC\u5165",en:"Import",zh_TW:"\u532F\u5165"},export:{zh:"\u5BFC\u51FA",en:"Export",zh_TW:"\u532F\u51FA"},export_translation:{zh:"\u5BFC\u51FA\u91CA\u4E49",en:"Export Translation",zh_TW:"\u532F\u51FA\u91CB\u7FA9"},error_cant_be_blank:{zh:"\u4E0D\u80FD\u4E3A\u7A7A",en:"Can not be blank",zh_TW:"\u4E0D\u53EF\u70BA\u7A7A"},error_duplicate_values:{zh:"\u5B58\u5728\u91CD\u590D\u7684\u503C",en:"There are duplicate values",zh_TW:"\u5B58\u5728\u91CD\u8907\u7684\u503C"},error_wrong_file_type:{zh:"\u9519\u8BEF\u7684\u6587\u4EF6\u7C7B\u578B",en:"Wrong file type",zh_TW:"\u6A94\u6848\u985E\u578B\u932F\u8AA4"},error_fetch_url:{zh:"\u8BF7\u68C0\u67E5url\u5730\u5740\u662F\u5426\u6B63\u786E\u6216\u7A0D\u540E\u518D\u8BD5\u3002",en:"Please check if the url address is correct or try again later.",zh_TW:"\u8ACB\u6AA2\u67E5 URL \u662F\u5426\u6B63\u78BA\u6216\u7A0D\u5F8C\u518D\u8A66\u3002"},deepl_api:{zh:"DeepL \u63A5\u53E3",en:"DeepL API",zh_TW:"DeepL \u4ECB\u9762"},deepl_key:{zh:"DeepL \u5BC6\u94A5",en:"DeepL Key",zh_TW:"DeepL \u91D1\u9470"},openai_api:{zh:"OpenAI \u63A5\u53E3",en:"OpenAI API",zh_TW:"OpenAI \u4ECB\u9762"},openai_key:{zh:"OpenAI \u5BC6\u94A5",en:"OpenAI Key",zh_TW:"OpenAI \u91D1\u9470"},openai_model:{zh:"OpenAI \u6A21\u578B",en:"OpenAI Model",zh_TW:"OpenAI \u6A21\u578B"},openai_prompt:{zh:"OpenAI \u63D0\u793A\u8BCD",en:"OpenAI Prompt",zh_TW:"OpenAI \u63D0\u793A\u8A5E"},if_clear_cache:{zh:"\u662F\u5426\u6E05\u9664\u7F13\u5B58\uFF08\u9ED8\u8BA4\u7F13\u5B587\u5929\uFF09",en:"Whether clear cache (Default cache is 7 days)",zh_TW:"\u662F\u5426\u6E05\u9664\u5FEB\u53D6\uFF08\u9810\u8A2D\u5FEB\u53D67\u5929\uFF09"},clear_cache_never:{zh:"\u4E0D\u6E05\u9664\u7F13\u5B58",en:"Never clear cache",zh_TW:"\u4E0D\u6E05\u9664\u5FEB\u53D6"},clear_cache_restart:{zh:"\u91CD\u542F\u6D4F\u89C8\u5668\u65F6\u6E05\u9664\u7F13\u5B58",en:"Clear cache when restarting browser",zh_TW:"\u91CD\u65B0\u555F\u52D5\u700F\u89BD\u5668\u6642\u6E05\u9664\u5FEB\u53D6"},data_sync_type:{zh:"\u6570\u636E\u540C\u6B65\u65B9\u5F0F",en:"Data Sync Type",zh_TW:"\u8CC7\u6599\u540C\u6B65\u65B9\u5F0F"},data_sync_url:{zh:"\u6570\u636E\u540C\u6B65\u63A5\u53E3",en:"Data Sync API",zh_TW:"\u8CC7\u6599\u540C\u6B65\u4ECB\u9762"},data_sync_user:{zh:"\u6570\u636E\u540C\u6B65\u8D26\u6237",en:"Data Sync User",zh_TW:"\u8CC7\u6599\u540C\u6B65\u5E33\u865F"},data_sync_key:{zh:"\u6570\u636E\u540C\u6B65\u5BC6\u94A5",en:"Data Sync Key",zh_TW:"\u8CC7\u6599\u540C\u6B65\u91D1\u9470"},sync_now:{zh:"\u7ACB\u5373\u540C\u6B65",en:"Sync Now",zh_TW:"\u7ACB\u5373\u540C\u6B65"},sync_success:{zh:"\u540C\u6B65\u6210\u529F\uFF01",en:"Sync Success",zh_TW:"\u540C\u6B65\u6210\u529F\uFF01"},sync_failed:{zh:"\u540C\u6B65\u5931\u8D25\uFF01",en:"Sync Error",zh_TW:"\u540C\u6B65\u5931\u6557\uFF01"},error_got_some_wrong:{zh:"\u62B1\u6B49\uFF0C\u51FA\u9519\u4E86\uFF01",en:"Sorry, something went wrong!",zh_TW:"\u62B1\u6B49\uFF0C\u767C\u751F\u932F\u8AA4\uFF01"},error_sync_setting:{zh:"\u60A8\u7684\u540C\u6B65\u7C7B\u578B\u5FC5\u987B\u4E3A\u201CKISS-Worker\u201D\uFF0C\u4E14\u9700\u586B\u5199\u5B8C\u6574",en:"Your sync type must be \"KISS-Worker\" and must be filled in completely",zh_TW:"\u60A8\u7684\u540C\u6B65\u578B\u614B\u5FC5\u9808\u70BA\u300CKISS-Worker\u300D\uFF0C\u4E14\u9700\u586B\u5BEB\u5B8C\u6574\u3002"},click_test:{zh:"\u70B9\u51FB\u6D4B\u8BD5",en:"Click Test",zh_TW:"\u9EDE\u64CA\u6E2C\u8A66"},test_success:{zh:"\u6D4B\u8BD5\u6210\u529F",en:"Test success",zh_TW:"\u6E2C\u8A66\u6210\u529F"},test_failed:{zh:"\u6D4B\u8BD5\u5931\u8D25",en:"Test failed",zh_TW:"\u6E2C\u8A66\u5931\u6557"},clear_all_cache_now:{zh:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u7F13\u5B58",en:"Clear all cache now",zh_TW:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u5FEB\u53D6"},clear_cache:{zh:"\u6E05\u9664\u7F13\u5B58",en:"Clear Cache",zh_TW:"\u6E05\u9664\u5FEB\u53D6"},clear_success:{zh:"\u6E05\u9664\u6210\u529F",en:"Clear success",zh_TW:"\u6E05\u9664\u6210\u529F"},clear_failed:{zh:"\u6E05\u9664\u5931\u8D25",en:"Clear failed",zh_TW:"\u6E05\u9664\u5931\u6557"},share:{zh:"\u5206\u4EAB",en:"Share",zh_TW:"\u5206\u4EAB"},clear_all:{zh:"\u6E05\u7A7A",en:"Clear All",zh_TW:"\u6E05\u7A7A"},help:{zh:"\u6C42\u52A9",en:"Help",zh_TW:"\u6C42\u52A9"},restore_default:{zh:"\u6062\u590D\u9ED8\u8BA4",en:"Restore Default",zh_TW:"\u6062\u5FA9\u9810\u8A2D"},shortcuts_setting:{zh:"\u5FEB\u6377\u952E\u8BBE\u7F6E",en:"Shortcuts Setting",zh_TW:"\u5FEB\u6377\u9375\u8A2D\u5B9A"},toggle_translate_shortcut:{zh:"\"\u5F00\u542F\u7FFB\u8BD1\"\u5FEB\u6377\u952E",en:"\"Toggle Translate\" Shortcut",zh_TW:"\u300C\u958B\u555F\u7FFB\u8B6F\u300D\u5FEB\u6377\u9375"},toggle_style_shortcut:{zh:"\"\u5207\u6362\u6837\u5F0F\"\u5FEB\u6377\u952E",en:"\"Toggle Style\" Shortcut",zh_TW:"\u300C\u5207\u63DB\u6A23\u5F0F\u300D\u5FEB\u6377\u9375"},toggle_popup_shortcut:{zh:"\"\u6253\u5F00\u5F39\u7A97\"\u5FEB\u6377\u952E",en:"\"Open Popup\" Shortcut",zh_TW:"\u300C\u958B\u555F\u5F48\u7A97\u300D\u5FEB\u6377\u9375"},open_setting_shortcut:{zh:"\"\u6253\u5F00\u8BBE\u7F6E\"\u5FEB\u6377\u952E",en:"\"Open Setting\" Shortcut",zh_TW:"\u300C\u958B\u555F\u8A2D\u5B9A\u300D\u5FEB\u6377\u9375"},hide_fab_button:{zh:"\u9690\u85CF\u60AC\u6D6E\u6309\u94AE",en:"Hide Fab Button",zh_TW:"\u96B1\u85CF\u61F8\u6D6E\u6309\u9215"},fab_click_action:{zh:"\u5355\u51FB\u60AC\u6D6E\u6309\u94AE\u52A8\u4F5C",en:"Single Click Fab Action",zh_TW:"\u55AE\u64CA\u61F8\u6D6E\u6309\u94AE\u52D5\u4F5C"},fab_click_menu:{zh:"\u5F39\u51FA\u83DC\u5355",en:"Popup Menu",zh_TW:"\u5F48\u51FA\u9078\u55AE"},fab_click_translate:{zh:"\u76F4\u63A5\u7FFB\u8BD1",en:"Translate",zh_TW:"\u76F4\u63A5\u7FFB\u8B6F"},hide_tran_button:{zh:"\u9690\u85CF\u7FFB\u8BD1\u6309\u94AE",en:"Hide Translate Button",zh_TW:"\u96B1\u85CF\u7FFB\u8B6F\u6309\u9215"},hide_click_away:{zh:"\u70B9\u51FB\u5916\u90E8\u5173\u95ED\u5F39\u7A97",en:"Click outside to close the pop-up window",zh_TW:"\u9EDE\u64CA\u5916\u90E8\u95DC\u9589\u5F48\u7A97"},use_simple_style:{zh:"\u4F7F\u7528\u7B80\u6D01\u754C\u9762",en:"Use a simple interface",zh_TW:"\u4F7F\u7528\u7C21\u6F54\u4ECB\u9762"},show:{zh:"\u663E\u793A",en:"Show",zh_TW:"\u986F\u793A"},hide:{zh:"\u9690\u85CF",en:"Hide",zh_TW:"\u96B1\u85CF"},save_rule:{zh:"\u4FDD\u5B58\u89C4\u5219",en:"Save Rule",zh_TW:"\u5132\u5B58\u898F\u5247"},global_rule:{zh:"\u5168\u5C40\u89C4\u5219",en:"Global Rule",zh_TW:"\u5168\u57DF\u898F\u5247"},input_translate:{zh:"\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u8F38\u5165\u6846\u7FFB\u8B6F"},use_input_box_translation:{zh:"\u542F\u7528\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u555F\u7528\u8F38\u5165\u6846\u7FFB\u8B6F"},input_selector:{zh:"\u8F93\u5165\u6846\u9009\u62E9\u5668",en:"Input Selector",zh_TW:"\u8F38\u5165\u6846\u9078\u64C7\u5668"},input_selector_helper:{zh:"\u7528\u4E8E\u8F93\u5165\u6846\u7FFB\u8BD1\u3002",en:"Used for input box translation.",zh_TW:"\u7528\u65BC\u8F38\u5165\u6846\u7FFB\u8B6F\u3002"},trigger_trans_shortcut:{zh:"\u89E6\u53D1\u7FFB\u8BD1\u5FEB\u6377\u952E",en:"Trigger Translation Shortcut Keys",zh_TW:"\u89F8\u767C\u7FFB\u8B6F\u5FEB\u6377\u9375"},trigger_trans_shortcut_help:{zh:"\u9ED8\u8BA4\u4E3A\u5355\u51FB\u201CAltLeft+KeyI\u201D",en:"Default is \"AltLeft+KeyI\"",zh_TW:"\u9810\u8A2D\u70BA\u6309\u4E0B\u300CAltLeft+KeyI\u300D"},shortcut_press_count:{zh:"\u5FEB\u6377\u952E\u8FDE\u51FB\u6B21\u6570",en:"Shortcut Press Number",zh_TW:"\u5FEB\u6377\u9375\u9023\u64CA\u6B21\u6578"},combo_timeout:{zh:"\u8FDE\u51FB\u8D85\u65F6\u65F6\u95F4 (10-1000ms)",en:"Combo Timeout (10-1000ms)",zh_TW:"\u9023\u64CA\u903E\u6642 (10-1000ms)"},input_trans_start_sign:{zh:"\u7FFB\u8BD1\u8D77\u59CB\u6807\u8BC6",en:"Translation Start Sign",zh_TW:"\u7FFB\u8B6F\u8D77\u59CB\u6A19\u8A18"},input_trans_start_sign_help:{zh:"\u6807\u8BC6\u540E\u9762\u53EF\u4EE5\u52A0\u76EE\u6807\u8BED\u8A00\u4EE3\u7801\uFF0C\u5982\uFF1A \u201C/en \u4F60\u597D\u201D\u3001\u201C/zh hello\u201D",en:"The target language code can be added after the sign, such as: \"/en \u4F60\u597D\", \"/zh hello\"",zh_TW:"\u6A19\u8A18\u5F8C\u53EF\u52A0\u4E0A\u76EE\u6A19\u8A9E\u8A00\u4EE3\u78BC\uFF0C\u4F8B\u5982\uFF1A\u300C/en \u4F60\u597D\u300D\u3001\u300C/zh hello\u300D"},detect_lang_remote:{zh:"\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B",en:"Remote language detection",zh_TW:"\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C"},detect_lang_remote_help:{zh:"\u542F\u7528\u540E\u68C0\u6D4B\u51C6\u786E\u5EA6\u589E\u52A0\uFF0C\u4F46\u4F1A\u964D\u4F4E\u7FFB\u8BD1\u901F\u5EA6\uFF0C\u8BF7\u914C\u60C5\u5F00\u542F",en:"After enabling, the detection accuracy will increase, but it will reduce the translation speed. Please enable it as appropriate.",zh_TW:"\u555F\u7528\u5F8C\u53EF\u63D0\u5347\u5075\u6E2C\u6E96\u78BA\u5EA6\uFF0C\u4F46\u6703\u964D\u4F4E\u7FFB\u8B6F\u901F\u5EA6\uFF0C\u8ACB\u8996\u9700\u8981\u958B\u555F\u3002"},detect_lang_service:{zh:"\u8BED\u8A00\u68C0\u6D4B\u670D\u52A1",en:"Language detect service",zh_TW:"\u8A9E\u8A00\u6AA2\u6E2C\u670D\u52D9"},disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},enable:{zh:"\u542F\u7528",en:"Enable",zh_TW:"\u555F\u7528"},selection_translate:{zh:"\u5212\u8BCD\u7FFB\u8BD1",en:"Selection Translate",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F"},toggle_selection_translate:{zh:"\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"Use Selection Translate",zh_TW:"\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},trigger_tranbox_shortcut:{zh:"\u663E\u793A\u7FFB\u8BD1\u6846/\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57\u5FEB\u6377\u952E",en:"Open Translate Popup/Translate Selected Shortcut",zh_TW:"\u986F\u793A\u7FFB\u8B6F\u6846\uFF0F\u7FFB\u8B6F\u9078\u4E2D\u6587\u5B57\u5FEB\u6377\u9375"},tranbtn_offset_x:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Button Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbtn_offset_y:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Button Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},tranbox_offset_x:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Box Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbox_offset_y:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Box Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},translated_text:{zh:"\u8BD1\u6587",en:"Translated Text",zh_TW:"\u8B6F\u6587"},original_text:{zh:"\u539F\u6587",en:"Original Text",zh_TW:"\u539F\u6587"},favorite_words:{zh:"\u6536\u85CF\u8BCD\u6C47",en:"Favorite Words",zh_TW:"\u6536\u85CF\u8A5E\u5F59"},touch_setting:{zh:"\u89E6\u5C4F\u8BBE\u7F6E",en:"Touch Setting",zh_TW:"\u89F8\u63A7\u8A2D\u5B9A"},touch_translate_shortcut:{zh:"\u89E6\u5C4F\u7FFB\u8BD1\u5FEB\u6377\u65B9\u5F0F (\u652F\u6301\u591A\u9009)",en:"Touch Translate Shortcut (multiple supported)",zh_TW:"\u89F8\u63A7\u7FFB\u8B6F\u6377\u5F91 (\u652F\u63F4\u591A\u9078)"},touch_tap_0:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},touch_tap_2:{zh:"\u53CC\u6307\u8F7B\u89E6",en:"Two finger tap",zh_TW:"\u96D9\u6307\u8F15\u89F8"},touch_tap_3:{zh:"\u4E09\u6307\u8F7B\u89E6",en:"Three finger tap",zh_TW:"\u4E09\u6307\u8F15\u89F8"},touch_tap_4:{zh:"\u56DB\u6307\u8F7B\u89E6",en:"Four finger tap",zh_TW:"\u56DB\u6307\u8F15\u89F8"},touch_tap_5:{zh:"\u5355\u6307\u53CC\u51FB",en:"Double-click",zh_TW:"\u55AE\u6307\u96D9\u64CA"},touch_tap_6:{zh:"\u5355\u6307\u4E09\u51FB",en:"Triple-click",zh_TW:"\u55AE\u6307\u4E09\u64CA"},touch_tap_7:{zh:"\u53CC\u6307\u53CC\u51FB",en:"Two-finger double-click",zh_TW:"\u96D9\u6307\u96D9\u64CA"},translate_blacklist:{zh:"\u7981\u7528\u7FFB\u8BD1\u540D\u5355",en:"Translate Blacklist",zh_TW:"\u505C\u7528\u7FFB\u8B6F\u540D\u55AE"},disabled_orilist:{zh:"\u7981\u7528Origin\u540D\u5355",en:"Disabled Origin List",zh_TW:"\u505C\u7528 Origin \u540D\u55AE"},disabled_csplist:{zh:"\u7981\u7528CSP\u540D\u5355",en:"Disabled CSP List",zh_TW:"\u505C\u7528 CSP \u540D\u55AE"},disabled_csplist_helper:{zh:"3\u3001\u901A\u8FC7\u8C03\u6574CSP\u7B56\u7565\uFF0C\u4F7F\u5F97\u67D0\u4E9B\u9875\u9762\u80FD\u591F\u6CE8\u5165JS/CSS/Media\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6653\u76F8\u5173\u98CE\u9669\u3002",en:"3. By adjusting the CSP policy, some pages can inject JS/CSS/Media. Please use it with caution unless you are aware of the related risks.",zh_TW:"3. \u900F\u904E\u8ABF\u6574 CSP \u653F\u7B56\uFF0C\u4F7F\u90E8\u5206\u9801\u9762\u53EF\u6CE8\u5165 JS/CSS/Media\u3002\u8ACB\u8B39\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6089\u76F8\u95DC\u98A8\u96AA\u3002"},skip_langs:{zh:"\u4E0D\u7FFB\u8BD1\u7684\u8BED\u8A00",en:"Disable Languages",zh_TW:"\u4E0D\u7FFB\u8B6F\u7684\u8A9E\u8A00"},skip_langs_helper:{zh:"\u6B64\u529F\u80FD\u4F9D\u8D56\u51C6\u786E\u7684\u8BED\u8A00\u68C0\u6D4B\uFF0C\u5EFA\u8BAE\u542F\u7528\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B\u3002",en:"This feature relies on accurate language detection. It is recommended to enable remote language detection.",zh_TW:"\u6B64\u529F\u80FD\u4EF0\u8CF4\u6E96\u78BA\u7684\u8A9E\u8A00\u5075\u6E2C\uFF0C\u5EFA\u8B70\u555F\u7528\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C\u3002"},context_menus:{zh:"\u53F3\u952E\u83DC\u5355",en:"Context Menus",zh_TW:"\u53F3\u9375\u9078\u55AE"},hide_context_menus:{zh:"\u9690\u85CF\u53F3\u952E\u83DC\u5355",en:"Hide Context Menus",zh_TW:"\u96B1\u85CF\u53F3\u9375\u9078\u55AE"},simple_context_menus:{zh:"\u7B80\u5355\u53F3\u952E\u83DC\u5355",en:"Simple_context_menus Context Menus",zh_TW:"\u7C21\u6613\u53F3\u9375\u9078\u55AE"},secondary_context_menus:{zh:"\u4E8C\u7EA7\u53F3\u952E\u83DC\u5355",en:"Secondary Context Menus",zh_TW:"\u6B21\u7D1A\u53F3\u9375\u9078\u55AE"},mulkeys_help:{zh:"\u652F\u6301\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\uFF0C\u8F6E\u8BE2\u8C03\u7528\u3002",en:"Supports polling calls separated by newlines or English commas \",\".",zh_TW:"\u652F\u63F4\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\uFF0C\u8F2A\u8A62\u547C\u53EB\u3002"},translation_element_tag:{zh:"\u8BD1\u6587\u5143\u7D20\u6807\u7B7E",en:"Translation Element Tag",zh_TW:"\u8B6F\u6587\u5143\u7D20\u6A19\u7C64"},show_only_translations:{zh:"\u4EC5\u663E\u793A\u8BD1\u6587",en:"Show Only Translations",zh_TW:"\u50C5\u986F\u793A\u8B6F\u6587"},show_only_translations_help:{zh:"\u975E\u5B8C\u7F8E\u5B9E\u73B0\uFF0C\u67D0\u4E9B\u9875\u9762\u53EF\u80FD\u6709\u6837\u5F0F\u7B49\u95EE\u9898\u3002",en:"It is not a perfect implementation and some pages may have style issues.",zh_TW:"\u6B64\u70BA\u975E\u5B8C\u7F8E\u5BE6\u4F5C\uFF0C\u90E8\u5206\u9801\u9762\u53EF\u80FD\u51FA\u73FE\u6A23\u5F0F\u7B49\u554F\u984C\u3002"},translate_page_title:{zh:"\u662F\u5426\u7FFB\u8BD1\u9875\u9762\u6807\u9898",en:"Translate Page Title",zh_TW:"\u662F\u5426\u7FFB\u8B6F\u9801\u9762\u6A19\u984C"},more:{zh:"\u66F4\u591A",en:"More",zh_TW:"\u66F4\u591A"},less:{zh:"\u66F4\u5C11",en:"Less",zh_TW:"\u66F4\u5C11"},fixer_selector:{zh:"\u7F51\u9875\u4FEE\u590D\u9009\u62E9\u5668",en:"Fixer Selector",zh_TW:"\u7DB2\u9801\u4FEE\u5FA9\u9078\u64C7\u5668"},reg_niutrans:{zh:"\u83B7\u53D6\u5C0F\u725B\u7FFB\u8BD1\u5BC6\u94A5\u3010\u7B80\u7EA6\u7FFB\u8BD1\u4E13\u5C5E\u65B0\u7528\u6237\u6CE8\u518C\u8D60\u9001300\u4E07\u5B57\u7B26\u3011",en:"Get NiuTrans APIKey [KISS Translator Exclusive New User Registration Free 3 Million Characters]",zh_TW:"\u53D6\u5F97\u5C0F\u725B\u7FFB\u8B6F\u91D1\u9470\u3010\u7C21\u7D04\u7FFB\u8B6F\u5C08\u5C6C\u65B0\u7528\u6236\u8A3B\u518A\u8D08\u9001 300 \u842C\u5B57\u5143\u3011"},trigger_mode:{zh:"\u89E6\u53D1\u65B9\u5F0F",en:"Trigger Mode",zh_TW:"\u89F8\u767C\u65B9\u5F0F"},trigger_click:{zh:"\u70B9\u51FB\u89E6\u53D1",en:"Click Trigger",zh_TW:"\u9EDE\u64CA\u89F8\u767C"},trigger_hover:{zh:"\u9F20\u6807\u60AC\u505C\u89E6\u53D1",en:"Hover Trigger",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u89F8\u767C"},trigger_select:{zh:"\u9009\u4E2D\u89E6\u53D1",en:"Select Trigger",zh_TW:"\u9078\u53D6\u89F8\u767C"},extend_styles:{zh:"\u9644\u52A0\u6837\u5F0F",en:"Extend Styles",zh_TW:"\u9644\u52A0\u6A23\u5F0F"},custom_option:{zh:"\u81EA\u5B9A\u4E49\u9009\u9879",en:"Custom Option",zh_TW:"\u81EA\u8A02\u9078\u9805"},translate_selected_text:{zh:"\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57",en:"Translate Selected Text",zh_TW:"\u7FFB\u8B6F\u9078\u53D6\u6587\u5B57"},toggle_style:{zh:"\u5207\u6362\u6837\u5F0F",en:"Toggle Style",zh_TW:"\u5207\u63DB\u6A23\u5F0F"},open_menu:{zh:"\u6253\u5F00\u5F39\u7A97\u83DC\u5355",en:"Open Popup Menu",zh_TW:"\u958B\u555F\u5F48\u7A97\u9078\u55AE"},open_setting:{zh:"\u6253\u5F00\u8BBE\u7F6E",en:"Open Setting",zh_TW:"\u958B\u555F\u8A2D\u5B9A"},follow_selection:{zh:"\u7FFB\u8BD1\u6846\u8DDF\u968F\u9009\u4E2D\u6587\u672C",en:"Transbox Follow Selection",zh_TW:"\u7FFB\u8B6F\u6846\u8DDF\u96A8\u9078\u53D6\u6587\u5B57"},tranbox_auto_height:{zh:"\u7FFB\u8BD1\u6846\u81EA\u9002\u5E94\u9AD8\u5EA6",en:"Translation box adaptive height",zh_TW:"\u7FFB\u8B6F\u6846\u81EA\u9069\u61C9\u9AD8\u5EA6"},translate_start_hook:{zh:"\u7FFB\u8BD1\u5F00\u59CB\u94A9\u5B50\u51FD\u6570",en:"Translate Start Hook",zh_TW:"\u7FFB\u8B6F\u958B\u59CB Hook"},translate_start_hook_helper:{zh:"\u7FFB\u8BD1\u524D\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes})",en:"Run before translation, input parameters are: ({hostNode, parentNode, nodes})",zh_TW:"\u7FFB\u8B6F\u524D\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes})"},translate_end_hook:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u94A9\u5B50\u51FD\u6570",en:"Translate End Hook",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210 Hook"},translate_end_hook_helper:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})",en:"Run when translation is complete, input parameters are: ({hostNode, parentNode, nodes, wrapperNode, innerNode})",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})"},translate_remove_hook:{zh:"\u7FFB\u8BD1\u79FB\u9664\u94A9\u5B50\u51FD\u6570",en:"Translate Removed Hook",zh_TW:"\u7FFB\u8B6F\u79FB\u9664 Hook"},translate_remove_hook_helper:{zh:"\u7FFB\u8BD1\u79FB\u9664\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A \u7FFB\u8BD1\u8282\u70B9\u3002",en:"Run when translation is removed, the input parameters are: translation node.",zh_TW:"\u79FB\u9664\u7FFB\u8B6F\u6642\u57F7\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A\u7FFB\u8B6F\u7BC0\u9EDE\u3002"},english_dict:{zh:"\u82F1\u6587\u8BCD\u5178",en:"English Dictionary",zh_TW:"\u82F1\u6587\u5B57\u5178"},english_suggest:{zh:"\u82F1\u6587\u5EFA\u8BAE",en:"English Suggest",zh_TW:"\u82F1\u6587\u5EFA\u8B70"},api_name:{zh:"\u63A5\u53E3\u540D\u79F0",en:"API Name",zh_TW:"\u4ECB\u9762\u540D\u7A31"},is_disabled:{zh:"\u662F\u5426\u7981\u7528",en:"Is Disabled",zh_TW:"\u662F\u5426\u505C\u7528"},translate_selected:{zh:"\u662F\u5426\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"If translate selected",zh_TW:"\u662F\u5426\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},use_batch_fetch:{zh:"\u662F\u5426\u805A\u5408\u53D1\u9001\u7FFB\u8BD1\u8BF7\u6C42",en:"Whether to aggregate and send translation requests",zh_TW:"\u662F\u5426\u805A\u5408\u767C\u9001\u7FFB\u8B6F\u8ACB\u6C42"},batch_interval:{zh:"\u805A\u5408\u8BF7\u6C42\u7B49\u5F85\u65F6\u95F4(100-10000)",en:"Aggregation request waiting time (100-10000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u7B49\u5F85\u6642\u9593(100-10000)"},batch_size:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6BB5\u843D\u6570(1-100)",en:"Maximum number of paragraphs in an aggregation request (1-100)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6BB5\u843D\u6578(1-100)"},batch_length:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6587\u672C\u957F\u5EA6(1000-100000)",en:"Maximum text length for aggregation requests (1000-100000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6587\u5B57\u9577\u5EA6(1000-100000)"},use_context:{zh:"\u662F\u5426\u542F\u7528\u667A\u80FD\u4E0A\u4E0B\u6587",en:"Whether to enable AI context",zh_TW:"\u662F\u5426\u555F\u7528\u667A\u6167\u4E0A\u4E0B\u6587"},context_size:{zh:"\u4E0A\u4E0B\u6587\u4F1A\u8BDD\u6570\u91CF(1-20)",en:"Number of context sessions(1-20)",zh_TW:"\u4E0A\u4E0B\u6587\u6703\u8A71\u6578\u91CF(1-20)"},auto_scan_page:{zh:"\u81EA\u52A8\u626B\u63CF\u9875\u9762",en:"Auto scan page",zh_TW:"\u81EA\u52D5\u6383\u63CF\u9801\u9762"},has_rich_text:{zh:"\u542F\u7528\u5BCC\u6587\u672C\u7FFB\u8BD1",en:"Enable rich text translation",zh_TW:"\u555F\u7528\u5BCC\u6587\u672C\u7FFB\u8B6F"},has_shadowroot:{zh:"\u626B\u63CFShadowroot",en:"Scan Shadowroot",zh_TW:"\u6383\u63CFShadowroot"},mousehover_translate:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover Translation",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},use_mousehover_translation:{zh:"\u542F\u7528\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Enable mouseover translation",zh_TW:"\u555F\u7528\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},selected_translation_alert:{zh:"\u5212\u8BCD\u7FFB\u8BD1\u7684\u5F00\u542F\u548C\u5173\u95ED\u8BF7\u5230\u201C\u89C4\u5219\u8BBE\u7F6E\u201D\u91CC\u9762\u8BBE\u7F6E\u3002",en:"To turn selected translation on or off, please go to \"Rule Settings\".",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F\u7684\u958B\u555F\u548C\u95DC\u9589\u8ACB\u5230\u300C\u898F\u5247\u8A2D\u5B9A\u300D\u88E1\u9762\u8A2D\u5B9A\u3002"},mousehover_key_help:{zh:"\u5F53\u5FEB\u6377\u952E\u7F6E\u7A7A\u65F6\u8868\u793A\u9F20\u6807\u60AC\u505C\u76F4\u63A5\u7FFB\u8BD1",en:"When the shortcut key is empty, it means that the mouse hovers to translate directly",zh_TW:"\u7576\u5FEB\u6377\u9375\u7F6E\u7A7A\u6642\u8868\u793A\u6ED1\u9F20\u61F8\u505C\u76F4\u63A5\u7FFB\u8B6F"},autoscan_alt:{zh:"\u81EA\u52A8\u626B\u63CF",en:"Auto Scan",zh_TW:"\u81EA\u52D5\u6383\u63CF"},shadowroot_alt:{zh:"ShadowRoot",en:"ShadowRoot",zh_TW:"ShadowRoot"},richtext_alt:{zh:"\u4FDD\u7559\u5BCC\u6587\u672C",en:"Rich Text",zh_TW:"\u4FDD\u7559\u5BCC\u6587\u672C"},transonly_alt:{zh:"\u9690\u85CF\u539F\u6587",en:"Hide Original",zh_TW:"\u96B1\u85CF\u539F\u6587"},confirm_title:{zh:"\u786E\u8BA4",en:"Confirm",zh_TW:"\u78BA\u8A8D"},confirm_message:{zh:"\u786E\u5B9A\u64CD\u4F5C\u5417\uFF1F",en:"Are you sure you want to proceed?",zh_TW:"\u78BA\u5B9A\u64CD\u4F5C\u55CE\uFF1F"},confirm_action:{zh:"\u786E\u5B9A",en:"Confirm",zh_TW:"\u78BA\u5B9A"},cancel_action:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},pls_press_shortcut:{zh:"\u8BF7\u6309\u4E0B\u5FEB\u6377\u952E\u7EC4\u5408",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},load_setting_err:{zh:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},translation_style:{zh:"\u7FFB\u8BD1\u98CE\u683C",en:"Translation style",zh_TW:"\u7FFB\u8B6F\u98A8\u683C"},placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},tag_name:{zh:"\u5360\u4F4D\u6807\u7B7E\u540D",en:"Placeholder tag name",zh_TW:"\u4F54\u4F4D\u6A19\u540D"},system_prompt_helper:{zh:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9ED8\u8BA4Prompt\u7684\u60C5\u51B5\u4E0B\uFF0C\u8BF7\u52FF\u968F\u610F\u4FEE\u6539\uFF0C\u5426\u5219\u53EF\u80FD\u65E0\u6CD5\u5DE5\u4F5C\u3002",en:"Do not modify the default prompt without fully understanding it, otherwise it may not work.",zh_TW:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9810\u8A2DPrompt\u7684\u60C5\u6CC1\u4E0B\uFF0C\u8ACB\u52FF\u96A8\u610F\u4FEE\u6539\uFF0C\u5426\u5247\u53EF\u80FD\u7121\u6CD5\u904B\u4F5C\u3002"},if_pre_init:{zh:"\u662F\u5426\u9884\u521D\u59CB\u5316",en:"Whether to pre-initialize",zh_TW:"\u662F\u5426\u9810\u521D\u59CB\u5316"},export_old:{zh:"\u5BFC\u51FA\u65E7\u7248",en:"Export old version",zh_TW:"\u532F\u51FA\u820A\u7248"},favorite_words_helper:{zh:"\u5BFC\u5165\u8BCD\u6C47\u8BF7\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u4E2A\u5355\u8BCD\u3002",en:"To import vocabulary, please use a txt file with one word per line.",zh_TW:"\u532F\u5165\u8A5E\u5F59\u8ACB\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u500B\u55AE\u5B57\u3002"},btn_tip_click_away:{zh:"\u5931\u7126\u9690\u85CF/\u663E\u793A",en:"Loss of focus hide/show",zh_TW:"\u5931\u7126\u96B1\u85CF/\u986F\u793A"},btn_tip_follow_selection:{zh:"\u8DDF\u968F/\u56FA\u5B9A\u6A21\u5F0F",en:"Follow/Fixed Mode",zh_TW:"\u8DDF\u96A8/\u56FA\u5B9A\u6A21\u5F0F"},btn_tip_simple_style:{zh:"\u8FF7\u4F60/\u5E38\u89C4\u6A21\u5F0F",en:"Mini/Regular Mode",zh_TW:"\u8FF7\u4F60/\u5E38\u898F\u6A21\u5F0F"},api_placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},api_placetag:{zh:"\u5360\u4F4D\u6807\u7B7E",en:"Placeholder tags",zh_TW:"\u4F54\u4F4D\u6A19"},detected_lang:{zh:"\u8BED\u8A00\u68C0\u6D4B",en:"Language detection",zh_TW:"\u8A9E\u8A00\u5075\u6E2C"},detected_result:{zh:"\u68C0\u6D4B\u7ED3\u679C",en:"Detect result",zh_TW:"\u6AA2\u6E2C\u7D50\u679C"},subtitle_translate:{zh:"\u5B57\u5E55\u7FFB\u8BD1",en:"Subtitle translate",zh_TW:"\u5B57\u5E55\u7FFB\u8B6F"},toggle_subtitle_translate:{zh:"\u542F\u7528\u5B57\u5E55\u7FFB\u8BD1",en:"Enable subtitle translation",zh_TW:"\u555F\u7528\u5B57\u5E55\u7FFB\u8B6F"},is_bilingual_view:{zh:"\u53CC\u8BED\u663E\u793A",en:"Enable bilingual display",zh_TW:"\u96D9\u8A9E\u986F\u793A"},background_styles:{zh:"\u80CC\u666F\u6837\u5F0F",en:"DBackground Style",zh_TW:"\u80CC\u666F\u6A23\u5F0F"},origin_styles:{zh:"\u539F\u6587\u6837\u5F0F",en:"Original style",zh_TW:"\u539F\u6587\u6A23\u5F0F"},translation_styles:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Translation style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},ai_segmentation:{zh:"AI\u667A\u80FD\u65AD\u53E5",en:"AI intelligent punctuation",zh_TW:"AI\u667A\u6167\u65B7\u53E5"},ai_chunk_length:{zh:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)",en:"AI processing chunk length(200-20000)",zh_TW:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)"},subtitle_helper_1:{zh:"1\u3001\u76EE\u524D\u4EC5\u652F\u6301Youtube\u684C\u9762\u7F51\u7AD9\u3002",en:"1. Currently only supports Youtube desktop website.",zh_TW:"1.\u76EE\u524D\u50C5\u652F\u63F4Youtube\u684C\u9762\u7DB2\u7AD9\uFF0C\u4E14\u50C5\u652F\u63F4\u700F\u89BD\u5668\u64F4\u5145\u529F\u80FD\u3002"},subtitle_helper_2:{zh:"2\u3001\u63D2\u4EF6\u5185\u7F6E\u57FA\u7840\u7684\u5B57\u5E55\u5408\u5E76\u3001\u65AD\u53E5\u7B97\u6CD5\uFF0C\u53EF\u6EE1\u8DB3\u5927\u90E8\u5206\u60C5\u51B5\u3002",en:"2. The plug-in has built-in basic subtitle merging and sentence segmentation algorithms, which can meet most situations.",zh_TW:"2.\u63D2\u4EF6\u5167\u5EFA\u57FA\u790E\u7684\u5B57\u5E55\u5408\u4F75\u3001\u65B7\u53E5\u6F14\u7B97\u6CD5\uFF0C\u53EF\u6EFF\u8DB3\u5927\u90E8\u5206\u60C5\u6CC1\u3002"},subtitle_helper_3:{zh:"3\u3001\u4EA6\u53EF\u4EE5\u542F\u7528AI\u667A\u80FD\u65AD\u53E5\uFF0C\u4F46\u9700\u8003\u8651\u5207\u5272\u957F\u5EA6\u53CAAI\u63A5\u53E3\u80FD\u529B\uFF0C\u53EF\u80FD\u5904\u7406\u65F6\u95F4\u4F1A\u5F88\u957F\uFF0C\u751A\u81F3\u5904\u7406\u5931\u8D25\uFF0C\u5BFC\u81F4\u65E0\u6CD5\u770B\u5230\u5B57\u5E55\u3002",en:"3. You can also enable AI intelligent segmentation, but you need to consider the segmentation length and AI interface capabilities. The processing time may be very long or even fail, resulting in the inability to see subtitles.",zh_TW:"3.\u4EA6\u53EF\u555F\u7528AI\u667A\u80FD\u65B7\u53E5\uFF0C\u4F46\u9700\u8003\u616E\u5207\u5272\u9577\u5EA6\u53CAAI\u4ECB\u9762\u80FD\u529B\uFF0C\u53EF\u80FD\u8655\u7406\u6642\u9593\u6703\u5F88\u9577\uFF0C\u751A\u81F3\u8655\u7406\u5931\u6557\uFF0C\u5C0E\u81F4\u7121\u6CD5\u770B\u5230\u5B57\u5E55\u3002"},default_styles_example:{zh:"\u9ED8\u8BA4\u6837\u5F0F\u53C2\u8003\uFF1A",en:"Default styles reference:",zh_TW:"\u8A8D\u6A23\u5F0F\u53C3\u8003\uFF1A"},subtitle_load_succeed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01",en:"Bilingual subtitles loaded successfully!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01"},subtitle_load_failed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01",en:"Failed to load bilingual subtitles!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01"},try_get_subtitle_data:{zh:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019...",en:"Trying to get subtitle data, please wait...",zh_TW:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019..."},subtitle_data_processing:{zh:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D...",en:"Subtitle data processing...",zh_TW:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D..."},starting_to_process_subtitle:{zh:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E...",en:"Starting to process subtitle data...",zh_TW:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E..."},subtitle_data_is_ready:{zh:"\u5B57\u5E55\u6570\u636E\u5DF2\u51C6\u5907\u5C31\u7EEA\uFF0C\u8BF7\u70B9\u51FBKT\u6309\u94AE\u52A0\u8F7D",en:"The subtitle data is ready, please click the KT button to load it",zh_TW:"\u5B57\u5E55\u8CC7\u6599\u5DF2\u6E96\u5099\u5C31\u7DD2\uFF0C\u8ACB\u9EDE\u64CAKT\u6309\u9215\u52A0\u8F09"},log_level:{zh:"\u65E5\u5FD7\u7EA7\u522B",en:"Log Level",zh_TW:"\u65E5\u8A8C\u7B49\u7D1A"},goto_custom_api_example:{zh:"\u70B9\u51FB\u67E5\u770B\u3010\u81EA\u5B9A\u4E49\u63A5\u53E3\u793A\u4F8B\u3011",en:"Click to view [Custom Interface Example]",zh_TW:"\u9EDE\u9078\u67E5\u770B\u3010\u81EA\u8A02\u4ECB\u9762\u7BC4\u4F8B\u3011"},split_paragraph:{zh:"\u5207\u5206\u957F\u6BB5\u843D",en:"Split long paragraph",zh_TW:"\u5207\u5206\u9577\u6BB5\u843D"},split_length:{zh:"\u5207\u5206\u957F\u5EA6 (0-10000)",en:"Segmentation length(0-10000)",zh_TW:"\u5207\u5206\u9577\u5EA6(0-10000)"},highlight_words:{zh:"\u9AD8\u4EAE\u6536\u85CF\u8BCD\u6C47",en:"Highlight favorite words",zh_TW:"\u9AD8\u4EAE\u6536\u85CF\u8A5E\u5F59"},split_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},split_textlength:{zh:"\u6309\u7167\u957F\u5EA6\u5207\u5206",en:"Split by length",zh_TW:"\u4F9D\u9577\u5EA6\u5207\u5206"},split_punctuation:{zh:"\u6309\u7167\u53E5\u5B50\u5207\u5206",en:"Split by sentence",zh_TW:"\u6309\u7167\u53E5\u5B50\u5207\u5206"},highlight_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},highlight_beforetrans:{zh:"\u7FFB\u8BD1\u524D\u9AD8\u4EAE",en:"Highlight before translation",zh_TW:"\u7FFB\u8B6F\u524D\u9AD8\u4EAE"},highlight_aftertrans:{zh:"\u7FFB\u8BD1\u540E\u9AD8\u4EAE",en:"Highlight after translation",zh_TW:"\u7FFB\u8B6F\u5F8C\u9AD8\u4EAE"}};const newI18n=lang=>key=>{var _I18N$key;return((_I18N$key=I18N[key])===null||_I18N$key===void 0?void 0:_I18N$key[lang])||"";}; +const UI_LANGS=(/* unused pure expression or super */ null && ([["en","English"],["zh","简体中文"],["zh_TW","繁體中文"]]));const customApiLangs="[\"en\", \"English - English\"],\n[\"zh-CN\", \"Simplified Chinese - \u7B80\u4F53\u4E2D\u6587\"],\n[\"zh-TW\", \"Traditional Chinese - \u7E41\u9AD4\u4E2D\u6587\"],\n[\"ar\", \"Arabic - \u0627\u0644\u0639\u0631\u0628\u064A\u0629\"],\n[\"bg\", \"Bulgarian - \u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438\"],\n[\"ca\", \"Catalan - Catal\xE0\"],\n[\"hr\", \"Croatian - Hrvatski\"],\n[\"cs\", \"Czech - \u010Ce\u0161tina\"],\n[\"da\", \"Danish - Dansk\"],\n[\"nl\", \"Dutch - Nederlands\"],\n[\"fi\", \"Finnish - Suomi\"],\n[\"fr\", \"French - Fran\xE7ais\"],\n[\"de\", \"German - Deutsch\"],\n[\"el\", \"Greek - \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\"],\n[\"hi\", \"Hindi - \u0939\u093F\u0928\u094D\u0926\u0940\"],\n[\"hu\", \"Hungarian - Magyar\"],\n[\"id\", \"Indonesian - Indonesia\"],\n[\"it\", \"Italian - Italiano\"],\n[\"ja\", \"Japanese - \u65E5\u672C\u8A9E\"],\n[\"ko\", \"Korean - \uD55C\uAD6D\uC5B4\"],\n[\"ms\", \"Malay - Melayu\"],\n[\"mt\", \"Maltese - Malti\"],\n[\"nb\", \"Norwegian - Norsk Bokm\xE5l\"],\n[\"pl\", \"Polish - Polski\"],\n[\"pt\", \"Portuguese - Portugu\xEAs\"],\n[\"ro\", \"Romanian - Rom\xE2n\u0103\"],\n[\"ru\", \"Russian - \u0420\u0443\u0441\u0441\u043A\u0438\u0439\"],\n[\"sk\", \"Slovak - Sloven\u010Dina\"],\n[\"sl\", \"Slovenian - Sloven\u0161\u010Dina\"],\n[\"es\", \"Spanish - Espa\xF1ol\"],\n[\"sv\", \"Swedish - Svenska\"],\n[\"ta\", \"Tamil - \u0BA4\u0BAE\u0BBF\u0BB4\u0BCD\"],\n[\"te\", \"Telugu - \u0C24\u0C46\u0C32\u0C41\u0C17\u0C41\"],\n[\"th\", \"Thai - \u0E44\u0E17\u0E22\"],\n[\"tr\", \"Turkish - T\xFCrk\xE7e\"],\n[\"uk\", \"Ukrainian - \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430\"],\n[\"vi\", \"Vietnamese - Ti\u1EBFng Vi\u1EC7t\"],\n";const customApiHelpZH="// \u8BF7\u6C42\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n \"url\": \"{{url}}\",\n \"method\": \"POST\",\n \"headers\": {\n \"Content-type\": \"application/json\",\n \"Authorization\": \"Bearer {{key}}\"\n },\n \"body\": {\n \"text\": \"{{text}}\", // \u5F85\u7FFB\u8BD1\u6587\u5B57\n \"from\": \"{{from}}\", // \u6587\u5B57\u7684\u8BED\u8A00\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09\n \"to\": \"{{to}}\", // \u76EE\u6807\u8BED\u8A00\n },\n}\n\n\n// \u8FD4\u56DE\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n text: \"\", // \u7FFB\u8BD1\u540E\u7684\u6587\u5B57\n from: \"\", // \u8BC6\u522B\u7684\u6E90\u8BED\u8A00\n to: \"\", // \u76EE\u6807\u8BED\u8A00\uFF08\u53EF\u9009\uFF09\n}\n\n\n// Hook \u8303\u4F8B\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n headers: {\n \"Content-type\": \"application/json\",\n },\n method: \"GET\",\n body: null,\n}]\n\n// Response Hook\n// \u5176\u4E2D\u8FD4\u56DE\u6570\u7EC4\u7B2C\u4E00\u4E2A\u503C\u8868\u793A\u8BD1\u6587\u5B57\u7B26\u4E32\uFF0C\u7B2C\u4E8C\u4E2A\u503C\u4E3A\u5E03\u5C14\u503C\uFF0C\u8868\u793A\u539F\u6587\u8BED\u8A00\u4E0E\u76EE\u6807\u8BED\u8A00\u662F\u5426\u76F8\u540C\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// \u652F\u6301\u7684\u8BED\u8A00\u4EE3\u7801\u5982\u4E0B\n".concat(customApiLangs,"\n");const customApiHelpEN="// Default request\n{\n \"url\": \"{{url}}\",\n \"method\": \"POST\",\n \"headers\": {\n \"Content-type\": \"application/json\",\n \"Authorization\": \"Bearer {{key}}\"\n },\n \"body\": {\n \"text\": \"{{text}}\", // Text to be translated\n \"from\": \"{{from}}\", // The language of the text (may be empty)\n \"to\": \"{{to}}\", // Target language\n },\n}\n\n\n// Default response\n{\n text: \"\", // translated text\n from: \"\", // Recognized source language\n to: \"\", // Target language (optional)\n}\n\n\n/// Hook Example\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n headers: {\n \"Content-type\": \"application/json\",\n },\n method: \"GET\",\n body: null,\n}]\n\n// Response Hook\n// In the returned array, the first value is the translated string, while the second value is a boolean\n// that indicates whether the source language is the same as the target language.\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// The supported language codes are as follows\n".concat(customApiLangs,"\n");const requestHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'url', 'body', 'headers', 'method'\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n return { url, body, headers, userMsg, method };\n}";const requestHookHelperEN="1. The first parameter contains the following fields: 'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2. The return value must be an object containing the following fields: 'url', 'body', 'headers', 'method'\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n return { url, body, headers, userMsg, method };\n}";const responsetHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'res', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'translations'\n \uFF08'translations' \u5E94\u4E3A\u4E00\u4E2A\u4E8C\u7EF4\u6570\u7EC4\uFF1A[[\u8BD1\u6587, \u539F\u6587\u8BED\u8A00]]\uFF09\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync ({ res, ...args }) => {\n const translations = [[\"\u4F60\u597D\", \"en\"]];\n const modelMsg = {}; // \u7528\u4E8EAI\u4E0A\u4E0B\u6587\n return { translations, modelMsg };\n}";const responsetHookHelperEN="1. The first parameter contains the following fields: 'res', ...\n2. The return value must be an object containing the following fields: 'translations'\n ('translations' should be a two-dimensional array: [[translation, source language]]).\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync ({ res, ...args }) => {\n const translations = [[\"\u4F60\u597D\", \"en\"]];\n const modelMsg = {}; // For AI context\n return { translations, modelMsg };\n}";const I18N={app_name:{zh:"\u7B80\u7EA6\u7FFB\u8BD1",en:"KISS Translator",zh_TW:"\u7C21\u7D04\u7FFB\u8B6F"},translate:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},custom_api_help:{zh:customApiHelpZH,en:customApiHelpEN,zh_TW:customApiHelpZH},request_hook_helper:{zh:requestHookHelperZH,en:requestHookHelperEN,zh_TW:requestHookHelperZH},response_hook_helper:{zh:responsetHookHelperZH,en:responsetHookHelperEN,zh_TW:responsetHookHelperZH},translate_alt:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},basic_setting:{zh:"\u57FA\u672C\u8BBE\u7F6E",en:"Basic Setting",zh_TW:"\u57FA\u672C\u8A2D\u5B9A"},rules_setting:{zh:"\u89C4\u5219\u8BBE\u7F6E",en:"Rules Setting",zh_TW:"\u898F\u5247\u8A2D\u5B9A"},apis_setting:{zh:"\u63A5\u53E3\u8BBE\u7F6E",en:"Apis Setting",zh_TW:"API\u8A2D\u5B9A"},sync_setting:{zh:"\u540C\u6B65\u8BBE\u7F6E",en:"Sync Setting",zh_TW:"\u540C\u6B65\u8A2D\u5B9A"},patch_setting:{zh:"\u8865\u4E01\u8BBE\u7F6E",en:"Patch Setting",zh_TW:"\u4FEE\u88DC\u8A2D\u5B9A"},patch_setting_help:{zh:"\u9488\u5BF9\u4E00\u4E9B\u7279\u6B8A\u7F51\u7AD9\u7684\u4FEE\u6B63\u811A\u672C\uFF0C\u4EE5\u4FBF\u7FFB\u8BD1\u8F6F\u4EF6\u5F97\u5230\u66F4\u597D\u7684\u5C55\u793A\u6548\u679C\u3002",en:"Corrected scripts for some special websites so that the translation software can get better display results.",zh_TW:"\u91DD\u5C0D\u67D0\u4E9B\u7279\u6B8A\u7DB2\u7AD9\u7684\u4FEE\u6B63\u8173\u672C\uFF0C\u8B93\u7FFB\u8B6F\u8EDF\u9AD4\u6709\u66F4\u597D\u7684\u986F\u793A\u6548\u679C\u3002"},inject_webfix:{zh:"\u6CE8\u5165\u4FEE\u590D\u8865\u4E01",en:"Inject Webfix",zh_TW:"\u6CE8\u5165\u4FEE\u6B63\u88DC\u4E01"},about:{zh:"\u5173\u4E8E",en:"About",zh_TW:"\u95DC\u65BC"},about_md:{zh:"README.md",en:"README.en.md",zh_TW:"README.md"},about_md_local:{zh:"\u8BF7 [\u70B9\u51FB\u8FD9\u91CC](".concat("https://github.com/fishjar/kiss-translator",") \u67E5\u770B\u8BE6\u60C5\u3002"),en:"Please [click here](".concat("https://github.com/fishjar/kiss-translator",") for details."),zh_TW:"\u8ACB\u3010\u9EDE\u9019\u88E1\u3011\u67E5\u770B\u8A73\u7D30\u5167\u5BB9\u3002"},ui_lang:{zh:"\u754C\u9762\u8BED\u8A00",en:"Interface Language",zh_TW:"\u4ECB\u9762\u8A9E\u8A00"},fetch_limit:{zh:"\u6700\u5927\u5E76\u53D1\u8BF7\u6C42\u6570\u91CF (1-100)",en:"Maximum Number Of Concurrent Requests (1-100)",zh_TW:"\u6700\u5927\u540C\u6642\u8ACB\u6C42\u6578\u91CF (1-100)"},if_think:{zh:"\u542F\u7528\u6216\u7981\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B",en:"Enable or disable the model\u2019s thinking behavior ",zh_TW:"\u555F\u7528\u6216\u505C\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B"},think:{zh:"\u542F\u7528\u6DF1\u5EA6\u601D\u8003",en:"enable thinking",zh_TW:"\u555F\u7528\u6DF1\u5EA6\u601D\u8003"},nothink:{zh:"\u7981\u7528\u6DF1\u5EA6\u601D\u8003",en:"disable thinking",zh_TW:"\u505C\u7528\u6DF1\u5EA6\u601D\u8003"},think_ignore:{zh:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684\u8F93\u51FA,\u9017\u53F7(,)\u5206\u5272,\u5F53\u6A21\u578B\u652F\u6301\u601D\u8003\u4F46ollama\u4E0D\u652F\u6301\u65F6\u9700\u8981\u586B\u5199\u672C\u53C2\u6570",en:"Ignore the block for the following models, comma (,) separated",zh_TW:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684 \u8F38\u51FA\uFF0C\u4EE5\u9017\u865F (,) \u5206\u9694\uFF1B\u7576\u6A21\u578B\u652F\u63F4\u601D\u8003\u4F46 ollama \u4E0D\u652F\u63F4\u6642\u9700\u8981\u586B\u5BEB\u6B64\u53C3\u6578"},fetch_interval:{zh:"\u6BCF\u6B21\u8BF7\u6C42\u95F4\u9694\u65F6\u95F4 (0-5000ms)",en:"Time Between Requests (0-5000ms)",zh_TW:"\u6BCF\u6B21\u8ACB\u6C42\u9593\u9694\u6642\u9593 (0-5000ms)"},translate_interval:{zh:"\u7FFB\u8BD1\u95F4\u9694\u65F6\u95F4 (10-2000ms)",en:"Translation Interval (10-2000ms)",zh_TW:"\u7FFB\u8B6F\u9593\u9694\u6642\u9593 (10-2000ms)"},http_timeout:{zh:"\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4 (5000-60000ms)",en:"Request Timeout Time (5000-60000ms)",zh_TW:"\u8ACB\u6C42\u903E\u6642\u6642\u9593 (5000-60000ms)"},custom_header:{zh:"\u81EA\u5B9A\u4E49Header\u53C2\u6570",en:"Custom Header Params"},custom_header_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\"",en:"Use JSON format, for example \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\""},custom_body:{zh:"\u81EA\u5B9A\u4E49Body\u53C2\u6570",en:"Custom Body Params"},custom_body_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"top_p\": 0.7",en:"Use JSON format, for example \"top_p\": 0.7"},min_translate_length:{zh:"\u6700\u5C0F\u7FFB\u8BD1\u5B57\u7B26\u6570 (1-100)",en:"Minimum number Of Translated Characters (1-100)",zh_TW:"\u6700\u5C0F\u7FFB\u8B6F\u5B57\u5143\u6578 (1-100)"},max_translate_length:{zh:"\u6700\u5927\u7FFB\u8BD1\u5B57\u7B26\u6570 (100-100000)",en:"Maximum number Of Translated Characters (100-100000)",zh_TW:"\u6700\u5927\u7FFB\u8B6F\u5B57\u5143\u6578 (100-100000)"},num_of_newline_characters:{zh:"\u6362\u884C\u5B57\u7B26\u6570 (1-1000)",en:"Number of Newline Characters (1-1000)",zh_TW:"\u63DB\u884C\u5B57\u5143\u6578 (1-1000)"},translate_service:{zh:"\u7FFB\u8BD1\u670D\u52A1",en:"Translate Service",zh_TW:"\u7FFB\u8B6F\u670D\u52D9"},translate_service_multiple:{zh:"\u7FFB\u8BD1\u670D\u52A1 (\u652F\u6301\u591A\u9009)",en:"Translation service (multiple supported)",zh_TW:"\u7FFB\u8B6F\u670D\u52D9 (\u652F\u63F4\u591A\u9078)"},translate_timing:{zh:"\u7FFB\u8BD1\u65F6\u673A",en:"Translate Timing",zh_TW:"\u7FFB\u8B6F\u6642\u6A5F"},mk_pagescroll:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u7FFB\u8BD1\uFF08\u63A8\u8350\uFF09",en:"Rolling Loading (Suggested)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u7FFB\u8B6F\uFF08\u5EFA\u8B70\uFF09"},mk_pageopen:{zh:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8BD1",en:"Translate all now",zh_TW:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8B6F"},mk_mouseover:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},mk_ctrlKey:{zh:"Control + \u9F20\u6807\u60AC\u505C",en:"Control + Mouseover",zh_TW:"Control + \u6ED1\u9F20\u61F8\u505C"},mk_shiftKey:{zh:"Shift + \u9F20\u6807\u60AC\u505C",en:"Shift + Mouseover",zh_TW:"Shift + \u6ED1\u9F20\u61F8\u505C"},mk_altKey:{zh:"Alt + \u9F20\u6807\u60AC\u505C",en:"Alt + Mouseover",zh_TW:"Alt + \u6ED1\u9F20\u61F8\u505C"},from_lang:{zh:"\u539F\u6587\u8BED\u8A00",en:"Source Language",zh_TW:"\u539F\u6587\u8A9E\u8A00"},to_lang:{zh:"\u76EE\u6807\u8BED\u8A00",en:"Target Language",zh_TW:"\u76EE\u6A19\u8A9E\u8A00"},to_lang2:{zh:"\u7B2C\u4E8C\u76EE\u6807\u8BED\u8A00",en:"Target Language 2",zh_TW:"\u7B2C\u4E8C\u76EE\u6A19\u8A9E\u8A00"},to_lang2_helper:{zh:"\u8BBE\u5B9A\u540E\uFF0C\u4E0E\u76EE\u6807\u8BED\u8A00\u4EA7\u751F\u4E92\u8BD1\u6548\u679C\uFF0C\u4F46\u4F9D\u8D56\u8FDC\u7A0B\u8BED\u8A00\u8BC6\u522B\u3002",en:"After setting, it will produce mutual translation effect with the target language, but it relies on remote language recognition.",zh_TW:"\u8A2D\u5B9A\u5F8C\u6703\u8207\u76EE\u6A19\u8A9E\u8A00\u4E92\u8B6F\uFF0C\u4F46\u4F9D\u8CF4\u9060\u7AEF\u8A9E\u8A00\u8B58\u5225\u3002"},text_style:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},text_style_alt:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},bg_color:{zh:"\u6837\u5F0F\u989C\u8272",en:"Style Color",zh_TW:"\u6A23\u5F0F\u984F\u8272"},remain_unchanged:{zh:"\u4FDD\u7559\u4E0D\u53D8",en:"Remain Unchanged",zh_TW:"\u4FDD\u7559\u4E0D\u8B8A"},google_api:{zh:"\u8C37\u6B4C\u7FFB\u8BD1\u63A5\u53E3",en:"Google Translate API",zh_TW:"Google \u7FFB\u8B6F\u4ECB\u9762"},default_selector:{zh:"\u9ED8\u8BA4\u9009\u62E9\u5668",en:"Default selector",zh_TW:"\u9810\u8A2D\u9078\u64C7\u5668"},selector_rules:{zh:"\u9009\u62E9\u5668\u89C4\u5219",en:"Selector Rules",zh_TW:"\u9078\u64C7\u5668\u898F\u5247"},save:{zh:"\u4FDD\u5B58",en:"Save",zh_TW:"\u5132\u5B58"},edit:{zh:"\u7F16\u8F91",en:"Edit",zh_TW:"\u7DE8\u8F2F"},cancel:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},delete:{zh:"\u5220\u9664",en:"Delete",zh_TW:"\u522A\u9664"},reset:{zh:"\u91CD\u7F6E",en:"Reset",zh_TW:"\u91CD\u8A2D"},add:{zh:"\u6DFB\u52A0",en:"Add",zh_TW:"\u65B0\u589E"},inject_rules:{zh:"\u6CE8\u5165\u8BA2\u9605\u89C4\u5219",en:"Inject Subscribe Rules",zh_TW:"\u6CE8\u5165\u8A02\u95B1\u898F\u5247"},personal_rules:{zh:"\u4E2A\u4EBA\u89C4\u5219",en:"Rules",zh_TW:"\u500B\u4EBA\u898F\u5247"},subscribe_rules:{zh:"\u8BA2\u9605\u89C4\u5219",en:"Subscribe",zh_TW:"\u8A02\u95B1\u898F\u5247"},overwrite_subscribe_rules:{zh:"\u8986\u5199\u8BA2\u9605\u89C4\u5219",en:"Overwrite",zh_TW:"\u8986\u5BEB\u8A02\u95B1\u898F\u5247"},subscribe_url:{zh:"\u8BA2\u9605\u5730\u5740",en:"Subscribe URL",zh_TW:"\u8A02\u95B1\u7DB2\u5740"},rules_warn_1:{zh:"1\u3001\u89C4\u5219\u751F\u6548\u7684\u4F18\u5148\u7EA7\u4F9D\u6B21\u4E3A\uFF1A\u4E2A\u4EBA\u89C4\u5219 > \u8BA2\u9605\u89C4\u5219 > \u5168\u5C40\u89C4\u5219\u3002\"\u5168\u5C40\u89C4\u5219\"\u76F8\u5F53\u4E8E\u515C\u5E95\u89C4\u5219\u3002",en:"1. The priority of rules is: personal rules > subscription rules > global rules. \"Global rules\" are like a fallback rule.",zh_TW:"1.\u898F\u5247\u751F\u6548\u7684\u512A\u5148\u9806\u5E8F\u4F9D\u5E8F\u70BA\uFF1A\u500B\u4EBA\u898F\u5247 > \u8A02\u95B1\u898F\u5247 > \u5168\u57DF\u898F\u5247\u3002 \"\u5168\u57DF\u898F\u5247\"\u76F8\u7576\u65BC\u515C\u5E95\u898F\u5247\u3002"},rules_warn_2:{zh:"2\u3001\u201C\u8BA2\u9605\u89C4\u5219\u201D\u9009\u62E9\u6CE8\u5165\u540E\u624D\u4F1A\u751F\u6548\u3002",en:"2. \"Subscription rules\" will take effect only after injection is selected.",zh_TW:"2\u3001\u300C\u8A02\u95B1\u898F\u5247\u300D\u9078\u64C7\u6CE8\u5165\u5F8C\u624D\u6703\u751F\u6548\u3002"},rules_warn_3:{zh:"3\u3001\u5173\u4E8E\u89C4\u5219\u586B\u5199\uFF1A\u8F93\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u6846\u9009\u201C*\u201D\u8868\u793A\u91C7\u7528\u5168\u5C40\u89C4\u5219\u3002",en:"3. Regarding filling in the rules: Leave the input box blank or select \"*\" in the drop-down box to use global rule.",zh_TW:"3. \u898F\u5247\u586B\u5BEB\u8AAA\u660E\uFF1A\u8F38\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u9078\u64C7\u300C*\u300D\u8868\u793A\u4F7F\u7528\u5168\u57DF\u898F\u5247\u3002"},sync_warn:{zh:"\u6D89\u53CA\u9690\u79C1\u6570\u636E\u7684\u540C\u6B65\u8BF7\u8C28\u614E\u9009\u62E9\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52A1\uFF0C\u5EFA\u8BAE\u81EA\u884C\u642D\u5EFA kiss-worker \u6216 WebDAV \u670D\u52A1\u3002",en:"When synchronizing data that involves privacy, please be cautious about choosing third-party sync services. It is recommended to set up your own sync service using kiss-worker or WebDAV.",zh_TW:"\u540C\u6B65\u6D89\u53CA\u96B1\u79C1\u8CC7\u6599\u6642\uFF0C\u8ACB\u8B39\u614E\u9078\u64C7\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52D9\uFF1B\u5EFA\u8B70\u81EA\u5EFA kiss-worker \u6216 WebDAV \u670D\u52D9\u3002"},sync_warn_2:{zh:"\u5982\u679C\u670D\u52A1\u5668\u5B58\u5728\u5176\u4ED6\u5BA2\u6237\u7AEF\u540C\u6B65\u7684\u6570\u636E\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u5C06\u76F4\u63A5\u8986\u76D6\u672C\u5730\u914D\u7F6E\uFF0C\u540E\u9762\u5219\u6839\u636E\u4FEE\u6539\u65F6\u95F4\uFF0C\u65B0\u7684\u8986\u76D6\u65E7\u7684\u3002",en:"If the server has data synchronized by other clients, the first synchronization will directly overwrite the local configuration, and later, according to the modification time, the new one will overwrite the old one.",zh_TW:"\u82E5\u4F3A\u670D\u5668\u4E0A\u5B58\u5728\u5176\u4ED6\u7528\u6236\u7AEF\u540C\u6B65\u7684\u8CC7\u6599\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u6703\u76F4\u63A5\u8986\u84CB\u672C\u6A5F\u8A2D\u5B9A\uFF1B\u4E4B\u5F8C\u5247\u4F9D\u4FEE\u6539\u6642\u9593\uFF0C\u7531\u65B0\u7684\u8986\u84CB\u820A\u7684\u3002"},about_sync_api:{zh:"\u81EA\u5EFAkiss-wroker\u6570\u636E\u540C\u6B65\u670D\u52A1",en:"Self-hosting a Kiss-worker data sync service",zh_TW:"\u81EA\u5EFA kiss-wroker \u8CC7\u6599\u540C\u6B65\u670D\u52D9"},about_api:{zh:"1\u3001\u5176\u4E2D BuiltinAI \u4E3A\u6D4F\u89C8\u5668\u5185\u7F6EAI\u7FFB\u8BD1\uFF0C\u76EE\u524D\u4EC5 Chrome 138 \u53CA\u4EE5\u4E0A\u7248\u672C\u5F97\u5230\u652F\u6301\u3002",en:"1. BuiltinAI is the browser's built-in AI translation, which is currently only supported by Chrome 138 and above.",zh_TW:"1.\u5176\u4E2D BuiltinAI \u70BA\u700F\u89BD\u5668\u5167\u5EFAAI\u7FFB\u8B6F\uFF0C\u76EE\u524D\u50C5 Chrome 138 \u4EE5\u4E0A\u7248\u672C\u652F\u63F4\u3002"},about_api_2:{zh:"2\u3001\u5927\u90E8\u5206AI\u63A5\u53E3\u90FD\u4E0EOpenAI\u517C\u5BB9\uFF0C\u56E0\u6B64\u9009\u62E9\u6DFB\u52A0OpenAI\u7C7B\u578B\u5373\u53EF\u3002",en:"2. Most AI interfaces are compatible with OpenAI, so just choose to add the OpenAI type.",zh_TW:"2.\u5927\u90E8\u5206AI\u4ECB\u9762\u90FD\u8207OpenAI\u76F8\u5BB9\uFF0C\u56E0\u6B64\u9078\u64C7\u65B0\u589EOpenAI\u985E\u578B\u5373\u53EF\u3002"},about_api_3:{zh:"3\u3001\u6682\u672A\u5217\u51FA\u7684\u63A5\u53E3\uFF0C\u7406\u8BBA\u4E0A\u90FD\u53EF\u4EE5\u901A\u8FC7\u81EA\u5B9A\u4E49\u63A5\u53E3 (Custom) \u7684\u5F62\u5F0F\u652F\u6301\u3002",en:"3. Interfaces that have not yet been launched can theoretically be supported through custom interfaces.",zh_TW:"3\u3001\u66AB\u672A\u5217\u51FA\u7684\u4ECB\u9762\uFF0C\u7406\u8AD6\u4E0A\u90FD\u53EF\u900F\u904E\u81EA\u8A02\u4ECB\u9762 (Custom) \u7684\u5F62\u5F0F\u652F\u63F4\u3002"},about_api_proxy:{zh:"\u67E5\u770B\u81EA\u5EFA\u4E00\u4E2A\u7FFB\u8BD1\u63A5\u53E3\u4EE3\u7406",en:"Check out the self-built translation interface proxy",zh_TW:"\u67E5\u770B\u5982\u4F55\u81EA\u5EFA\u7FFB\u8B6F\u4ECB\u9762 Proxy"},setting_helper:{zh:"\u65B0\u65E7\u914D\u7F6E\u5E76\u4E0D\u517C\u5BB9\uFF0C\u5BFC\u51FA\u7684\u65E7\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u5BFC\u5165\u3002",en:"The old and new configurations are not compatible. Do not import the exported old configuration again.",zh_TW:"\u65B0\u820A\u914D\u7F6E\u4E26\u4E0D\u76F8\u5BB9\uFF0C\u532F\u51FA\u7684\u820A\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u532F\u5165\u3002"},style_none:{zh:"\u65E0",en:"None",zh_TW:"\u7121"},under_line:{zh:"\u4E0B\u5212\u76F4\u7EBF",en:"Underline",zh_TW:"\u4E0B\u5283\u76F4\u7DDA"},dot_line:{zh:"\u4E0B\u5212\u70B9\u72B6\u7EBF",en:"Dotted Underline",zh_TW:"\u4E0B\u5283\u9EDE\u72C0\u7DDA"},dash_line:{zh:"\u4E0B\u5212\u865A\u7EBF",en:"Dashed Underline",zh_TW:"\u4E0B\u5283\u865B\u7DDA"},dash_box:{zh:"\u865A\u7EBF\u6846",en:"Dashed Box"},wavy_line:{zh:"\u4E0B\u5212\u6CE2\u6D6A\u7EBF",en:"Wavy Underline",zh_TW:"\u4E0B\u5283\u6CE2\u6D6A\u7DDA"},fuzzy:{zh:"\u6A21\u7CCA",en:"Fuzzy",zh_TW:"\u6A21\u7CCA"},highlight:{zh:"\u9AD8\u4EAE",en:"Highlight",zh_TW:"\u53CD\u767D\u6A19\u793A"},blockquote:{zh:"\u5F15\u7528",en:"Blockquote",zh_TW:"\u5F15\u7528"},gradient:{zh:"\u6E10\u53D8",en:"Gradient",zh_TW:"\u6F38\u8B8A"},blink:{zh:"\u95EA\u73B0",en:"Blink",zh_TW:"\u9583\u73FE"},glow:{zh:"\u53D1\u5149",en:"Glow",zh_TW:"\u767C\u5149"},diy_style:{zh:"\u81EA\u5B9A\u4E49\u6837\u5F0F",en:"Custom Style",zh_TW:"\u81EA\u8A02\u6A23\u5F0F"},diy_style_helper:{zh:"\u9075\u5FAA\u201CCSS\u201D\u7684\u8BED\u6CD5",en:"Follow the syntax of \"CSS\"",zh_TW:"\u9075\u5FAA CSS \u8A9E\u6CD5"},setting:{zh:"\u8BBE\u7F6E",en:"Setting",zh_TW:"\u8A2D\u5B9A"},pattern:{zh:"\u5339\u914D\u7F51\u5740",en:"URL pattern",zh_TW:"\u5339\u914D\u7DB2\u5740"},pattern_helper:{zh:"1\u3001\u652F\u6301\u661F\u53F7(*)\u901A\u914D\u7B26\u30022\u3001\u591A\u4E2AURL\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\u3002",en:"1. Supports the asterisk (*) wildcard character. 2. Separate multiple URLs with newlines or English commas \",\".",zh_TW:"1. \u652F\u63F4\u661F\u865F (*) \u842C\u7528\u5B57\u5143\u30022. \u591A\u500B URL \u8ACB\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u3002"},selector_helper:{zh:"1\u3001\u9700\u8981\u7FFB\u8BD1\u7684\u76EE\u6807\u5143\u7D20\u30022\u3001\u5F00\u542F\u81EA\u52A8\u626B\u63CF\u9875\u9762\u540E\uFF0C\u672C\u8BBE\u7F6E\u65E0\u6548\u30023\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The target element to be translated. 2. This setting is invalid when automatic page scanning is enabled. 3. Follow the CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u7FFB\u8B6F\u7684\u76EE\u6A19\u5143\u7D20\u3002 2.\u958B\u555F\u81EA\u52D5\u6383\u63CF\u9801\u9762\u5F8C\uFF0C\u672C\u8A2D\u5B9A\u7121\u6548\u3002 3.\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},translate_switch:{zh:"\u5F00\u542F\u7FFB\u8BD1",en:"Translate Switch",zh_TW:"\u958B\u555F\u7FFB\u8B6F"},default_enabled:{zh:"\u9ED8\u8BA4\u5F00\u542F",en:"Enabled",zh_TW:"\u9810\u8A2D\u958B\u555F"},default_disabled:{zh:"\u9ED8\u8BA4\u5173\u95ED",en:"Disabled",zh_TW:"\u9810\u8A2D\u95DC\u9589"},selector:{zh:"\u9009\u62E9\u5668",en:"Selector",zh_TW:"\u9078\u64C7\u5668"},target_selector:{zh:"\u76EE\u6807\u5143\u7D20\u9009\u62E9\u5668",en:"Target element selector",zh_TW:"\u76EE\u6A19\u5143\u7D20\u9078\u64C7\u5668"},keep_selector:{zh:"\u4FDD\u7559\u5143\u7D20\u9009\u62E9\u5668",en:"Keep unchanged selector",zh_TW:"\u4FDD\u7559\u5143\u7D20\u9078\u64C7\u5668"},keep_selector_helper:{zh:"1\u3001\u76EE\u6807\u5143\u7D20\u4E0B\u9762\u9700\u8981\u539F\u6837\u4FDD\u7559\u7684\u5B50\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The child nodes under the target element need to remain intact. 2. Follow the CSS selector syntax.",zh_TW:"1. \u76EE\u6A19\u5143\u7D20\u4E0B\u7684\u5B50\u7BC0\u9EDE\u9700\u8981\u4FDD\u6301\u539F\u6A23\u3002 2. \u9075\u5FAA CSS \u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},root_selector:{zh:"\u6839\u8282\u70B9\u9009\u62E9\u5668",en:"Root node selector",zh_TW:"\u6839\u7BC0\u9EDE\u9078\u64C7\u5668"},root_selector_helper:{zh:"1\u3001\u7528\u4E8E\u7F29\u5C0F\u9875\u9762\u7FFB\u8BD1\u8303\u56F4\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Used to narrow the translation scope of the page. 2. Follow the CSS selector syntax.",zh_TW:"1.\u7528\u65BC\u7E2E\u5C0F\u9801\u9762\u7FFB\u8B6F\u7BC4\u570D\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},ignore_selector:{zh:"\u4E0D\u7FFB\u8BD1\u8282\u70B9\u9009\u62E9\u5668",en:"Ignore node selectors",zh_TW:"\u4E0D\u7FFB\u8B6F\u7BC0\u9EDE\u9078\u64C7\u5668"},ignore_selector_helper:{zh:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Nodes to be ignored. 2. Follow CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u7BC0\u9EDE\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},terms:{zh:"\u4E13\u4E1A\u672F\u8BED",en:"Terms",zh_TW:"\u5C08\u696D\u8853\u8A9E"},terms_helper:{zh:"1\u3001\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u65E0\u9700\u659C\u6746\uFF0C\u4E0D\u652F\u6301\u4FEE\u9970\u7B26\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. Supports regular expression matching, no slash required, and no modifiers are supported. 2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1. \u652F\u63F4\u6B63\u5247\u8868\u9054\u5F0F\u6BD4\u5C0D\uFF0C\u7121\u9700\u659C\u7DDA\uFF0C\u4E14\u4E0D\u652F\u63F4\u4FEE\u98FE\u7B26\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},ai_terms:{zh:"AI\u4E13\u4E1A\u672F\u8BED",en:"AI Terms",zh_TW:"AI\u5C08\u696D\u8853\u8A9E"},ai_terms_helper:{zh:"1\u3001AI\u667A\u80FD\u66FF\u6362\uFF0C\u4E0D\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. AI intelligent replacement does not support regular expressions.2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1.AI\u667A\u80FD\u66FF\u63DB\uFF0C\u4E0D\u652F\u63F4\u6B63\u898F\u8868\u793A\u5F0F\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},selector_style:{zh:"\u9009\u62E9\u5668\u8282\u70B9\u6837\u5F0F",en:"Selector Style",zh_TW:"\u9078\u64C7\u5668\u7BC0\u9EDE\u6A23\u5F0F"},terms_style:{zh:"\u4E13\u4E1A\u672F\u8BED\u6837\u5F0F",en:"Terms Style",zh_TW:"\u5C08\u696D\u8853\u8A9E\u6A23\u5F0F"},highlight_style:{zh:"\u8BCD\u6C47\u9AD8\u4EAE\u6837\u5F0F",en:"Fav Words highlight style",zh_TW:"\u8A5E\u5F59\u9AD8\u4EAE\u6A23\u5F0F"},selector_style_helper:{zh:"\u5F00\u542F\u7FFB\u8BD1\u65F6\u6CE8\u5165\u3002",en:"It is injected when translation is turned on.",zh_TW:"\u5728\u958B\u555F\u7FFB\u8B6F\u6642\u6CE8\u5165\u3002"},selector_parent_style:{zh:"\u9009\u62E9\u5668\u7236\u8282\u70B9\u6837\u5F0F",en:"Parent Selector Style",zh_TW:"\u9078\u64C7\u5668\u7236\u7BC0\u9EDE\u6A23\u5F0F"},selector_grand_style:{zh:"\u9009\u62E9\u5668\u7956\u8282\u70B9\u6837\u5F0F",en:"Grand Selector Style",zh_TW:"\u9078\u64C7\u5668\u7956\u7BC0\u9EDE\u6A23\u5F0F"},inject_js:{zh:"\u6CE8\u5165JS",en:"Inject JS",zh_TW:"\u6CE8\u5165 JS"},inject_js_helper:{zh:"\u9884\u52A0\u8F7D\u65F6\u6CE8\u5165\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002\u5185\u7F6E\u5168\u5C40\u5BF9\u8C61 KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }",en:"Injected during preload, runs only once per page. Built-in global object KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }",zh_TW:"\u9810\u5148\u8F09\u5165\u6642\u6CE8\u5165\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002\u5167\u5EFA\u5168\u57DF\u7269\u4EF6 KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }"},inject_css:{zh:"\u6CE8\u5165CSS",en:"Inject CSS",zh_TW:"\u6CE8\u5165 CSS"},inject_css_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},fixer_function:{zh:"\u4FEE\u590D\u51FD\u6570",en:"Fixer Function",zh_TW:"\u4FEE\u5FA9\u51FD\u5F0F"},fixer_function_helper:{zh:"1\u3001br\u662F\u5C06
\u6362\u884C\u66FF\u6362\u6210

\u30022\u3001bn\u662F\u5C06\\n\u6362\u884C\u66FF\u6362\u6210

\u30023\u3001brToDiv\u548CbnToDiv\u662F\u66FF\u6362\u6210

\u3002",en:"1. br replaces
line breaks with

. 2. bn replaces \\n newline with

. 3. brToDiv and bnToDiv are replaced with

.",zh_TW:"1. br \u6703\u5C07
\u63DB\u884C\u66FF\u63DB\u70BA

\u30022. bn \u6703\u5C07 \\n \u63DB\u884C\u66FF\u63DB\u70BA

\u30023. brToDiv \u8207 bnToDiv \u6703\u66FF\u63DB\u70BA

\u3002"},import:{zh:"\u5BFC\u5165",en:"Import",zh_TW:"\u532F\u5165"},export:{zh:"\u5BFC\u51FA",en:"Export",zh_TW:"\u532F\u51FA"},export_translation:{zh:"\u5BFC\u51FA\u91CA\u4E49",en:"Export Translation",zh_TW:"\u532F\u51FA\u91CB\u7FA9"},error_cant_be_blank:{zh:"\u4E0D\u80FD\u4E3A\u7A7A",en:"Can not be blank",zh_TW:"\u4E0D\u53EF\u70BA\u7A7A"},error_duplicate_values:{zh:"\u5B58\u5728\u91CD\u590D\u7684\u503C",en:"There are duplicate values",zh_TW:"\u5B58\u5728\u91CD\u8907\u7684\u503C"},error_wrong_file_type:{zh:"\u9519\u8BEF\u7684\u6587\u4EF6\u7C7B\u578B",en:"Wrong file type",zh_TW:"\u6A94\u6848\u985E\u578B\u932F\u8AA4"},error_fetch_url:{zh:"\u8BF7\u68C0\u67E5url\u5730\u5740\u662F\u5426\u6B63\u786E\u6216\u7A0D\u540E\u518D\u8BD5\u3002",en:"Please check if the url address is correct or try again later.",zh_TW:"\u8ACB\u6AA2\u67E5 URL \u662F\u5426\u6B63\u78BA\u6216\u7A0D\u5F8C\u518D\u8A66\u3002"},deepl_api:{zh:"DeepL \u63A5\u53E3",en:"DeepL API",zh_TW:"DeepL \u4ECB\u9762"},deepl_key:{zh:"DeepL \u5BC6\u94A5",en:"DeepL Key",zh_TW:"DeepL \u91D1\u9470"},openai_api:{zh:"OpenAI \u63A5\u53E3",en:"OpenAI API",zh_TW:"OpenAI \u4ECB\u9762"},openai_key:{zh:"OpenAI \u5BC6\u94A5",en:"OpenAI Key",zh_TW:"OpenAI \u91D1\u9470"},openai_model:{zh:"OpenAI \u6A21\u578B",en:"OpenAI Model",zh_TW:"OpenAI \u6A21\u578B"},openai_prompt:{zh:"OpenAI \u63D0\u793A\u8BCD",en:"OpenAI Prompt",zh_TW:"OpenAI \u63D0\u793A\u8A5E"},if_clear_cache:{zh:"\u662F\u5426\u6E05\u9664\u7F13\u5B58\uFF08\u9ED8\u8BA4\u7F13\u5B587\u5929\uFF09",en:"Whether clear cache (Default cache is 7 days)",zh_TW:"\u662F\u5426\u6E05\u9664\u5FEB\u53D6\uFF08\u9810\u8A2D\u5FEB\u53D67\u5929\uFF09"},clear_cache_never:{zh:"\u4E0D\u6E05\u9664\u7F13\u5B58",en:"Never clear cache",zh_TW:"\u4E0D\u6E05\u9664\u5FEB\u53D6"},clear_cache_restart:{zh:"\u91CD\u542F\u6D4F\u89C8\u5668\u65F6\u6E05\u9664\u7F13\u5B58",en:"Clear cache when restarting browser",zh_TW:"\u91CD\u65B0\u555F\u52D5\u700F\u89BD\u5668\u6642\u6E05\u9664\u5FEB\u53D6"},data_sync_type:{zh:"\u6570\u636E\u540C\u6B65\u65B9\u5F0F",en:"Data Sync Type",zh_TW:"\u8CC7\u6599\u540C\u6B65\u65B9\u5F0F"},data_sync_url:{zh:"\u6570\u636E\u540C\u6B65\u63A5\u53E3",en:"Data Sync API",zh_TW:"\u8CC7\u6599\u540C\u6B65\u4ECB\u9762"},data_sync_user:{zh:"\u6570\u636E\u540C\u6B65\u8D26\u6237",en:"Data Sync User",zh_TW:"\u8CC7\u6599\u540C\u6B65\u5E33\u865F"},data_sync_key:{zh:"\u6570\u636E\u540C\u6B65\u5BC6\u94A5",en:"Data Sync Key",zh_TW:"\u8CC7\u6599\u540C\u6B65\u91D1\u9470"},sync_now:{zh:"\u7ACB\u5373\u540C\u6B65",en:"Sync Now",zh_TW:"\u7ACB\u5373\u540C\u6B65"},sync_success:{zh:"\u540C\u6B65\u6210\u529F\uFF01",en:"Sync Success",zh_TW:"\u540C\u6B65\u6210\u529F\uFF01"},sync_failed:{zh:"\u540C\u6B65\u5931\u8D25\uFF01",en:"Sync Error",zh_TW:"\u540C\u6B65\u5931\u6557\uFF01"},error_got_some_wrong:{zh:"\u62B1\u6B49\uFF0C\u51FA\u9519\u4E86\uFF01",en:"Sorry, something went wrong!",zh_TW:"\u62B1\u6B49\uFF0C\u767C\u751F\u932F\u8AA4\uFF01"},error_sync_setting:{zh:"\u60A8\u7684\u540C\u6B65\u7C7B\u578B\u5FC5\u987B\u4E3A\u201CKISS-Worker\u201D\uFF0C\u4E14\u9700\u586B\u5199\u5B8C\u6574",en:"Your sync type must be \"KISS-Worker\" and must be filled in completely",zh_TW:"\u60A8\u7684\u540C\u6B65\u578B\u614B\u5FC5\u9808\u70BA\u300CKISS-Worker\u300D\uFF0C\u4E14\u9700\u586B\u5BEB\u5B8C\u6574\u3002"},click_test:{zh:"\u70B9\u51FB\u6D4B\u8BD5",en:"Click Test",zh_TW:"\u9EDE\u64CA\u6E2C\u8A66"},test_success:{zh:"\u6D4B\u8BD5\u6210\u529F",en:"Test success",zh_TW:"\u6E2C\u8A66\u6210\u529F"},test_failed:{zh:"\u6D4B\u8BD5\u5931\u8D25",en:"Test failed",zh_TW:"\u6E2C\u8A66\u5931\u6557"},clear_all_cache_now:{zh:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u7F13\u5B58",en:"Clear all cache now",zh_TW:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u5FEB\u53D6"},clear_cache:{zh:"\u6E05\u9664\u7F13\u5B58",en:"Clear Cache",zh_TW:"\u6E05\u9664\u5FEB\u53D6"},clear_success:{zh:"\u6E05\u9664\u6210\u529F",en:"Clear success",zh_TW:"\u6E05\u9664\u6210\u529F"},clear_failed:{zh:"\u6E05\u9664\u5931\u8D25",en:"Clear failed",zh_TW:"\u6E05\u9664\u5931\u6557"},share:{zh:"\u5206\u4EAB",en:"Share",zh_TW:"\u5206\u4EAB"},clear_all:{zh:"\u6E05\u7A7A",en:"Clear All",zh_TW:"\u6E05\u7A7A"},help:{zh:"\u6C42\u52A9",en:"Help",zh_TW:"\u6C42\u52A9"},restore_default:{zh:"\u6062\u590D\u9ED8\u8BA4",en:"Restore Default",zh_TW:"\u6062\u5FA9\u9810\u8A2D"},shortcuts_setting:{zh:"\u5FEB\u6377\u952E\u8BBE\u7F6E",en:"Shortcuts Setting",zh_TW:"\u5FEB\u6377\u9375\u8A2D\u5B9A"},toggle_translate_shortcut:{zh:"\"\u5F00\u542F\u7FFB\u8BD1\"\u5FEB\u6377\u952E",en:"\"Toggle Translate\" Shortcut",zh_TW:"\u300C\u958B\u555F\u7FFB\u8B6F\u300D\u5FEB\u6377\u9375"},toggle_style_shortcut:{zh:"\"\u5207\u6362\u6837\u5F0F\"\u5FEB\u6377\u952E",en:"\"Toggle Style\" Shortcut",zh_TW:"\u300C\u5207\u63DB\u6A23\u5F0F\u300D\u5FEB\u6377\u9375"},toggle_popup_shortcut:{zh:"\"\u6253\u5F00\u5F39\u7A97\"\u5FEB\u6377\u952E",en:"\"Open Popup\" Shortcut",zh_TW:"\u300C\u958B\u555F\u5F48\u7A97\u300D\u5FEB\u6377\u9375"},open_setting_shortcut:{zh:"\"\u6253\u5F00\u8BBE\u7F6E\"\u5FEB\u6377\u952E",en:"\"Open Setting\" Shortcut",zh_TW:"\u300C\u958B\u555F\u8A2D\u5B9A\u300D\u5FEB\u6377\u9375"},hide_fab_button:{zh:"\u9690\u85CF\u60AC\u6D6E\u6309\u94AE",en:"Hide Fab Button",zh_TW:"\u96B1\u85CF\u61F8\u6D6E\u6309\u9215"},fab_click_action:{zh:"\u5355\u51FB\u60AC\u6D6E\u6309\u94AE\u52A8\u4F5C",en:"Single Click Fab Action",zh_TW:"\u55AE\u64CA\u61F8\u6D6E\u6309\u94AE\u52D5\u4F5C"},fab_click_menu:{zh:"\u5F39\u51FA\u83DC\u5355",en:"Popup Menu",zh_TW:"\u5F48\u51FA\u9078\u55AE"},fab_click_translate:{zh:"\u76F4\u63A5\u7FFB\u8BD1",en:"Translate",zh_TW:"\u76F4\u63A5\u7FFB\u8B6F"},hide_tran_button:{zh:"\u9690\u85CF\u7FFB\u8BD1\u6309\u94AE",en:"Hide Translate Button",zh_TW:"\u96B1\u85CF\u7FFB\u8B6F\u6309\u9215"},hide_click_away:{zh:"\u70B9\u51FB\u5916\u90E8\u5173\u95ED\u5F39\u7A97",en:"Click outside to close the pop-up window",zh_TW:"\u9EDE\u64CA\u5916\u90E8\u95DC\u9589\u5F48\u7A97"},use_simple_style:{zh:"\u4F7F\u7528\u7B80\u6D01\u754C\u9762",en:"Use a simple interface",zh_TW:"\u4F7F\u7528\u7C21\u6F54\u4ECB\u9762"},show:{zh:"\u663E\u793A",en:"Show",zh_TW:"\u986F\u793A"},hide:{zh:"\u9690\u85CF",en:"Hide",zh_TW:"\u96B1\u85CF"},save_rule:{zh:"\u4FDD\u5B58\u89C4\u5219",en:"Save Rule",zh_TW:"\u5132\u5B58\u898F\u5247"},global_rule:{zh:"\u5168\u5C40\u89C4\u5219",en:"Global Rule",zh_TW:"\u5168\u57DF\u898F\u5247"},input_translate:{zh:"\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u8F38\u5165\u6846\u7FFB\u8B6F"},use_input_box_translation:{zh:"\u542F\u7528\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u555F\u7528\u8F38\u5165\u6846\u7FFB\u8B6F"},input_selector:{zh:"\u8F93\u5165\u6846\u9009\u62E9\u5668",en:"Input Selector",zh_TW:"\u8F38\u5165\u6846\u9078\u64C7\u5668"},input_selector_helper:{zh:"\u7528\u4E8E\u8F93\u5165\u6846\u7FFB\u8BD1\u3002",en:"Used for input box translation.",zh_TW:"\u7528\u65BC\u8F38\u5165\u6846\u7FFB\u8B6F\u3002"},trigger_trans_shortcut:{zh:"\u89E6\u53D1\u7FFB\u8BD1\u5FEB\u6377\u952E",en:"Trigger Translation Shortcut Keys",zh_TW:"\u89F8\u767C\u7FFB\u8B6F\u5FEB\u6377\u9375"},trigger_trans_shortcut_help:{zh:"\u9ED8\u8BA4\u4E3A\u5355\u51FB\u201CAltLeft+KeyI\u201D",en:"Default is \"AltLeft+KeyI\"",zh_TW:"\u9810\u8A2D\u70BA\u6309\u4E0B\u300CAltLeft+KeyI\u300D"},shortcut_press_count:{zh:"\u5FEB\u6377\u952E\u8FDE\u51FB\u6B21\u6570",en:"Shortcut Press Number",zh_TW:"\u5FEB\u6377\u9375\u9023\u64CA\u6B21\u6578"},combo_timeout:{zh:"\u8FDE\u51FB\u8D85\u65F6\u65F6\u95F4 (10-1000ms)",en:"Combo Timeout (10-1000ms)",zh_TW:"\u9023\u64CA\u903E\u6642 (10-1000ms)"},input_trans_start_sign:{zh:"\u7FFB\u8BD1\u8D77\u59CB\u6807\u8BC6",en:"Translation Start Sign",zh_TW:"\u7FFB\u8B6F\u8D77\u59CB\u6A19\u8A18"},input_trans_start_sign_help:{zh:"\u6807\u8BC6\u540E\u9762\u53EF\u4EE5\u52A0\u76EE\u6807\u8BED\u8A00\u4EE3\u7801\uFF0C\u5982\uFF1A \u201C/en \u4F60\u597D\u201D\u3001\u201C/zh hello\u201D",en:"The target language code can be added after the sign, such as: \"/en \u4F60\u597D\", \"/zh hello\"",zh_TW:"\u6A19\u8A18\u5F8C\u53EF\u52A0\u4E0A\u76EE\u6A19\u8A9E\u8A00\u4EE3\u78BC\uFF0C\u4F8B\u5982\uFF1A\u300C/en \u4F60\u597D\u300D\u3001\u300C/zh hello\u300D"},detect_lang_remote:{zh:"\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B",en:"Remote language detection",zh_TW:"\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C"},detect_lang_remote_help:{zh:"\u542F\u7528\u540E\u68C0\u6D4B\u51C6\u786E\u5EA6\u589E\u52A0\uFF0C\u4F46\u4F1A\u964D\u4F4E\u7FFB\u8BD1\u901F\u5EA6\uFF0C\u8BF7\u914C\u60C5\u5F00\u542F",en:"After enabling, the detection accuracy will increase, but it will reduce the translation speed. Please enable it as appropriate.",zh_TW:"\u555F\u7528\u5F8C\u53EF\u63D0\u5347\u5075\u6E2C\u6E96\u78BA\u5EA6\uFF0C\u4F46\u6703\u964D\u4F4E\u7FFB\u8B6F\u901F\u5EA6\uFF0C\u8ACB\u8996\u9700\u8981\u958B\u555F\u3002"},detect_lang_service:{zh:"\u8BED\u8A00\u68C0\u6D4B\u670D\u52A1",en:"Language detect service",zh_TW:"\u8A9E\u8A00\u6AA2\u6E2C\u670D\u52D9"},disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},enable:{zh:"\u542F\u7528",en:"Enable",zh_TW:"\u555F\u7528"},selection_translate:{zh:"\u5212\u8BCD\u7FFB\u8BD1",en:"Selection Translate",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F"},toggle_selection_translate:{zh:"\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"Use Selection Translate",zh_TW:"\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},trigger_tranbox_shortcut:{zh:"\u663E\u793A\u7FFB\u8BD1\u6846/\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57\u5FEB\u6377\u952E",en:"Open Translate Popup/Translate Selected Shortcut",zh_TW:"\u986F\u793A\u7FFB\u8B6F\u6846\uFF0F\u7FFB\u8B6F\u9078\u4E2D\u6587\u5B57\u5FEB\u6377\u9375"},tranbtn_offset_x:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Button Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbtn_offset_y:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Button Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},tranbox_offset_x:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Box Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbox_offset_y:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Box Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},translated_text:{zh:"\u8BD1\u6587",en:"Translated Text",zh_TW:"\u8B6F\u6587"},original_text:{zh:"\u539F\u6587",en:"Original Text",zh_TW:"\u539F\u6587"},favorite_words:{zh:"\u6536\u85CF\u8BCD\u6C47",en:"Favorite Words",zh_TW:"\u6536\u85CF\u8A5E\u5F59"},touch_setting:{zh:"\u89E6\u5C4F\u8BBE\u7F6E",en:"Touch Setting",zh_TW:"\u89F8\u63A7\u8A2D\u5B9A"},touch_translate_shortcut:{zh:"\u89E6\u5C4F\u7FFB\u8BD1\u5FEB\u6377\u65B9\u5F0F (\u652F\u6301\u591A\u9009)",en:"Touch Translate Shortcut (multiple supported)",zh_TW:"\u89F8\u63A7\u7FFB\u8B6F\u6377\u5F91 (\u652F\u63F4\u591A\u9078)"},touch_tap_0:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},touch_tap_2:{zh:"\u53CC\u6307\u8F7B\u89E6",en:"Two finger tap",zh_TW:"\u96D9\u6307\u8F15\u89F8"},touch_tap_3:{zh:"\u4E09\u6307\u8F7B\u89E6",en:"Three finger tap",zh_TW:"\u4E09\u6307\u8F15\u89F8"},touch_tap_4:{zh:"\u56DB\u6307\u8F7B\u89E6",en:"Four finger tap",zh_TW:"\u56DB\u6307\u8F15\u89F8"},touch_tap_5:{zh:"\u5355\u6307\u53CC\u51FB",en:"Double-click",zh_TW:"\u55AE\u6307\u96D9\u64CA"},touch_tap_6:{zh:"\u5355\u6307\u4E09\u51FB",en:"Triple-click",zh_TW:"\u55AE\u6307\u4E09\u64CA"},touch_tap_7:{zh:"\u53CC\u6307\u53CC\u51FB",en:"Two-finger double-click",zh_TW:"\u96D9\u6307\u96D9\u64CA"},translate_blacklist:{zh:"\u7981\u7528\u7FFB\u8BD1\u540D\u5355",en:"Translate Blacklist",zh_TW:"\u505C\u7528\u7FFB\u8B6F\u540D\u55AE"},disabled_orilist:{zh:"\u7981\u7528Origin\u540D\u5355",en:"Disabled Origin List",zh_TW:"\u505C\u7528 Origin \u540D\u55AE"},disabled_csplist:{zh:"\u7981\u7528CSP\u540D\u5355",en:"Disabled CSP List",zh_TW:"\u505C\u7528 CSP \u540D\u55AE"},disabled_csplist_helper:{zh:"3\u3001\u901A\u8FC7\u8C03\u6574CSP\u7B56\u7565\uFF0C\u4F7F\u5F97\u67D0\u4E9B\u9875\u9762\u80FD\u591F\u6CE8\u5165JS/CSS/Media\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6653\u76F8\u5173\u98CE\u9669\u3002",en:"3. By adjusting the CSP policy, some pages can inject JS/CSS/Media. Please use it with caution unless you are aware of the related risks.",zh_TW:"3. \u900F\u904E\u8ABF\u6574 CSP \u653F\u7B56\uFF0C\u4F7F\u90E8\u5206\u9801\u9762\u53EF\u6CE8\u5165 JS/CSS/Media\u3002\u8ACB\u8B39\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6089\u76F8\u95DC\u98A8\u96AA\u3002"},skip_langs:{zh:"\u4E0D\u7FFB\u8BD1\u7684\u8BED\u8A00",en:"Disable Languages",zh_TW:"\u4E0D\u7FFB\u8B6F\u7684\u8A9E\u8A00"},skip_langs_helper:{zh:"\u6B64\u529F\u80FD\u4F9D\u8D56\u51C6\u786E\u7684\u8BED\u8A00\u68C0\u6D4B\uFF0C\u5EFA\u8BAE\u542F\u7528\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B\u3002",en:"This feature relies on accurate language detection. It is recommended to enable remote language detection.",zh_TW:"\u6B64\u529F\u80FD\u4EF0\u8CF4\u6E96\u78BA\u7684\u8A9E\u8A00\u5075\u6E2C\uFF0C\u5EFA\u8B70\u555F\u7528\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C\u3002"},context_menus:{zh:"\u53F3\u952E\u83DC\u5355",en:"Context Menus",zh_TW:"\u53F3\u9375\u9078\u55AE"},hide_context_menus:{zh:"\u9690\u85CF\u53F3\u952E\u83DC\u5355",en:"Hide Context Menus",zh_TW:"\u96B1\u85CF\u53F3\u9375\u9078\u55AE"},simple_context_menus:{zh:"\u7B80\u5355\u53F3\u952E\u83DC\u5355",en:"Simple_context_menus Context Menus",zh_TW:"\u7C21\u6613\u53F3\u9375\u9078\u55AE"},secondary_context_menus:{zh:"\u4E8C\u7EA7\u53F3\u952E\u83DC\u5355",en:"Secondary Context Menus",zh_TW:"\u6B21\u7D1A\u53F3\u9375\u9078\u55AE"},mulkeys_help:{zh:"\u652F\u6301\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\uFF0C\u8F6E\u8BE2\u8C03\u7528\u3002",en:"Supports polling calls separated by newlines or English commas \",\".",zh_TW:"\u652F\u63F4\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\uFF0C\u8F2A\u8A62\u547C\u53EB\u3002"},translation_element_tag:{zh:"\u8BD1\u6587\u5143\u7D20\u6807\u7B7E",en:"Translation Element Tag",zh_TW:"\u8B6F\u6587\u5143\u7D20\u6A19\u7C64"},show_only_translations:{zh:"\u4EC5\u663E\u793A\u8BD1\u6587",en:"Show Only Translations",zh_TW:"\u50C5\u986F\u793A\u8B6F\u6587"},show_only_translations_help:{zh:"\u975E\u5B8C\u7F8E\u5B9E\u73B0\uFF0C\u67D0\u4E9B\u9875\u9762\u53EF\u80FD\u6709\u6837\u5F0F\u7B49\u95EE\u9898\u3002",en:"It is not a perfect implementation and some pages may have style issues.",zh_TW:"\u6B64\u70BA\u975E\u5B8C\u7F8E\u5BE6\u4F5C\uFF0C\u90E8\u5206\u9801\u9762\u53EF\u80FD\u51FA\u73FE\u6A23\u5F0F\u7B49\u554F\u984C\u3002"},translate_page_title:{zh:"\u662F\u5426\u7FFB\u8BD1\u9875\u9762\u6807\u9898",en:"Translate Page Title",zh_TW:"\u662F\u5426\u7FFB\u8B6F\u9801\u9762\u6A19\u984C"},more:{zh:"\u66F4\u591A",en:"More",zh_TW:"\u66F4\u591A"},less:{zh:"\u66F4\u5C11",en:"Less",zh_TW:"\u66F4\u5C11"},fixer_selector:{zh:"\u7F51\u9875\u4FEE\u590D\u9009\u62E9\u5668",en:"Fixer Selector",zh_TW:"\u7DB2\u9801\u4FEE\u5FA9\u9078\u64C7\u5668"},reg_niutrans:{zh:"\u83B7\u53D6\u5C0F\u725B\u7FFB\u8BD1\u5BC6\u94A5\u3010\u7B80\u7EA6\u7FFB\u8BD1\u4E13\u5C5E\u65B0\u7528\u6237\u6CE8\u518C\u8D60\u9001300\u4E07\u5B57\u7B26\u3011",en:"Get NiuTrans APIKey [KISS Translator Exclusive New User Registration Free 3 Million Characters]",zh_TW:"\u53D6\u5F97\u5C0F\u725B\u7FFB\u8B6F\u91D1\u9470\u3010\u7C21\u7D04\u7FFB\u8B6F\u5C08\u5C6C\u65B0\u7528\u6236\u8A3B\u518A\u8D08\u9001 300 \u842C\u5B57\u5143\u3011"},trigger_mode:{zh:"\u89E6\u53D1\u65B9\u5F0F",en:"Trigger Mode",zh_TW:"\u89F8\u767C\u65B9\u5F0F"},trigger_click:{zh:"\u70B9\u51FB\u89E6\u53D1",en:"Click Trigger",zh_TW:"\u9EDE\u64CA\u89F8\u767C"},trigger_hover:{zh:"\u9F20\u6807\u60AC\u505C\u89E6\u53D1",en:"Hover Trigger",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u89F8\u767C"},trigger_select:{zh:"\u9009\u4E2D\u89E6\u53D1",en:"Select Trigger",zh_TW:"\u9078\u53D6\u89F8\u767C"},extend_styles:{zh:"\u9644\u52A0\u6837\u5F0F",en:"Extend Styles",zh_TW:"\u9644\u52A0\u6A23\u5F0F"},custom_option:{zh:"\u81EA\u5B9A\u4E49\u9009\u9879",en:"Custom Option",zh_TW:"\u81EA\u8A02\u9078\u9805"},translate_selected_text:{zh:"\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57",en:"Translate Selected Text",zh_TW:"\u7FFB\u8B6F\u9078\u53D6\u6587\u5B57"},toggle_style:{zh:"\u5207\u6362\u6837\u5F0F",en:"Toggle Style",zh_TW:"\u5207\u63DB\u6A23\u5F0F"},open_menu:{zh:"\u6253\u5F00\u5F39\u7A97\u83DC\u5355",en:"Open Popup Menu",zh_TW:"\u958B\u555F\u5F48\u7A97\u9078\u55AE"},open_setting:{zh:"\u6253\u5F00\u8BBE\u7F6E",en:"Open Setting",zh_TW:"\u958B\u555F\u8A2D\u5B9A"},follow_selection:{zh:"\u7FFB\u8BD1\u6846\u8DDF\u968F\u9009\u4E2D\u6587\u672C",en:"Transbox Follow Selection",zh_TW:"\u7FFB\u8B6F\u6846\u8DDF\u96A8\u9078\u53D6\u6587\u5B57"},tranbox_auto_height:{zh:"\u7FFB\u8BD1\u6846\u81EA\u9002\u5E94\u9AD8\u5EA6",en:"Translation box adaptive height",zh_TW:"\u7FFB\u8B6F\u6846\u81EA\u9069\u61C9\u9AD8\u5EA6"},translate_start_hook:{zh:"\u7FFB\u8BD1\u5F00\u59CB\u94A9\u5B50\u51FD\u6570",en:"Translate Start Hook",zh_TW:"\u7FFB\u8B6F\u958B\u59CB Hook"},translate_start_hook_helper:{zh:"\u7FFB\u8BD1\u524D\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}",en:"Run before translation, input parameters are: {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}",zh_TW:"\u7FFB\u8B6F\u524D\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}"},translate_end_hook:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u94A9\u5B50\u51FD\u6570",en:"Translate End Hook",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210 Hook"},translate_end_hook_helper:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})",en:"Run when translation is complete, input parameters are: ({hostNode, parentNode, nodes, wrapperNode, innerNode})",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})"},translate_remove_hook:{zh:"\u7FFB\u8BD1\u79FB\u9664\u94A9\u5B50\u51FD\u6570",en:"Translate Removed Hook",zh_TW:"\u7FFB\u8B6F\u79FB\u9664 Hook"},translate_remove_hook_helper:{zh:"\u7FFB\u8BD1\u79FB\u9664\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A \u7FFB\u8BD1\u8282\u70B9\u3002",en:"Run when translation is removed, the input parameters are: translation node.",zh_TW:"\u79FB\u9664\u7FFB\u8B6F\u6642\u57F7\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A\u7FFB\u8B6F\u7BC0\u9EDE\u3002"},english_dict:{zh:"\u82F1\u6587\u8BCD\u5178",en:"English Dictionary",zh_TW:"\u82F1\u6587\u5B57\u5178"},english_suggest:{zh:"\u82F1\u6587\u5EFA\u8BAE",en:"English Suggest",zh_TW:"\u82F1\u6587\u5EFA\u8B70"},api_name:{zh:"\u63A5\u53E3\u540D\u79F0",en:"API Name",zh_TW:"\u4ECB\u9762\u540D\u7A31"},is_disabled:{zh:"\u662F\u5426\u7981\u7528",en:"Is Disabled",zh_TW:"\u662F\u5426\u505C\u7528"},translate_selected:{zh:"\u662F\u5426\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"If translate selected",zh_TW:"\u662F\u5426\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},use_batch_fetch:{zh:"\u662F\u5426\u805A\u5408\u53D1\u9001\u7FFB\u8BD1\u8BF7\u6C42",en:"Whether to aggregate and send translation requests",zh_TW:"\u662F\u5426\u805A\u5408\u767C\u9001\u7FFB\u8B6F\u8ACB\u6C42"},batch_interval:{zh:"\u805A\u5408\u8BF7\u6C42\u7B49\u5F85\u65F6\u95F4(100-10000)",en:"Aggregation request waiting time (100-10000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u7B49\u5F85\u6642\u9593(100-10000)"},batch_size:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6BB5\u843D\u6570(1-100)",en:"Maximum number of paragraphs in an aggregation request (1-100)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6BB5\u843D\u6578(1-100)"},batch_length:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6587\u672C\u957F\u5EA6(1000-100000)",en:"Maximum text length for aggregation requests (1000-100000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6587\u5B57\u9577\u5EA6(1000-100000)"},use_context:{zh:"\u662F\u5426\u542F\u7528\u667A\u80FD\u4E0A\u4E0B\u6587",en:"Whether to enable AI context",zh_TW:"\u662F\u5426\u555F\u7528\u667A\u6167\u4E0A\u4E0B\u6587"},context_size:{zh:"\u4E0A\u4E0B\u6587\u4F1A\u8BDD\u6570\u91CF(1-20)",en:"Number of context sessions(1-20)",zh_TW:"\u4E0A\u4E0B\u6587\u6703\u8A71\u6578\u91CF(1-20)"},auto_scan_page:{zh:"\u81EA\u52A8\u626B\u63CF\u9875\u9762",en:"Auto scan page",zh_TW:"\u81EA\u52D5\u6383\u63CF\u9801\u9762"},has_rich_text:{zh:"\u542F\u7528\u5BCC\u6587\u672C\u7FFB\u8BD1",en:"Enable rich text translation",zh_TW:"\u555F\u7528\u5BCC\u6587\u672C\u7FFB\u8B6F"},has_shadowroot:{zh:"\u626B\u63CFShadowroot",en:"Scan Shadowroot",zh_TW:"\u6383\u63CFShadowroot"},mousehover_translate:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover Translation",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},use_mousehover_translation:{zh:"\u542F\u7528\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Enable mouseover translation",zh_TW:"\u555F\u7528\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},selected_translation_alert:{zh:"\u5212\u8BCD\u7FFB\u8BD1\u7684\u5F00\u542F\u548C\u5173\u95ED\u8BF7\u5230\u201C\u89C4\u5219\u8BBE\u7F6E\u201D\u91CC\u9762\u8BBE\u7F6E\u3002",en:"To turn selected translation on or off, please go to \"Rule Settings\".",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F\u7684\u958B\u555F\u548C\u95DC\u9589\u8ACB\u5230\u300C\u898F\u5247\u8A2D\u5B9A\u300D\u88E1\u9762\u8A2D\u5B9A\u3002"},mousehover_key_help:{zh:"\u5F53\u5FEB\u6377\u952E\u7F6E\u7A7A\u65F6\u8868\u793A\u9F20\u6807\u60AC\u505C\u76F4\u63A5\u7FFB\u8BD1",en:"When the shortcut key is empty, it means that the mouse hovers to translate directly",zh_TW:"\u7576\u5FEB\u6377\u9375\u7F6E\u7A7A\u6642\u8868\u793A\u6ED1\u9F20\u61F8\u505C\u76F4\u63A5\u7FFB\u8B6F"},autoscan_alt:{zh:"\u81EA\u52A8\u626B\u63CF",en:"Auto Scan",zh_TW:"\u81EA\u52D5\u6383\u63CF"},shadowroot_alt:{zh:"ShadowRoot",en:"ShadowRoot",zh_TW:"ShadowRoot"},richtext_alt:{zh:"\u4FDD\u7559\u5BCC\u6587\u672C",en:"Rich Text",zh_TW:"\u4FDD\u7559\u5BCC\u6587\u672C"},transonly_alt:{zh:"\u9690\u85CF\u539F\u6587",en:"Hide Original",zh_TW:"\u96B1\u85CF\u539F\u6587"},confirm_title:{zh:"\u786E\u8BA4",en:"Confirm",zh_TW:"\u78BA\u8A8D"},confirm_message:{zh:"\u786E\u5B9A\u64CD\u4F5C\u5417\uFF1F",en:"Are you sure you want to proceed?",zh_TW:"\u78BA\u5B9A\u64CD\u4F5C\u55CE\uFF1F"},confirm_action:{zh:"\u786E\u5B9A",en:"Confirm",zh_TW:"\u78BA\u5B9A"},cancel_action:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},pls_press_shortcut:{zh:"\u8BF7\u6309\u4E0B\u5FEB\u6377\u952E\u7EC4\u5408",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},load_setting_err:{zh:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},translation_style:{zh:"\u7FFB\u8BD1\u98CE\u683C",en:"Translation style",zh_TW:"\u7FFB\u8B6F\u98A8\u683C"},placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},tag_name:{zh:"\u5360\u4F4D\u6807\u7B7E\u540D",en:"Placeholder tag name",zh_TW:"\u4F54\u4F4D\u6A19\u540D"},system_prompt_helper:{zh:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9ED8\u8BA4Prompt\u7684\u60C5\u51B5\u4E0B\uFF0C\u8BF7\u52FF\u968F\u610F\u4FEE\u6539\uFF0C\u5426\u5219\u53EF\u80FD\u65E0\u6CD5\u5DE5\u4F5C\u3002",en:"Do not modify the default prompt without fully understanding it, otherwise it may not work.",zh_TW:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9810\u8A2DPrompt\u7684\u60C5\u6CC1\u4E0B\uFF0C\u8ACB\u52FF\u96A8\u610F\u4FEE\u6539\uFF0C\u5426\u5247\u53EF\u80FD\u7121\u6CD5\u904B\u4F5C\u3002"},if_pre_init:{zh:"\u662F\u5426\u9884\u521D\u59CB\u5316",en:"Whether to pre-initialize",zh_TW:"\u662F\u5426\u9810\u521D\u59CB\u5316"},export_old:{zh:"\u5BFC\u51FA\u65E7\u7248",en:"Export old version",zh_TW:"\u532F\u51FA\u820A\u7248"},favorite_words_helper:{zh:"\u5BFC\u5165\u8BCD\u6C47\u8BF7\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u4E2A\u5355\u8BCD\u3002",en:"To import vocabulary, please use a txt file with one word per line.",zh_TW:"\u532F\u5165\u8A5E\u5F59\u8ACB\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u500B\u55AE\u5B57\u3002"},btn_tip_click_away:{zh:"\u5931\u7126\u9690\u85CF/\u663E\u793A",en:"Loss of focus hide/show",zh_TW:"\u5931\u7126\u96B1\u85CF/\u986F\u793A"},btn_tip_follow_selection:{zh:"\u8DDF\u968F/\u56FA\u5B9A\u6A21\u5F0F",en:"Follow/Fixed Mode",zh_TW:"\u8DDF\u96A8/\u56FA\u5B9A\u6A21\u5F0F"},btn_tip_simple_style:{zh:"\u8FF7\u4F60/\u5E38\u89C4\u6A21\u5F0F",en:"Mini/Regular Mode",zh_TW:"\u8FF7\u4F60/\u5E38\u898F\u6A21\u5F0F"},api_placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},api_placetag:{zh:"\u5360\u4F4D\u6807\u7B7E",en:"Placeholder tags",zh_TW:"\u4F54\u4F4D\u6A19"},detected_lang:{zh:"\u8BED\u8A00\u68C0\u6D4B",en:"Language detection",zh_TW:"\u8A9E\u8A00\u5075\u6E2C"},detected_result:{zh:"\u68C0\u6D4B\u7ED3\u679C",en:"Detect result",zh_TW:"\u6AA2\u6E2C\u7D50\u679C"},subtitle_translate:{zh:"\u5B57\u5E55\u7FFB\u8BD1",en:"Subtitle translate",zh_TW:"\u5B57\u5E55\u7FFB\u8B6F"},toggle_subtitle_translate:{zh:"\u542F\u7528\u5B57\u5E55\u7FFB\u8BD1",en:"Enable subtitle translation",zh_TW:"\u555F\u7528\u5B57\u5E55\u7FFB\u8B6F"},is_bilingual_view:{zh:"\u53CC\u8BED\u663E\u793A",en:"Enable bilingual display",zh_TW:"\u96D9\u8A9E\u986F\u793A"},is_skip_ad:{zh:"\u662F\u5426\u5FEB\u8FDB\u5E7F\u544A",en:"Should I fast forward to the ad?",zh_TW:"\u662F\u5426\u5FEB\u8F49\u5EE3\u544A"},background_styles:{zh:"\u80CC\u666F\u6837\u5F0F",en:"DBackground Style",zh_TW:"\u80CC\u666F\u6A23\u5F0F"},origin_styles:{zh:"\u539F\u6587\u6837\u5F0F",en:"Original style",zh_TW:"\u539F\u6587\u6A23\u5F0F"},translation_styles:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Translation style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},ai_segmentation:{zh:"AI\u667A\u80FD\u65AD\u53E5",en:"AI intelligent punctuation",zh_TW:"AI\u667A\u6167\u65B7\u53E5"},ai_chunk_length:{zh:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)",en:"AI processing chunk length(200-20000)",zh_TW:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)"},subtitle_helper_1:{zh:"1\u3001\u76EE\u524D\u4EC5\u652F\u6301Youtube\u684C\u9762\u7F51\u7AD9\u3002",en:"1. Currently only supports Youtube desktop website.",zh_TW:"1.\u76EE\u524D\u50C5\u652F\u63F4Youtube\u684C\u9762\u7DB2\u7AD9\uFF0C\u4E14\u50C5\u652F\u63F4\u700F\u89BD\u5668\u64F4\u5145\u529F\u80FD\u3002"},subtitle_helper_2:{zh:"2\u3001\u63D2\u4EF6\u5185\u7F6E\u57FA\u7840\u7684\u5B57\u5E55\u5408\u5E76\u3001\u65AD\u53E5\u7B97\u6CD5\uFF0C\u53EF\u6EE1\u8DB3\u5927\u90E8\u5206\u60C5\u51B5\u3002",en:"2. The plug-in has built-in basic subtitle merging and sentence segmentation algorithms, which can meet most situations.",zh_TW:"2.\u63D2\u4EF6\u5167\u5EFA\u57FA\u790E\u7684\u5B57\u5E55\u5408\u4F75\u3001\u65B7\u53E5\u6F14\u7B97\u6CD5\uFF0C\u53EF\u6EFF\u8DB3\u5927\u90E8\u5206\u60C5\u6CC1\u3002"},subtitle_helper_3:{zh:"3\u3001\u4EA6\u53EF\u4EE5\u542F\u7528AI\u667A\u80FD\u65AD\u53E5\uFF0C\u4F46\u9700\u8003\u8651\u5207\u5272\u957F\u5EA6\u53CAAI\u63A5\u53E3\u80FD\u529B\uFF0C\u53EF\u80FD\u5904\u7406\u65F6\u95F4\u4F1A\u5F88\u957F\uFF0C\u751A\u81F3\u5904\u7406\u5931\u8D25\uFF0C\u5BFC\u81F4\u65E0\u6CD5\u770B\u5230\u5B57\u5E55\u3002",en:"3. You can also enable AI intelligent segmentation, but you need to consider the segmentation length and AI interface capabilities. The processing time may be very long or even fail, resulting in the inability to see subtitles.",zh_TW:"3.\u4EA6\u53EF\u555F\u7528AI\u667A\u80FD\u65B7\u53E5\uFF0C\u4F46\u9700\u8003\u616E\u5207\u5272\u9577\u5EA6\u53CAAI\u4ECB\u9762\u80FD\u529B\uFF0C\u53EF\u80FD\u8655\u7406\u6642\u9593\u6703\u5F88\u9577\uFF0C\u751A\u81F3\u8655\u7406\u5931\u6557\uFF0C\u5C0E\u81F4\u7121\u6CD5\u770B\u5230\u5B57\u5E55\u3002"},default_styles_example:{zh:"\u9ED8\u8BA4\u6837\u5F0F\u53C2\u8003\uFF1A",en:"Default styles reference:",zh_TW:"\u8A8D\u6A23\u5F0F\u53C3\u8003\uFF1A"},subtitle_load_succeed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01",en:"Bilingual subtitles loaded successfully!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01"},subtitle_load_failed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01",en:"Failed to load bilingual subtitles!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01"},try_get_subtitle_data:{zh:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019...",en:"Trying to get subtitle data, please wait...",zh_TW:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019..."},subtitle_data_processing:{zh:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D...",en:"Subtitle data processing...",zh_TW:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D..."},starting_to_process_subtitle:{zh:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E...",en:"Starting to process subtitle data...",zh_TW:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E..."},subtitle_data_is_ready:{zh:"\u5B57\u5E55\u6570\u636E\u5DF2\u51C6\u5907\u5C31\u7EEA\uFF0C\u8BF7\u70B9\u51FBKT\u6309\u94AE\u52A0\u8F7D",en:"The subtitle data is ready, please click the KT button to load it",zh_TW:"\u5B57\u5E55\u8CC7\u6599\u5DF2\u6E96\u5099\u5C31\u7DD2\uFF0C\u8ACB\u9EDE\u64CAKT\u6309\u9215\u52A0\u8F09"},log_level:{zh:"\u65E5\u5FD7\u7EA7\u522B",en:"Log Level",zh_TW:"\u65E5\u8A8C\u7B49\u7D1A"},goto_custom_api_example:{zh:"\u70B9\u51FB\u67E5\u770B\u3010\u81EA\u5B9A\u4E49\u63A5\u53E3\u793A\u4F8B\u3011",en:"Click to view [Custom Interface Example]",zh_TW:"\u9EDE\u9078\u67E5\u770B\u3010\u81EA\u8A02\u4ECB\u9762\u7BC4\u4F8B\u3011"},split_paragraph:{zh:"\u5207\u5206\u957F\u6BB5\u843D",en:"Split long paragraph",zh_TW:"\u5207\u5206\u9577\u6BB5\u843D"},split_length:{zh:"\u5207\u5206\u957F\u5EA6 (0-10000)",en:"Segmentation length(0-10000)",zh_TW:"\u5207\u5206\u9577\u5EA6(0-10000)"},highlight_words:{zh:"\u9AD8\u4EAE\u6536\u85CF\u8BCD\u6C47",en:"Highlight favorite words",zh_TW:"\u9AD8\u4EAE\u6536\u85CF\u8A5E\u5F59"},split_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},split_textlength:{zh:"\u6309\u7167\u957F\u5EA6\u5207\u5206",en:"Split by length",zh_TW:"\u4F9D\u9577\u5EA6\u5207\u5206"},split_punctuation:{zh:"\u6309\u7167\u53E5\u5B50\u5207\u5206",en:"Split by sentence",zh_TW:"\u6309\u7167\u53E5\u5B50\u5207\u5206"},highlight_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},highlight_beforetrans:{zh:"\u7FFB\u8BD1\u524D\u9AD8\u4EAE",en:"Highlight before translation",zh_TW:"\u7FFB\u8B6F\u524D\u9AD8\u4EAE"},highlight_aftertrans:{zh:"\u7FFB\u8BD1\u540E\u9AD8\u4EAE",en:"Highlight after translation",zh_TW:"\u7FFB\u8B6F\u5F8C\u9AD8\u4EAE"},pagescroll_root_margin:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u63D0\u524D\u89E6\u53D1 (0-10000px)",en:"Early triggering of scroll loading (0-10000px)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u63D0\u524D\u89F8\u767C (0-10000px)"}};const newI18n=lang=>key=>{var _I18N$key;return((_I18N$key=I18N[key])===null||_I18N$key===void 0?void 0:_I18N$key[lang])||"";}; ;// CONCATENATED MODULE: ./src/config/storage.js const KV_RULES_KEY="kiss-rules_v".concat(APP_VERSION[0],".json");const storage_KV_WORDS_KEY="kiss-words.json";const storage_KV_RULES_SHARE_KEY="kiss-rules-share_v".concat(APP_VERSION[0],".json");const storage_KV_SETTING_KEY="kiss-setting_v".concat(APP_VERSION[0],".json");const KV_SALT_SYNC="KISS-Translator-SYNC";const storage_KV_SALT_SHARE="KISS-Translator-SHARE";const STOKEY_MSAUTH="".concat(APP_NAME,"_msauth");const storage_STOKEY_BDAUTH="".concat(APP_NAME,"_bdauth");const storage_STOKEY_SETTING_OLD="".concat(APP_NAME,"_setting");const storage_STOKEY_RULES_OLD="".concat(APP_NAME,"_rules");const storage_STOKEY_SETTING="".concat(APP_NAME,"_setting_v").concat(APP_VERSION[0]);const storage_STOKEY_RULES="".concat(APP_NAME,"_rules_v").concat(APP_VERSION[0]);const storage_STOKEY_WORDS="".concat(APP_NAME,"_words");const storage_STOKEY_SYNC="".concat(APP_NAME,"_sync");const storage_STOKEY_FAB="".concat(APP_NAME,"_fab");const STOKEY_TRANBOX="".concat(APP_NAME,"_tranbox");const storage_STOKEY_RULESCACHE_PREFIX="".concat(APP_NAME,"_rulescache_");const CACHE_NAME="".concat(APP_NAME,"_cache");const DEFAULT_CACHE_TIMEOUT=3600*24*7;// 缓存超时时间(7天) ;// CONCATENATED MODULE: ./src/config/url.js @@ -29981,7 +29985,7 @@ return putHttpCache({input,init,data});}; * @param {*} init * @returns */const fetchGM=async function(input){let{method="GET",headers,body,timeout}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return new Promise((resolve,reject)=>{GM.xmlHttpRequest({method,url:input,headers,data:body,// withCredentials: true, -timeout,onload:_ref=>{let{response,responseHeaders,status,statusText}=_ref;const headers={};responseHeaders.split("\n").forEach(line=>{const[name,value]=line.split(":").map(item=>item.trim());if(name&&value){headers[name]=value;}});resolve({body:response,headers,status,statusText});},onerror:reject});});};/** +timeout,onload:_ref=>{let{response,responseHeaders,status,statusText}=_ref;const headers={};responseHeaders.split("\n").forEach(line=>{const[name,value]=line.split(":").map(item=>item.trim());if(name&&value){headers[name]=value;}});resolve({body:response,headers,status,statusText});},onerror:reject,onabort:()=>{reject(new Error("GM request onabort."));},ontimeout:()=>{reject(new Error("GM request timeout."));}});});};/** * 发起请求 * @param {*} input * @param {*} init @@ -30012,7 +30016,7 @@ return fnPolyfill({fn:fetchHandle,input,init,opts});}; const MSG_GM_xmlHttpRequest="xmlHttpRequest";const MSG_GM_setValue="setValue";const MSG_GM_getValue="getValue";const MSG_GM_deleteValue="deleteValue";const MSG_GM_info="info";/** * 注入页面的脚本,请求并接受GM接口信息 * @param {*} param0 - */const injectScript=ping=>{window.APP_INFO={name:"KISS Translator",version:"2.0.4",eventName:ping};};/** + */const injectScript=ping=>{window.APP_INFO={name:"KISS Translator",version:"2.0.5",eventName:ping};};/** * 适配GM脚本 */const adaptScript=ping=>{const promiseGM=function(action,args){let timeout=arguments.length>2&&arguments[2]!==undefined?arguments[2]:5000;return new Promise((resolve,reject)=>{const pong=genEventName();const handleEvent=e=>{window.removeEventListener(pong,handleEvent);const{data,error}=e.detail;if(error){reject(new Error(error));}else{resolve(data);}};window.addEventListener(pong,handleEvent);window.dispatchEvent(new CustomEvent(ping,{detail:{action,args,pong}}));setTimeout(()=>{window.removeEventListener(pong,handleEvent);reject(new Error("timeout"));},timeout);});};window.KISS_GM={fetch:(input,init)=>promiseGM(MSG_GM_xmlHttpRequest,{input,init}),setValue:(key,val)=>promiseGM(MSG_GM_setValue,{key,val}),getValue:key=>promiseGM(MSG_GM_getValue,{key}),deleteValue:key=>promiseGM(MSG_GM_deleteValue,{key}),getInfo:async()=>{if(!window.GM_info){window.GM_info=await promiseGM(MSG_GM_info);}return window.GM_info;}};};/** * 监听并回应页面对GM接口的请求 @@ -30562,22 +30566,14 @@ const interpreter=new (sval_default())({// ECMA Version of the code ecmaVer:"latest",// Code source type // "script" or "module" sourceType:"script",// Whether the code runs in a sandbox -sandBox:true});/* harmony default export */ const libs_interpreter = (interpreter); +sandBox:true}); ;// CONCATENATED MODULE: ./src/apis/history.js const historyMap=new Map();const MsgHistory=function(){let maxSize=arguments.length>0&&arguments[0]!==undefined?arguments[0]:DEFAULT_CONTEXT_SIZE;const messages=[];const add=function(){for(var _len=arguments.length,msgs=new Array(_len),_key=0;_key<_len;_key++){msgs[_key]=arguments[_key];}messages.push(...msgs.filter(Boolean));const extra=messages.length-maxSize;if(extra>0){messages.splice(0,extra);}};const getAll=()=>{return[...messages];};const clear=()=>{messages.length=0;};return{add,getAll,clear};};const getMsgHistory=(apiSlug,maxSize)=>{if(historyMap.has(apiSlug)){return historyMap.get(apiSlug);}const msgHistory=MsgHistory(maxSize);historyMap.set(apiSlug,msgHistory);return msgHistory;}; ;// CONCATENATED MODULE: ./src/subtitle/vtt.js function millisecondsStringToNumber(msString){const cleanString=msString.trim();const milliseconds=parseInt(cleanString,10);if(isNaN(milliseconds)){return 0;}return milliseconds;}function parseBilingualVtt(vttText){const cleanText=vttText.replace(/^\uFEFF/,"").trim();const cues=cleanText.split(/\n\n+/);const result=[];for(const cue of cues){if(!cue.includes("-->"))continue;const lines=cue.split("\n");const timestampLineIndex=lines.findIndex(line=>line.includes("-->"));if(timestampLineIndex===-1)continue;const[startTimeString,endTimeString]=lines[timestampLineIndex].split(" --> ");const textLines=lines.slice(timestampLineIndex+1);if(startTimeString&&endTimeString&&textLines.length>0){const originalText=textLines[0].trim();const translatedText=(textLines[1]||"").trim();result.push({start:millisecondsStringToNumber(startTimeString),end:millisecondsStringToNumber(endTimeString),text:originalText,translation:translatedText});}}return result;} ;// CONCATENATED MODULE: ./src/apis/trans.js const keyMap=new Map();const urlMap=new Map();// 轮询key/url -const keyPick=function(apiSlug){var _cacheMap$get;let key=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";let cacheMap=arguments.length>2?arguments[2]:undefined;const keys=key.split(/\n|,/).map(item=>item.trim()).filter(Boolean);if(keys.length===0){return"";}const preIndex=(_cacheMap$get=cacheMap.get(apiSlug))!==null&&_cacheMap$get!==void 0?_cacheMap$get:-1;const curIndex=(preIndex+1)%keys.length;cacheMap.set(apiSlug,curIndex);return keys[curIndex];};const genSystemPrompt=_ref=>{let{systemPrompt,from,to}=_ref;return systemPrompt.replaceAll(INPUT_PLACE_FROM,from).replaceAll(INPUT_PLACE_TO,to);};const genUserPrompt=_ref2=>{let{// userPrompt, -tone,glossary={},// from, -to,texts,docInfo}=_ref2;const prompt=JSON.stringify({targetLanguage:to,title:docInfo.title,description:docInfo.description,segments:texts.map((text,i)=>({id:i,text})),glossary,tone});// if (userPrompt.includes(INPUT_PLACE_TEXT)) { -// return userPrompt -// .replaceAll(INPUT_PLACE_FROM, from) -// .replaceAll(INPUT_PLACE_TO, to) -// .replaceAll(INPUT_PLACE_TEXT, prompt); -// } -return prompt;};const parseAIRes=raw=>{if(!raw){return[];}try{const jsonString=extractJson(raw);if(!jsonString)return[];const data=JSON.parse(jsonString);if(Array.isArray(data.translations)){// todo: 考虑序号id可能会打乱 +const keyPick=function(apiSlug){var _cacheMap$get;let key=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";let cacheMap=arguments.length>2?arguments[2]:undefined;const keys=key.split(/\n|,/).map(item=>item.trim()).filter(Boolean);if(keys.length===0){return"";}const preIndex=(_cacheMap$get=cacheMap.get(apiSlug))!==null&&_cacheMap$get!==void 0?_cacheMap$get:-1;const curIndex=(preIndex+1)%keys.length;cacheMap.set(apiSlug,curIndex);return keys[curIndex];};const genSystemPrompt=_ref=>{let{systemPrompt,from,to}=_ref;return systemPrompt.replaceAll(INPUT_PLACE_FROM,from).replaceAll(INPUT_PLACE_TO,to);};const genUserPrompt=_ref2=>{let{nobatchUserPrompt,useBatchFetch,tone,glossary={},from,to,texts,docInfo}=_ref2;if(useBatchFetch){return JSON.stringify({targetLanguage:to,title:docInfo.title,description:docInfo.description,segments:texts.map((text,i)=>({id:i,text})),glossary,tone});}return nobatchUserPrompt.replaceAll(INPUT_PLACE_FROM,from).replaceAll(INPUT_PLACE_TO,to).replaceAll(INPUT_PLACE_TEXT,texts[0]);};const parseAIRes=function(raw){let useBatchFetch=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(!raw){return[];}if(!useBatchFetch){return[[raw]];}try{const jsonString=extractJson(raw);if(!jsonString)return[];const data=JSON.parse(jsonString);if(Array.isArray(data.translations)){// todo: 考虑序号id可能会打乱 return data.translations.map(item=>{var _item$text,_item$sourceLanguage;return[(_item$text=item===null||item===void 0?void 0:item.text)!==null&&_item$text!==void 0?_item$text:"",(_item$sourceLanguage=item===null||item===void 0?void 0:item.sourceLanguage)!==null&&_item$sourceLanguage!==void 0?_item$sourceLanguage:""];});}}catch(err){log_kissLog("parseAIRes",err);}return[];};const parseSTRes=raw=>{if(!raw){return[];}try{// const jsonString = extractJson(raw); // const data = JSON.parse(jsonString); const data=parseBilingualVtt(raw);if(Array.isArray(data)){return data;}}catch(err){log_kissLog("parseAIRes: subtitle",err);}return[];};const genGoogle=_ref3=>{let{texts,from,to,url,key}=_ref3;const params=query_string.stringify({client:"gtx",dt:"t",dj:1,ie:"UTF-8",sl:from,tl:to,q:texts.join(" ")});url="".concat(url,"?").concat(params);const headers={"Content-type":"application/json"};if(key){headers.Authorization="Bearer ".concat(key);}return{url,headers,method:"GET"};};const genGoogle2=_ref4=>{let{texts,from,to,url,key}=_ref4;const body=[[texts,from,to],"wt_lib"];const headers={"Content-Type":"application/json+protobuf","X-Goog-API-Key":key};return{url,body,headers};};const genMicrosoft=_ref5=>{let{texts,from,to,token}=_ref5;const params=query_string.stringify({from,to,"api-version":"3.0"});const url="https://api-edge.cognitive.microsofttranslator.com/translate?".concat(params);const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(token)};const body=texts.map(text=>({Text:text}));return{url,body,headers};};const genAzureAI=_ref6=>{let{texts,from,to,url,key,region}=_ref6;const params=query_string.stringify({from,to});url=url.endsWith("&")?"".concat(url).concat(params):"".concat(url,"&").concat(params);const headers={"Content-type":"application/json","Ocp-Apim-Subscription-Key":key,"Ocp-Apim-Subscription-Region":region};const body=texts.map(text=>({Text:text}));return{url,body,headers};};const genDeepl=_ref7=>{let{texts,from,to,url,key}=_ref7;const body={text:texts,target_lang:to,source_lang:from// split_sentences: "0", @@ -30593,20 +30589,30 @@ contents:[{role:"model",parts:[{text:systemPrompt}]},...hisMsgs,userMsg],generat },// thinkingConfig: { // thinkingBudget: 0, // }, -safetySettings:[{category:"HARM_CATEGORY_HARASSMENT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_HATE_SPEECH",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_SEXUALLY_EXPLICIT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_DANGEROUS_CONTENT",threshold:"BLOCK_NONE"}]};const headers={"Content-type":"application/json"};return{url,body,headers,userMsg};};const genGemini2=_ref14=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref14;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genClaude=_ref15=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref15;const userMsg={role:"user",content:userPrompt};const body={model,system:systemPrompt,messages:[...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json","anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true","x-api-key":key};return{url,body,headers,userMsg};};const genOpenRouter=_ref16=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref16;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genOllama=_ref17=>{let{think,url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref17;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens,think,stream:false};const headers={"Content-type":"application/json"};if(key){headers.Authorization="Bearer ".concat(key);}return{url,body,headers,userMsg};};const genCloudflareAI=_ref18=>{let{texts,from,to,url,key}=_ref18;const body={text:texts.join(" "),source_lang:from,target_lang:to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genCustom=_ref19=>{let{texts,from,to,url,key}=_ref19;const body={texts,from,to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genReqFuncs={[OPT_TRANS_GOOGLE]:genGoogle,[OPT_TRANS_GOOGLE_2]:genGoogle2,[OPT_TRANS_MICROSOFT]:genMicrosoft,[OPT_TRANS_AZUREAI]:genAzureAI,[OPT_TRANS_DEEPL]:genDeepl,[OPT_TRANS_DEEPLFREE]:genDeeplFree,[OPT_TRANS_DEEPLX]:genDeeplX,[OPT_TRANS_NIUTRANS]:genNiuTrans,[OPT_TRANS_BAIDU]:genBaidu,[OPT_TRANS_TENCENT]:genTencent,[OPT_TRANS_VOLCENGINE]:genVolcengine,[OPT_TRANS_OPENAI]:genOpenAI,[OPT_TRANS_GEMINI]:genGemini,[OPT_TRANS_GEMINI_2]:genGemini2,[OPT_TRANS_CLAUDE]:genClaude,[OPT_TRANS_CLOUDFLAREAI]:genCloudflareAI,[OPT_TRANS_OLLAMA]:genOllama,[OPT_TRANS_OPENROUTER]:genOpenRouter,[OPT_TRANS_CUSTOMIZE]:genCustom};const genInit=_ref20=>{let{url="",body=null,headers={},userMsg=null,method="POST"}=_ref20;if(!url){throw new Error("genInit: url is empty");}const init={method,headers};if(method!=="GET"&&method!=="HEAD"&&body){var _body$params;let payload=JSON.stringify(body);const id=body===null||body===void 0?void 0:(_body$params=body.params)===null||_body$params===void 0?void 0:_body$params.id;if(id){payload=payload.replace('method":"',(id+3)%13===0||(id+5)%29===0?'method" : "':'method": "');}Object.assign(init,{body:payload});}return[url,init,userMsg];};/** +safetySettings:[{category:"HARM_CATEGORY_HARASSMENT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_HATE_SPEECH",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_SEXUALLY_EXPLICIT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_DANGEROUS_CONTENT",threshold:"BLOCK_NONE"}]};const headers={"Content-type":"application/json"};return{url,body,headers,userMsg};};const genGemini2=_ref14=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref14;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genClaude=_ref15=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref15;const userMsg={role:"user",content:userPrompt};const body={model,system:systemPrompt,messages:[...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json","anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true","x-api-key":key};return{url,body,headers,userMsg};};const genOpenRouter=_ref16=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref16;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genOllama=_ref17=>{let{// think, +url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref17;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens,// think, +stream:false};const headers={"Content-type":"application/json"};if(key){headers.Authorization="Bearer ".concat(key);}return{url,body,headers,userMsg};};const genCloudflareAI=_ref18=>{let{texts,from,to,url,key}=_ref18;const body={text:texts.join(" "),source_lang:from,target_lang:to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genCustom=_ref19=>{let{texts,from,to,url,key}=_ref19;const body={texts,from,to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genReqFuncs={[OPT_TRANS_GOOGLE]:genGoogle,[OPT_TRANS_GOOGLE_2]:genGoogle2,[OPT_TRANS_MICROSOFT]:genMicrosoft,[OPT_TRANS_AZUREAI]:genAzureAI,[OPT_TRANS_DEEPL]:genDeepl,[OPT_TRANS_DEEPLFREE]:genDeeplFree,[OPT_TRANS_DEEPLX]:genDeeplX,[OPT_TRANS_NIUTRANS]:genNiuTrans,[OPT_TRANS_BAIDU]:genBaidu,[OPT_TRANS_TENCENT]:genTencent,[OPT_TRANS_VOLCENGINE]:genVolcengine,[OPT_TRANS_OPENAI]:genOpenAI,[OPT_TRANS_GEMINI]:genGemini,[OPT_TRANS_GEMINI_2]:genGemini2,[OPT_TRANS_CLAUDE]:genClaude,[OPT_TRANS_CLOUDFLAREAI]:genCloudflareAI,[OPT_TRANS_OLLAMA]:genOllama,[OPT_TRANS_OPENROUTER]:genOpenRouter,[OPT_TRANS_CUSTOMIZE]:genCustom};const genInit=_ref20=>{let{url="",body=null,headers={},userMsg=null,method="POST"}=_ref20;if(!url){throw new Error("genInit: url is empty");}const init={method,headers};if(method!=="GET"&&method!=="HEAD"&&body){var _body$params;let payload=JSON.stringify(body);const id=body===null||body===void 0?void 0:(_body$params=body.params)===null||_body$params===void 0?void 0:_body$params.id;if(id){payload=payload.replace('method":"',(id+3)%13===0||(id+5)%29===0?'method" : "':'method": "');}Object.assign(init,{body:payload});}return[url,init,userMsg];};/** * 构造翻译接口请求参数 * @param {*} * @returns - */const genTransReq=async _ref21=>{let{reqHook,...args}=_ref21;const{apiType,apiSlug,key,systemPrompt,userPrompt,from,to,texts,docInfo,glossary,customHeader,customBody,events}=args;if(API_SPE_TYPES.mulkeys.has(apiType)){args.key=keyPick(apiSlug,key,keyMap);}if(apiType===OPT_TRANS_DEEPLX){args.url=keyPick(apiSlug,args.url,urlMap);}if(API_SPE_TYPES.ai.has(apiType)){args.systemPrompt=genSystemPrompt({systemPrompt,from,to});args.userPrompt=!!events?JSON.stringify(events):genUserPrompt({userPrompt,from,to,texts,docInfo,glossary});}const{url="",body=null,headers={},userMsg=null,method="POST"}=genReqFuncs[apiType](args);// 合并用户自定义headers和body + */const genTransReq=async _ref21=>{let{reqHook,...args}=_ref21;const{apiType,apiSlug,key,systemPrompt,// userPrompt, +nobatchPrompt=defaultNobatchPrompt,nobatchUserPrompt=defaultNobatchUserPrompt,useBatchFetch,from,to,texts,docInfo,glossary,customHeader,customBody,events}=args;if(API_SPE_TYPES.mulkeys.has(apiType)){args.key=keyPick(apiSlug,key,keyMap);}if(apiType===OPT_TRANS_DEEPLX){args.url=keyPick(apiSlug,args.url,urlMap);}if(API_SPE_TYPES.ai.has(apiType)){args.systemPrompt=genSystemPrompt({systemPrompt:useBatchFetch?systemPrompt:nobatchPrompt,from,to});args.userPrompt=!!events?JSON.stringify(events):genUserPrompt({nobatchUserPrompt,useBatchFetch,from,to,texts,docInfo,glossary});}const{url="",body=null,headers={},userMsg=null,method="POST"}=genReqFuncs[apiType](args);// 合并用户自定义headers和body if(customHeader!==null&&customHeader!==void 0&&customHeader.trim()){Object.assign(headers,parseJsonObj(customHeader));}if(customBody!==null&&customBody!==void 0&&customBody.trim()){Object.assign(body,parseJsonObj(customBody));}// 执行 request hook -if(reqHook!==null&&reqHook!==void 0&&reqHook.trim()&&!events){try{libs_interpreter.run("exports.reqHook = ".concat(reqHook));const hookResult=await libs_interpreter.exports.reqHook({...args,defaultSystemPrompt: defaultSystemPrompt,defaultSubtitlePrompt: defaultSubtitlePrompt},{url,body,headers,userMsg,method});if(hookResult&&hookResult.url){return genInit(hookResult);}}catch(err){log_kissLog("run req hook",err);}}return genInit({url,body,headers,userMsg,method});};/** +if(reqHook!==null&&reqHook!==void 0&&reqHook.trim()&&!events){try{interpreter.run("exports.reqHook = ".concat(reqHook));const hookResult=await interpreter.exports.reqHook({...args,defaultSystemPrompt: defaultSystemPrompt,defaultSubtitlePrompt: defaultSubtitlePrompt},{url,body,headers,userMsg,method});if(hookResult&&hookResult.url){return genInit(hookResult);}}catch(err){log_kissLog("run req hook",err);}}return genInit({url,body,headers,userMsg,method});};/** * 解析翻译接口返回数据 * @param {*} res * @param {*} param3 * @returns - */const parseTransRes=async(res,_ref22)=>{var _res$sentences,_res$,_res$translations,_res$result,_res$result$texts,_res$result2,_res$auto_translation,_res$choices,_res$choices$,_res$choices$0$messag,_res$choices2,_res$choices2$,_res$choices2$$messag,_res$candidates,_res$candidates$,_res$candidates$0$con,_res$candidates2,_res$candidates2$,_res$candidates2$$con,_res$candidates2$$con2,_res$candidates2$$con3,_res$content,_res$content$0$text,_res$content2,_res$content2$,_res$result3,_res$choices3,_res$choices3$,_modelMsg2,_ref23,_res$translations2;let{texts,from,to,fromLang,toLang,langMap,resHook,thinkIgnore,history,userMsg,apiType}=_ref22;// 执行 response hook -if(resHook!==null&&resHook!==void 0&&resHook.trim()){try{libs_interpreter.run("exports.resHook = ".concat(resHook));const hookResult=await libs_interpreter.exports.resHook({apiType,userMsg,res,texts,from,to,fromLang,toLang,langMap,extractJson: extractJson,parseAIRes});if(hookResult&&Array.isArray(hookResult.translations)){if(history&&userMsg&&hookResult.modelMsg){history.add(userMsg,hookResult.modelMsg);}return hookResult.translations;}}catch(err){log_kissLog("run res hook",err);}}let modelMsg="";// todo: 根据结果抛出实际异常信息 -switch(apiType){case OPT_TRANS_GOOGLE:return[[res===null||res===void 0?void 0:(_res$sentences=res.sentences)===null||_res$sentences===void 0?void 0:_res$sentences.map(item=>item.trans).join(" "),res===null||res===void 0?void 0:res.src]];case OPT_TRANS_GOOGLE_2:return res===null||res===void 0?void 0:(_res$=res[0])===null||_res$===void 0?void 0:_res$.map((_,i)=>{var _res$2,_res$3;return[res===null||res===void 0?void 0:(_res$2=res[0])===null||_res$2===void 0?void 0:_res$2[i],res===null||res===void 0?void 0:(_res$3=res[1])===null||_res$3===void 0?void 0:_res$3[i]];});case OPT_TRANS_MICROSOFT:case OPT_TRANS_AZUREAI:return res===null||res===void 0?void 0:res.map(item=>{var _item$detectedLanguag;return[item.translations.map(item=>item.text).join(" "),(_item$detectedLanguag=item.detectedLanguage)===null||_item$detectedLanguag===void 0?void 0:_item$detectedLanguag.language];});case OPT_TRANS_DEEPL:return res===null||res===void 0?void 0:(_res$translations=res.translations)===null||_res$translations===void 0?void 0:_res$translations.map(item=>[item.text,item.detected_source_language]);case OPT_TRANS_DEEPLFREE:return[[res===null||res===void 0?void 0:(_res$result=res.result)===null||_res$result===void 0?void 0:(_res$result$texts=_res$result.texts)===null||_res$result$texts===void 0?void 0:_res$result$texts.map(item=>item.text).join(" "),res===null||res===void 0?void 0:(_res$result2=res.result)===null||_res$result2===void 0?void 0:_res$result2.lang]];case OPT_TRANS_DEEPLX:return[[res===null||res===void 0?void 0:res.data,res===null||res===void 0?void 0:res.source_lang]];case OPT_TRANS_NIUTRANS:const json=JSON.parse(res);if(json.error_msg){throw new Error(json.error_msg);}return[[json.tgt_text,json.from]];case OPT_TRANS_BAIDU:if(res.type===1){return[[Object.keys(JSON.parse(res.result).content[0].mean[0].cont)[0],res.from]];}else if(res.type===2){return[[res.data.map(item=>item.dst).join(" "),res.from]];}break;case OPT_TRANS_TENCENT:return res===null||res===void 0?void 0:(_res$auto_translation=res.auto_translation)===null||_res$auto_translation===void 0?void 0:_res$auto_translation.map(text=>[text,res===null||res===void 0?void 0:res.src_lang]);case OPT_TRANS_VOLCENGINE:return[[res===null||res===void 0?void 0:res.translation,res===null||res===void 0?void 0:res.detected_language]];case OPT_TRANS_OPENAI:case OPT_TRANS_GEMINI_2:case OPT_TRANS_OPENROUTER:modelMsg=res===null||res===void 0?void 0:(_res$choices=res.choices)===null||_res$choices===void 0?void 0:(_res$choices$=_res$choices[0])===null||_res$choices$===void 0?void 0:_res$choices$.message;if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_res$choices$0$messag=res===null||res===void 0?void 0:(_res$choices2=res.choices)===null||_res$choices2===void 0?void 0:(_res$choices2$=_res$choices2[0])===null||_res$choices2$===void 0?void 0:(_res$choices2$$messag=_res$choices2$.message)===null||_res$choices2$$messag===void 0?void 0:_res$choices2$$messag.content)!==null&&_res$choices$0$messag!==void 0?_res$choices$0$messag:"");case OPT_TRANS_GEMINI:modelMsg=res===null||res===void 0?void 0:(_res$candidates=res.candidates)===null||_res$candidates===void 0?void 0:(_res$candidates$=_res$candidates[0])===null||_res$candidates$===void 0?void 0:_res$candidates$.content;if(history&&userMsg&&modelMsg){history.add(userMsg,modelMsg);}return parseAIRes((_res$candidates$0$con=res===null||res===void 0?void 0:(_res$candidates2=res.candidates)===null||_res$candidates2===void 0?void 0:(_res$candidates2$=_res$candidates2[0])===null||_res$candidates2$===void 0?void 0:(_res$candidates2$$con=_res$candidates2$.content)===null||_res$candidates2$$con===void 0?void 0:(_res$candidates2$$con2=_res$candidates2$$con.parts)===null||_res$candidates2$$con2===void 0?void 0:(_res$candidates2$$con3=_res$candidates2$$con2[0])===null||_res$candidates2$$con3===void 0?void 0:_res$candidates2$$con3.text)!==null&&_res$candidates$0$con!==void 0?_res$candidates$0$con:"");case OPT_TRANS_CLAUDE:modelMsg={role:res===null||res===void 0?void 0:res.role,content:res===null||res===void 0?void 0:(_res$content=res.content)===null||_res$content===void 0?void 0:_res$content.text};if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_res$content$0$text=res===null||res===void 0?void 0:(_res$content2=res.content)===null||_res$content2===void 0?void 0:(_res$content2$=_res$content2[0])===null||_res$content2$===void 0?void 0:_res$content2$.text)!==null&&_res$content$0$text!==void 0?_res$content$0$text:"");case OPT_TRANS_CLOUDFLAREAI:return[[res===null||res===void 0?void 0:(_res$result3=res.result)===null||_res$result3===void 0?void 0:_res$result3.translated_text]];case OPT_TRANS_OLLAMA:modelMsg=res===null||res===void 0?void 0:(_res$choices3=res.choices)===null||_res$choices3===void 0?void 0:(_res$choices3$=_res$choices3[0])===null||_res$choices3$===void 0?void 0:_res$choices3$.message;const deepModels=thinkIgnore.split(",").filter(model=>model===null||model===void 0?void 0:model.trim());if(deepModels.some(model=>{var _res$model;return res===null||res===void 0?void 0:(_res$model=res.model)===null||_res$model===void 0?void 0:_res$model.startsWith(model);})){var _modelMsg;(_modelMsg=modelMsg)===null||_modelMsg===void 0?void 0:_modelMsg.content.replace(/[\s\S]*<\/think>/i,"");}if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_modelMsg2=modelMsg)===null||_modelMsg2===void 0?void 0:_modelMsg2.content);case OPT_TRANS_CUSTOMIZE:return(_ref23=(_res$translations2=res===null||res===void 0?void 0:res.translations)!==null&&_res$translations2!==void 0?_res$translations2:res)===null||_ref23===void 0?void 0:_ref23.map(item=>[item.text,item.src]);default:}throw new Error("parse translate result: apiType not matched",apiType);};/** + */const parseTransRes=async(res,_ref22)=>{var _res$sentences,_res$,_res$translations,_res$result,_res$result$texts,_res$result2,_res$auto_translation,_res$choices,_res$choices$,_modelMsg,_res$candidates,_res$candidates$,_modelMsg$parts$0$tex,_modelMsg2,_modelMsg2$parts,_modelMsg2$parts$,_res$content,_res$content$0$text,_res$content2,_res$content2$,_res$result3,_res$choices2,_res$choices2$,_modelMsg3,_ref23,_res$translations2;let{texts,from,to,fromLang,toLang,langMap,resHook,// thinkIgnore, +history,userMsg,apiType,useBatchFetch}=_ref22;// 执行 response hook +if(resHook!==null&&resHook!==void 0&&resHook.trim()){try{interpreter.run("exports.resHook = ".concat(resHook));const hookResult=await interpreter.exports.resHook({apiType,userMsg,res,texts,from,to,fromLang,toLang,langMap,extractJson: extractJson,parseAIRes});if(hookResult&&Array.isArray(hookResult.translations)){if(history&&userMsg&&hookResult.modelMsg){history.add(userMsg,hookResult.modelMsg);}return hookResult.translations;}}catch(err){log_kissLog("run res hook",err);}}let modelMsg="";// todo: 根据结果抛出实际异常信息 +switch(apiType){case OPT_TRANS_GOOGLE:return[[res===null||res===void 0?void 0:(_res$sentences=res.sentences)===null||_res$sentences===void 0?void 0:_res$sentences.map(item=>item.trans).join(" "),res===null||res===void 0?void 0:res.src]];case OPT_TRANS_GOOGLE_2:return res===null||res===void 0?void 0:(_res$=res[0])===null||_res$===void 0?void 0:_res$.map((_,i)=>{var _res$2,_res$3;return[res===null||res===void 0?void 0:(_res$2=res[0])===null||_res$2===void 0?void 0:_res$2[i],res===null||res===void 0?void 0:(_res$3=res[1])===null||_res$3===void 0?void 0:_res$3[i]];});case OPT_TRANS_MICROSOFT:case OPT_TRANS_AZUREAI:return res===null||res===void 0?void 0:res.map(item=>{var _item$detectedLanguag;return[item.translations.map(item=>item.text).join(" "),(_item$detectedLanguag=item.detectedLanguage)===null||_item$detectedLanguag===void 0?void 0:_item$detectedLanguag.language];});case OPT_TRANS_DEEPL:return res===null||res===void 0?void 0:(_res$translations=res.translations)===null||_res$translations===void 0?void 0:_res$translations.map(item=>[item.text,item.detected_source_language]);case OPT_TRANS_DEEPLFREE:return[[res===null||res===void 0?void 0:(_res$result=res.result)===null||_res$result===void 0?void 0:(_res$result$texts=_res$result.texts)===null||_res$result$texts===void 0?void 0:_res$result$texts.map(item=>item.text).join(" "),res===null||res===void 0?void 0:(_res$result2=res.result)===null||_res$result2===void 0?void 0:_res$result2.lang]];case OPT_TRANS_DEEPLX:return[[res===null||res===void 0?void 0:res.data,res===null||res===void 0?void 0:res.source_lang]];case OPT_TRANS_NIUTRANS:const json=JSON.parse(res);if(json.error_msg){throw new Error(json.error_msg);}return[[json.tgt_text,json.from]];case OPT_TRANS_BAIDU:if(res.type===1){return[[Object.keys(JSON.parse(res.result).content[0].mean[0].cont)[0],res.from]];}else if(res.type===2){return[[res.data.map(item=>item.dst).join(" "),res.from]];}break;case OPT_TRANS_TENCENT:return res===null||res===void 0?void 0:(_res$auto_translation=res.auto_translation)===null||_res$auto_translation===void 0?void 0:_res$auto_translation.map(text=>[text,res===null||res===void 0?void 0:res.src_lang]);case OPT_TRANS_VOLCENGINE:return[[res===null||res===void 0?void 0:res.translation,res===null||res===void 0?void 0:res.detected_language]];case OPT_TRANS_OPENAI:case OPT_TRANS_GEMINI_2:case OPT_TRANS_OPENROUTER:modelMsg=res===null||res===void 0?void 0:(_res$choices=res.choices)===null||_res$choices===void 0?void 0:(_res$choices$=_res$choices[0])===null||_res$choices$===void 0?void 0:_res$choices$.message;if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_modelMsg=modelMsg)===null||_modelMsg===void 0?void 0:_modelMsg.content,useBatchFetch);case OPT_TRANS_GEMINI:modelMsg=res===null||res===void 0?void 0:(_res$candidates=res.candidates)===null||_res$candidates===void 0?void 0:(_res$candidates$=_res$candidates[0])===null||_res$candidates$===void 0?void 0:_res$candidates$.content;if(history&&userMsg&&modelMsg){history.add(userMsg,modelMsg);}return parseAIRes((_modelMsg$parts$0$tex=(_modelMsg2=modelMsg)===null||_modelMsg2===void 0?void 0:(_modelMsg2$parts=_modelMsg2.parts)===null||_modelMsg2$parts===void 0?void 0:(_modelMsg2$parts$=_modelMsg2$parts[0])===null||_modelMsg2$parts$===void 0?void 0:_modelMsg2$parts$.text)!==null&&_modelMsg$parts$0$tex!==void 0?_modelMsg$parts$0$tex:"",useBatchFetch);case OPT_TRANS_CLAUDE:modelMsg={role:res===null||res===void 0?void 0:res.role,content:res===null||res===void 0?void 0:(_res$content=res.content)===null||_res$content===void 0?void 0:_res$content.text};if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_res$content$0$text=res===null||res===void 0?void 0:(_res$content2=res.content)===null||_res$content2===void 0?void 0:(_res$content2$=_res$content2[0])===null||_res$content2$===void 0?void 0:_res$content2$.text)!==null&&_res$content$0$text!==void 0?_res$content$0$text:"",useBatchFetch);case OPT_TRANS_CLOUDFLAREAI:return[[res===null||res===void 0?void 0:(_res$result3=res.result)===null||_res$result3===void 0?void 0:_res$result3.translated_text]];case OPT_TRANS_OLLAMA:modelMsg=res===null||res===void 0?void 0:(_res$choices2=res.choices)===null||_res$choices2===void 0?void 0:(_res$choices2$=_res$choices2[0])===null||_res$choices2$===void 0?void 0:_res$choices2$.message;// const deepModels = thinkIgnore +// .split(",") +// .filter((model) => model?.trim()); +// if (deepModels.some((model) => res?.model?.startsWith(model))) { +// modelMsg?.content.replace(/[\s\S]*<\/think>/i, ""); +// } +if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_modelMsg3=modelMsg)===null||_modelMsg3===void 0?void 0:_modelMsg3.content,useBatchFetch);case OPT_TRANS_CUSTOMIZE:return(_ref23=(_res$translations2=res===null||res===void 0?void 0:res.translations)!==null&&_res$translations2!==void 0?_res$translations2:res)===null||_ref23===void 0?void 0:_ref23.map(item=>[item.text,item.src]);default:}throw new Error("parse translate result: apiType not matched",apiType);};/** * 发送翻译请求并解析 * @param {*} param0 * @returns @@ -30618,7 +30624,7 @@ switch(apiType){case OPT_TRANS_GOOGLE:return[[res===null||res===void 0?void 0:(_ * 字幕翻译 * @param {*} param0 * @returns - */const handleSubtitle=async _ref24=>{var _res$choices$0$messag2,_res$choices4,_res$choices4$,_res$choices4$$messag,_res$candidates$0$con2,_res$candidates3,_res$candidates3$,_res$candidates3$$con,_res$candidates3$$con2,_res$candidates3$$con3,_res$content$0$text2,_res$content3,_res$content3$;let{events,from,to,apiSetting}=_ref24;const{apiType,fetchInterval,fetchLimit,httpTimeout}=apiSetting;const[input,init]=await genTransReq({...apiSetting,events,from,to,systemPrompt:apiSetting.subtitlePrompt});const res=await fetch_fetchData(input,init,{useCache:false,usePool:true,fetchInterval,fetchLimit,httpTimeout});if(!res){log_kissLog("subtitle got empty response");return[];}switch(apiType){case OPT_TRANS_OPENAI:case OPT_TRANS_GEMINI_2:case OPT_TRANS_OPENROUTER:case OPT_TRANS_OLLAMA:return parseSTRes((_res$choices$0$messag2=res===null||res===void 0?void 0:(_res$choices4=res.choices)===null||_res$choices4===void 0?void 0:(_res$choices4$=_res$choices4[0])===null||_res$choices4$===void 0?void 0:(_res$choices4$$messag=_res$choices4$.message)===null||_res$choices4$$messag===void 0?void 0:_res$choices4$$messag.content)!==null&&_res$choices$0$messag2!==void 0?_res$choices$0$messag2:"");case OPT_TRANS_GEMINI:return parseSTRes((_res$candidates$0$con2=res===null||res===void 0?void 0:(_res$candidates3=res.candidates)===null||_res$candidates3===void 0?void 0:(_res$candidates3$=_res$candidates3[0])===null||_res$candidates3$===void 0?void 0:(_res$candidates3$$con=_res$candidates3$.content)===null||_res$candidates3$$con===void 0?void 0:(_res$candidates3$$con2=_res$candidates3$$con.parts)===null||_res$candidates3$$con2===void 0?void 0:(_res$candidates3$$con3=_res$candidates3$$con2[0])===null||_res$candidates3$$con3===void 0?void 0:_res$candidates3$$con3.text)!==null&&_res$candidates$0$con2!==void 0?_res$candidates$0$con2:"");case OPT_TRANS_CLAUDE:return parseSTRes((_res$content$0$text2=res===null||res===void 0?void 0:(_res$content3=res.content)===null||_res$content3===void 0?void 0:(_res$content3$=_res$content3[0])===null||_res$content3$===void 0?void 0:_res$content3$.text)!==null&&_res$content$0$text2!==void 0?_res$content$0$text2:"");case OPT_TRANS_CUSTOMIZE:return res;default:}return[];}; + */const handleSubtitle=async _ref24=>{var _res$choices$0$messag,_res$choices3,_res$choices3$,_res$choices3$$messag,_res$candidates$0$con,_res$candidates2,_res$candidates2$,_res$candidates2$$con,_res$candidates2$$con2,_res$candidates2$$con3,_res$content$0$text2,_res$content3,_res$content3$;let{events,from,to,apiSetting}=_ref24;const{apiType,fetchInterval,fetchLimit,httpTimeout}=apiSetting;const[input,init]=await genTransReq({...apiSetting,events,from,to,systemPrompt:apiSetting.subtitlePrompt});const res=await fetch_fetchData(input,init,{useCache:false,usePool:true,fetchInterval,fetchLimit,httpTimeout});if(!res){log_kissLog("subtitle got empty response");return[];}switch(apiType){case OPT_TRANS_OPENAI:case OPT_TRANS_GEMINI_2:case OPT_TRANS_OPENROUTER:case OPT_TRANS_OLLAMA:return parseSTRes((_res$choices$0$messag=res===null||res===void 0?void 0:(_res$choices3=res.choices)===null||_res$choices3===void 0?void 0:(_res$choices3$=_res$choices3[0])===null||_res$choices3$===void 0?void 0:(_res$choices3$$messag=_res$choices3$.message)===null||_res$choices3$$messag===void 0?void 0:_res$choices3$$messag.content)!==null&&_res$choices$0$messag!==void 0?_res$choices$0$messag:"");case OPT_TRANS_GEMINI:return parseSTRes((_res$candidates$0$con=res===null||res===void 0?void 0:(_res$candidates2=res.candidates)===null||_res$candidates2===void 0?void 0:(_res$candidates2$=_res$candidates2[0])===null||_res$candidates2$===void 0?void 0:(_res$candidates2$$con=_res$candidates2$.content)===null||_res$candidates2$$con===void 0?void 0:(_res$candidates2$$con2=_res$candidates2$$con.parts)===null||_res$candidates2$$con2===void 0?void 0:(_res$candidates2$$con3=_res$candidates2$$con2[0])===null||_res$candidates2$$con3===void 0?void 0:_res$candidates2$$con3.text)!==null&&_res$candidates$0$con!==void 0?_res$candidates$0$con:"");case OPT_TRANS_CLAUDE:return parseSTRes((_res$content$0$text2=res===null||res===void 0?void 0:(_res$content3=res.content)===null||_res$content3===void 0?void 0:(_res$content3$=_res$content3[0])===null||_res$content3$===void 0?void 0:_res$content3$.text)!==null&&_res$content$0$text2!==void 0?_res$content$0$text2:"");case OPT_TRANS_CUSTOMIZE:return res;default:}return[];}; ;// CONCATENATED MODULE: ./src/libs/batchQueue.js /** * 批处理队列 @@ -30700,11 +30706,11 @@ keyfrom:"webdict"});const init={headers:{accept:"application/json, text/plain, * * 统一翻译接口 * @param {*} param0 * @returns - */const apiTranslate=async _ref2=>{let{text,fromLang="auto",toLang,apiSetting=DEFAULT_API_SETTING,docInfo={},glossary={},useCache=true,usePool=true}=_ref2;if(!text){return["",false];}const{apiType,apiSlug,useBatchFetch}=apiSetting;const langMap=OPT_LANGS_TO_SPEC[apiType]||OPT_LANGS_SPEC_DEFAULT;const from=langMap.get(fromLang);const to=langMap.get(toLang);if(!to){log_kissLog("target lang: ".concat(toLang," not support"));return["",false];}// todo: 优化缓存失效因素 -const[v1,v2]="2.0.4".split(".");const cacheOpts={apiSlug,text,fromLang,toLang,version:[v1,v2].join(".")};const cacheInput="".concat(URL_CACHE_TRAN,"?").concat(query_string.stringify(cacheOpts));// 查询缓存数据 -if(useCache){const cache=await getHttpCachePolyfill(cacheInput);if(cache!==null&&cache!==void 0&&cache.trText){return[cache.trText,cache.isSame];}}// 请求接口数据 -let tranlation=[];if(apiType===OPT_TRANS_BUILTINAI){tranlation=await apiBuiltinAITranslate({text,from,to,apiSetting});}else if(useBatchFetch&&API_SPE_TYPES.batch.has(apiType)){const{apiSlug,batchInterval,batchSize,batchLength}=apiSetting;const key="".concat(apiSlug,"_").concat(fromLang,"_").concat(toLang);const queue=getBatchQueue(key,handleTranslate,{batchInterval,batchSize,batchLength});tranlation=await queue.addTask(text,{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}else{[tranlation]=await handleTranslate([text],{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}let trText="";let srLang="";if(Array.isArray(tranlation)){[trText,srLang=""]=tranlation;}else if(typeof tranlation==="string"){trText=tranlation;}if(!trText){throw new Error("tanslate api got empty trtext");}const isSame=fromLang==="auto"&&srLang===to;// 插入缓存 -if(useCache){putHttpCachePolyfill(cacheInput,null,{trText,isSame,srLang});}return[trText,isSame];};// 字幕处理/翻译 + */const apiTranslate=async _ref2=>{let{text,fromLang="auto",toLang,apiSetting=DEFAULT_API_SETTING,docInfo={},glossary={},useCache=true,usePool=true}=_ref2;if(!text){throw new Error("The text cannot be empty.");}const{apiType,apiSlug,useBatchFetch}=apiSetting;const langMap=OPT_LANGS_TO_SPEC[apiType]||OPT_LANGS_SPEC_DEFAULT;const from=langMap.get(fromLang);const to=langMap.get(toLang);if(!to){throw new Error("The target lang: ".concat(toLang," not support"));}// todo: 优化缓存失效因素 +const[v1,v2]="2.0.5".split(".");const cacheOpts={apiSlug,text,fromLang,toLang,version:[v1,v2].join(".")};const cacheInput="".concat(URL_CACHE_TRAN,"?").concat(query_string.stringify(cacheOpts));// 查询缓存数据 +if(useCache){const cache=await getHttpCachePolyfill(cacheInput);if(cache!==null&&cache!==void 0&&cache.trText){return cache;}}// 请求接口数据 +let tranlation=[];if(apiType===OPT_TRANS_BUILTINAI){tranlation=await apiBuiltinAITranslate({text,from,to,apiSetting});}else if(useBatchFetch&&API_SPE_TYPES.batch.has(apiType)){const{apiSlug,batchInterval,batchSize,batchLength}=apiSetting;const key="".concat(apiSlug,"_").concat(fromLang,"_").concat(toLang);const queue=getBatchQueue(key,handleTranslate,{batchInterval,batchSize,batchLength});tranlation=await queue.addTask(text,{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}else{[tranlation]=await handleTranslate([text],{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}let trText="";let srLang="";let srCode="";if(Array.isArray(tranlation)){[trText,srLang=""]=tranlation;if(srLang){srCode=OPT_LANGS_TO_CODE[apiType].get(srLang)||"";}}else if(typeof tranlation==="string"){trText=tranlation;}if(!trText){throw new Error("tanslate api got empty trtext");}const isSame=fromLang==="auto"&&srLang===to;// 插入缓存 +if(useCache){putHttpCachePolyfill(cacheInput,null,{trText,isSame,srLang,srCode});}return{trText,srLang,srCode,isSame};};// 字幕处理/翻译 const apiSubtitle=async _ref3=>{let{videoId,chunkSign,fromLang="auto",toLang,events=[],apiSetting}=_ref3;const cacheOpts={apiSlug:apiSetting.apiSlug,videoId,chunkSign,fromLang,toLang};const cacheInput="".concat(URL_CACHE_SUBTITLE,"?").concat(query_string.stringify(cacheOpts));const cache=await getHttpCachePolyfill(cacheInput);if(cache){return cache;}const subtitles=await handleSubtitle({events,from:fromLang,to:toLang,apiSetting});if(subtitles!==null&&subtitles!==void 0&&subtitles.length){putHttpCachePolyfill(cacheInput,null,subtitles);return subtitles;}return[];}; ;// CONCATENATED MODULE: ./src/libs/subRules.js /** @@ -33541,7 +33547,7 @@ var n = {}; return t.length === e && "." !== t && ".." !== t; }; }, - te = "object" === ("undefined" == typeof process ? "undefined" : Nt(process)) && process ? "object" === Nt(({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.4","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"})) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.4","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.4","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}).__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; + te = "object" === ("undefined" == typeof process ? "undefined" : Nt(process)) && process ? "object" === Nt(({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.5","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"})) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.5","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.5","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}).__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; It.sep = "win32" === te ? "\\" : "/"; var ee = Symbol("globstar **"); It.GLOBSTAR = ee; @@ -35345,7 +35351,8 @@ return;}let{updateAt=0,syncAt=0}=syncMeta[key]||{};if(syncAt===0){updateAt=0;// * @param {*} rules * @param {string} href * @returns - */const matchRule=async(href,_ref)=>{let{injectRules,subrulesList}=_ref;const rules=await getRulesWithDefault();if(injectRules){try{const selectedSub=subrulesList.find(item=>item.selected);if(selectedSub!==null&&selectedSub!==void 0&&selectedSub.url){const subRules=await loadOrFetchSubRules(selectedSub.url);rules.splice(-1,0,...subRules);}}catch(err){log_kissLog("load injectRules",err);}}const rule=rules.find(r=>r.pattern.split(",").some(p=>isMatch(href,p.trim())));const globalRule={...GLOBLA_RULE,...(rules.find(r=>r.pattern===GLOBAL_KEY)||{})};if(!rule){return globalRule;}["selector","keepSelector","rootsSelector","ignoreSelector","terms","aiTerms","termsStyle","highlightStyle","selectStyle","parentStyle","grandStyle","injectJs","injectCss",// "fixerSelector", + */const matchRule=async(href,_ref)=>{let{injectRules,subrulesList}=_ref;const rules=await getRulesWithDefault();if(injectRules){try{const selectedSub=subrulesList.find(item=>item.selected);if(selectedSub!==null&&selectedSub!==void 0&&selectedSub.url){const subRules=await loadOrFetchSubRules(selectedSub.url);rules.splice(-1,0,...subRules);}}catch(err){log_kissLog("load injectRules",err);}}const rule=rules.find(r=>r.pattern.split(",").some(p=>isMatch(href,p.trim())));const globalRule={...GLOBLA_RULE,...(rules.find(r=>r.pattern===GLOBAL_KEY)||{})};if(!rule){return globalRule;}["selector","keepSelector","rootsSelector","ignoreSelector","terms","aiTerms","termsStyle","highlightStyle","selectStyle","parentStyle","grandStyle","injectJs",// "injectCss", +// "fixerSelector", "transStartHook","transEndHook"// "transRemoveHook", ].forEach(key=>{var _rule$key;if(!((_rule$key=rule[key])!==null&&_rule$key!==void 0&&_rule$key.trim())){rule[key]=globalRule[key];}});["apiSlug","fromLang","toLang","transOpen","transOnly",// "transTiming", "autoScan","hasRichText","hasShadowroot","transTag","transTitle",// "detectRemote", @@ -35357,13 +35364,15 @@ if(!rule.textStyle||rule.textStyle===GLOBAL_KEY){rule.textStyle=globalRule.textS * 检查过滤rules * @param {*} rules * @returns - */const checkRules=rules=>{if(type(rules)==="string"){rules=JSON.parse(rules);}if(type(rules)!=="array"){throw new Error("data error");}const fromLangs=OPT_LANGS_FROM.map(item=>item[0]);const toLangs=OPT_LANGS_TO.map(item=>item[0]);const patternSet=new Set();rules=rules.filter(rule=>type(rule)==="object").filter(_ref2=>{let{pattern}=_ref2;if(type(pattern)!=="string"||patternSet.has(pattern.trim())){return false;}patternSet.add(pattern.trim());return true;}).map(_ref3=>{let{pattern,selector,keepSelector,rootsSelector,ignoreSelector,terms,aiTerms,termsStyle,highlightStyle,selectStyle,parentStyle,grandStyle,injectJs,injectCss,apiSlug,fromLang,toLang,textStyle,transOpen,bgColor,textDiyStyle,transOnly,autoScan,hasRichText,hasShadowroot,// transTiming, + */const checkRules=rules=>{if(type(rules)==="string"){rules=JSON.parse(rules);}if(type(rules)!=="array"){throw new Error("data error");}const fromLangs=OPT_LANGS_FROM.map(item=>item[0]);const toLangs=OPT_LANGS_TO.map(item=>item[0]);const patternSet=new Set();rules=rules.filter(rule=>type(rule)==="object").filter(_ref2=>{let{pattern}=_ref2;if(type(pattern)!=="string"||patternSet.has(pattern.trim())){return false;}patternSet.add(pattern.trim());return true;}).map(_ref3=>{let{pattern,selector,keepSelector,rootsSelector,ignoreSelector,terms,aiTerms,termsStyle,highlightStyle,selectStyle,parentStyle,grandStyle,injectJs,// injectCss, +apiSlug,fromLang,toLang,textStyle,transOpen,bgColor,textDiyStyle,transOnly,autoScan,hasRichText,hasShadowroot,// transTiming, transTag,transTitle,// detectRemote, // skipLangs, // fixerSelector, // fixerFunc, transStartHook,transEndHook,// transRemoveHook, -splitParagraph,splitLength,highlightWords}=_ref3;return{pattern:pattern.trim(),selector:type(selector)==="string"?selector:"",keepSelector:type(keepSelector)==="string"?keepSelector:"",rootsSelector:type(rootsSelector)==="string"?rootsSelector:"",ignoreSelector:type(ignoreSelector)==="string"?ignoreSelector:"",terms:type(terms)==="string"?terms:"",aiTerms:type(aiTerms)==="string"?aiTerms:"",termsStyle:type(termsStyle)==="string"?termsStyle:"",highlightStyle:type(highlightStyle)==="string"?highlightStyle:"",selectStyle:type(selectStyle)==="string"?selectStyle:"",parentStyle:type(parentStyle)==="string"?parentStyle:"",grandStyle:type(grandStyle)==="string"?grandStyle:"",injectJs:type(injectJs)==="string"?injectJs:"",injectCss:type(injectCss)==="string"?injectCss:"",bgColor:type(bgColor)==="string"?bgColor:"",textDiyStyle:type(textDiyStyle)==="string"?textDiyStyle:"",apiSlug:type(apiSlug)==="string"&&apiSlug.trim()!==""?apiSlug.trim():GLOBAL_KEY,fromLang:matchValue([GLOBAL_KEY,...fromLangs],fromLang),toLang:matchValue([GLOBAL_KEY,...toLangs],toLang),textStyle:matchValue([GLOBAL_KEY,...OPT_STYLE_ALL],textStyle),transOpen:matchValue([GLOBAL_KEY,"true","false"],transOpen),transOnly:matchValue([GLOBAL_KEY,"true","false"],transOnly),autoScan:matchValue([GLOBAL_KEY,"true","false"],autoScan),hasRichText:matchValue([GLOBAL_KEY,"true","false"],hasRichText),hasShadowroot:matchValue([GLOBAL_KEY,"true","false"],hasShadowroot),// transTiming: matchValue([GLOBAL_KEY, ...OPT_TIMING_ALL], transTiming), +splitParagraph,splitLength,highlightWords}=_ref3;return{pattern:pattern.trim(),selector:type(selector)==="string"?selector:"",keepSelector:type(keepSelector)==="string"?keepSelector:"",rootsSelector:type(rootsSelector)==="string"?rootsSelector:"",ignoreSelector:type(ignoreSelector)==="string"?ignoreSelector:"",terms:type(terms)==="string"?terms:"",aiTerms:type(aiTerms)==="string"?aiTerms:"",termsStyle:type(termsStyle)==="string"?termsStyle:"",highlightStyle:type(highlightStyle)==="string"?highlightStyle:"",selectStyle:type(selectStyle)==="string"?selectStyle:"",parentStyle:type(parentStyle)==="string"?parentStyle:"",grandStyle:type(grandStyle)==="string"?grandStyle:"",injectJs:type(injectJs)==="string"?injectJs:"",// injectCss: type(injectCss) === "string" ? injectCss : "", +bgColor:type(bgColor)==="string"?bgColor:"",textDiyStyle:type(textDiyStyle)==="string"?textDiyStyle:"",apiSlug:type(apiSlug)==="string"&&apiSlug.trim()!==""?apiSlug.trim():GLOBAL_KEY,fromLang:matchValue([GLOBAL_KEY,...fromLangs],fromLang),toLang:matchValue([GLOBAL_KEY,...toLangs],toLang),textStyle:matchValue([GLOBAL_KEY,...OPT_STYLE_ALL],textStyle),transOpen:matchValue([GLOBAL_KEY,"true","false"],transOpen),transOnly:matchValue([GLOBAL_KEY,"true","false"],transOnly),autoScan:matchValue([GLOBAL_KEY,"true","false"],autoScan),hasRichText:matchValue([GLOBAL_KEY,"true","false"],hasRichText),hasShadowroot:matchValue([GLOBAL_KEY,"true","false"],hasShadowroot),// transTiming: matchValue([GLOBAL_KEY, ...OPT_TIMING_ALL], transTiming), transTag:matchValue([GLOBAL_KEY,"span","font"],transTag),transTitle:matchValue([GLOBAL_KEY,"true","false"],transTitle),// detectRemote: matchValue([GLOBAL_KEY, "true", "false"], detectRemote), // skipLangs: type(skipLangs) === "array" ? skipLangs : [], // fixerSelector: type(fixerSelector) === "string" ? fixerSelector : "", @@ -35385,13 +35394,12 @@ splitParagraph:matchValue([GLOBAL_KEY,...OPT_SPLIT_PARAGRAPH_ALL],splitParagraph /** * @class BilingualSubtitleManager * @description 负责在视频上显示和翻译字幕的核心逻辑 - */var _videoEl=/*#__PURE__*/_classPrivateFieldKey("videoEl");var _formattedSubtitles=/*#__PURE__*/_classPrivateFieldKey("formattedSubtitles");var _translationService=/*#__PURE__*/_classPrivateFieldKey("translationService");var _captionWindowEl=/*#__PURE__*/_classPrivateFieldKey("captionWindowEl");var _paperEl=/*#__PURE__*/_classPrivateFieldKey("paperEl");var _currentSubtitleIndex=/*#__PURE__*/_classPrivateFieldKey("currentSubtitleIndex");var _preTranslateSeconds=/*#__PURE__*/_classPrivateFieldKey("preTranslateSeconds");var _setting=/*#__PURE__*/_classPrivateFieldKey("setting");var _isAdPlaying=/*#__PURE__*/_classPrivateFieldKey("isAdPlaying");var _createCaptionWindow=/*#__PURE__*/_classPrivateFieldKey("createCaptionWindow");var _enableDragging=/*#__PURE__*/_classPrivateFieldKey("enableDragging");var _attachEventListeners=/*#__PURE__*/_classPrivateFieldKey("attachEventListeners");var _removeEventListeners=/*#__PURE__*/_classPrivateFieldKey("removeEventListeners");var _findSubtitleIndexForTime=/*#__PURE__*/_classPrivateFieldKey("findSubtitleIndexForTime");var _updateCaptionDisplay=/*#__PURE__*/_classPrivateFieldKey("updateCaptionDisplay");var _triggerTranslations=/*#__PURE__*/_classPrivateFieldKey("triggerTranslations");var _translateAndStore=/*#__PURE__*/_classPrivateFieldKey("translateAndStore");class BilingualSubtitleManager{/** + */var _videoEl=/*#__PURE__*/_classPrivateFieldKey("videoEl");var _formattedSubtitles=/*#__PURE__*/_classPrivateFieldKey("formattedSubtitles");var _captionWindowEl=/*#__PURE__*/_classPrivateFieldKey("captionWindowEl");var _paperEl=/*#__PURE__*/_classPrivateFieldKey("paperEl");var _currentSubtitleIndex=/*#__PURE__*/_classPrivateFieldKey("currentSubtitleIndex");var _preTranslateSeconds=/*#__PURE__*/_classPrivateFieldKey("preTranslateSeconds");var _setting=/*#__PURE__*/_classPrivateFieldKey("setting");var _isAdPlaying=/*#__PURE__*/_classPrivateFieldKey("isAdPlaying");var _createCaptionWindow=/*#__PURE__*/_classPrivateFieldKey("createCaptionWindow");var _enableDragging=/*#__PURE__*/_classPrivateFieldKey("enableDragging");var _attachEventListeners=/*#__PURE__*/_classPrivateFieldKey("attachEventListeners");var _removeEventListeners=/*#__PURE__*/_classPrivateFieldKey("removeEventListeners");var _findSubtitleIndexForTime=/*#__PURE__*/_classPrivateFieldKey("findSubtitleIndexForTime");var _updateCaptionDisplay=/*#__PURE__*/_classPrivateFieldKey("updateCaptionDisplay");var _triggerTranslations=/*#__PURE__*/_classPrivateFieldKey("triggerTranslations");var _translateAndStore=/*#__PURE__*/_classPrivateFieldKey("translateAndStore");class BilingualSubtitleManager{/** * @param {object} options * @param {HTMLVideoElement} options.videoEl - 页面上的 video 元素。 * @param {Array} options.formattedSubtitles - 已格式化好的字幕数组。 - * @param {(text: string, toLang: string) => Promise} options.translationService - 外部翻译函数。 * @param {object} options.setting - 配置对象,如目标翻译语言。 - */constructor(_ref){let{videoEl,formattedSubtitles,translationService,setting}=_ref;/** + */constructor(_ref){let{videoEl,formattedSubtitles,setting}=_ref;/** * 执行单个字幕的翻译并更新其状态。 * @param {object} subtitle - 需要翻译的字幕对象。 */Object.defineProperty(this,_translateAndStore,{value:_translateAndStore2});/** @@ -35412,7 +35420,7 @@ splitParagraph:matchValue([GLOBAL_KEY,...OPT_SPLIT_PARAGRAPH_ALL],splitParagraph * 为指定的元素启用垂直拖动功能。 */Object.defineProperty(this,_enableDragging,{value:_enableDragging2});/** * 创建并配置用于显示字幕的 DOM 元素。 - */Object.defineProperty(this,_createCaptionWindow,{value:_createCaptionWindow2});Object.defineProperty(this,_videoEl,{writable:true,value:void 0});Object.defineProperty(this,_formattedSubtitles,{writable:true,value:[]});Object.defineProperty(this,_translationService,{writable:true,value:void 0});Object.defineProperty(this,_captionWindowEl,{writable:true,value:null});Object.defineProperty(this,_paperEl,{writable:true,value:null});Object.defineProperty(this,_currentSubtitleIndex,{writable:true,value:-1});Object.defineProperty(this,_preTranslateSeconds,{writable:true,value:100});Object.defineProperty(this,_setting,{writable:true,value:{}});Object.defineProperty(this,_isAdPlaying,{writable:true,value:false});_classPrivateFieldBase(this,_setting)[_setting]=setting;_classPrivateFieldBase(this,_videoEl)[_videoEl]=videoEl;_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles]=formattedSubtitles;_classPrivateFieldBase(this,_translationService)[_translationService]=translationService;this.onTimeUpdate=this.onTimeUpdate.bind(this);this.onSeek=this.onSeek.bind(this);}/** + */Object.defineProperty(this,_createCaptionWindow,{value:_createCaptionWindow2});Object.defineProperty(this,_videoEl,{writable:true,value:void 0});Object.defineProperty(this,_formattedSubtitles,{writable:true,value:[]});Object.defineProperty(this,_captionWindowEl,{writable:true,value:null});Object.defineProperty(this,_paperEl,{writable:true,value:null});Object.defineProperty(this,_currentSubtitleIndex,{writable:true,value:-1});Object.defineProperty(this,_preTranslateSeconds,{writable:true,value:100});Object.defineProperty(this,_setting,{writable:true,value:{}});Object.defineProperty(this,_isAdPlaying,{writable:true,value:false});_classPrivateFieldBase(this,_setting)[_setting]=setting;_classPrivateFieldBase(this,_videoEl)[_videoEl]=videoEl;_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles]=formattedSubtitles;this.onTimeUpdate=this.onTimeUpdate.bind(this);this.onSeek=this.onSeek.bind(this);}/** * 启动字幕显示和翻译。 */start(){if(_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].length===0){logger.warn("Bilingual Subtitles: No subtitles to display.");return;}logger.info("Bilingual Subtitle Manager: Starting...");_classPrivateFieldBase(this,_createCaptionWindow)[_createCaptionWindow]();_classPrivateFieldBase(this,_attachEventListeners)[_attachEventListeners]();this.onTimeUpdate();}/** * 销毁实例,清理资源。 @@ -35425,7 +35433,7 @@ splitParagraph:matchValue([GLOBAL_KEY,...OPT_SPLIT_PARAGRAPH_ALL],splitParagraph */onSeek(){_classPrivateFieldBase(this,_currentSubtitleIndex)[_currentSubtitleIndex]=-1;this.onTimeUpdate();}/** * 追加新的字幕 * @param {Array} newSubtitlesChunk - 新的、要追加的字幕数据块。 - */appendSubtitles(newSubtitlesChunk){if(!newSubtitlesChunk||newSubtitlesChunk.length===0){return;}logger.info("Bilingual Subtitle Manager: Appending ".concat(newSubtitlesChunk.length," new subtitles..."));_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].push(...newSubtitlesChunk);_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].sort((a,b)=>a.start-b.start);_classPrivateFieldBase(this,_currentSubtitleIndex)[_currentSubtitleIndex]=-1;this.onTimeUpdate();}}function _createCaptionWindow2(){var _classPrivateFieldLoo4;const container=document.createElement("div");container.className="kiss-caption-container notranslate";Object.assign(container.style,{position:"absolute",width:"100%",height:"100%",left:"0",top:"0",pointerEvents:"none"});const paper=document.createElement("div");paper.className="kiss-caption-paper";Object.assign(paper.style,{position:"absolute",width:"80%",left:"50%",bottom:"10%",transform:"translateX(-50%)",textAlign:"center",containerType:"inline-size",zIndex:"2147483647",pointerEvents:"auto",display:"none"});_classPrivateFieldBase(this,_paperEl)[_paperEl]=paper;_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]=document.createElement("div");_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].className="kiss-caption-window";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.cssText=_classPrivateFieldBase(this,_setting)[_setting].windowStyle;_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.pointerEvents="auto";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.cursor="grab";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.opacity="1";_classPrivateFieldBase(this,_paperEl)[_paperEl].appendChild(_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]);container.appendChild(_classPrivateFieldBase(this,_paperEl)[_paperEl]);const videoContainer=(_classPrivateFieldLoo4=_classPrivateFieldBase(this,_videoEl)[_videoEl].parentElement)===null||_classPrivateFieldLoo4===void 0?void 0:_classPrivateFieldLoo4.parentElement;if(!videoContainer){logger.warn("could not find videoContainer");return;}videoContainer.style.position="relative";videoContainer.appendChild(container);_classPrivateFieldBase(this,_enableDragging)[_enableDragging](_classPrivateFieldBase(this,_paperEl)[_paperEl],container,_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]);}function _enableDragging2(dragElement,boundaryContainer,handleElement){let isDragging=false;let startY;let initialBottom;let dragElementHeight;const onMouseDown=e=>{e.stopPropagation();e.preventDefault();if(e.button!==0)return;isDragging=true;handleElement.style.cursor="grabbing";startY=e.clientY;initialBottom=boundaryContainer.getBoundingClientRect().bottom-dragElement.getBoundingClientRect().bottom;dragElementHeight=dragElement.offsetHeight;document.addEventListener("mousemove",onMouseMove,{capture:true});document.addEventListener("mouseup",onMouseUp,{capture:true});};const onMouseMove=e=>{if(!isDragging)return;e.preventDefault();e.stopPropagation();const deltaY=e.clientY-startY;let newBottom=initialBottom-deltaY;const containerHeight=boundaryContainer.clientHeight;newBottom=Math.max(0,newBottom);newBottom=Math.min(containerHeight-dragElementHeight,newBottom);if(dragElementHeight>containerHeight){newBottom=Math.max(0,newBottom);}dragElement.style.bottom="".concat(newBottom,"px");};const onMouseUp=e=>{if(!isDragging)return;e.preventDefault();e.stopPropagation();isDragging=false;handleElement.style.cursor="grab";document.removeEventListener("mousemove",onMouseMove,{capture:true});document.removeEventListener("mouseup",onMouseUp,{capture:true});const finalBottomPx=dragElement.style.bottom;setTimeout(()=>{dragElement.style.bottom=finalBottomPx;},50);};handleElement.addEventListener("mousedown",onMouseDown);}function _attachEventListeners2(){_classPrivateFieldBase(this,_videoEl)[_videoEl].addEventListener("timeupdate",this.onTimeUpdate);_classPrivateFieldBase(this,_videoEl)[_videoEl].addEventListener("seeked",this.onSeek);}function _removeEventListeners2(){_classPrivateFieldBase(this,_videoEl)[_videoEl].removeEventListener("timeupdate",this.onTimeUpdate);_classPrivateFieldBase(this,_videoEl)[_videoEl].removeEventListener("seeked",this.onSeek);}function _findSubtitleIndexForTime2(currentTimeMs){return _classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].findIndex(sub=>currentTimeMs>=sub.start&¤tTimeMs<=sub.end);}function _updateCaptionDisplay2(subtitle){if(!_classPrivateFieldBase(this,_paperEl)[_paperEl]||!_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl])return;if(_classPrivateFieldBase(this,_isAdPlaying)[_isAdPlaying]){_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="none";return;}if(subtitle){const p1=document.createElement("p");p1.style.cssText=_classPrivateFieldBase(this,_setting)[_setting].originStyle;p1.textContent=truncateWords(subtitle.text);const p2=document.createElement("p");p2.style.cssText=_classPrivateFieldBase(this,_setting)[_setting].translationStyle;p2.textContent=truncateWords(subtitle.translation)||"...";if(_classPrivateFieldBase(this,_setting)[_setting].isBilingual){_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].replaceChildren(p1,p2);}else{_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].replaceChildren(p2);}_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="block";}else{_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="none";}}function _triggerTranslations2(currentTimeMs){const lookAheadMs=_classPrivateFieldBase(this,_preTranslateSeconds)[_preTranslateSeconds]*1000;for(const sub of _classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles]){const isCurrent=sub.start<=currentTimeMs&&sub.end>=currentTimeMs;const isUpcoming=sub.start>currentTimeMs&&sub.start<=currentTimeMs+lookAheadMs;const needsTranslation=!sub.translation&&!sub.isTranslating;if((isCurrent||isUpcoming)&&needsTranslation){_classPrivateFieldBase(this,_translateAndStore)[_translateAndStore](sub);}}}async function _translateAndStore2(subtitle){subtitle.isTranslating=true;try{const{fromLang,toLang,apiSetting}=_classPrivateFieldBase(this,_setting)[_setting];const[translatedText]=await _classPrivateFieldBase(this,_translationService)[_translationService]({text:subtitle.text,fromLang,toLang,apiSetting});subtitle.translation=translatedText;}catch(error){logger.info("Translation failed for:",subtitle.text,error);subtitle.translation="[Translation failed]";}finally{subtitle.isTranslating=false;const currentSubtitleIndexNow=_classPrivateFieldBase(this,_findSubtitleIndexForTime)[_findSubtitleIndexForTime](_classPrivateFieldBase(this,_videoEl)[_videoEl].currentTime*1000);if(_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles][currentSubtitleIndexNow]===subtitle){_classPrivateFieldBase(this,_updateCaptionDisplay)[_updateCaptionDisplay](subtitle);}}} + */appendSubtitles(newSubtitlesChunk){if(!newSubtitlesChunk||newSubtitlesChunk.length===0){return;}logger.info("Bilingual Subtitle Manager: Appending ".concat(newSubtitlesChunk.length," new subtitles..."));_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].push(...newSubtitlesChunk);_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].sort((a,b)=>a.start-b.start);_classPrivateFieldBase(this,_currentSubtitleIndex)[_currentSubtitleIndex]=-1;this.onTimeUpdate();}}function _createCaptionWindow2(){var _classPrivateFieldLoo4;const container=document.createElement("div");container.className="kiss-caption-container notranslate";Object.assign(container.style,{position:"absolute",width:"100%",height:"100%",left:"0",top:"0",pointerEvents:"none"});const paper=document.createElement("div");paper.className="kiss-caption-paper";Object.assign(paper.style,{position:"absolute",width:"80%",left:"50%",bottom:"10%",transform:"translateX(-50%)",textAlign:"center",containerType:"inline-size",zIndex:"2147483647",pointerEvents:"auto",display:"none"});_classPrivateFieldBase(this,_paperEl)[_paperEl]=paper;_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]=document.createElement("div");_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].className="kiss-caption-window";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.cssText=_classPrivateFieldBase(this,_setting)[_setting].windowStyle;_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.pointerEvents="auto";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.cursor="grab";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.opacity="1";_classPrivateFieldBase(this,_paperEl)[_paperEl].appendChild(_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]);container.appendChild(_classPrivateFieldBase(this,_paperEl)[_paperEl]);const videoContainer=(_classPrivateFieldLoo4=_classPrivateFieldBase(this,_videoEl)[_videoEl].parentElement)===null||_classPrivateFieldLoo4===void 0?void 0:_classPrivateFieldLoo4.parentElement;if(!videoContainer){logger.warn("could not find videoContainer");return;}videoContainer.style.position="relative";videoContainer.appendChild(container);_classPrivateFieldBase(this,_enableDragging)[_enableDragging](_classPrivateFieldBase(this,_paperEl)[_paperEl],container,_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]);}function _enableDragging2(dragElement,boundaryContainer,handleElement){let isDragging=false;let startY;let initialBottom;let dragElementHeight;const onDragStart=e=>{if(e.type==="mousedown"&&e.button!==0)return;e.preventDefault();isDragging=true;handleElement.style.cursor="grabbing";startY=e.type==="touchstart"?e.touches[0].clientY:e.clientY;initialBottom=boundaryContainer.getBoundingClientRect().bottom-dragElement.getBoundingClientRect().bottom;dragElementHeight=dragElement.offsetHeight;document.addEventListener("mousemove",onDragMove,{capture:true});document.addEventListener("touchmove",onDragMove,{capture:true,passive:false});document.addEventListener("mouseup",onDragEnd,{capture:true});document.addEventListener("touchend",onDragEnd,{capture:true});};const onDragMove=e=>{if(!isDragging)return;e.preventDefault();const currentY=e.type==="touchmove"?e.touches[0].clientY:e.clientY;const deltaY=currentY-startY;let newBottom=initialBottom-deltaY;const containerHeight=boundaryContainer.clientHeight;newBottom=Math.max(0,newBottom);newBottom=Math.min(containerHeight-dragElementHeight,newBottom);if(dragElementHeight>containerHeight){newBottom=Math.max(0,newBottom);}dragElement.style.bottom="".concat(newBottom,"px");};const onDragEnd=e=>{if(!isDragging)return;e.preventDefault();isDragging=false;handleElement.style.cursor="grab";document.removeEventListener("mousemove",onDragMove,{capture:true});document.removeEventListener("touchmove",onDragMove,{capture:true});document.removeEventListener("mouseup",onDragEnd,{capture:true});document.removeEventListener("touchend",onDragEnd,{capture:true});const finalBottomPx=dragElement.style.bottom;setTimeout(()=>{dragElement.style.bottom=finalBottomPx;},50);};handleElement.addEventListener("mousedown",onDragStart);handleElement.addEventListener("touchstart",onDragStart,{passive:false});}function _attachEventListeners2(){_classPrivateFieldBase(this,_videoEl)[_videoEl].addEventListener("timeupdate",this.onTimeUpdate);_classPrivateFieldBase(this,_videoEl)[_videoEl].addEventListener("seeked",this.onSeek);}function _removeEventListeners2(){_classPrivateFieldBase(this,_videoEl)[_videoEl].removeEventListener("timeupdate",this.onTimeUpdate);_classPrivateFieldBase(this,_videoEl)[_videoEl].removeEventListener("seeked",this.onSeek);}function _findSubtitleIndexForTime2(currentTimeMs){return _classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].findIndex(sub=>currentTimeMs>=sub.start&¤tTimeMs<=sub.end);}function _updateCaptionDisplay2(subtitle){if(!_classPrivateFieldBase(this,_paperEl)[_paperEl]||!_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl])return;if(_classPrivateFieldBase(this,_isAdPlaying)[_isAdPlaying]){_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="none";return;}if(subtitle){const p1=document.createElement("p");p1.style.cssText=_classPrivateFieldBase(this,_setting)[_setting].originStyle;p1.textContent=truncateWords(subtitle.text);const p2=document.createElement("p");p2.style.cssText=_classPrivateFieldBase(this,_setting)[_setting].translationStyle;p2.textContent=truncateWords(subtitle.translation)||"...";if(_classPrivateFieldBase(this,_setting)[_setting].isBilingual){_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].replaceChildren(p1,p2);}else{_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].replaceChildren(p2);}_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="block";}else{_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="none";}}function _triggerTranslations2(currentTimeMs){const lookAheadMs=_classPrivateFieldBase(this,_preTranslateSeconds)[_preTranslateSeconds]*1000;for(const sub of _classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles]){const isCurrent=sub.start<=currentTimeMs&&sub.end>=currentTimeMs;const isUpcoming=sub.start>currentTimeMs&&sub.start<=currentTimeMs+lookAheadMs;const needsTranslation=!sub.translation&&!sub.isTranslating;if((isCurrent||isUpcoming)&&needsTranslation){_classPrivateFieldBase(this,_translateAndStore)[_translateAndStore](sub);}}}async function _translateAndStore2(subtitle){subtitle.isTranslating=true;try{const{fromLang,toLang,apiSetting}=_classPrivateFieldBase(this,_setting)[_setting];const{trText}=await apiTranslate({text:subtitle.text,fromLang,toLang,apiSetting});subtitle.translation=trText;}catch(error){logger.info("Translation failed for:",subtitle.text,error);subtitle.translation="[Translation failed]";}finally{subtitle.isTranslating=false;const currentSubtitleIndexNow=_classPrivateFieldBase(this,_findSubtitleIndexForTime)[_findSubtitleIndexForTime](_classPrivateFieldBase(this,_videoEl)[_videoEl].currentTime*1000);if(_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles][currentSubtitleIndexNow]===subtitle){_classPrivateFieldBase(this,_updateCaptionDisplay)[_updateCaptionDisplay](subtitle);}}} ;// CONCATENATED MODULE: ./src/libs/svg.js const loadingSvg="\n \n \n \n \n \n \n \n \n \n\n";function createSVGElement(tag,attributes){const svgNS="http://www.w3.org/2000/svg";const el=document.createElementNS(svgNS,tag);for(const key in attributes){el.setAttribute(key,attributes[key]);}return el;}/** * 创建loding动画 @@ -35437,8 +35445,8 @@ const loadingSvg="0&&arguments[0]!==undefined?arguments[0]:{};const svg=createSVGElement("svg",{xmlns:"http://www.w3.org/2000/svg",width,height,viewBox,version:"1.1"});const primaryColor="#209CEE";const secondaryColor="#E9F5FD";const path1Fill=isSelected?primaryColor:secondaryColor;const path2Fill=isSelected?secondaryColor:primaryColor;const path1=createSVGElement("path",{d:"M0 0 C10.56 0 21.12 0 32 0 C32 10.56 32 21.12 32 32 C21.44 32 10.88 32 0 32 C0 21.44 0 10.88 0 0 Z ",fill:path1Fill,transform:"translate(0,0)"});const path2=createSVGElement("path",{d:"M0 0 C0.66 0 1.32 0 2 0 C2 2.97 2 5.94 2 9 C2.969375 8.2575 3.93875 7.515 4.9375 6.75 C5.48277344 6.33234375 6.02804688 5.9146875 6.58984375 5.484375 C8.39053593 3.83283924 8.39053593 3.83283924 9 0 C13.95 0 18.9 0 24 0 C24 0.99 24 1.98 24 3 C22.68 3 21.36 3 20 3 C20 9.27 20 15.54 20 22 C19.01 22 18.02 22 17 22 C17 15.73 17 9.46 17 3 C15.35 3 13.7 3 12 3 C11.731875 3.598125 11.46375 4.19625 11.1875 4.8125 C10.01506533 6.97224808 8.80630718 8.35790256 7 10 C8.01790655 12.27071461 8.77442829 13.80784632 10.6875 15.4375 C11.120625 15.953125 11.55375 16.46875 12 17 C11.6875 19.6875 11.6875 19.6875 11 22 C10.34 22 9.68 22 9 22 C8.773125 21.236875 8.54625 20.47375 8.3125 19.6875 C6.73268318 16.45263699 5.16717283 15.58358642 2 14 C2 16.64 2 19.28 2 22 C1.34 22 0.68 22 0 22 C0 14.74 0 7.48 0 0 Z ",fill:path2Fill,transform:"translate(4,5)"});svg.appendChild(path1);svg.appendChild(path2);return svg;} ;// CONCATENATED MODULE: ./src/subtitle/YouTubeCaptionProvider.js const VIDEO_SELECT="#container video";const CONTORLS_SELECT=".ytp-right-controls";const YT_CAPTION_SELECT="#ytp-caption-window-container";const YT_AD_SELECT=".video-ads";var YouTubeCaptionProvider_setting=/*#__PURE__*/_classPrivateFieldKey("setting");var _videoId=/*#__PURE__*/_classPrivateFieldKey("videoId");var _subtitles=/*#__PURE__*/_classPrivateFieldKey("subtitles");var _managerInstance=/*#__PURE__*/_classPrivateFieldKey("managerInstance");var _toggleButton=/*#__PURE__*/_classPrivateFieldKey("toggleButton");var _enabled=/*#__PURE__*/_classPrivateFieldKey("enabled");var _ytControls=/*#__PURE__*/_classPrivateFieldKey("ytControls");var _isBusy=/*#__PURE__*/_classPrivateFieldKey("isBusy");var _fromLang=/*#__PURE__*/_classPrivateFieldKey("fromLang");var _notificationEl=/*#__PURE__*/_classPrivateFieldKey("notificationEl");var _notificationTimeout=/*#__PURE__*/_classPrivateFieldKey("notificationTimeout");var _i18n=/*#__PURE__*/_classPrivateFieldKey("i18n");var YouTubeCaptionProvider_videoEl=/*#__PURE__*/_classPrivateFieldKey("videoEl");var _moAds=/*#__PURE__*/_classPrivateFieldKey("moAds");var _waitForElement=/*#__PURE__*/_classPrivateFieldKey("waitForElement");var _doubleClick=/*#__PURE__*/_classPrivateFieldKey("doubleClick");var _injectToggleButton=/*#__PURE__*/_classPrivateFieldKey("injectToggleButton");var _isSameLang=/*#__PURE__*/_classPrivateFieldKey("isSameLang");var _findCaptionTrack=/*#__PURE__*/_classPrivateFieldKey("findCaptionTrack");var _getCaptionTracks=/*#__PURE__*/_classPrivateFieldKey("getCaptionTracks");var _getSubtitleEvents=/*#__PURE__*/_classPrivateFieldKey("getSubtitleEvents");var _getVideoId=/*#__PURE__*/_classPrivateFieldKey("getVideoId");var _aiSegment=/*#__PURE__*/_classPrivateFieldKey("aiSegment");var _handleInterceptedRequest=/*#__PURE__*/_classPrivateFieldKey("handleInterceptedRequest");var _onCaptionsReady=/*#__PURE__*/_classPrivateFieldKey("onCaptionsReady");var _startManager=/*#__PURE__*/_classPrivateFieldKey("startManager");var _destroyManager=/*#__PURE__*/_classPrivateFieldKey("destroyManager");var _formatSubtitles=/*#__PURE__*/_classPrivateFieldKey("formatSubtitles");var _isQualityPoor=/*#__PURE__*/_classPrivateFieldKey("isQualityPoor");var _processSubtitles=/*#__PURE__*/_classPrivateFieldKey("processSubtitles");var _flatEvents=/*#__PURE__*/_classPrivateFieldKey("flatEvents");var _splitEventsIntoChunks=/*#__PURE__*/_classPrivateFieldKey("splitEventsIntoChunks");var _processRemainingChunksAsync=/*#__PURE__*/_classPrivateFieldKey("processRemainingChunksAsync");var _createNotificationElement=/*#__PURE__*/_classPrivateFieldKey("createNotificationElement");var _showNotification=/*#__PURE__*/_classPrivateFieldKey("showNotification");class YouTubeCaptionProvider{constructor(){let setting=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};Object.defineProperty(this,_showNotification,{value:_showNotification2});Object.defineProperty(this,_createNotificationElement,{value:_createNotificationElement2});Object.defineProperty(this,_processRemainingChunksAsync,{value:_processRemainingChunksAsync2});Object.defineProperty(this,_splitEventsIntoChunks,{value:_splitEventsIntoChunks2});Object.defineProperty(this,_flatEvents,{value:_flatEvents2});Object.defineProperty(this,_processSubtitles,{value:_processSubtitles2});Object.defineProperty(this,_isQualityPoor,{value:_isQualityPoor2});Object.defineProperty(this,_formatSubtitles,{value:_formatSubtitles2});Object.defineProperty(this,_destroyManager,{value:_destroyManager2});Object.defineProperty(this,_startManager,{value:_startManager2});Object.defineProperty(this,_onCaptionsReady,{value:_onCaptionsReady2});Object.defineProperty(this,_handleInterceptedRequest,{value:_handleInterceptedRequest2});Object.defineProperty(this,_aiSegment,{value:_aiSegment2});Object.defineProperty(this,_getVideoId,{value:_getVideoId2});Object.defineProperty(this,_getSubtitleEvents,{value:_getSubtitleEvents2});Object.defineProperty(this,_getCaptionTracks,{value:_getCaptionTracks2});// todo: 优化逻辑 -Object.defineProperty(this,_findCaptionTrack,{value:_findCaptionTrack2});Object.defineProperty(this,_isSameLang,{value:_isSameLang2});Object.defineProperty(this,_injectToggleButton,{value:_injectToggleButton2});Object.defineProperty(this,_doubleClick,{value:_doubleClick2});Object.defineProperty(this,_waitForElement,{value:_waitForElement2});Object.defineProperty(this,_moAds,{value:_moAds2});Object.defineProperty(this,YouTubeCaptionProvider_videoEl,{get:_get_videoEl,set:void 0});Object.defineProperty(this,YouTubeCaptionProvider_setting,{writable:true,value:{}});Object.defineProperty(this,_videoId,{writable:true,value:""});Object.defineProperty(this,_subtitles,{writable:true,value:[]});Object.defineProperty(this,_managerInstance,{writable:true,value:null});Object.defineProperty(this,_toggleButton,{writable:true,value:null});Object.defineProperty(this,_enabled,{writable:true,value:false});Object.defineProperty(this,_ytControls,{writable:true,value:null});Object.defineProperty(this,_isBusy,{writable:true,value:false});Object.defineProperty(this,_fromLang,{writable:true,value:"auto"});Object.defineProperty(this,_notificationEl,{writable:true,value:null});Object.defineProperty(this,_notificationTimeout,{writable:true,value:null});Object.defineProperty(this,_i18n,{writable:true,value:()=>""});_classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting]=setting;_classPrivateFieldBase(this,_i18n)[_i18n]=newI18n(setting.uiLang||"zh");}initialize(){window.addEventListener("message",event=>{var _event$data;if(((_event$data=event.data)===null||_event$data===void 0?void 0:_event$data.type)===MSG_XHR_DATA_YOUTUBE){const{url,response}=event.data;if(url&&response){_classPrivateFieldBase(this,_handleInterceptedRequest)[_handleInterceptedRequest](url,response);}}});window.addEventListener("yt-navigate-finish",()=>{setTimeout(()=>{if(_classPrivateFieldBase(this,_toggleButton)[_toggleButton]){_classPrivateFieldBase(this,_toggleButton)[_toggleButton].style.opacity="0.5";}_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();_classPrivateFieldBase(this,_doubleClick)[_doubleClick]();},1000);});_classPrivateFieldBase(this,_waitForElement)[_waitForElement](CONTORLS_SELECT,ytControls=>_classPrivateFieldBase(this,_injectToggleButton)[_injectToggleButton](ytControls));_classPrivateFieldBase(this,_waitForElement)[_waitForElement](YT_AD_SELECT,adContainer=>{_classPrivateFieldBase(this,_moAds)[_moAds](adContainer);});}}function _get_videoEl(){return document.querySelector(VIDEO_SELECT);}function _moAds2(adContainer){const adLayoutSelector=".ytp-ad-player-overlay-layout";const skipBtnSelector=".ytp-skip-ad-button, .ytp-ad-skip-button, .ytp-ad-skip-button-modern";const observer=new MutationObserver(mutations=>{for(const mutation of mutations){if(mutation.type==="childList"){const videoEl=_classPrivateFieldBase(this,YouTubeCaptionProvider_videoEl)[YouTubeCaptionProvider_videoEl];mutation.addedNodes.forEach(node=>{if(node.nodeType!==Node.ELEMENT_NODE)return;if(node.matches(adLayoutSelector)){logger.debug("Youtube Provider: AD start playing!",node);// todo: 顺带把广告快速跳过 -if(videoEl){videoEl.playbackRate=16;videoEl.currentTime=videoEl.duration;}if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){_classPrivateFieldBase(this,_managerInstance)[_managerInstance].setIsAdPlaying(true);}}else if(node.matches(skipBtnSelector)){logger.debug("Youtube Provider: AD skip button!",node);node.click();}const skipBtn=node===null||node===void 0?void 0:node.querySelector(skipBtnSelector);if(skipBtn){logger.debug("Youtube Provider: AD skip button!!",skipBtn);skipBtn.click();}});mutation.removedNodes.forEach(node=>{if(node.nodeType!==Node.ELEMENT_NODE)return;if(node.matches(adLayoutSelector)){logger.debug("Youtube Provider: Ad ends!");if(videoEl){videoEl.playbackRate=1;}if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){_classPrivateFieldBase(this,_managerInstance)[_managerInstance].setIsAdPlaying(false);}}});}}});observer.observe(adContainer,{childList:true,subtree:true});}function _waitForElement2(selector,callback){const element=document.querySelector(selector);if(element){callback(element);return;}const observer=new MutationObserver((mutations,obs)=>{const targetNode=document.querySelector(selector);if(targetNode){obs.disconnect();callback(targetNode);}});observer.observe(document.body,{childList:true,subtree:true});}async function _doubleClick2(){var _classPrivateFieldLoo;const button=(_classPrivateFieldLoo=_classPrivateFieldBase(this,_ytControls)[_ytControls])===null||_classPrivateFieldLoo===void 0?void 0:_classPrivateFieldLoo.querySelector("button.ytp-subtitles-button");if(button){await sleep(randomBetween(50,100));button.click();await sleep(randomBetween(500,1000));button.click();}}function _injectToggleButton2(ytControls){var _classPrivateFieldLoo4;_classPrivateFieldBase(this,_ytControls)[_ytControls]=ytControls;const kissControls=document.createElement("div");kissControls.className="kiss-bilingual-subtitle-controls";Object.assign(kissControls.style,{height:"100%"});const toggleButton=document.createElement("button");toggleButton.className="ytp-button notranslate kiss-bilingual-subtitle-button";toggleButton.title=APP_NAME;Object.assign(toggleButton.style,{color:"white",opacity:"0.5"});toggleButton.appendChild(createLogoSVG());kissControls.appendChild(toggleButton);toggleButton.onclick=()=>{if(_classPrivateFieldBase(this,_isBusy)[_isBusy]){logger.info("Youtube Provider: It's budy now...");_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_data_processing"));}if(!_classPrivateFieldBase(this,_enabled)[_enabled]){var _classPrivateFieldLoo2;logger.info("Youtube Provider: Feature toggled ON.");_classPrivateFieldBase(this,_enabled)[_enabled]=true;(_classPrivateFieldLoo2=_classPrivateFieldBase(this,_toggleButton)[_toggleButton])===null||_classPrivateFieldLoo2===void 0?void 0:_classPrivateFieldLoo2.replaceChildren(createLogoSVG({isSelected:true}));_classPrivateFieldBase(this,_startManager)[_startManager]();}else{var _classPrivateFieldLoo3;logger.info("Youtube Provider: Feature toggled OFF.");_classPrivateFieldBase(this,_enabled)[_enabled]=false;(_classPrivateFieldLoo3=_classPrivateFieldBase(this,_toggleButton)[_toggleButton])===null||_classPrivateFieldLoo3===void 0?void 0:_classPrivateFieldLoo3.replaceChildren(createLogoSVG());_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();}};_classPrivateFieldBase(this,_toggleButton)[_toggleButton]=toggleButton;(_classPrivateFieldLoo4=_classPrivateFieldBase(this,_ytControls)[_ytControls])===null||_classPrivateFieldLoo4===void 0?void 0:_classPrivateFieldLoo4.prepend(kissControls);}function _isSameLang2(lang1,lang2){return lang1.slice(0,2)===lang2.slice(0,2);}function _findCaptionTrack2(captionTracks){if(!(captionTracks!==null&&captionTracks!==void 0&&captionTracks.length)){return null;}let captionTrack=null;const asrTrack=captionTracks.find(item=>item.kind==="asr");if(asrTrack){captionTrack=captionTracks.find(item=>item.kind!=="asr"&&_classPrivateFieldBase(this,_isSameLang)[_isSameLang](item.languageCode,asrTrack.languageCode));if(!captionTrack){captionTrack=asrTrack;}}if(!captionTrack){captionTrack=captionTracks.pop();}return captionTrack;}async function _getCaptionTracks2(videoId){try{var _data$captions,_data$captions$player;const url="https://www.youtube.com/watch?v=".concat(videoId);const html=await fetch(url).then(r=>r.text());const match=html.match(/ytInitialPlayerResponse\s*=\s*(\{.*?\});/s);if(!match)return[];const data=JSON.parse(match[1]);return(_data$captions=data.captions)===null||_data$captions===void 0?void 0:(_data$captions$player=_data$captions.playerCaptionsTracklistRenderer)===null||_data$captions$player===void 0?void 0:_data$captions$player.captionTracks;}catch(err){logger.info("Youtube Provider: get captionTracks",err);}}async function _getSubtitleEvents2(capUrl,potUrl,responseText){if(!potUrl.searchParams.get("tlang")&&potUrl.searchParams.get("kind")===capUrl.searchParams.get("kind")&&_classPrivateFieldBase(this,_isSameLang)[_isSameLang](potUrl.searchParams.get("lang"),capUrl.searchParams.get("lang"))){try{const json=JSON.parse(responseText);return json===null||json===void 0?void 0:json.events;}catch(err){logger.info("Youtube Provider: parse responseText",err);return null;}}try{potUrl.searchParams.delete("tlang");potUrl.searchParams.set("lang",capUrl.searchParams.get("lang"));potUrl.searchParams.set("fmt","json3");if(capUrl.searchParams.get("kind")){potUrl.searchParams.set("kind",capUrl.searchParams.get("kind"));}else{potUrl.searchParams.delete("kind");}const res=await fetch(potUrl.href);if(res!==null&&res!==void 0&&res.ok){const json=await res.json();return json===null||json===void 0?void 0:json.events;}logger.info("Youtube Provider: Failed to fetch subtitles: ".concat(res.status));return null;}catch(error){logger.info("Youtube Provider: fetching subtitles error",error);return null;}}function _getVideoId2(){const docUrl=new URL(document.location.href);return docUrl.searchParams.get("v");}async function _aiSegment2(_ref){let{videoId,fromLang,toLang,chunkEvents,segApiSetting}=_ref;try{const events=chunkEvents.filter(item=>item.text);const chunkSign="".concat(events[0].start," --> ").concat(events[events.length-1].end);logger.debug("Youtube Provider: aiSegment events",{videoId,chunkSign,fromLang,toLang,events});const subtitles=await apiSubtitle({videoId,chunkSign,fromLang,toLang,events,apiSetting:segApiSetting});logger.debug("Youtube Provider: aiSegment subtitles",subtitles);if(Array.isArray(subtitles)){return subtitles;}}catch(err){logger.info("Youtube Provider: ai segmentation",err);}return[];}async function _handleInterceptedRequest2(url,responseText){if(_classPrivateFieldBase(this,_isBusy)[_isBusy]){logger.info("Youtube Provider is busy...");return;}_classPrivateFieldBase(this,_isBusy)[_isBusy]=true;try{const videoId=_classPrivateFieldBase(this,_getVideoId)[_getVideoId]();if(!videoId){logger.info("Youtube Provider: videoId not found.");return;}if(videoId===_classPrivateFieldBase(this,_videoId)[_videoId]){logger.info("Youtube Provider: videoId already processed.");return;}const potUrl=new URL(url);if(videoId!==potUrl.searchParams.get("v")){logger.info("Youtube Provider: skip other timedtext.");return;}const{segApiSetting,toLang}=_classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting];const captionTracks=await _classPrivateFieldBase(this,_getCaptionTracks)[_getCaptionTracks](videoId);const captionTrack=_classPrivateFieldBase(this,_findCaptionTrack)[_findCaptionTrack](captionTracks);if(!captionTrack){logger.info("Youtube Provider: CaptionTrack not found.");return;}const capUrl=new URL(captionTrack.baseUrl);const events=await _classPrivateFieldBase(this,_getSubtitleEvents)[_getSubtitleEvents](capUrl,potUrl,responseText);if(!(events!==null&&events!==void 0&&events.length)){logger.info("Youtube Provider: SubtitleEvents not got.");return;}const lang=potUrl.searchParams.get("lang");const fromLang=OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang)||OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang.slice(0,2))||"auto";logger.debug("Youtube Provider: fromLang: ".concat(fromLang,", toLang: ").concat(toLang));if(_classPrivateFieldBase(this,_isSameLang)[_isSameLang](fromLang,toLang)){logger.info("Youtube Provider: skip same lang",fromLang,toLang);return;}_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("starting_to_process_subtitle"));const flatEvents=_classPrivateFieldBase(this,_flatEvents)[_flatEvents](events);if(!flatEvents.length)return;if(potUrl.searchParams.get("kind")==="asr"&&segApiSetting){logger.info("Youtube Provider: Starting AI ...");const eventChunks=_classPrivateFieldBase(this,_splitEventsIntoChunks)[_splitEventsIntoChunks](flatEvents,segApiSetting.chunkLength);const subtitlesFallback=()=>_classPrivateFieldBase(this,_formatSubtitles)[_formatSubtitles](flatEvents,fromLang);if(eventChunks.length===0){_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:subtitlesFallback(),fromLang,isInitialLoad:true});return;}const firstChunkEvents=eventChunks[0];const firstBatchSubtitles=await _classPrivateFieldBase(this,_aiSegment)[_aiSegment]({videoId,chunkEvents:firstChunkEvents,fromLang,toLang,segApiSetting});if(!(firstBatchSubtitles!==null&&firstBatchSubtitles!==void 0&&firstBatchSubtitles.length)){_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:subtitlesFallback(),fromLang,isInitialLoad:true});return;}_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:firstBatchSubtitles,fromLang,isInitialLoad:true});if(eventChunks.length>1){const remainingChunks=eventChunks.slice(1);_classPrivateFieldBase(this,_processRemainingChunksAsync)[_processRemainingChunksAsync]({chunks:remainingChunks,videoId,fromLang,toLang,segApiSetting});}}else{const subtitles=_classPrivateFieldBase(this,_formatSubtitles)[_formatSubtitles](flatEvents,fromLang);if(!(subtitles!==null&&subtitles!==void 0&&subtitles.length)){logger.info("Youtube Provider: No subtitles after format.");return;}_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles,fromLang,isInitialLoad:true});}}catch(error){logger.warn("Youtube Provider: unknow error",error);_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_load_failed"));}finally{_classPrivateFieldBase(this,_isBusy)[_isBusy]=false;}}function _onCaptionsReady2(_ref2){let{videoId,subtitles,fromLang}=_ref2;_classPrivateFieldBase(this,_subtitles)[_subtitles]=subtitles;_classPrivateFieldBase(this,_videoId)[_videoId]=videoId;_classPrivateFieldBase(this,_fromLang)[_fromLang]=fromLang;if(_classPrivateFieldBase(this,_toggleButton)[_toggleButton]){_classPrivateFieldBase(this,_toggleButton)[_toggleButton].style.opacity=subtitles.length?"1":"0.5";}_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();if(_classPrivateFieldBase(this,_enabled)[_enabled]){_classPrivateFieldBase(this,_startManager)[_startManager]();}else{_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_data_is_ready"));}}function _startManager2(){var _classPrivateFieldLoo5;if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){return;}const videoId=_classPrivateFieldBase(this,_getVideoId)[_getVideoId]();if(!((_classPrivateFieldLoo5=_classPrivateFieldBase(this,_subtitles)[_subtitles])!==null&&_classPrivateFieldLoo5!==void 0&&_classPrivateFieldLoo5.length)||_classPrivateFieldBase(this,_videoId)[_videoId]!==videoId){logger.info("Youtube Provider: No subtitles");_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("try_get_subtitle_data"));_classPrivateFieldBase(this,_doubleClick)[_doubleClick]();return;}const videoEl=_classPrivateFieldBase(this,YouTubeCaptionProvider_videoEl)[YouTubeCaptionProvider_videoEl];if(!videoEl){logger.warn("Youtube Provider: No video element found");return;}logger.info("Youtube Provider: Starting manager...");_classPrivateFieldBase(this,_managerInstance)[_managerInstance]=new BilingualSubtitleManager({videoEl,formattedSubtitles:_classPrivateFieldBase(this,_subtitles)[_subtitles],translationService:apiTranslate,setting:{..._classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting],fromLang:_classPrivateFieldBase(this,_fromLang)[_fromLang]}});_classPrivateFieldBase(this,_managerInstance)[_managerInstance].start();_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_load_succeed"));const ytCaption=document.querySelector(YT_CAPTION_SELECT);ytCaption&&(ytCaption.style.display="none");}function _destroyManager2(){if(!_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){return;}logger.info("Youtube Provider: Destroying manager...");_classPrivateFieldBase(this,_managerInstance)[_managerInstance].destroy();_classPrivateFieldBase(this,_managerInstance)[_managerInstance]=null;const ytCaption=document.querySelector(YT_CAPTION_SELECT);ytCaption&&(ytCaption.style.display="block");}function _formatSubtitles2(flatEvents,lang){if(!(flatEvents!==null&&flatEvents!==void 0&&flatEvents.length))return[];const noSpaceLanguages=["zh",// 中文 +Object.defineProperty(this,_findCaptionTrack,{value:_findCaptionTrack2});Object.defineProperty(this,_isSameLang,{value:_isSameLang2});Object.defineProperty(this,_injectToggleButton,{value:_injectToggleButton2});Object.defineProperty(this,_doubleClick,{value:_doubleClick2});Object.defineProperty(this,_waitForElement,{value:_waitForElement2});Object.defineProperty(this,_moAds,{value:_moAds2});Object.defineProperty(this,YouTubeCaptionProvider_videoEl,{get:_get_videoEl,set:void 0});Object.defineProperty(this,YouTubeCaptionProvider_setting,{writable:true,value:{}});Object.defineProperty(this,_videoId,{writable:true,value:""});Object.defineProperty(this,_subtitles,{writable:true,value:[]});Object.defineProperty(this,_managerInstance,{writable:true,value:null});Object.defineProperty(this,_toggleButton,{writable:true,value:null});Object.defineProperty(this,_enabled,{writable:true,value:false});Object.defineProperty(this,_ytControls,{writable:true,value:null});Object.defineProperty(this,_isBusy,{writable:true,value:false});Object.defineProperty(this,_fromLang,{writable:true,value:"auto"});Object.defineProperty(this,_notificationEl,{writable:true,value:null});Object.defineProperty(this,_notificationTimeout,{writable:true,value:null});Object.defineProperty(this,_i18n,{writable:true,value:()=>""});_classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting]=setting;_classPrivateFieldBase(this,_i18n)[_i18n]=newI18n(setting.uiLang||"zh");}initialize(){window.addEventListener("message",event=>{var _event$data;if(((_event$data=event.data)===null||_event$data===void 0?void 0:_event$data.type)===MSG_XHR_DATA_YOUTUBE){const{url,response}=event.data;if(url&&response){_classPrivateFieldBase(this,_handleInterceptedRequest)[_handleInterceptedRequest](url,response);}}});window.addEventListener("yt-navigate-finish",()=>{setTimeout(()=>{if(_classPrivateFieldBase(this,_toggleButton)[_toggleButton]){_classPrivateFieldBase(this,_toggleButton)[_toggleButton].style.opacity="0.5";}_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();_classPrivateFieldBase(this,_doubleClick)[_doubleClick]();},1000);});_classPrivateFieldBase(this,_waitForElement)[_waitForElement](CONTORLS_SELECT,ytControls=>_classPrivateFieldBase(this,_injectToggleButton)[_injectToggleButton](ytControls));_classPrivateFieldBase(this,_waitForElement)[_waitForElement](YT_AD_SELECT,adContainer=>{_classPrivateFieldBase(this,_moAds)[_moAds](adContainer);});}}function _get_videoEl(){return document.querySelector(VIDEO_SELECT);}function _moAds2(adContainer){const{skipAd=false}=_classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting];const adLayoutSelector=".ytp-ad-player-overlay-layout";const skipBtnSelector=".ytp-skip-ad-button, .ytp-ad-skip-button, .ytp-ad-skip-button-modern";const observer=new MutationObserver(mutations=>{for(const mutation of mutations){if(mutation.type==="childList"){const videoEl=_classPrivateFieldBase(this,YouTubeCaptionProvider_videoEl)[YouTubeCaptionProvider_videoEl];mutation.addedNodes.forEach(node=>{if(node.nodeType!==Node.ELEMENT_NODE)return;if(node.matches(adLayoutSelector)){logger.debug("Youtube Provider: AD start playing!",node);// todo: 顺带把广告快速跳过 +if(videoEl&&skipAd){videoEl.playbackRate=16;videoEl.currentTime=videoEl.duration;}if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){_classPrivateFieldBase(this,_managerInstance)[_managerInstance].setIsAdPlaying(true);}}else if(node.matches(skipBtnSelector)&&skipAd){logger.debug("Youtube Provider: AD skip button!",node);node.click();}if(skipAd){const skipBtn=node===null||node===void 0?void 0:node.querySelector(skipBtnSelector);if(skipBtn){logger.debug("Youtube Provider: AD skip button!!",skipBtn);skipBtn.click();}}});mutation.removedNodes.forEach(node=>{if(node.nodeType!==Node.ELEMENT_NODE)return;if(node.matches(adLayoutSelector)){logger.debug("Youtube Provider: Ad ends!");if(videoEl&&skipAd){videoEl.playbackRate=1;}if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){_classPrivateFieldBase(this,_managerInstance)[_managerInstance].setIsAdPlaying(false);}}});}}});observer.observe(adContainer,{childList:true,subtree:true});}function _waitForElement2(selector,callback){const element=document.querySelector(selector);if(element){callback(element);return;}const observer=new MutationObserver((mutations,obs)=>{const targetNode=document.querySelector(selector);if(targetNode){obs.disconnect();callback(targetNode);}});observer.observe(document.body,{childList:true,subtree:true});}async function _doubleClick2(){var _classPrivateFieldLoo;const button=(_classPrivateFieldLoo=_classPrivateFieldBase(this,_ytControls)[_ytControls])===null||_classPrivateFieldLoo===void 0?void 0:_classPrivateFieldLoo.querySelector("button.ytp-subtitles-button");if(button){await sleep(randomBetween(50,100));button.click();await sleep(randomBetween(500,1000));button.click();}}function _injectToggleButton2(ytControls){var _classPrivateFieldLoo4;_classPrivateFieldBase(this,_ytControls)[_ytControls]=ytControls;const kissControls=document.createElement("div");kissControls.className="notranslate kiss-subtitle-controls";Object.assign(kissControls.style,{height:"100%"});const toggleButton=document.createElement("button");toggleButton.className="ytp-button kiss-subtitle-button";toggleButton.title=APP_NAME;Object.assign(toggleButton.style,{color:"white",opacity:"0.5"});toggleButton.appendChild(createLogoSVG());kissControls.appendChild(toggleButton);toggleButton.onclick=()=>{if(_classPrivateFieldBase(this,_isBusy)[_isBusy]){logger.info("Youtube Provider: It's budy now...");_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_data_processing"));}if(!_classPrivateFieldBase(this,_enabled)[_enabled]){var _classPrivateFieldLoo2;logger.info("Youtube Provider: Feature toggled ON.");_classPrivateFieldBase(this,_enabled)[_enabled]=true;(_classPrivateFieldLoo2=_classPrivateFieldBase(this,_toggleButton)[_toggleButton])===null||_classPrivateFieldLoo2===void 0?void 0:_classPrivateFieldLoo2.replaceChildren(createLogoSVG({isSelected:true}));_classPrivateFieldBase(this,_startManager)[_startManager]();}else{var _classPrivateFieldLoo3;logger.info("Youtube Provider: Feature toggled OFF.");_classPrivateFieldBase(this,_enabled)[_enabled]=false;(_classPrivateFieldLoo3=_classPrivateFieldBase(this,_toggleButton)[_toggleButton])===null||_classPrivateFieldLoo3===void 0?void 0:_classPrivateFieldLoo3.replaceChildren(createLogoSVG());_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();}};_classPrivateFieldBase(this,_toggleButton)[_toggleButton]=toggleButton;(_classPrivateFieldLoo4=_classPrivateFieldBase(this,_ytControls)[_ytControls])===null||_classPrivateFieldLoo4===void 0?void 0:_classPrivateFieldLoo4.prepend(kissControls);}function _isSameLang2(lang1,lang2){return lang1.slice(0,2)===lang2.slice(0,2);}function _findCaptionTrack2(captionTracks){if(!(captionTracks!==null&&captionTracks!==void 0&&captionTracks.length)){return null;}let captionTrack=null;const asrTrack=captionTracks.find(item=>item.kind==="asr");if(asrTrack){captionTrack=captionTracks.find(item=>item.kind!=="asr"&&_classPrivateFieldBase(this,_isSameLang)[_isSameLang](item.languageCode,asrTrack.languageCode));if(!captionTrack){captionTrack=asrTrack;}}if(!captionTrack){captionTrack=captionTracks.pop();}return captionTrack;}async function _getCaptionTracks2(videoId){try{var _data$captions,_data$captions$player;const url="https://www.youtube.com/watch?v=".concat(videoId);const html=await fetch(url).then(r=>r.text());const match=html.match(/ytInitialPlayerResponse\s*=\s*(\{.*?\});/s);if(!match)return[];const data=JSON.parse(match[1]);return(_data$captions=data.captions)===null||_data$captions===void 0?void 0:(_data$captions$player=_data$captions.playerCaptionsTracklistRenderer)===null||_data$captions$player===void 0?void 0:_data$captions$player.captionTracks;}catch(err){logger.info("Youtube Provider: get captionTracks",err);}}async function _getSubtitleEvents2(capUrl,potUrl,responseText){if(!potUrl.searchParams.get("tlang")&&potUrl.searchParams.get("kind")===capUrl.searchParams.get("kind")&&_classPrivateFieldBase(this,_isSameLang)[_isSameLang](potUrl.searchParams.get("lang"),capUrl.searchParams.get("lang"))){try{const json=JSON.parse(responseText);return json===null||json===void 0?void 0:json.events;}catch(err){logger.info("Youtube Provider: parse responseText",err);return null;}}try{potUrl.searchParams.delete("tlang");potUrl.searchParams.set("lang",capUrl.searchParams.get("lang"));potUrl.searchParams.set("fmt","json3");if(capUrl.searchParams.get("kind")){potUrl.searchParams.set("kind",capUrl.searchParams.get("kind"));}else{potUrl.searchParams.delete("kind");}const res=await fetch(potUrl.href);if(res!==null&&res!==void 0&&res.ok){const json=await res.json();return json===null||json===void 0?void 0:json.events;}logger.info("Youtube Provider: Failed to fetch subtitles: ".concat(res.status));return null;}catch(error){logger.info("Youtube Provider: fetching subtitles error",error);return null;}}function _getVideoId2(){const docUrl=new URL(document.location.href);return docUrl.searchParams.get("v");}async function _aiSegment2(_ref){let{videoId,fromLang,toLang,chunkEvents,segApiSetting}=_ref;try{const events=chunkEvents.filter(item=>item.text);const chunkSign="".concat(events[0].start," --> ").concat(events[events.length-1].end);logger.debug("Youtube Provider: aiSegment events",{videoId,chunkSign,fromLang,toLang,events});const subtitles=await apiSubtitle({videoId,chunkSign,fromLang,toLang,events,apiSetting:segApiSetting});logger.debug("Youtube Provider: aiSegment subtitles",subtitles);if(Array.isArray(subtitles)){return subtitles;}}catch(err){logger.info("Youtube Provider: ai segmentation",err);}return[];}async function _handleInterceptedRequest2(url,responseText){if(_classPrivateFieldBase(this,_isBusy)[_isBusy]){logger.info("Youtube Provider is busy...");return;}_classPrivateFieldBase(this,_isBusy)[_isBusy]=true;try{const videoId=_classPrivateFieldBase(this,_getVideoId)[_getVideoId]();if(!videoId){logger.info("Youtube Provider: videoId not found.");return;}if(videoId===_classPrivateFieldBase(this,_videoId)[_videoId]){logger.info("Youtube Provider: videoId already processed.");return;}const potUrl=new URL(url);if(videoId!==potUrl.searchParams.get("v")){logger.info("Youtube Provider: skip other timedtext.");return;}const{segApiSetting,toLang}=_classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting];const captionTracks=await _classPrivateFieldBase(this,_getCaptionTracks)[_getCaptionTracks](videoId);const captionTrack=_classPrivateFieldBase(this,_findCaptionTrack)[_findCaptionTrack](captionTracks);if(!captionTrack){logger.info("Youtube Provider: CaptionTrack not found.");return;}const capUrl=new URL(captionTrack.baseUrl);const events=await _classPrivateFieldBase(this,_getSubtitleEvents)[_getSubtitleEvents](capUrl,potUrl,responseText);if(!(events!==null&&events!==void 0&&events.length)){logger.info("Youtube Provider: SubtitleEvents not got.");return;}const lang=potUrl.searchParams.get("lang");const fromLang=OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang)||OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang.slice(0,2))||"auto";logger.debug("Youtube Provider: fromLang: ".concat(fromLang,", toLang: ").concat(toLang));if(_classPrivateFieldBase(this,_isSameLang)[_isSameLang](fromLang,toLang)){logger.info("Youtube Provider: skip same lang",fromLang,toLang);return;}_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("starting_to_process_subtitle"));const flatEvents=_classPrivateFieldBase(this,_flatEvents)[_flatEvents](events);if(!flatEvents.length)return;if(potUrl.searchParams.get("kind")==="asr"&&segApiSetting){logger.info("Youtube Provider: Starting AI ...");const eventChunks=_classPrivateFieldBase(this,_splitEventsIntoChunks)[_splitEventsIntoChunks](flatEvents,segApiSetting.chunkLength);const subtitlesFallback=()=>_classPrivateFieldBase(this,_formatSubtitles)[_formatSubtitles](flatEvents,fromLang);if(eventChunks.length===0){_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:subtitlesFallback(),fromLang,isInitialLoad:true});return;}const firstChunkEvents=eventChunks[0];const firstBatchSubtitles=await _classPrivateFieldBase(this,_aiSegment)[_aiSegment]({videoId,chunkEvents:firstChunkEvents,fromLang,toLang,segApiSetting});if(!(firstBatchSubtitles!==null&&firstBatchSubtitles!==void 0&&firstBatchSubtitles.length)){_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:subtitlesFallback(),fromLang,isInitialLoad:true});return;}_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:firstBatchSubtitles,fromLang,isInitialLoad:true});if(eventChunks.length>1){const remainingChunks=eventChunks.slice(1);_classPrivateFieldBase(this,_processRemainingChunksAsync)[_processRemainingChunksAsync]({chunks:remainingChunks,videoId,fromLang,toLang,segApiSetting});}}else{const subtitles=_classPrivateFieldBase(this,_formatSubtitles)[_formatSubtitles](flatEvents,fromLang);if(!(subtitles!==null&&subtitles!==void 0&&subtitles.length)){logger.info("Youtube Provider: No subtitles after format.");return;}_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles,fromLang,isInitialLoad:true});}}catch(error){logger.warn("Youtube Provider: unknow error",error);_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_load_failed"));}finally{_classPrivateFieldBase(this,_isBusy)[_isBusy]=false;}}function _onCaptionsReady2(_ref2){let{videoId,subtitles,fromLang}=_ref2;_classPrivateFieldBase(this,_subtitles)[_subtitles]=subtitles;_classPrivateFieldBase(this,_videoId)[_videoId]=videoId;_classPrivateFieldBase(this,_fromLang)[_fromLang]=fromLang;if(_classPrivateFieldBase(this,_toggleButton)[_toggleButton]){_classPrivateFieldBase(this,_toggleButton)[_toggleButton].style.opacity=subtitles.length?"1":"0.5";}_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();if(_classPrivateFieldBase(this,_enabled)[_enabled]){_classPrivateFieldBase(this,_startManager)[_startManager]();}else{_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_data_is_ready"));}}function _startManager2(){var _classPrivateFieldLoo5;if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){return;}const videoId=_classPrivateFieldBase(this,_getVideoId)[_getVideoId]();if(!((_classPrivateFieldLoo5=_classPrivateFieldBase(this,_subtitles)[_subtitles])!==null&&_classPrivateFieldLoo5!==void 0&&_classPrivateFieldLoo5.length)||_classPrivateFieldBase(this,_videoId)[_videoId]!==videoId){logger.info("Youtube Provider: No subtitles");_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("try_get_subtitle_data"));_classPrivateFieldBase(this,_doubleClick)[_doubleClick]();return;}const videoEl=_classPrivateFieldBase(this,YouTubeCaptionProvider_videoEl)[YouTubeCaptionProvider_videoEl];if(!videoEl){logger.warn("Youtube Provider: No video element found");return;}logger.info("Youtube Provider: Starting manager...");_classPrivateFieldBase(this,_managerInstance)[_managerInstance]=new BilingualSubtitleManager({videoEl,formattedSubtitles:_classPrivateFieldBase(this,_subtitles)[_subtitles],setting:{..._classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting],fromLang:_classPrivateFieldBase(this,_fromLang)[_fromLang]}});_classPrivateFieldBase(this,_managerInstance)[_managerInstance].start();_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_load_succeed"));const ytCaption=document.querySelector(YT_CAPTION_SELECT);ytCaption&&(ytCaption.style.display="none");}function _destroyManager2(){if(!_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){return;}logger.info("Youtube Provider: Destroying manager...");_classPrivateFieldBase(this,_managerInstance)[_managerInstance].destroy();_classPrivateFieldBase(this,_managerInstance)[_managerInstance]=null;const ytCaption=document.querySelector(YT_CAPTION_SELECT);ytCaption&&(ytCaption.style.display="block");}function _formatSubtitles2(flatEvents,lang){if(!(flatEvents!==null&&flatEvents!==void 0&&flatEvents.length))return[];const noSpaceLanguages=["zh",// 中文 "ja",// 日文 "ko",// 韩文(现代用空格,但结构上仍可连写) "th",// 泰文 @@ -35450,25 +35458,18 @@ if(videoEl){videoEl.playbackRate=16;videoEl.currentTime=videoEl.duration;}if(_cl const trustedTypesHelper=(()=>{const POLICY_NAME="kiss-translator-policy";let policy=null;if(globalThis.trustedTypes&&globalThis.trustedTypes.createPolicy){try{policy=globalThis.trustedTypes.createPolicy(POLICY_NAME,{createHTML:string=>string,createScript:string=>string,createScriptURL:string=>string});}catch(err){if(err.message.includes("already exists")){policy=globalThis.trustedTypes.policies.get(POLICY_NAME);}else{logger.info("cont create Trusted Types",err);}}}return{createHTML:htmlString=>{return policy?policy.createHTML(htmlString):htmlString;},createScript:scriptString=>{return policy?policy.createScript(scriptString):scriptString;},createScriptURL:urlString=>{return policy?policy.createScriptURL(urlString):urlString;},isEnabled:()=>policy!==null};})(); ;// CONCATENATED MODULE: ./src/libs/injector.js // Function to inject inline JavaScript code -const injectInlineJs=function(code){let id=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"kiss-translator-inline-js";if(document.getElementById(id)){return;}const el=document.createElement("script");el.type="text/javascript";el.id=id;el.textContent=trustedTypesHelper.createScript(code);(document.head||document.documentElement).appendChild(el);};// Function to inject external JavaScript file +const injectInlineJs=function(code){let id=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"kiss-translator-inline-js";if(document.getElementById(id)){return;}const el=document.createElement("script");el.type="text/javascript";el.id=id;el.textContent=trustedTypesHelper.createScript(code);(document.head||document.documentElement).appendChild(el);};const injectInlineJsBg=function(code){let id=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"kiss-translator-inline-js";if(document.getElementById(id)){return;}const el=document.createElement("script");el.type="text/javascript";el.id=id;el.textContent=code;(document.head||document.documentElement).appendChild(el);};// Function to inject external JavaScript file const injectExternalJs=function(src){let id=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"kiss-translator-external-js";if(document.getElementById(id)){return;}const el=document.createElement("script");el.type="text/javascript";el.id=id;el.src=trustedTypesHelper.createScriptURL(src);(document.head||document.documentElement).appendChild(el);};// Function to inject internal CSS code const injectInternalCss=styles=>{var _document$head;const el=document.createElement("style");el.setAttribute("data-source","kiss-inject injectInternalCss");el.textContent=styles;(_document$head=document.head)===null||_document$head===void 0?void 0:_document$head.appendChild(el);};// Function to inject external CSS file const injectExternalCss=href=>{var _document$head2;const el=document.createElement("link");el.setAttribute("data-source","kiss-inject injectExternalCss");el.setAttribute("rel","stylesheet");el.setAttribute("type","text/css");el.setAttribute("href",href);(_document$head2=document.head)===null||_document$head2===void 0?void 0:_document$head2.appendChild(el);}; -;// CONCATENATED MODULE: ./src/subtitle/XMLHttpRequestInjector.js -const XMLHttpRequestInjector=()=>{const originalOpen=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}const url=args[1];if(typeof url==="string"&&url.includes("timedtext")){this.addEventListener("load",function(){window.postMessage({type:"KISS_XHR_DATA_YOUTUBE",url:this.responseURL,response:this.responseText},window.location.origin);});}return originalOpen.apply(this,args);};}; +;// CONCATENATED MODULE: ./src/injectors/shadowroot.js +const shadowRootInjector=()=>{try{const orig=Element.prototype.attachShadow;Element.prototype.attachShadow=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}const root=orig.apply(this,args);window.postMessage({type:"KISS_SHADOW_ROOT_CREATED"},"*");return root;};}catch(err){console.log("shadowRootInjector",err);}}; +;// CONCATENATED MODULE: ./src/injectors/xmlhttp.js +const XMLHttpRequestInjector=()=>{try{const originalOpen=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}const url=args[1];if(typeof url==="string"&&url.includes("timedtext")){this.addEventListener("load",function(){window.postMessage({type:"KISS_XHR_DATA_YOUTUBE",url:this.responseURL,response:this.responseText},window.location.origin);});}return originalOpen.apply(this,args);};}catch(err){console.log("XMLHttpRequestInjector",err);}}; +;// CONCATENATED MODULE: ./src/injectors/index.js +const INJECTOR={subtitle:"injector-subtitle.js",shadowroot:"injector-shadowroot.js"};const injectorMap={[INJECTOR.subtitle]:XMLHttpRequestInjector,[INJECTOR.shadowroot]:shadowRootInjector};function injectJs(name){let id=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"kiss-translator-inject-js";const injector=injectorMap[name];if(!injector)return;if(isExt){const src=browser.runtime.getURL(name);injectExternalJs(src,id);}else{injectInlineJs("(".concat(injector,")()"),id);}} ;// CONCATENATED MODULE: ./src/subtitle/subtitle.js -const providers=[{pattern:"https://www.youtube.com",start:YouTubeInitializer}];function runSubtitle(_ref){let{href,setting,isUserscript}=_ref;try{const subtitleSetting=setting.subtitleSetting||DEFAULT_SUBTITLE_SETTING;if(!subtitleSetting.enabled){return;}const provider=providers.find(item=>isMatch(href,item.pattern));if(provider){const id="kiss-translator-xmlHttp-injector";if(isUserscript){injectInlineJs("(".concat(XMLHttpRequestInjector,")()"),id);}else{const src=browser.runtime.getURL("injector.js");injectExternalJs(src,id);}const apiSetting=setting.transApis.find(api=>api.apiSlug===subtitleSetting.apiSlug)||DEFAULT_API_SETTING;const segApiSetting=setting.transApis.find(api=>api.apiSlug===subtitleSetting.segSlug);provider.start({...subtitleSetting,apiSetting,segApiSetting,uiLang:setting.uiLang});}}catch(err){logger.error("start subtitle provider",err);}} -;// CONCATENATED MODULE: ./src/libs/shadowRootMonitor.js -/** - * @class ShadowRootMonitor - * @description 通过覆写 Element.prototype.attachShadow 来监控页面上所有新创建的 Shadow DOM - */class ShadowRootMonitor{/** - * @param {function(ShadowRoot): void} callback - 当一个新的 shadowRoot 被创建时调用的回调函数。 - */constructor(callback){if(typeof callback!=="function"){throw new Error("Callback must be a function.");}this.callback=callback;this.isMonitoring=false;this.originalAttachShadow=Element.prototype.attachShadow;}/** - * 开始监控 shadowRoot 的创建。 - */start(){if(this.isMonitoring){return;}const monitorInstance=this;Element.prototype.attachShadow=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}const shadowRoot=monitorInstance.originalAttachShadow.apply(this,args);if(shadowRoot){try{monitorInstance.callback(shadowRoot);}catch(error){log_kissLog("Error in ShadowRootMonitor callback",error);}}return shadowRoot;};this.isMonitoring=true;}/** - * 停止监控,并恢复原始的 attachShadow 方法。 - */stop(){if(!this.isMonitoring){return;}Element.prototype.attachShadow=this.originalAttachShadow;this.isMonitoring=false;}} +const providers=[{pattern:"https://www.youtube.com",start:YouTubeInitializer}];function runSubtitle(_ref){let{href,setting}=_ref;try{const subtitleSetting=setting.subtitleSetting||DEFAULT_SUBTITLE_SETTING;if(!subtitleSetting.enabled){return;}const provider=providers.find(item=>isMatch(href,item.pattern));if(provider){const id="kiss-translator-inject-subtitle-js";injectJs(INJECTOR.subtitle,id);const apiSetting=setting.transApis.find(api=>api.apiSlug===subtitleSetting.apiSlug)||DEFAULT_API_SETTING;const segApiSetting=setting.transApis.find(api=>api.apiSlug===subtitleSetting.segSlug);provider.start({...subtitleSetting,apiSetting,segApiSetting,uiLang:setting.uiLang});}}catch(err){logger.error("start subtitle provider",err);}} ;// CONCATENATED MODULE: ./node_modules/.pnpm/@babel+runtime@7.24.4/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js function _taggedTemplateLiteral(strings, raw) { if (!raw) { @@ -36535,8 +36536,8 @@ if(!deLang){try{var _browser$i18n,_res$languages,_res$languages$;const res=await var _class;/** * @class Translator * @description 翻译核心逻辑封装 - */var translator_setting=/*#__PURE__*/_classPrivateFieldKey("setting");var _rule=/*#__PURE__*/_classPrivateFieldKey("rule");var _isInitialized=/*#__PURE__*/_classPrivateFieldKey("isInitialized");var _isJsInjected=/*#__PURE__*/_classPrivateFieldKey("isJsInjected");var _mouseHoverEnabled=/*#__PURE__*/_classPrivateFieldKey("mouseHoverEnabled");var translator_enabled=/*#__PURE__*/_classPrivateFieldKey("enabled");var _runId=/*#__PURE__*/_classPrivateFieldKey("runId");var _termValues=/*#__PURE__*/_classPrivateFieldKey("termValues");var _combinedTermsRegex=/*#__PURE__*/_classPrivateFieldKey("combinedTermsRegex");var _combinedSkipsRegex=/*#__PURE__*/_classPrivateFieldKey("combinedSkipsRegex");var _placeholderRegex=/*#__PURE__*/_classPrivateFieldKey("placeholderRegex");var _translationTagName=/*#__PURE__*/_classPrivateFieldKey("translationTagName");var _eventName=/*#__PURE__*/_classPrivateFieldKey("eventName");var _docInfo=/*#__PURE__*/_classPrivateFieldKey("docInfo");var _glossary=/*#__PURE__*/_classPrivateFieldKey("glossary");var _textClass=/*#__PURE__*/_classPrivateFieldKey("textClass");var _textSheet=/*#__PURE__*/_classPrivateFieldKey("textSheet");var _apisMap=/*#__PURE__*/_classPrivateFieldKey("apisMap");var _favWords=/*#__PURE__*/_classPrivateFieldKey("favWords");var _observedNodes=/*#__PURE__*/_classPrivateFieldKey("observedNodes");var _translationNodes=/*#__PURE__*/_classPrivateFieldKey("translationNodes");var _viewNodes=/*#__PURE__*/_classPrivateFieldKey("viewNodes");var _processedNodes=/*#__PURE__*/_classPrivateFieldKey("processedNodes");var _rootNodes=/*#__PURE__*/_classPrivateFieldKey("rootNodes");var _skipMoNodes=/*#__PURE__*/_classPrivateFieldKey("skipMoNodes");var _removeKeydownHandler=/*#__PURE__*/_classPrivateFieldKey("removeKeydownHandler");var _hoveredNode=/*#__PURE__*/_classPrivateFieldKey("hoveredNode");var _boundMouseMoveHandler=/*#__PURE__*/_classPrivateFieldKey("boundMouseMoveHandler");var _boundKeyDownHandler=/*#__PURE__*/_classPrivateFieldKey("boundKeyDownHandler");var _io=/*#__PURE__*/_classPrivateFieldKey("io");var _mo=/*#__PURE__*/_classPrivateFieldKey("mo");var _dmm=/*#__PURE__*/_classPrivateFieldKey("dmm");var _srm=/*#__PURE__*/_classPrivateFieldKey("srm");var _rescanQueue=/*#__PURE__*/_classPrivateFieldKey("rescanQueue");var _isQueueProcessing=/*#__PURE__*/_classPrivateFieldKey("isQueueProcessing");var _ignoreSelector=/*#__PURE__*/_classPrivateFieldKey("ignoreSelector");var _apiSetting=/*#__PURE__*/_classPrivateFieldKey("apiSetting");var _placeholder=/*#__PURE__*/_classPrivateFieldKey("placeholder");var _run=/*#__PURE__*/_classPrivateFieldKey("run");var _init=/*#__PURE__*/_classPrivateFieldKey("init");var _createPlaceholderRegex=/*#__PURE__*/_classPrivateFieldKey("createPlaceholderRegex");var _createTextStyles=/*#__PURE__*/_classPrivateFieldKey("createTextStyles");var _injectSheet=/*#__PURE__*/_classPrivateFieldKey("injectSheet");var _parseTerms=/*#__PURE__*/_classPrivateFieldKey("parseTerms");var _parseAITerms=/*#__PURE__*/_classPrivateFieldKey("parseAITerms");var _getDocDescription=/*#__PURE__*/_classPrivateFieldKey("getDocDescription");var _createIntersectionObserver=/*#__PURE__*/_classPrivateFieldKey("createIntersectionObserver");var _createMutationObserver=/*#__PURE__*/_classPrivateFieldKey("createMutationObserver");var _createDebounceMouseMover=/*#__PURE__*/_classPrivateFieldKey("createDebounceMouseMover");var _createShadowRootMonitor=/*#__PURE__*/_classPrivateFieldKey("createShadowRootMonitor");var _handleMouseMove=/*#__PURE__*/_classPrivateFieldKey("handleMouseMove");var _handleKeyDown=/*#__PURE__*/_classPrivateFieldKey("handleKeyDown");var _toggleTargetNode=/*#__PURE__*/_classPrivateFieldKey("toggleTargetNode");var _findAllShadowRoots=/*#__PURE__*/_classPrivateFieldKey("findAllShadowRoots");var _findChangeContainer=/*#__PURE__*/_classPrivateFieldKey("findChangeContainer");var _queueForRescan=/*#__PURE__*/_classPrivateFieldKey("queueForRescan");var _rescanContainer=/*#__PURE__*/_classPrivateFieldKey("rescanContainer");var _reIO=/*#__PURE__*/_classPrivateFieldKey("reIO");var _reIOViewNodes=/*#__PURE__*/_classPrivateFieldKey("reIOViewNodes");var _startObserveShadowRoot=/*#__PURE__*/_classPrivateFieldKey("startObserveShadowRoot");var _startObserveRoot=/*#__PURE__*/_classPrivateFieldKey("startObserveRoot");var _startObserveNode=/*#__PURE__*/_classPrivateFieldKey("startObserveNode");var _queryNode=/*#__PURE__*/_classPrivateFieldKey("queryNode");var _scanNode=/*#__PURE__*/_classPrivateFieldKey("scanNode");var _processNode=/*#__PURE__*/_classPrivateFieldKey("processNode");var _highlightTextNode=/*#__PURE__*/_classPrivateFieldKey("highlightTextNode");var _highlightWordsDeeply=/*#__PURE__*/_classPrivateFieldKey("highlightWordsDeeply");var _splitTextNodesBySentence=/*#__PURE__*/_classPrivateFieldKey("splitTextNodesBySentence");var _removeHighlights=/*#__PURE__*/_classPrivateFieldKey("removeHighlights");var _removeBrTags=/*#__PURE__*/_classPrivateFieldKey("removeBrTags");var _shouldBreak=/*#__PURE__*/_classPrivateFieldKey("shouldBreak");var _isInvalidText=/*#__PURE__*/_classPrivateFieldKey("isInvalidText");var _translateNodeGroup=/*#__PURE__*/_classPrivateFieldKey("translateNodeGroup");var _serializeForTranslation=/*#__PURE__*/_classPrivateFieldKey("serializeForTranslation");var _restoreFromTranslation=/*#__PURE__*/_classPrivateFieldKey("restoreFromTranslation");var _translateFetch=/*#__PURE__*/_classPrivateFieldKey("translateFetch");var _findTranslationWrappers=/*#__PURE__*/_classPrivateFieldKey("findTranslationWrappers");var _cleanupAllNodes=/*#__PURE__*/_classPrivateFieldKey("cleanupAllNodes");var _cleanupAllTranslations=/*#__PURE__*/_classPrivateFieldKey("cleanupAllTranslations");var _cleanupDirectTranslations=/*#__PURE__*/_classPrivateFieldKey("cleanupDirectTranslations");var _removeTranslationElement=/*#__PURE__*/_classPrivateFieldKey("removeTranslationElement");var _restoreOriginal=/*#__PURE__*/_classPrivateFieldKey("restoreOriginal");var _removeNodes=/*#__PURE__*/_classPrivateFieldKey("removeNodes");var _toggleTranslationOnly=/*#__PURE__*/_classPrivateFieldKey("toggleTranslationOnly");var _updateStyle=/*#__PURE__*/_classPrivateFieldKey("updateStyle");var _refreshNode=/*#__PURE__*/_classPrivateFieldKey("refreshNode");var _performSyncNode=/*#__PURE__*/_classPrivateFieldKey("performSyncNode");var _resetOptions=/*#__PURE__*/_classPrivateFieldKey("resetOptions");var _enableMouseHover=/*#__PURE__*/_classPrivateFieldKey("enableMouseHover");var _disableMouseHover=/*#__PURE__*/_classPrivateFieldKey("disableMouseHover");var _initInjector=/*#__PURE__*/_classPrivateFieldKey("initInjector");var _removeInjector=/*#__PURE__*/_classPrivateFieldKey("removeInjector");var _translateTitle=/*#__PURE__*/_classPrivateFieldKey("translateTitle");class translator_Translator{// 默认规则 -static isElementOrFragment(el){return el instanceof Element||el instanceof DocumentFragment;}// 判断是否块级元素 + */var translator_setting=/*#__PURE__*/_classPrivateFieldKey("setting");var _rule=/*#__PURE__*/_classPrivateFieldKey("rule");var _isInitialized=/*#__PURE__*/_classPrivateFieldKey("isInitialized");var _isJsInjected=/*#__PURE__*/_classPrivateFieldKey("isJsInjected");var _isShadowRootJsInjected=/*#__PURE__*/_classPrivateFieldKey("isShadowRootJsInjected");var _mouseHoverEnabled=/*#__PURE__*/_classPrivateFieldKey("mouseHoverEnabled");var translator_enabled=/*#__PURE__*/_classPrivateFieldKey("enabled");var _runId=/*#__PURE__*/_classPrivateFieldKey("runId");var _termValues=/*#__PURE__*/_classPrivateFieldKey("termValues");var _combinedTermsRegex=/*#__PURE__*/_classPrivateFieldKey("combinedTermsRegex");var _combinedSkipsRegex=/*#__PURE__*/_classPrivateFieldKey("combinedSkipsRegex");var _placeholderRegex=/*#__PURE__*/_classPrivateFieldKey("placeholderRegex");var _translationTagName=/*#__PURE__*/_classPrivateFieldKey("translationTagName");var _eventName=/*#__PURE__*/_classPrivateFieldKey("eventName");var _docInfo=/*#__PURE__*/_classPrivateFieldKey("docInfo");var _glossary=/*#__PURE__*/_classPrivateFieldKey("glossary");var _textClass=/*#__PURE__*/_classPrivateFieldKey("textClass");var _textSheet=/*#__PURE__*/_classPrivateFieldKey("textSheet");var _apisMap=/*#__PURE__*/_classPrivateFieldKey("apisMap");var _favWords=/*#__PURE__*/_classPrivateFieldKey("favWords");var _observedNodes=/*#__PURE__*/_classPrivateFieldKey("observedNodes");var _translationNodes=/*#__PURE__*/_classPrivateFieldKey("translationNodes");var _viewNodes=/*#__PURE__*/_classPrivateFieldKey("viewNodes");var _processedNodes=/*#__PURE__*/_classPrivateFieldKey("processedNodes");var _rootNodes=/*#__PURE__*/_classPrivateFieldKey("rootNodes");var _skipMoNodes=/*#__PURE__*/_classPrivateFieldKey("skipMoNodes");var _removeKeydownHandler=/*#__PURE__*/_classPrivateFieldKey("removeKeydownHandler");var _hoveredNode=/*#__PURE__*/_classPrivateFieldKey("hoveredNode");var _boundMouseMoveHandler=/*#__PURE__*/_classPrivateFieldKey("boundMouseMoveHandler");var _boundKeyDownHandler=/*#__PURE__*/_classPrivateFieldKey("boundKeyDownHandler");var _windowMessageHandler=/*#__PURE__*/_classPrivateFieldKey("windowMessageHandler");var _debouncedFindShadowRoot=/*#__PURE__*/_classPrivateFieldKey("debouncedFindShadowRoot");var _io=/*#__PURE__*/_classPrivateFieldKey("io");var _mo=/*#__PURE__*/_classPrivateFieldKey("mo");var _dmm=/*#__PURE__*/_classPrivateFieldKey("dmm");var _rescanQueue=/*#__PURE__*/_classPrivateFieldKey("rescanQueue");var _isQueueProcessing=/*#__PURE__*/_classPrivateFieldKey("isQueueProcessing");var _ignoreSelector=/*#__PURE__*/_classPrivateFieldKey("ignoreSelector");var _apiSetting=/*#__PURE__*/_classPrivateFieldKey("apiSetting");var _placeholder=/*#__PURE__*/_classPrivateFieldKey("placeholder");var _run=/*#__PURE__*/_classPrivateFieldKey("run");var _init=/*#__PURE__*/_classPrivateFieldKey("init");var _handleWindowMessage=/*#__PURE__*/_classPrivateFieldKey("handleWindowMessage");var _attachShadowRootListener=/*#__PURE__*/_classPrivateFieldKey("attachShadowRootListener");var _removeShadowRootListener=/*#__PURE__*/_classPrivateFieldKey("removeShadowRootListener");var _findAndObserveShadowRoot=/*#__PURE__*/_classPrivateFieldKey("findAndObserveShadowRoot");var _createPlaceholderRegex=/*#__PURE__*/_classPrivateFieldKey("createPlaceholderRegex");var _createTextStyles=/*#__PURE__*/_classPrivateFieldKey("createTextStyles");var _injectSheet=/*#__PURE__*/_classPrivateFieldKey("injectSheet");var _parseTerms=/*#__PURE__*/_classPrivateFieldKey("parseTerms");var _parseAITerms=/*#__PURE__*/_classPrivateFieldKey("parseAITerms");var _getDocDescription=/*#__PURE__*/_classPrivateFieldKey("getDocDescription");var _createIntersectionObserver=/*#__PURE__*/_classPrivateFieldKey("createIntersectionObserver");var _createMutationObserver=/*#__PURE__*/_classPrivateFieldKey("createMutationObserver");var _createDebounceMouseMover=/*#__PURE__*/_classPrivateFieldKey("createDebounceMouseMover");var _handleMouseMove=/*#__PURE__*/_classPrivateFieldKey("handleMouseMove");var _handleKeyDown=/*#__PURE__*/_classPrivateFieldKey("handleKeyDown");var _toggleTargetNode=/*#__PURE__*/_classPrivateFieldKey("toggleTargetNode");var _findAllShadowRoots=/*#__PURE__*/_classPrivateFieldKey("findAllShadowRoots");var _findChangeContainer=/*#__PURE__*/_classPrivateFieldKey("findChangeContainer");var _queueForRescan=/*#__PURE__*/_classPrivateFieldKey("queueForRescan");var _rescanContainer=/*#__PURE__*/_classPrivateFieldKey("rescanContainer");var _reIO=/*#__PURE__*/_classPrivateFieldKey("reIO");var _reIOViewNodes=/*#__PURE__*/_classPrivateFieldKey("reIOViewNodes");var _startObserveShadowRoot=/*#__PURE__*/_classPrivateFieldKey("startObserveShadowRoot");var _startObserveRoot=/*#__PURE__*/_classPrivateFieldKey("startObserveRoot");var _startObserveNode=/*#__PURE__*/_classPrivateFieldKey("startObserveNode");var _queryNode=/*#__PURE__*/_classPrivateFieldKey("queryNode");var _scanNode=/*#__PURE__*/_classPrivateFieldKey("scanNode");var _processNode=/*#__PURE__*/_classPrivateFieldKey("processNode");var _highlightTextNode=/*#__PURE__*/_classPrivateFieldKey("highlightTextNode");var _highlightWordsDeeply=/*#__PURE__*/_classPrivateFieldKey("highlightWordsDeeply");var _splitTextNodesBySentence=/*#__PURE__*/_classPrivateFieldKey("splitTextNodesBySentence");var _removeHighlights=/*#__PURE__*/_classPrivateFieldKey("removeHighlights");var _removeBrTags=/*#__PURE__*/_classPrivateFieldKey("removeBrTags");var _shouldBreak=/*#__PURE__*/_classPrivateFieldKey("shouldBreak");var _isInvalidText=/*#__PURE__*/_classPrivateFieldKey("isInvalidText");var _translateNodeGroup=/*#__PURE__*/_classPrivateFieldKey("translateNodeGroup");var _serializeForTranslation=/*#__PURE__*/_classPrivateFieldKey("serializeForTranslation");var _restoreFromTranslation=/*#__PURE__*/_classPrivateFieldKey("restoreFromTranslation");var _translateFetch=/*#__PURE__*/_classPrivateFieldKey("translateFetch");var _findTranslationWrappers=/*#__PURE__*/_classPrivateFieldKey("findTranslationWrappers");var _cleanupAllNodes=/*#__PURE__*/_classPrivateFieldKey("cleanupAllNodes");var _cleanupAllTranslations=/*#__PURE__*/_classPrivateFieldKey("cleanupAllTranslations");var _cleanupDirectTranslations=/*#__PURE__*/_classPrivateFieldKey("cleanupDirectTranslations");var _removeTranslationElement=/*#__PURE__*/_classPrivateFieldKey("removeTranslationElement");var _restoreOriginal=/*#__PURE__*/_classPrivateFieldKey("restoreOriginal");var _removeNodes=/*#__PURE__*/_classPrivateFieldKey("removeNodes");var _toggleTranslationOnly=/*#__PURE__*/_classPrivateFieldKey("toggleTranslationOnly");var _updateStyle=/*#__PURE__*/_classPrivateFieldKey("updateStyle");var _refreshNode=/*#__PURE__*/_classPrivateFieldKey("refreshNode");var _performSyncNode=/*#__PURE__*/_classPrivateFieldKey("performSyncNode");var _resetOptions=/*#__PURE__*/_classPrivateFieldKey("resetOptions");var _enableMouseHover=/*#__PURE__*/_classPrivateFieldKey("enableMouseHover");var _disableMouseHover=/*#__PURE__*/_classPrivateFieldKey("disableMouseHover");var _initInjector=/*#__PURE__*/_classPrivateFieldKey("initInjector");var _removeInjector=/*#__PURE__*/_classPrivateFieldKey("removeInjector");var _translateTitle=/*#__PURE__*/_classPrivateFieldKey("translateTitle");class translator_Translator{// 默认规则 +static isElement(el){return el instanceof Element;}static isElementOrFragment(el){return el instanceof Element||el instanceof DocumentFragment;}// 判断是否块级元素 static isBlockNode(el){var _el$attributes,_el$attributes$displa,_el$attributes$displa2;if(!translator_Translator.isElementOrFragment(el))return false;if(translator_Translator.TAGS.INLINE.has(el.nodeName))return false;if(translator_Translator.TAGS.BLOCK.has(el.nodeName))return true;if((_el$attributes=el.attributes)!==null&&_el$attributes!==void 0&&(_el$attributes$displa=_el$attributes.display)!==null&&_el$attributes$displa!==void 0&&(_el$attributes$displa2=_el$attributes$displa.value)!==null&&_el$attributes$displa2!==void 0&&_el$attributes$displa2.includes("inline"))return false;if(translator_Translator.displayCache.has(el)){return translator_Translator.displayCache.get(el);}const isBlock=!window.getComputedStyle(el).display.startsWith("inline");translator_Translator.displayCache.set(el,isBlock);return isBlock;}// 判断是否包含块级子元素 static hasBlockNode(el){if(!translator_Translator.isElementOrFragment(el))return false;for(const child of el.childNodes){if(translator_Translator.isBlockNode(child)){return true;}}return false;}// 判断是否直接包含非空文本节点 static hasTextNode(el){if(!translator_Translator.isElementOrFragment(el))return false;for(const child of el.childNodes){if(child.nodeType===Node.TEXT_NODE&&/\S/.test(child.nodeValue)){return true;}}return false;}// 特殊字符转义 @@ -36584,15 +36585,15 @@ Object.defineProperty(this,_findChangeContainer,{value:_findChangeContainer2});/ Object.defineProperty(this,_findAllShadowRoots,{value:_findAllShadowRoots2});// 切换节点翻译状态 Object.defineProperty(this,_toggleTargetNode,{value:_toggleTargetNode2});// 快捷键按下时的处理器 Object.defineProperty(this,_handleKeyDown,{value:_handleKeyDown2});// 跟踪鼠标下的可翻译节点 -Object.defineProperty(this,_handleMouseMove,{value:_handleMouseMove2});// 创建shadowroot的回调 -Object.defineProperty(this,_createShadowRootMonitor,{value:_createShadowRootMonitor2});// 节流的鼠标悬停事件 +Object.defineProperty(this,_handleMouseMove,{value:_handleMouseMove2});// 节流的鼠标悬停事件 Object.defineProperty(this,_createDebounceMouseMover,{value:_createDebounceMouseMover2});// 监控页面动态变化 Object.defineProperty(this,_createMutationObserver,{value:_createMutationObserver2});// 监控翻译单元的可见性 Object.defineProperty(this,_createIntersectionObserver,{value:_createIntersectionObserver2});// todo: 利用AI总结 Object.defineProperty(this,_getDocDescription,{value:_getDocDescription2});Object.defineProperty(this,_parseAITerms,{value:_parseAITerms2});// 解析专业术语字符串 Object.defineProperty(this,_parseTerms,{value:_parseTerms2});// 注入样式 Object.defineProperty(this,_injectSheet,{value:_injectSheet2});// 创建样式 -Object.defineProperty(this,_createTextStyles,{value:_createTextStyles2});Object.defineProperty(this,_createPlaceholderRegex,{value:_createPlaceholderRegex2});// 初始化 +Object.defineProperty(this,_createTextStyles,{value:_createTextStyles2});Object.defineProperty(this,_createPlaceholderRegex,{value:_createPlaceholderRegex2});// 查找现有的所有shadowroot +Object.defineProperty(this,_findAndObserveShadowRoot,{value:_findAndObserveShadowRoot2});Object.defineProperty(this,_removeShadowRootListener,{value:_removeShadowRootListener2});Object.defineProperty(this,_attachShadowRootListener,{value:_attachShadowRootListener2});Object.defineProperty(this,_handleWindowMessage,{value:_handleWindowMessage2});// 初始化 Object.defineProperty(this,_init,{value:_init2});// 启动 Object.defineProperty(this,_run,{value:_run2});// 占位符 Object.defineProperty(this,_placeholder,{get:_get_placeholder,set:void 0});// 接口参数 @@ -36603,6 +36604,7 @@ Object.defineProperty(this,_ignoreSelector,{get:_get_ignoreSelector,set:void 0}) Object.defineProperty(this,_rule,{writable:true,value:void 0});// 规则 Object.defineProperty(this,_isInitialized,{writable:true,value:false});// 初始化状态 Object.defineProperty(this,_isJsInjected,{writable:true,value:false});// 注入用户JS +Object.defineProperty(this,_isShadowRootJsInjected,{writable:true,value:false});// Object.defineProperty(this,_mouseHoverEnabled,{writable:true,value:false});// 鼠标悬停翻译 Object.defineProperty(this,translator_enabled,{writable:true,value:false});// 全局默认状态 Object.defineProperty(this,_runId,{writable:true,value:0});// 用于中止过期的异步请求 @@ -36628,13 +36630,11 @@ Object.defineProperty(this,_removeKeydownHandler,{writable:true,value:void 0});/ Object.defineProperty(this,_hoveredNode,{writable:true,value:null});// 存储当前悬停的可翻译节点 Object.defineProperty(this,_boundMouseMoveHandler,{writable:true,value:void 0});// 鼠标事件 Object.defineProperty(this,_boundKeyDownHandler,{writable:true,value:void 0});// 键盘事件 -Object.defineProperty(this,_io,{writable:true,value:void 0});// IntersectionObserver +Object.defineProperty(this,_windowMessageHandler,{writable:true,value:null});Object.defineProperty(this,_debouncedFindShadowRoot,{writable:true,value:null});Object.defineProperty(this,_io,{writable:true,value:void 0});// IntersectionObserver Object.defineProperty(this,_mo,{writable:true,value:void 0});// MutationObserver Object.defineProperty(this,_dmm,{writable:true,value:void 0});// DebounceMouseMover -Object.defineProperty(this,_srm,{writable:true,value:void 0});// ShadowRootMonitor Object.defineProperty(this,_rescanQueue,{writable:true,value:new Set()});// “脏容器”队列 -Object.defineProperty(this,_isQueueProcessing,{writable:true,value:false});_classPrivateFieldBase(this,translator_setting)[translator_setting]={...translator_Translator.DEFAULT_OPTIONS,...setting};_classPrivateFieldBase(this,_rule)[_rule]={...translator_Translator.DEFAULT_RULE,...rule};_classPrivateFieldBase(this,_favWords)[_favWords]=favWords;_classPrivateFieldBase(this,_apisMap)[_apisMap]=new Map(_classPrivateFieldBase(this,translator_setting)[translator_setting].transApis.map(api=>[api.apiSlug,api]));_classPrivateFieldBase(this,_eventName)[_eventName]=utils_genEventName();_classPrivateFieldBase(this,_docInfo)[_docInfo]={title:document.title,description:_classPrivateFieldBase(this,_getDocDescription)[_getDocDescription]()};_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex]=new RegExp(translator_Translator.BUILTIN_SKIP_PATTERNS.map(r=>"(".concat(r.source,")")).join("|"));_classPrivateFieldBase(this,_placeholderRegex)[_placeholderRegex]=_classPrivateFieldBase(this,_createPlaceholderRegex)[_createPlaceholderRegex]();_classPrivateFieldBase(this,_parseTerms)[_parseTerms](_classPrivateFieldBase(this,_rule)[_rule].terms);_classPrivateFieldBase(this,_parseAITerms)[_parseAITerms](_classPrivateFieldBase(this,_rule)[_rule].aiTerms);_classPrivateFieldBase(this,_createTextStyles)[_createTextStyles]();_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]=_classPrivateFieldBase(this,_handleMouseMove)[_handleMouseMove].bind(this);_classPrivateFieldBase(this,_boundKeyDownHandler)[_boundKeyDownHandler]=_classPrivateFieldBase(this,_handleKeyDown)[_handleKeyDown].bind(this);_classPrivateFieldBase(this,_io)[_io]=_classPrivateFieldBase(this,_createIntersectionObserver)[_createIntersectionObserver]();_classPrivateFieldBase(this,_mo)[_mo]=_classPrivateFieldBase(this,_createMutationObserver)[_createMutationObserver]();_classPrivateFieldBase(this,_dmm)[_dmm]=_classPrivateFieldBase(this,_createDebounceMouseMover)[_createDebounceMouseMover]();_classPrivateFieldBase(this,_srm)[_srm]=_classPrivateFieldBase(this,_createShadowRootMonitor)[_createShadowRootMonitor]();// 监控shadowroot -if(_classPrivateFieldBase(this,_rule)[_rule].hasShadowroot==="true"){_classPrivateFieldBase(this,_srm)[_srm].start();}// 鼠标悬停翻译 +Object.defineProperty(this,_isQueueProcessing,{writable:true,value:false});_classPrivateFieldBase(this,translator_setting)[translator_setting]={...translator_Translator.DEFAULT_OPTIONS,...setting};_classPrivateFieldBase(this,_rule)[_rule]={...translator_Translator.DEFAULT_RULE,...rule};_classPrivateFieldBase(this,_favWords)[_favWords]=favWords;_classPrivateFieldBase(this,_apisMap)[_apisMap]=new Map(_classPrivateFieldBase(this,translator_setting)[translator_setting].transApis.map(api=>[api.apiSlug,api]));_classPrivateFieldBase(this,_eventName)[_eventName]=utils_genEventName();_classPrivateFieldBase(this,_docInfo)[_docInfo]={title:document.title,description:_classPrivateFieldBase(this,_getDocDescription)[_getDocDescription]()};_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex]=new RegExp(translator_Translator.BUILTIN_SKIP_PATTERNS.map(r=>"(".concat(r.source,")")).join("|"));_classPrivateFieldBase(this,_placeholderRegex)[_placeholderRegex]=_classPrivateFieldBase(this,_createPlaceholderRegex)[_createPlaceholderRegex]();_classPrivateFieldBase(this,_parseTerms)[_parseTerms](_classPrivateFieldBase(this,_rule)[_rule].terms);_classPrivateFieldBase(this,_parseAITerms)[_parseAITerms](_classPrivateFieldBase(this,_rule)[_rule].aiTerms);_classPrivateFieldBase(this,_createTextStyles)[_createTextStyles]();_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]=_classPrivateFieldBase(this,_handleMouseMove)[_handleMouseMove].bind(this);_classPrivateFieldBase(this,_boundKeyDownHandler)[_boundKeyDownHandler]=_classPrivateFieldBase(this,_handleKeyDown)[_handleKeyDown].bind(this);_classPrivateFieldBase(this,_io)[_io]=_classPrivateFieldBase(this,_createIntersectionObserver)[_createIntersectionObserver]();_classPrivateFieldBase(this,_mo)[_mo]=_classPrivateFieldBase(this,_createMutationObserver)[_createMutationObserver]();_classPrivateFieldBase(this,_dmm)[_dmm]=_classPrivateFieldBase(this,_createDebounceMouseMover)[_createDebounceMouseMover]();_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]=_classPrivateFieldBase(this,_handleWindowMessage)[_handleWindowMessage].bind(this);_classPrivateFieldBase(this,_debouncedFindShadowRoot)[_debouncedFindShadowRoot]=debounce(_classPrivateFieldBase(this,_findAndObserveShadowRoot)[_findAndObserveShadowRoot].bind(this),300);// 鼠标悬停翻译 if(_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting.useMouseHover){_classPrivateFieldBase(this,_enableMouseHover)[_enableMouseHover]();}if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>_classPrivateFieldBase(this,_run)[_run]());}else{_classPrivateFieldBase(this,_run)[_run]();}}// 切换鼠标悬停翻译 toggleMouseHover(){_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled]?_classPrivateFieldBase(this,_disableMouseHover)[_disableMouseHover]():_classPrivateFieldBase(this,_enableMouseHover)[_enableMouseHover]();}// 开启翻译 enable(){if(_classPrivateFieldBase(this,translator_enabled)[translator_enabled])return;_classPrivateFieldBase(this,translator_enabled)[translator_enabled]=true;_classPrivateFieldBase(this,_rule)[_rule].transOpen="true";_classPrivateFieldBase(this,_runId)[_runId]++;if(_classPrivateFieldBase(this,_isInitialized)[_isInitialized]){if(_classPrivateFieldBase(this,translator_setting)[translator_setting].transAllnow){this.rescan();}else{_classPrivateFieldBase(this,_reIOViewNodes)[_reIOViewNodes]();}}else{_classPrivateFieldBase(this,_init)[_init]();}if(_classPrivateFieldBase(this,_rule)[_rule].transTitle==="true"){_classPrivateFieldBase(this,_translateTitle)[_translateTitle]();}}// 关闭翻译 @@ -36646,22 +36646,22 @@ toggle(){_classPrivateFieldBase(this,translator_enabled)[translator_enabled]?thi toggleStyle(){const textStyle=_classPrivateFieldBase(this,_rule)[_rule].textStyle===OPT_STYLE_FUZZY?OPT_STYLE_NONE:OPT_STYLE_FUZZY;this.updateRule({textStyle});}// 切换划词翻译 toggleTransbox(){_classPrivateFieldBase(this,translator_setting)[translator_setting].tranboxSetting.transOpen=!_classPrivateFieldBase(this,translator_setting)[translator_setting].tranboxSetting.transOpen;}// 切换输入框翻译 toggleInputTranslate(){_classPrivateFieldBase(this,translator_setting)[translator_setting].inputRule.transOpen=!_classPrivateFieldBase(this,translator_setting)[translator_setting].inputRule.transOpen;}// 停止运行 -stop(){this.disable();_classPrivateFieldBase(this,_resetOptions)[_resetOptions]();_classPrivateFieldBase(this,_srm)[_srm].stop();_classPrivateFieldBase(this,_disableMouseHover)[_disableMouseHover]();_classPrivateFieldBase(this,_removeInjector)[_removeInjector]();_classPrivateFieldBase(this,_isInitialized)[_isInitialized]=false;}// 更新规则 -updateRule(newRule){let hasChanged=false;let needsRescan=false;for(const key in newRule){if(Object.prototype.hasOwnProperty.call(_classPrivateFieldBase(this,_rule)[_rule],key)&&_classPrivateFieldBase(this,_rule)[_rule][key]!==newRule[key]){_classPrivateFieldBase(this,_rule)[_rule][key]=newRule[key];if(key==="autoScan"||key==="hasShadowroot"){needsRescan=true;}else{hasChanged=true;}}}if(needsRescan||_classPrivateFieldBase(this,translator_enabled)[translator_enabled]&&_classPrivateFieldBase(this,translator_setting)[translator_setting].transAllnow){this.rescan();return;}if(hasChanged){_classPrivateFieldBase(this,_reIOViewNodes)[_reIOViewNodes]();}}get setting(){return{..._classPrivateFieldBase(this,translator_setting)[translator_setting]};}get rule(){return{..._classPrivateFieldBase(this,_rule)[_rule]};}get docInfo(){return{..._classPrivateFieldBase(this,_docInfo)[_docInfo]};}get eventName(){return _classPrivateFieldBase(this,_eventName)[_eventName];}}_class=translator_Translator;function _get_ignoreSelector(){return"".concat(_class.BUILTIN_IGNORE_SELECTOR,", ").concat(_classPrivateFieldBase(this,_rule)[_rule].ignoreSelector);}function _get_apiSetting(){// return ( +stop(){this.disable();_classPrivateFieldBase(this,_resetOptions)[_resetOptions]();_classPrivateFieldBase(this,_disableMouseHover)[_disableMouseHover]();_classPrivateFieldBase(this,_removeInjector)[_removeInjector]();_classPrivateFieldBase(this,_isInitialized)[_isInitialized]=false;}// 更新规则 +updateRule(newRule){let hasChanged=false;let needsRescan=false;for(const key in newRule){if(Object.prototype.hasOwnProperty.call(_classPrivateFieldBase(this,_rule)[_rule],key)&&_classPrivateFieldBase(this,_rule)[_rule][key]!==newRule[key]){_classPrivateFieldBase(this,_rule)[_rule][key]=newRule[key];if(key==="autoScan"||key==="hasShadowroot"){needsRescan=true;}else{hasChanged=true;}}}if(needsRescan||_classPrivateFieldBase(this,translator_enabled)[translator_enabled]&&_classPrivateFieldBase(this,translator_setting)[translator_setting].transAllnow){this.rescan();return;}if(hasChanged){_classPrivateFieldBase(this,_reIOViewNodes)[_reIOViewNodes]();}}get setting(){return{..._classPrivateFieldBase(this,translator_setting)[translator_setting]};}get rule(){return{..._classPrivateFieldBase(this,_rule)[_rule]};}get docInfo(){return{..._classPrivateFieldBase(this,_docInfo)[_docInfo]};}get eventName(){return _classPrivateFieldBase(this,_eventName)[_eventName];}}_class=translator_Translator;function _get_ignoreSelector(){if(_classPrivateFieldBase(this,_rule)[_rule].autoScan==="false"){return"".concat(_class.KISS_IGNORE_SELECTOR,", ").concat(_classPrivateFieldBase(this,_rule)[_rule].ignoreSelector);}return"".concat(_class.BUILTIN_IGNORE_SELECTOR,", ").concat(_classPrivateFieldBase(this,_rule)[_rule].ignoreSelector);}function _get_apiSetting(){// return ( // this.#setting.transApis.find( // (api) => api.apiSlug === this.#rule.apiSlug // ) || DEFAULT_API_SETTING // ); return _classPrivateFieldBase(this,_apisMap)[_apisMap].get(_classPrivateFieldBase(this,_rule)[_rule].apiSlug)||DEFAULT_API_SETTING;}function _get_placeholder(){const[startDelimiter,endDelimiter]=_classPrivateFieldBase(this,_apiSetting)[_apiSetting].placeholder.split(" ");return{startDelimiter,endDelimiter,tagName:_classPrivateFieldBase(this,_apiSetting)[_apiSetting].placetag};}function _run2(){if(_classPrivateFieldBase(this,_rule)[_rule].transOpen==="true"){this.enable();}else if(_classPrivateFieldBase(this,translator_setting)[translator_setting].preInit){_classPrivateFieldBase(this,_init)[_init]();}}function _init2(){_classPrivateFieldBase(this,_isInitialized)[_isInitialized]=true;// 注入JS/CSS _classPrivateFieldBase(this,_initInjector)[_initInjector]();// 查找根节点并扫描 -document.querySelectorAll(_classPrivateFieldBase(this,_rule)[_rule].rootsSelector||"body").forEach(root=>{_classPrivateFieldBase(this,_startObserveRoot)[_startObserveRoot](root);});// 查找现有的所有shadowroot -if(_classPrivateFieldBase(this,_rule)[_rule].hasShadowroot==="true"){try{_classPrivateFieldBase(this,_findAllShadowRoots)[_findAllShadowRoots]().forEach(shadowRoot=>{_classPrivateFieldBase(this,_startObserveShadowRoot)[_startObserveShadowRoot](shadowRoot);});}catch(err){log_kissLog("findAllShadowRoots",err);}}}function _createPlaceholderRegex2(){const escapedStart=_class.escapeRegex(_classPrivateFieldBase(this,_placeholder)[_placeholder].startDelimiter);const escapedEnd=_class.escapeRegex(_classPrivateFieldBase(this,_placeholder)[_placeholder].endDelimiter);const patternString="(".concat(escapedStart,"\\d+").concat(escapedEnd,"|<\\/?\\w+\\d+>)");const flags="g";return new RegExp(patternString,flags);}function _createTextStyles2(){const[textClass,textStyles]=genTextClass({..._classPrivateFieldBase(this,_rule)[_rule]});const textSheet=new CSSStyleSheet();textSheet.replaceSync(textStyles);_classPrivateFieldBase(this,_textClass)[_textClass]=textClass;_classPrivateFieldBase(this,_textSheet)[_textSheet]=textSheet;}function _injectSheet2(shadowRoot){if(!shadowRoot.adoptedStyleSheets.includes(_classPrivateFieldBase(this,_textSheet)[_textSheet])){shadowRoot.adoptedStyleSheets=[...shadowRoot.adoptedStyleSheets,_classPrivateFieldBase(this,_textSheet)[_textSheet]];}}function _parseTerms2(termsString){_classPrivateFieldBase(this,_termValues)[_termValues]=[];_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex]=null;if(!termsString||typeof termsString!=="string")return;const termPatterns=[];const lines=termsString.split(/\n|;/);// 按换行或分号分割 -for(const line of lines){const trimmedLine=line.trim();if(!trimmedLine)continue;let lastCommaIndex=trimmedLine.lastIndexOf(",");if(lastCommaIndex===-1){lastCommaIndex=trimmedLine.length;}const key=trimmedLine.substring(0,lastCommaIndex).trim();const value=trimmedLine.substring(lastCommaIndex+1).trim();if(key){try{new RegExp(key);termPatterns.push("(".concat(key,")"));_classPrivateFieldBase(this,_termValues)[_termValues].push(value);}catch(err){log_kissLog("Invalid RegExp for term: \"".concat(key,"\""),err);}}}if(termPatterns.length>0){_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex]=new RegExp(termPatterns.join("|"),"g");}}function _parseAITerms2(termsString){if(!termsString||typeof termsString!=="string")return;try{_classPrivateFieldBase(this,_glossary)[_glossary]=Object.fromEntries(termsString.split(/\n|;/).map(line=>{const[k="",v=""]=line.split(",").map(s=>s.trim());return[k,v];}).filter(_ref2=>{let[k]=_ref2;return k;}));}catch(err){log_kissLog("parse aiterms",err);}}function _getDocDescription2(){try{const meta=document.querySelector('meta[name="description"]');const description=(meta===null||meta===void 0?void 0:meta.getAttribute("content"))||"";return truncateWords(description);}catch(err){log_kissLog("get description",err);}return"";}function _createIntersectionObserver2(){const pending=new Set();const flush=debounce(()=>{pending.forEach(node=>_classPrivateFieldBase(this,_performSyncNode)[_performSyncNode](node));pending.clear();},_classPrivateFieldBase(this,translator_setting)[translator_setting].transInterval);return new IntersectionObserver(entries=>{entries.forEach(entry=>{if(entry.isIntersecting){_classPrivateFieldBase(this,_viewNodes)[_viewNodes].add(entry.target);pending.add(entry.target);flush();}else{_classPrivateFieldBase(this,_viewNodes)[_viewNodes].delete(entry.target);}});},{threshold:0.01});}function _createMutationObserver2(){return new MutationObserver(mutations=>{for(const mutation of mutations){var _mutation$nextSibling;if(_classPrivateFieldBase(this,_skipMoNodes)[_skipMoNodes].has(mutation.target)||((_mutation$nextSibling=mutation.nextSibling)===null||_mutation$nextSibling===void 0?void 0:_mutation$nextSibling.tagName)===_classPrivateFieldBase(this,_translationTagName)[_translationTagName]){continue;}if(mutation.type==="characterData"){if(mutation.oldValue!==mutation.target.nodeValue&&!_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex].test(mutation.target.nodeValue)){_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](mutation.target.parentElement);}}else if(mutation.type==="childList"){let nodes=new Set();let hasText=false;mutation.addedNodes.forEach(node=>{if(_classPrivateFieldBase(this,_skipMoNodes)[_skipMoNodes].has(node)||node.nodeName===_classPrivateFieldBase(this,_translationTagName)[_translationTagName]){return;}if(node.nodeType===Node.TEXT_NODE){hasText=true;}else if(_class.isElementOrFragment(node)){nodes.add(node);}});if(hasText){_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](mutation.target);}else{nodes.forEach(node=>_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](node));}}}});}function _createDebounceMouseMover2(){return debounce(targetNode=>{const startNode=targetNode;let foundNode=null;while(targetNode&&targetNode!==document.body){if(_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(targetNode)){foundNode=targetNode;break;}targetNode=targetNode.parentElement;}_classPrivateFieldBase(this,_hoveredNode)[_hoveredNode]=foundNode||startNode;const{mouseHoverKey}=_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting;if(mouseHoverKey.length===0&&!_classPrivateFieldBase(this,_isInitialized)[_isInitialized]){_classPrivateFieldBase(this,_init)[_init]();}if(mouseHoverKey.length===0&&foundNode){_classPrivateFieldBase(this,_processNode)[_processNode](foundNode);}},100);}function _createShadowRootMonitor2(){return new ShadowRootMonitor(shadowRoot=>{_classPrivateFieldBase(this,_startObserveShadowRoot)[_startObserveShadowRoot](shadowRoot);});}function _handleMouseMove2(event){let targetNode=event.composedPath()[0];_classPrivateFieldBase(this,_dmm)[_dmm](targetNode);}function _handleKeyDown2(){if(!_classPrivateFieldBase(this,_isInitialized)[_isInitialized]){_classPrivateFieldBase(this,_init)[_init]();}let targetNode=_classPrivateFieldBase(this,_hoveredNode)[_hoveredNode];if(!targetNode||!_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(targetNode))return;_classPrivateFieldBase(this,_toggleTargetNode)[_toggleTargetNode](targetNode);}function _toggleTargetNode2(targetNode){if(_classPrivateFieldBase(this,_processedNodes)[_processedNodes].has(targetNode)){_classPrivateFieldBase(this,_cleanupDirectTranslations)[_cleanupDirectTranslations](targetNode);}else{_classPrivateFieldBase(this,_processNode)[_processNode](targetNode);}}function _findAllShadowRoots2(){let root=arguments.length>0&&arguments[0]!==undefined?arguments[0]:document.body;let results=arguments.length>1&&arguments[1]!==undefined?arguments[1]:new Set();// const start = performance.now(); +document.querySelectorAll(_classPrivateFieldBase(this,_rule)[_rule].rootsSelector||"body").forEach(root=>{_classPrivateFieldBase(this,_startObserveRoot)[_startObserveRoot](root);});if(_classPrivateFieldBase(this,_rule)[_rule].hasShadowroot==="true"){_classPrivateFieldBase(this,_attachShadowRootListener)[_attachShadowRootListener]();_classPrivateFieldBase(this,_findAndObserveShadowRoot)[_findAndObserveShadowRoot]();}}function _handleWindowMessage2(event){var _event$data;if(((_event$data=event.data)===null||_event$data===void 0?void 0:_event$data.type)==="KISS_SHADOW_ROOT_CREATED"){_classPrivateFieldBase(this,_debouncedFindShadowRoot)[_debouncedFindShadowRoot]();}}function _attachShadowRootListener2(){if(!_classPrivateFieldBase(this,_isShadowRootJsInjected)[_isShadowRootJsInjected]){const id="kiss-translator-inject-shadowroot-js";injectJs(INJECTOR.shadowroot,id);_classPrivateFieldBase(this,_isShadowRootJsInjected)[_isShadowRootJsInjected]=true;}window.addEventListener("message",_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]);}function _removeShadowRootListener2(){window.removeEventListener("message",_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]);}function _findAndObserveShadowRoot2(){try{_classPrivateFieldBase(this,_findAllShadowRoots)[_findAllShadowRoots]().forEach(shadowRoot=>{_classPrivateFieldBase(this,_startObserveShadowRoot)[_startObserveShadowRoot](shadowRoot);});}catch(err){log_kissLog("findAllShadowRoots",err);}}function _createPlaceholderRegex2(){const escapedStart=_class.escapeRegex(_classPrivateFieldBase(this,_placeholder)[_placeholder].startDelimiter);const escapedEnd=_class.escapeRegex(_classPrivateFieldBase(this,_placeholder)[_placeholder].endDelimiter);const patternString="(".concat(escapedStart,"\\d+").concat(escapedEnd,"|<\\/?\\w+\\d+>)");const flags="g";return new RegExp(patternString,flags);}function _createTextStyles2(){const[textClass,textStyles]=genTextClass({..._classPrivateFieldBase(this,_rule)[_rule]});const textSheet=new CSSStyleSheet();textSheet.replaceSync(textStyles);_classPrivateFieldBase(this,_textClass)[_textClass]=textClass;_classPrivateFieldBase(this,_textSheet)[_textSheet]=textSheet;}function _injectSheet2(shadowRoot){if(!shadowRoot.adoptedStyleSheets.includes(_classPrivateFieldBase(this,_textSheet)[_textSheet])){shadowRoot.adoptedStyleSheets=[...shadowRoot.adoptedStyleSheets,_classPrivateFieldBase(this,_textSheet)[_textSheet]];}}function _parseTerms2(termsString){_classPrivateFieldBase(this,_termValues)[_termValues]=[];_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex]=null;if(!termsString||typeof termsString!=="string")return;const termPatterns=[];const lines=termsString.split(/\n|;/);// 按换行或分号分割 +for(const line of lines){const trimmedLine=line.trim();if(!trimmedLine)continue;let lastCommaIndex=trimmedLine.lastIndexOf(",");if(lastCommaIndex===-1){lastCommaIndex=trimmedLine.length;}const key=trimmedLine.substring(0,lastCommaIndex).trim();const value=trimmedLine.substring(lastCommaIndex+1).trim();if(key){try{new RegExp(key);termPatterns.push("(".concat(key,")"));_classPrivateFieldBase(this,_termValues)[_termValues].push(value);}catch(err){log_kissLog("Invalid RegExp for term: \"".concat(key,"\""),err);}}}if(termPatterns.length>0){_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex]=new RegExp(termPatterns.join("|"),"g");}}function _parseAITerms2(termsString){if(!termsString||typeof termsString!=="string")return;try{_classPrivateFieldBase(this,_glossary)[_glossary]=Object.fromEntries(termsString.split(/\n|;/).map(line=>{const[k="",v=""]=line.split(",").map(s=>s.trim());return[k,v];}).filter(_ref2=>{let[k]=_ref2;return k;}));}catch(err){log_kissLog("parse aiterms",err);}}function _getDocDescription2(){try{const meta=document.querySelector('meta[name="description"]');const description=(meta===null||meta===void 0?void 0:meta.getAttribute("content"))||"";return truncateWords(description);}catch(err){log_kissLog("get description",err);}return"";}function _createIntersectionObserver2(){const{transInterval,rootMargin=500}=_classPrivateFieldBase(this,translator_setting)[translator_setting];const pending=new Set();const flush=debounce(()=>{pending.forEach(node=>_classPrivateFieldBase(this,_performSyncNode)[_performSyncNode](node));pending.clear();},transInterval);return new IntersectionObserver(entries=>{entries.forEach(entry=>{if(entry.isIntersecting){_classPrivateFieldBase(this,_viewNodes)[_viewNodes].add(entry.target);pending.add(entry.target);flush();}else{_classPrivateFieldBase(this,_viewNodes)[_viewNodes].delete(entry.target);}});},{threshold:0.01,rootMargin:"".concat(rootMargin,"px 0px ").concat(rootMargin,"px 0px")});}function _createMutationObserver2(){return new MutationObserver(mutations=>{for(const mutation of mutations){var _mutation$nextSibling;if(_classPrivateFieldBase(this,_skipMoNodes)[_skipMoNodes].has(mutation.target)||((_mutation$nextSibling=mutation.nextSibling)===null||_mutation$nextSibling===void 0?void 0:_mutation$nextSibling.tagName)===_classPrivateFieldBase(this,_translationTagName)[_translationTagName]){continue;}if(mutation.type==="characterData"){if(mutation.oldValue!==mutation.target.nodeValue&&!_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex].test(mutation.target.nodeValue)){_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](mutation.target.parentElement);}}else if(mutation.type==="childList"){let nodes=new Set();let hasText=false;mutation.addedNodes.forEach(node=>{if(_classPrivateFieldBase(this,_skipMoNodes)[_skipMoNodes].has(node)||node.nodeName===_classPrivateFieldBase(this,_translationTagName)[_translationTagName]){return;}if(node.nodeType===Node.TEXT_NODE){hasText=true;}else if(_class.isElementOrFragment(node)){nodes.add(node);}});if(hasText){_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](mutation.target);}else{nodes.forEach(node=>_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](node));}}}});}function _createDebounceMouseMover2(){return debounce(targetNode=>{const startNode=targetNode;let foundNode=null;while(targetNode&&targetNode!==document.body){if(_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(targetNode)){foundNode=targetNode;break;}targetNode=targetNode.parentElement;}_classPrivateFieldBase(this,_hoveredNode)[_hoveredNode]=foundNode||startNode;const{mouseHoverKey}=_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting;if(mouseHoverKey.length===0&&!_classPrivateFieldBase(this,_isInitialized)[_isInitialized]){_classPrivateFieldBase(this,_init)[_init]();}if(mouseHoverKey.length===0&&foundNode){_classPrivateFieldBase(this,_processNode)[_processNode](foundNode);}},100);}function _handleMouseMove2(event){let targetNode=event.composedPath()[0];_classPrivateFieldBase(this,_dmm)[_dmm](targetNode);}function _handleKeyDown2(){if(!_classPrivateFieldBase(this,_isInitialized)[_isInitialized]){_classPrivateFieldBase(this,_init)[_init]();}let targetNode=_classPrivateFieldBase(this,_hoveredNode)[_hoveredNode];if(!targetNode||!_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(targetNode))return;_classPrivateFieldBase(this,_toggleTargetNode)[_toggleTargetNode](targetNode);}function _toggleTargetNode2(targetNode){if(_classPrivateFieldBase(this,_processedNodes)[_processedNodes].has(targetNode)){_classPrivateFieldBase(this,_cleanupDirectTranslations)[_cleanupDirectTranslations](targetNode);}else{_classPrivateFieldBase(this,_processNode)[_processNode](targetNode);}}function _findAllShadowRoots2(){let root=arguments.length>0&&arguments[0]!==undefined?arguments[0]:document.body;let results=arguments.length>1&&arguments[1]!==undefined?arguments[1]:new Set();// const start = performance.now(); try{const walker=document.createTreeWalker(root,NodeFilter.SHOW_ELEMENT);while(walker.nextNode()){const node=walker.currentNode;if(node.shadowRoot){results.add(node.shadowRoot);_classPrivateFieldBase(this,_findAllShadowRoots)[_findAllShadowRoots](node.shadowRoot,results);}}}catch(err){log_kissLog("无法访问某个 shadowRoot",err);}// const end = performance.now(); // const duration = end - start; // console.log(`findAllShadowRoots 耗时:${duration} 毫秒`); return results;}function _findChangeContainer2(startNode){var _startNode$closest;if(!_class.isElementOrFragment(startNode)||(_startNode$closest=startNode.closest)!==null&&_startNode$closest!==void 0&&_startNode$closest.call(startNode,_classPrivateFieldBase(this,_ignoreSelector)[_ignoreSelector])){return null;}let current=startNode;while(current&¤t!==document.body){if(_class.isBlockNode(current)||_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(current)){// 确保找到的容器在我们监控的根节点内 -for(const root of _classPrivateFieldBase(this,_rootNodes)[_rootNodes]){if(root.contains(current)){return current;}}}current=current.parentElement;}return null;}function _queueForRescan2(target){_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].add(target);if(!_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]){_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]=true;scheduleIdle(()=>{_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].forEach(t=>_classPrivateFieldBase(this,_rescanContainer)[_rescanContainer](t));_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].clear();_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]=false;},100);}}function _rescanContainer2(changedNode){const container=_classPrivateFieldBase(this,_findChangeContainer)[_findChangeContainer](changedNode);if(!container)return;_classPrivateFieldBase(this,_cleanupAllTranslations)[_cleanupAllTranslations](container);_classPrivateFieldBase(this,_scanNode)[_scanNode](container);}function _reIO2(node){_classPrivateFieldBase(this,_io)[_io].unobserve(node);_classPrivateFieldBase(this,_io)[_io].observe(node);}function _reIOViewNodes2(){_classPrivateFieldBase(this,_viewNodes)[_viewNodes].forEach(n=>_classPrivateFieldBase(this,_reIO)[_reIO](n));}function _startObserveShadowRoot2(shadowRoot){if(shadowRoot.host.matches("#".concat(APP_CONSTS.fabID,", #").concat(APP_CONSTS.boxID))){return;}_classPrivateFieldBase(this,_startObserveRoot)[_startObserveRoot](shadowRoot);_classPrivateFieldBase(this,_injectSheet)[_injectSheet](shadowRoot);}function _startObserveRoot2(root){if(_classPrivateFieldBase(this,_rootNodes)[_rootNodes].has(root))return;_classPrivateFieldBase(this,_rootNodes)[_rootNodes].add(root);_classPrivateFieldBase(this,_mo)[_mo].observe(root,{childList:true,subtree:true,characterData:true,characterDataOldValue:true});_classPrivateFieldBase(this,_scanNode)[_scanNode](root);}function _startObserveNode2(node){if(_classPrivateFieldBase(this,_rule)[_rule].highlightWords===OPT_HIGHLIGHT_WORDS_BEFORETRANS){_classPrivateFieldBase(this,_highlightWordsDeeply)[_highlightWordsDeeply](node);}if(!_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(node)&&_classPrivateFieldBase(this,translator_enabled)[translator_enabled]&&_classPrivateFieldBase(this,translator_setting)[translator_setting].transAllnow){_classPrivateFieldBase(this,_observedNodes)[_observedNodes].add(node);_classPrivateFieldBase(this,_processNode)[_processNode](node);return;}// 未监控 +for(const root of _classPrivateFieldBase(this,_rootNodes)[_rootNodes]){if(root.contains(current)){return current;}}}current=current.parentElement;}return null;}function _queueForRescan2(target){_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].add(target);if(!_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]){_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]=true;scheduleIdle(()=>{_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].forEach(t=>_classPrivateFieldBase(this,_rescanContainer)[_rescanContainer](t));_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].clear();_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]=false;},100);}}function _rescanContainer2(changedNode){const container=_classPrivateFieldBase(this,_findChangeContainer)[_findChangeContainer](changedNode);if(!container)return;_classPrivateFieldBase(this,_cleanupAllTranslations)[_cleanupAllTranslations](container);_classPrivateFieldBase(this,_scanNode)[_scanNode](container);}function _reIO2(node){_classPrivateFieldBase(this,_io)[_io].unobserve(node);_classPrivateFieldBase(this,_io)[_io].observe(node);}function _reIOViewNodes2(){_classPrivateFieldBase(this,_viewNodes)[_viewNodes].forEach(n=>_classPrivateFieldBase(this,_reIO)[_reIO](n));}function _startObserveShadowRoot2(shadowRoot){if(shadowRoot.host.matches("#".concat(APP_CONSTS.fabID,", #").concat(APP_CONSTS.boxID))){return;}_classPrivateFieldBase(this,_startObserveRoot)[_startObserveRoot](shadowRoot);_classPrivateFieldBase(this,_injectSheet)[_injectSheet](shadowRoot);}function _startObserveRoot2(root){if(_classPrivateFieldBase(this,_rootNodes)[_rootNodes].has(root))return;_classPrivateFieldBase(this,_rootNodes)[_rootNodes].add(root);_classPrivateFieldBase(this,_mo)[_mo].observe(root,{childList:true,subtree:true,characterData:true,characterDataOldValue:true});_classPrivateFieldBase(this,_scanNode)[_scanNode](root);}function _startObserveNode2(node){// todo: DocumentFragment 无法被 this.#io.observe +if(!_class.isElement(node))return;if(_classPrivateFieldBase(this,_rule)[_rule].highlightWords===OPT_HIGHLIGHT_WORDS_BEFORETRANS){_classPrivateFieldBase(this,_highlightWordsDeeply)[_highlightWordsDeeply](node);}if(!_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(node)&&_classPrivateFieldBase(this,translator_enabled)[translator_enabled]&&_classPrivateFieldBase(this,translator_setting)[translator_setting].transAllnow){_classPrivateFieldBase(this,_observedNodes)[_observedNodes].add(node);_classPrivateFieldBase(this,_processNode)[_processNode](node);return;}// 未监控 if(!_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(node)){_classPrivateFieldBase(this,_observedNodes)[_observedNodes].add(node);_classPrivateFieldBase(this,_io)[_io].observe(node);return;}// 已监控,但未处理状态,且在可视范围 if(!_classPrivateFieldBase(this,_processedNodes)[_processedNodes].has(node)&&_classPrivateFieldBase(this,_viewNodes)[_viewNodes].has(node)){_classPrivateFieldBase(this,_reIO)[_reIO](node);}}function _queryNode2(rootNode){var _rootNode$matches;// root 也可能是目标节点 if((_rootNode$matches=rootNode.matches)!==null&&_rootNode$matches!==void 0&&_rootNode$matches.call(rootNode,_classPrivateFieldBase(this,_rule)[_rule].selector)){_classPrivateFieldBase(this,_startObserveNode)[_startObserveNode](rootNode);}rootNode.querySelectorAll(_classPrivateFieldBase(this,_rule)[_rule].selector).forEach(node=>{var _node$closest;if(!((_node$closest=node.closest)!==null&&_node$closest!==void 0&&_node$closest.call(node,_classPrivateFieldBase(this,_ignoreSelector)[_ignoreSelector]))){_classPrivateFieldBase(this,_startObserveNode)[_startObserveNode](node);}});}function _scanNode2(rootNode){var _rootNode$matches2;if(!_class.isElementOrFragment(rootNode)||// rootNode.matches?.(this.#rule.keepSelector) || @@ -36676,27 +36676,28 @@ const newTextNode=document.createTextNode(fragment);_classPrivateFieldBase(this, if(trimmedText.length<_classPrivateFieldBase(this,translator_setting)[translator_setting].minLength||trimmedText.length>_classPrivateFieldBase(this,translator_setting)[translator_setting].maxLength){return true;}// 单个非字母数字字符。 if(trimmedText.length===1&&!trimmedText.match(/[a-zA-Z]/)){return true;}// 只是一个数字 if(!isNaN(parseFloat(trimmedText))&&isFinite(trimmedText)){return true;}// 正则匹配 -if(_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex].test(trimmedText)){return true;}return false;}async function _translateNodeGroup2(nodes,hostNode,deLang){const{transTag,textStyle,transStartHook,transEndHook,transOnly,termsStyle,selectStyle,parentStyle,grandStyle,// detectRemote, +if(_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex].test(trimmedText)){return true;}return false;}async function _translateNodeGroup2(nodes,hostNode,deLang){const{transTag,textStyle,transEndHook,transOnly,termsStyle,selectStyle,parentStyle,grandStyle,// detectRemote, // toLang, // skipLangs = [], highlightWords}=_classPrivateFieldBase(this,_rule)[_rule];const{newlineLength// langDetector, -}=_classPrivateFieldBase(this,translator_setting)[translator_setting];const parentNode=hostNode.parentElement;const hideOrigin=transOnly==="true";// 翻译开始钩子函数 -if(transStartHook!==null&&transStartHook!==void 0&&transStartHook.trim()){try{libs_interpreter.run("exports.transStartHook = ".concat(transStartHook));libs_interpreter.exports.transStartHook({hostNode,parentNode,nodes});}catch(err){log_kissLog("transStartHook",err);}}try{const[processedString,placeholderMap]=_classPrivateFieldBase(this,_serializeForTranslation)[_serializeForTranslation](nodes,termsStyle);// console.log("processedString", processedString); -if(_classPrivateFieldBase(this,_isInvalidText)[_isInvalidText](processedString))return;const wrapper=document.createElement(_classPrivateFieldBase(this,_translationTagName)[_translationTagName]);wrapper.className=_class.KISS_CLASS.warpper;if(processedString.length>newlineLength){const br=document.createElement("br");br.hidden=hideOrigin;wrapper.appendChild(br);}const inner=document.createElement(transTag);inner.className="".concat(_class.KISS_CLASS.inner," ").concat(_classPrivateFieldBase(this,_textClass)[_textClass][textStyle]);inner.appendChild(createLoadingSVG());wrapper.appendChild(inner);nodes[nodes.length-1].after(wrapper);const currentRunId=_classPrivateFieldBase(this,_runId)[_runId];const[translatedText,isSameLang]=await _classPrivateFieldBase(this,_translateFetch)[_translateFetch](processedString,deLang);if(_classPrivateFieldBase(this,_runId)[_runId]!==currentRunId){throw new Error("Request terminated");}if(!translatedText||isSameLang){wrapper.remove();return;}const htmlString=_classPrivateFieldBase(this,_restoreFromTranslation)[_restoreFromTranslation](translatedText,placeholderMap);const trustedHTML=trustedTypesHelper.createHTML(htmlString);// const parser = new DOMParser(); +}=_classPrivateFieldBase(this,translator_setting)[translator_setting];const parentNode=hostNode.parentElement;const hideOrigin=transOnly==="true";try{const[processedString,placeholderMap]=_classPrivateFieldBase(this,_serializeForTranslation)[_serializeForTranslation](nodes,termsStyle);// console.log("processedString", processedString); +if(_classPrivateFieldBase(this,_isInvalidText)[_isInvalidText](processedString))return;const wrapper=document.createElement(_classPrivateFieldBase(this,_translationTagName)[_translationTagName]);wrapper.className=_class.KISS_CLASS.warpper;if(processedString.length>newlineLength){const br=document.createElement("br");br.hidden=hideOrigin;wrapper.appendChild(br);}const inner=document.createElement(transTag);inner.className="".concat(_class.KISS_CLASS.inner," ").concat(_classPrivateFieldBase(this,_textClass)[_textClass][textStyle]);inner.appendChild(createLoadingSVG());wrapper.appendChild(inner);nodes[nodes.length-1].after(wrapper);const currentRunId=_classPrivateFieldBase(this,_runId)[_runId];const{trText:translatedText,isSame:isSameLang}=await _classPrivateFieldBase(this,_translateFetch)[_translateFetch](processedString,deLang);if(_classPrivateFieldBase(this,_runId)[_runId]!==currentRunId){throw new Error("Request terminated");}if(!translatedText||isSameLang){wrapper.remove();return;}const htmlString=_classPrivateFieldBase(this,_restoreFromTranslation)[_restoreFromTranslation](translatedText,placeholderMap);const trustedHTML=trustedTypesHelper.createHTML(htmlString);// const parser = new DOMParser(); // const doc = parser.parseFromString(trustedHTML, "text/html"); // const innerElement = doc.body.firstChild; // inner.replaceChildren(innerElement); inner.innerHTML=trustedHTML;_classPrivateFieldBase(this,_translationNodes)[_translationNodes].set(wrapper,{nodes,isHide:hideOrigin});if(hideOrigin){_classPrivateFieldBase(this,_removeNodes)[_removeNodes](nodes);}// 附加样式 if(selectStyle&&hostNode.style){hostNode.style.cssText+=selectStyle;}if(parentStyle&&parentNode&&parentNode.style){parentNode.style.cssText+=parentStyle;}if(grandStyle&&parentNode&&parentNode.parentElement){parentNode.parentElement.style.cssText+=grandStyle;}// 高亮词汇 if(highlightWords===OPT_HIGHLIGHT_WORDS_AFTERTRANS){nodes.forEach(node=>_classPrivateFieldBase(this,_highlightWordsDeeply)[_highlightWordsDeeply](node));}// 翻译完成钩子函数 -if(transEndHook!==null&&transEndHook!==void 0&&transEndHook.trim()){try{libs_interpreter.run("exports.transEndHook = ".concat(transEndHook));libs_interpreter.exports.transEndHook({hostNode,parentNode,nodes,wrapperNode:wrapper,innerNode:inner});}catch(err){log_kissLog("transEndHook",err);}}}catch(err){// inner.textContent = `[失败]...`; +if(transEndHook!==null&&transEndHook!==void 0&&transEndHook.trim()){try{interpreter.run("exports.transEndHook = ".concat(transEndHook));interpreter.exports.transEndHook({hostNode,parentNode,nodes,wrapperNode:wrapper,innerNode:inner});}catch(err){log_kissLog("transEndHook",err);}}}catch(err){// inner.textContent = `[失败]...`; // todo: 失败重试按钮 log_kissLog("translate group error: ",err.message);_classPrivateFieldBase(this,_cleanupDirectTranslations)[_cleanupDirectTranslations](hostNode);}}function _serializeForTranslation2(nodes,termsStyle){var _this=this;let replaceCounter=0;// {{n}} let wrapCounter=0;// const placeholderMap=new Map();const{startDelimiter,endDelimiter}=_classPrivateFieldBase(this,_placeholder)[_placeholder];const pushReplace=html=>{replaceCounter++;const placeholder="".concat(startDelimiter).concat(replaceCounter).concat(endDelimiter);placeholderMap.set(placeholder,html);return placeholder;};const traverse=node=>{if(node.nodeType!==Node.ELEMENT_NODE&&node.nodeType!==Node.TEXT_NODE){return"";}// 文本节点 if(node.nodeType===Node.TEXT_NODE){let text=node.textContent;// 专业术语替换 if(_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex]){_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex].lastIndex=0;text=text.replace(_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex],function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}const groups=args.slice(1,-2);const matchedIndex=groups.findIndex(group=>group!==undefined);const fullMatch=args[0];const termValue=_classPrivateFieldBase(_this,_termValues)[_termValues][matchedIndex];return pushReplace("").concat(termValue||fullMatch,""));});}return text;}// 元素节点 -if(node.nodeType===Node.ELEMENT_NODE){if(_classPrivateFieldBase(this,_rule)[_rule].hasRichText==="true"&&_class.TAGS.REPLACE.has(node.tagName)||node.matches(_classPrivateFieldBase(this,_rule)[_rule].keepSelector)||node.matches(_classPrivateFieldBase(this,_ignoreSelector)[_ignoreSelector])||!node.textContent.trim()){if(node.tagName==="IMG"||node.tagName==="SVG"){node.style.width="".concat(node.offsetWidth,"px");node.style.height="".concat(node.offsetHeight,"px");}return pushReplace(node.outerHTML);}let innerContent="";node.childNodes.forEach(child=>{innerContent+=traverse(child);});if(_classPrivateFieldBase(this,_rule)[_rule].hasRichText==="true"&&_class.TAGS.WARP.has(node.tagName)){wrapCounter++;const startPlaceholder="<".concat(_classPrivateFieldBase(this,_placeholder)[_placeholder].tagName).concat(wrapCounter,">");const endPlaceholder="");placeholderMap.set(startPlaceholder,buildOpeningTag(node));placeholderMap.set(endPlaceholder,""));return"".concat(startPlaceholder).concat(innerContent).concat(endPlaceholder);}return innerContent;}return"";};function buildOpeningTag(node){const escapeAttr=str=>str.replace(/"/g,""");let tag="<".concat(node.tagName.toLowerCase());for(const attr of node.attributes){tag+=" ".concat(attr.name,"=\"").concat(escapeAttr(attr.value),"\"");}tag+=">";return tag;}const processedString=nodes.map(traverse).join("").trim();return[processedString,placeholderMap];}function _restoreFromTranslation2(translatedText,placeholderMap){if(!placeholderMap.size){return translatedText;}if(!translatedText)return"";return translatedText.replace(_classPrivateFieldBase(this,_placeholderRegex)[_placeholderRegex],match=>placeholderMap.get(match)||match);}function _translateFetch2(text){let deLang=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";const{fromLang,toLang}=_classPrivateFieldBase(this,_rule)[_rule];return apiTranslate({text,fromLang:deLang||fromLang,toLang,apiSetting:_classPrivateFieldBase(this,_apiSetting)[_apiSetting],docInfo:_classPrivateFieldBase(this,_docInfo)[_docInfo],glossary:_classPrivateFieldBase(this,_glossary)[_glossary]});}function _findTranslationWrappers2(parentNode){return parentNode.querySelectorAll(":scope > ".concat(APP_LCNAME));}function _cleanupAllNodes2(){_classPrivateFieldBase(this,_rootNodes)[_rootNodes].forEach(root=>_classPrivateFieldBase(this,_cleanupAllTranslations)[_cleanupAllTranslations](root));}function _cleanupAllTranslations2(root){root.querySelectorAll(APP_LCNAME).forEach(el=>_classPrivateFieldBase(this,_removeTranslationElement)[_removeTranslationElement](el));}function _cleanupDirectTranslations2(node){_classPrivateFieldBase(this,_findTranslationWrappers)[_findTranslationWrappers](node).forEach(el=>{_classPrivateFieldBase(this,_removeTranslationElement)[_removeTranslationElement](el);});}function _removeTranslationElement2(el){const parentElement=el.parentElement;_classPrivateFieldBase(this,_processedNodes)[_processedNodes].delete(parentElement);// 如果是仅显示译文模式,先恢复原文 +if(node.nodeType===Node.ELEMENT_NODE){if(_classPrivateFieldBase(this,_rule)[_rule].hasRichText==="true"&&_class.TAGS.REPLACE.has(node.tagName)||node.matches(_classPrivateFieldBase(this,_rule)[_rule].keepSelector)||// node.matches(this.#ignoreSelector) || +!node.textContent.trim()){if(node.tagName==="IMG"||node.tagName==="SVG"){node.style.width="".concat(node.offsetWidth,"px");node.style.height="".concat(node.offsetHeight,"px");}return pushReplace(node.outerHTML);}let innerContent="";node.childNodes.forEach(child=>{innerContent+=traverse(child);});if(_classPrivateFieldBase(this,_rule)[_rule].hasRichText==="true"&&_class.TAGS.WARP.has(node.tagName)){wrapCounter++;const startPlaceholder="<".concat(_classPrivateFieldBase(this,_placeholder)[_placeholder].tagName).concat(wrapCounter,">");const endPlaceholder="");placeholderMap.set(startPlaceholder,buildOpeningTag(node));placeholderMap.set(endPlaceholder,""));return"".concat(startPlaceholder).concat(innerContent).concat(endPlaceholder);}return innerContent;}return"";};function buildOpeningTag(node){const escapeAttr=str=>str.replace(/"/g,""");let tag="<".concat(node.tagName.toLowerCase());for(const attr of node.attributes){tag+=" ".concat(attr.name,"=\"").concat(escapeAttr(attr.value),"\"");}tag+=">";return tag;}const processedString=nodes.map(traverse).join("").trim();return[processedString,placeholderMap];}function _restoreFromTranslation2(translatedText,placeholderMap){if(!placeholderMap.size){return translatedText;}if(!translatedText)return"";return translatedText.replace(_classPrivateFieldBase(this,_placeholderRegex)[_placeholderRegex],match=>placeholderMap.get(match)||match);}function _translateFetch2(text){let deLang=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";const{toLang,transStartHook}=_classPrivateFieldBase(this,_rule)[_rule];const fromLang=deLang||_classPrivateFieldBase(this,_rule)[_rule].fromLang;const apiSetting={..._classPrivateFieldBase(this,_apiSetting)[_apiSetting]};const docInfo={..._classPrivateFieldBase(this,_docInfo)[_docInfo]};const glossary={..._classPrivateFieldBase(this,_glossary)[_glossary]};const apisMap=_classPrivateFieldBase(this,_apisMap)[_apisMap];const args={text,fromLang,toLang,apiSetting,docInfo,glossary};// 翻译开始钩子函数 +if(transStartHook!==null&&transStartHook!==void 0&&transStartHook.trim()){try{interpreter.run("exports.transStartHook = ".concat(transStartHook));const hookResult=interpreter.exports.transStartHook({...args,apisMap});if(hookResult){Object.assign(args,...hookResult);}}catch(err){log_kissLog("transStartHook",err);}}return apiTranslate(args);}function _findTranslationWrappers2(parentNode){return parentNode.querySelectorAll(":scope > ".concat(APP_LCNAME));}function _cleanupAllNodes2(){_classPrivateFieldBase(this,_rootNodes)[_rootNodes].forEach(root=>_classPrivateFieldBase(this,_cleanupAllTranslations)[_cleanupAllTranslations](root));}function _cleanupAllTranslations2(root){root.querySelectorAll(APP_LCNAME).forEach(el=>_classPrivateFieldBase(this,_removeTranslationElement)[_removeTranslationElement](el));}function _cleanupDirectTranslations2(node){_classPrivateFieldBase(this,_findTranslationWrappers)[_findTranslationWrappers](node).forEach(el=>{_classPrivateFieldBase(this,_removeTranslationElement)[_removeTranslationElement](el);});}function _removeTranslationElement2(el){const parentElement=el.parentElement;_classPrivateFieldBase(this,_processedNodes)[_processedNodes].delete(parentElement);// 如果是仅显示译文模式,先恢复原文 const{nodes,isHide}=_classPrivateFieldBase(this,_translationNodes)[_translationNodes].get(el)||{};if(isHide){_classPrivateFieldBase(this,_restoreOriginal)[_restoreOriginal](el,nodes);}_classPrivateFieldBase(this,_translationNodes)[_translationNodes].delete(el);el.remove();// todo: 可能不应深度清除 if(_classPrivateFieldBase(this,_rule)[_rule].highlightWords===OPT_HIGHLIGHT_WORDS_AFTERTRANS){_classPrivateFieldBase(this,_removeHighlights)[_removeHighlights](parentElement);}_classPrivateFieldBase(this,_removeBrTags)[_removeBrTags](parentElement);}function _restoreOriginal2(el,nodes){if(nodes){const frag=document.createDocumentFragment();nodes.forEach(n=>frag.appendChild(n));const parent=el.parentElement;parent===null||parent===void 0?void 0:parent.insertBefore(frag,el);}}function _removeNodes2(nodes){if(nodes){const frag=document.createDocumentFragment();nodes.forEach(n=>frag.appendChild(n));}}function _toggleTranslationOnly2(node,transOnly){_classPrivateFieldBase(this,_findTranslationWrappers)[_findTranslationWrappers](node).forEach(el=>{const br=el.querySelector(":scope > br");const{nodes}=_classPrivateFieldBase(this,_translationNodes)[_translationNodes].get(el)||{};if(transOnly==="true"){// 双语变为仅译文 if(br)br.hidden=true;_classPrivateFieldBase(this,_removeNodes)[_removeNodes](nodes);_classPrivateFieldBase(this,_translationNodes)[_translationNodes].set(el,{nodes,isHide:true});}else{// 仅译文变为双语 @@ -36704,8 +36705,17 @@ if(br)br.hidden=false;_classPrivateFieldBase(this,_restoreOriginal)[_restoreOrig if(needsRefresh){Object.assign(appliedRule,{apiSlug,fromLang,toLang,hasRichText,textStyle,transOnly});_classPrivateFieldBase(this,_refreshNode)[_refreshNode](node);// 会自动应用新样式 return;}// 样式规则过时 if(appliedRule.textStyle!==textStyle){const oldStyle=appliedRule.textStyle;appliedRule.textStyle=textStyle;_classPrivateFieldBase(this,_updateStyle)[_updateStyle](node,oldStyle,textStyle);}// 切换原文显示 -if(appliedRule.transOnly!==transOnly){appliedRule.transOnly=transOnly;_classPrivateFieldBase(this,_toggleTranslationOnly)[_toggleTranslationOnly](node,transOnly);}}function _resetOptions2(){_classPrivateFieldBase(this,_io)[_io].disconnect();_classPrivateFieldBase(this,_mo)[_mo].disconnect();_classPrivateFieldBase(this,_viewNodes)[_viewNodes].clear();_classPrivateFieldBase(this,_rootNodes)[_rootNodes].clear();_classPrivateFieldBase(this,_observedNodes)[_observedNodes]=new WeakSet();_classPrivateFieldBase(this,_translationNodes)[_translationNodes]=new WeakMap();_classPrivateFieldBase(this,_processedNodes)[_processedNodes]=new WeakMap();}function _enableMouseHover2(){if(_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled])return;_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled]=true;_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting.useMouseHover=true;document.addEventListener("mousemove",_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]);const{mouseHoverKey}=_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting;if(mouseHoverKey.length===0){// mouseHoverKey = DEFAULT_MOUSEHOVER_KEY; -return;}_classPrivateFieldBase(this,_removeKeydownHandler)[_removeKeydownHandler]=shortcutRegister(mouseHoverKey,_classPrivateFieldBase(this,_boundKeyDownHandler)[_boundKeyDownHandler]);}function _disableMouseHover2(){var _classPrivateFieldLoo,_classPrivateFieldLoo2;if(!_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled])return;_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled]=false;_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting.useMouseHover=false;document.removeEventListener("mousemove",_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]);(_classPrivateFieldLoo=(_classPrivateFieldLoo2=_classPrivateFieldBase(this,_removeKeydownHandler))[_removeKeydownHandler])===null||_classPrivateFieldLoo===void 0?void 0:_classPrivateFieldLoo.call(_classPrivateFieldLoo2);}function _initInjector2(){if(_classPrivateFieldBase(this,_isJsInjected)[_isJsInjected]){return;}_classPrivateFieldBase(this,_isJsInjected)[_isJsInjected]=true;try{const{injectJs,injectCss}=_classPrivateFieldBase(this,_rule)[_rule];if(isExt){injectJs&&sendBgMsg(MSG_INJECT_JS,injectJs);injectCss&&sendBgMsg(MSG_INJECT_CSS,injectCss);}else{injectJs&&injectInlineJs(injectJs,"kiss-translator-userinit-injector");injectCss&&injectInternalCss(injectCss);}}catch(err){log_kissLog("inject js",err);}}function _removeInjector2(){var _document$querySelect;(_document$querySelect=document.querySelectorAll("[data-source^=\"kiss-inject\"]"))===null||_document$querySelect===void 0?void 0:_document$querySelect.forEach(el=>el.remove());}async function _translateTitle2(){const title=document.title;_classPrivateFieldBase(this,_docInfo)[_docInfo].title=title;if(!title)return;try{const deLang=await tryDetectLang(title);const[translatedTitle]=await _classPrivateFieldBase(this,_translateFetch)[_translateFetch](title,deLang);document.title=translatedTitle||title;}catch(err){log_kissLog("tanslate title",err);}}translator_Translator.displayCache=new WeakMap();translator_Translator.TAGS={BREAK_LINE:new Set(["BR","WBR"]),BLOCK:new Set(["ADDRESS","ARTICLE","ASIDE","BLOCKQUOTE","CANVAS","DD","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","H1","H2","H3","H4","H5","H6","HEADER","HR","LI","MAIN","NAV","NOSCRIPT","OL","P","PRE","SECTION","TABLE","TFOOT","UL","VIDEO"]),INLINE:new Set([// "A", +if(appliedRule.transOnly!==transOnly){appliedRule.transOnly=transOnly;_classPrivateFieldBase(this,_toggleTranslationOnly)[_toggleTranslationOnly](node,transOnly);}}function _resetOptions2(){_classPrivateFieldBase(this,_removeShadowRootListener)[_removeShadowRootListener]();_classPrivateFieldBase(this,_io)[_io].disconnect();_classPrivateFieldBase(this,_mo)[_mo].disconnect();_classPrivateFieldBase(this,_viewNodes)[_viewNodes].clear();_classPrivateFieldBase(this,_rootNodes)[_rootNodes].clear();_classPrivateFieldBase(this,_observedNodes)[_observedNodes]=new WeakSet();_classPrivateFieldBase(this,_translationNodes)[_translationNodes]=new WeakMap();_classPrivateFieldBase(this,_processedNodes)[_processedNodes]=new WeakMap();}function _enableMouseHover2(){if(_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled])return;_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled]=true;_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting.useMouseHover=true;document.addEventListener("mousemove",_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]);const{mouseHoverKey}=_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting;if(mouseHoverKey.length===0){// mouseHoverKey = DEFAULT_MOUSEHOVER_KEY; +return;}_classPrivateFieldBase(this,_removeKeydownHandler)[_removeKeydownHandler]=shortcutRegister(mouseHoverKey,_classPrivateFieldBase(this,_boundKeyDownHandler)[_boundKeyDownHandler]);}function _disableMouseHover2(){var _classPrivateFieldLoo,_classPrivateFieldLoo2;if(!_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled])return;_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled]=false;_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting.useMouseHover=false;document.removeEventListener("mousemove",_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]);(_classPrivateFieldLoo=(_classPrivateFieldLoo2=_classPrivateFieldBase(this,_removeKeydownHandler))[_removeKeydownHandler])===null||_classPrivateFieldLoo===void 0?void 0:_classPrivateFieldLoo.call(_classPrivateFieldLoo2);}function _initInjector2(){if(_classPrivateFieldBase(this,_isJsInjected)[_isJsInjected]){return;}_classPrivateFieldBase(this,_isJsInjected)[_isJsInjected]=true;try{// const { injectJs, injectCss } = this.#rule; +// if (isExt) { +// injectJs && sendBgMsg(MSG_INJECT_JS, injectJs); +// injectCss && sendBgMsg(MSG_INJECT_CSS, injectCss); +// } else { +// injectJs && +// injectInlineJs(injectJs, "kiss-translator-userinit-injector"); +// injectCss && injectInternalCss(injectCss); +// } +const{injectJs,toLang}=_classPrivateFieldBase(this,_rule)[_rule];if(injectJs!==null&&injectJs!==void 0&&injectJs.trim()){const apiSetting={..._classPrivateFieldBase(this,_apiSetting)[_apiSetting]};const docInfo={..._classPrivateFieldBase(this,_docInfo)[_docInfo]};const glossary={..._classPrivateFieldBase(this,_glossary)[_glossary]};const apisMap=_classPrivateFieldBase(this,_apisMap)[_apisMap];const apiDectect=tryDetectLang;interpreter.import({KT:{apiTranslate: apiTranslate,apiDectect,apiSetting,apisMap,toLang,docInfo,glossary}});interpreter.run(injectJs);}}catch(err){log_kissLog("inject js",err);}}function _removeInjector2(){var _document$querySelect;(_document$querySelect=document.querySelectorAll("[data-source^=\"kiss-inject\"]"))===null||_document$querySelect===void 0?void 0:_document$querySelect.forEach(el=>el.remove());}async function _translateTitle2(){const title=document.title;_classPrivateFieldBase(this,_docInfo)[_docInfo].title=title;if(!title)return;try{const deLang=await tryDetectLang(title);const{trText}=await _classPrivateFieldBase(this,_translateFetch)[_translateFetch](title,deLang);document.title=trText||title;}catch(err){log_kissLog("tanslate title",err);}}translator_Translator.displayCache=new WeakMap();translator_Translator.TAGS={BREAK_LINE:new Set(["BR","WBR"]),BLOCK:new Set(["ADDRESS","ARTICLE","ASIDE","BLOCKQUOTE","CANVAS","DD","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","H1","H2","H3","H4","H5","H6","HEADER","HR","LI","MAIN","NAV","NOSCRIPT","OL","P","PRE","SECTION","TABLE","TFOOT","UL","VIDEO"]),INLINE:new Set([// "A", "ABBR","ACRONYM","B","BDO","BIG","BR","BUTTON","CITE","CODE","DFN","DEL","FONT","EM","I","IMG","INPUT","INS","KBD","LABEL","MAP","MARK","OBJECT","OUTPUT","Q","SAMP","SCRIPT","SELECT","SMALL",// "SPAN", "STRONG","SUB","SUP","TEXTAREA","TIME","TT","U","VAR"]),REPLACE:new Set(["ABBR","CODE","DFN","IMG","KBD","OUTPUT","SAMP","SUB","SUP","SVG","TIME","VAR"]),WARP:new Set(["A","B","BDO","BDI","BIG","CITE","DEL","EM","FONT","I","INS","MARK","Q","S","SMALL","SPAN","STRONG","U"])};// 译文相关class translator_Translator.KISS_CLASS={warpper:"".concat(APP_LCNAME,"-wrapper notranslate"),inner:"".concat(APP_LCNAME,"-inner"),term:"".concat(APP_LCNAME,"-term"),br:"".concat(APP_LCNAME,"-br"),highlight:"".concat(APP_LCNAME,"-highlight")};// 内置跳过翻译文本 @@ -36727,9 +36737,9 @@ translator_Translator.BUILTIN_SKIP_PATTERNS=[// 1. URL (覆盖 http, https, ftp, /^\d{1,2}:\d{2}(:\d{2})?$/,// 14. 包含常见扩展名的文件名 (例如: document.pdf, image.jpeg) /^[^\s\\/:]+?\.[a-zA-Z0-9]{2,5}$/ // todo: 数字和特殊字符组成的字符串 ];translator_Translator.DEFAULT_OPTIONS=setting_DEFAULT_SETTING;// 默认配置 -translator_Translator.DEFAULT_RULE=GLOBLA_RULE;translator_Translator.BUILTIN_IGNORE_SELECTOR="address, area, audio, br, canvas, \n data, datalist, embed, head, iframe, input, noscript, map, \n object, option, param, picture, progress, \n select, script, style, track, textarea, template, \n video, wbr, .notranslate, [contenteditable], [translate='no'], \n ".concat(APP_LCNAME,", #").concat(APP_CONSTS.fabID,", #").concat(APP_CONSTS.boxID,", \n .").concat(APP_CONSTS.fabID,"_warpper, .").concat(APP_CONSTS.boxID,"_warpper"); +translator_Translator.DEFAULT_RULE=GLOBLA_RULE;translator_Translator.KISS_IGNORE_SELECTOR="".concat(APP_LCNAME,", .kiss-caption-container, .kiss-subtitle-controls\n #").concat(APP_CONSTS.fabID,", .").concat(APP_CONSTS.fabID,"_warpper,\n #").concat(APP_CONSTS.boxID,", .").concat(APP_CONSTS.boxID,"_warpper,\n #").concat(APP_CONSTS.popupID,", .").concat(APP_CONSTS.popupID,"_warpper");translator_Translator.BUILTIN_IGNORE_SELECTOR="address, area, audio, br, canvas, \n data, datalist, embed, head, iframe, input, noscript, map, \n object, option, param, picture, progress, \n select, script, style, track, textarea, template, \n video, wbr, .notranslate, [contenteditable], [translate='no'], \n ".concat(_class.KISS_IGNORE_SELECTOR); ;// CONCATENATED MODULE: ./src/libs/inputTranslate.js -function isInputNode(node){return node.nodeName==="INPUT"||node.nodeName==="TEXTAREA";}function isEditAbleNode(node){return node.hasAttribute("contenteditable");}function replaceContentEditableText(node,newText){node.focus();const selection=window.getSelection();if(!selection)return;const range=document.createRange();range.selectNodeContents(node);selection.removeAllRanges();selection.addRange(range);range.deleteContents();const textNode=document.createTextNode(newText);range.insertNode(textNode);selection.collapseToEnd();}function getNodeText(node){if(isInputNode(node)){return node.value;}return node.innerText||node.textContent||"";}function addLoading(node,loadingId){const rect=node.getBoundingClientRect();const div=document.createElement("div");div.id=loadingId;div.appendChild(createLoadingSVG());div.style.cssText="\n position: fixed;\n left: ".concat(rect.left,"px;\n top: ").concat(rect.top,"px;\n width: ").concat(rect.width,"px;\n height: ").concat(rect.height,"px;\n line-height: ").concat(rect.height,"px;\n text-align: center;\n z-index: 2147483647;\n pointer-events: none; /* \u5141\u8BB8\u70B9\u51FB\u7A7F\u900F */\n ");document.body.appendChild(div);}function removeLoading(loadingId){const div=document.getElementById(loadingId);if(div)div.remove();}/** +function isInputNode(node){return node.nodeName==="INPUT"||node.nodeName==="TEXTAREA";}function isEditAbleNode(node){return node.hasAttribute("contenteditable");}async function replaceContentEditableText(node,newText){try{logger.debug("try replace editable 1: pasteEvent");node.focus();const selection=window.getSelection();if(!selection)throw new Error("window.getSelection() is not available.");const targetNode=node.querySelector("p")||node;const range=document.createRange();range.selectNodeContents(targetNode);selection.removeAllRanges();selection.addRange(range);const dataTransfer=new DataTransfer();dataTransfer.setData("text/plain",newText);const pasteEvent=new ClipboardEvent("paste",{clipboardData:dataTransfer,bubbles:true,cancelable:true});node.dispatchEvent(pasteEvent);await sleep(50);if(node.innerText.trim()===newText){return true;}throw new Error("Strategy 1 failed to replace text correctly.");}catch(error){logger.debug("Strategy 1 Failed:",error.message);}try{logger.debug("try replace editable 2: execCommand");node.focus();const selection=window.getSelection();if(!selection)throw new Error("window.getSelection() is not available.");const targetNode=node.querySelector("p")||node;const range=document.createRange();range.selectNodeContents(targetNode);selection.removeAllRanges();selection.addRange(range);document.execCommand("insertText",false,newText);await sleep(50);if(node.innerText.trim()===newText){return true;}throw new Error("Strategy 2 failed to replace text correctly.");}catch(error){logger.debug("Strategy 2 Failed:",error.message);}try{logger.debug("try replace editable 3: textContent");node.focus();const targetNode=node.querySelector("p")||node;const textSpan=targetNode.querySelector('span[data-lexical-text="true"]');if(textSpan){textSpan.textContent=newText;}else{targetNode.textContent=newText;}node.dispatchEvent(new Event("input",{bubbles:true,cancelable:true}));await sleep(50);if(node.innerText.trim()===newText){return true;}throw new Error("Strategy 3 failed to replace text correctly.");}catch(error){logger.debug("Strategy 3 Failed:",error.message);}return false;}function getNodeText(node){if(isInputNode(node)){return node.value;}return node.innerText||node.textContent||"";}function addLoading(node,loadingId){const rect=node.getBoundingClientRect();const div=document.createElement("div");div.id=loadingId;div.appendChild(createLoadingSVG());div.style.cssText="\n position: fixed;\n left: ".concat(rect.left,"px;\n top: ").concat(rect.top,"px;\n width: ").concat(rect.width,"px;\n height: ").concat(rect.height,"px;\n line-height: ").concat(rect.height,"px;\n text-align: center;\n z-index: 2147483647;\n pointer-events: none; /* \u5141\u8BB8\u70B9\u51FB\u7A7F\u900F */\n ");document.body.appendChild(div);}function removeLoading(loadingId){const div=document.getElementById(loadingId);if(div)div.remove();}/** * 输入框翻译 */var _config=/*#__PURE__*/_classPrivateFieldKey("config");var _unregisterShortcut=/*#__PURE__*/_classPrivateFieldKey("unregisterShortcut");var _isEnabled=/*#__PURE__*/_classPrivateFieldKey("isEnabled");var _triggerShortcut=/*#__PURE__*/_classPrivateFieldKey("triggerShortcut");var _handleTranslate=/*#__PURE__*/_classPrivateFieldKey("handleTranslate");class InputTranslator{// 用于缓存快捷键 constructor(){let{inputRule=DEFAULT_INPUT_RULE,transApis=[]}=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};/** @@ -36737,13 +36747,14 @@ constructor(){let{inputRule=DEFAULT_INPUT_RULE,transApis=[]}=arguments.length>0& * @private */Object.defineProperty(this,_handleTranslate,{value:_handleTranslate2});Object.defineProperty(this,_config,{writable:true,value:void 0});Object.defineProperty(this,_unregisterShortcut,{writable:true,value:null});Object.defineProperty(this,_isEnabled,{writable:true,value:false});Object.defineProperty(this,_triggerShortcut,{writable:true,value:void 0});_classPrivateFieldBase(this,_config)[_config]={inputRule,transApis};const{triggerShortcut:initialTriggerShortcut}=_classPrivateFieldBase(this,_config)[_config].inputRule;if(initialTriggerShortcut&&initialTriggerShortcut.length>0){_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut]=initialTriggerShortcut;}else{_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut]=DEFAULT_INPUT_SHORTCUT;}if(_classPrivateFieldBase(this,_config)[_config].inputRule.transOpen){this.enable();}}/** * 启用输入翻译功能 - */enable(){if(_classPrivateFieldBase(this,_isEnabled)[_isEnabled]||!_classPrivateFieldBase(this,_config)[_config].inputRule.transOpen){return;}const{triggerCount,triggerTime}=_classPrivateFieldBase(this,_config)[_config].inputRule;_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]=stepShortcutRegister(_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut],_classPrivateFieldBase(this,_handleTranslate)[_handleTranslate].bind(this),triggerCount,triggerTime);_classPrivateFieldBase(this,_isEnabled)[_isEnabled]=true;log_kissLog("Input Translator enabled.");}/** + */enable(){if(_classPrivateFieldBase(this,_isEnabled)[_isEnabled]||!_classPrivateFieldBase(this,_config)[_config].inputRule.transOpen){return;}const{triggerCount,triggerTime}=_classPrivateFieldBase(this,_config)[_config].inputRule;_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]=stepShortcutRegister(_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut],_classPrivateFieldBase(this,_handleTranslate)[_handleTranslate].bind(this),triggerCount,triggerTime);_classPrivateFieldBase(this,_isEnabled)[_isEnabled]=true;logger.info("Input Translator enabled.");}/** * 禁用输入翻译功能 - */disable(){if(!_classPrivateFieldBase(this,_isEnabled)[_isEnabled]){return;}if(_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]){_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]();_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]=null;}_classPrivateFieldBase(this,_isEnabled)[_isEnabled]=false;log_kissLog("Input Translator disabled.");}/** + */disable(){if(!_classPrivateFieldBase(this,_isEnabled)[_isEnabled]){return;}if(_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]){_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]();_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]=null;}_classPrivateFieldBase(this,_isEnabled)[_isEnabled]=false;logger.info("Input Translator disabled.");}/** * 切换启用/禁用状态 */toggle(){if(_classPrivateFieldBase(this,_isEnabled)[_isEnabled]){this.disable();}else{this.enable();}}/** * 更新配置 - */updateConfig(_ref){let{inputRule,transApis}=_ref;const wasEnabled=_classPrivateFieldBase(this,_isEnabled)[_isEnabled];if(wasEnabled){this.disable();}if(inputRule){_classPrivateFieldBase(this,_config)[_config].inputRule=inputRule;}if(transApis){_classPrivateFieldBase(this,_config)[_config].transApis=transApis;}const{triggerShortcut:initialTriggerShortcut}=_classPrivateFieldBase(this,_config)[_config].inputRule;_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut]=initialTriggerShortcut&&initialTriggerShortcut.length>0?initialTriggerShortcut:DEFAULT_INPUT_SHORTCUT;if(wasEnabled){this.enable();}}}async function _handleTranslate2(){let node=document.activeElement;if(!node)return;while(node.shadowRoot&&node.shadowRoot.activeElement){node=node.shadowRoot.activeElement;}if(!isInputNode(node)&&!isEditAbleNode(node)){return;}const{apiSlug,transSign,triggerCount}=_classPrivateFieldBase(this,_config)[_config].inputRule;let{fromLang,toLang}=_classPrivateFieldBase(this,_config)[_config].inputRule;let initText=getNodeText(node);if(_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut].length===1&&_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut][0].length===1){initText=removeEndchar(initText,_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut][0],triggerCount);}if(!initText.trim())return;let text=initText;if(transSign){const res=matchInputStr(text,transSign);if(res){let lang=res[1];if(lang==="zh"||lang==="cn")lang="zh-CN";else if(lang==="tw"||lang==="hk")lang="zh-TW";if(lang&&OPT_LANGS_LIST.includes(lang)){toLang=lang;}text=res[2];}}const apiSetting=_classPrivateFieldBase(this,_config)[_config].transApis.find(api=>api.apiSlug===apiSlug)||DEFAULT_API_SETTING;const loadingId="kiss-loading-"+utils_genEventName();try{addLoading(node,loadingId);const[trText,isSame]=await apiTranslate({text,fromLang,toLang,apiSetting});if(!trText||isSame)return;if(isInputNode(node)){node.value=trText;node.dispatchEvent(new Event("input",{bubbles:true,cancelable:true}));}else{replaceContentEditableText(node,trText);}}catch(err){log_kissLog("Translate input error:",err);}finally{removeLoading(loadingId);}} + */updateConfig(_ref){let{inputRule,transApis}=_ref;const wasEnabled=_classPrivateFieldBase(this,_isEnabled)[_isEnabled];if(wasEnabled){this.disable();}if(inputRule){_classPrivateFieldBase(this,_config)[_config].inputRule=inputRule;}if(transApis){_classPrivateFieldBase(this,_config)[_config].transApis=transApis;}const{triggerShortcut:initialTriggerShortcut}=_classPrivateFieldBase(this,_config)[_config].inputRule;_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut]=initialTriggerShortcut&&initialTriggerShortcut.length>0?initialTriggerShortcut:DEFAULT_INPUT_SHORTCUT;if(wasEnabled){this.enable();}}}async function _handleTranslate2(){let node=document.activeElement;if(!node)return;while(node.shadowRoot&&node.shadowRoot.activeElement){node=node.shadowRoot.activeElement;}if(!isInputNode(node)&&!isEditAbleNode(node)){return;}const{apiSlug,transSign,triggerCount}=_classPrivateFieldBase(this,_config)[_config].inputRule;let{fromLang,toLang}=_classPrivateFieldBase(this,_config)[_config].inputRule;let initText=getNodeText(node);if(_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut].length===1&&_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut][0].length===1){initText=removeEndchar(initText,_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut][0],triggerCount);}if(!initText.trim())return;let text=initText;if(transSign){const res=matchInputStr(text,transSign);if(res){let lang=res[1];if(lang==="zh"||lang==="cn")lang="zh-CN";else if(lang==="tw"||lang==="hk")lang="zh-TW";if(lang&&OPT_LANGS_LIST.includes(lang)){toLang=lang;}text=res[2];}}const apiSetting=_classPrivateFieldBase(this,_config)[_config].transApis.find(api=>api.apiSlug===apiSlug)||DEFAULT_API_SETTING;const loadingId="kiss-loading-"+utils_genEventName();try{addLoading(node,loadingId);const{trText,isSame}=await apiTranslate({text,fromLang,toLang,apiSetting});const newText=(trText===null||trText===void 0?void 0:trText.trim())||"";if(!newText||isSame)return;if(isInputNode(node)){node.value=newText;node.dispatchEvent(new Event("input",{bubbles:true,cancelable:true}));}else{const success=await replaceContentEditableText(node,newText);if(!success){// todo: 提示可以黏贴 +logger.info("Replace editable text failed");}}}catch(err){logger.info("Translate input error:",err);}finally{removeLoading(loadingId);}} // EXTERNAL MODULE: ./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js var react = __webpack_require__(7948); // EXTERNAL MODULE: ./node_modules/.pnpm/react-dom@18.2.0_react@18.2.0/node_modules/react-dom/client.js @@ -39319,7 +39330,7 @@ Divider.muiSkipListHighlight = true; false ? 0 : void 0; /* harmony default export */ const Divider_Divider = (Divider); ;// CONCATENATED MODULE: ./src/hooks/Loading.js -function Loading(){return/*#__PURE__*/(0,jsx_runtime.jsxs)("center",{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://github.com/fishjar/kiss-translator",children:"KISS Translator v".concat("2.0.4")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{})]});} +function Loading(){return/*#__PURE__*/(0,jsx_runtime.jsxs)("center",{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://github.com/fishjar/kiss-translator",children:"KISS Translator v".concat("2.0.5")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{})]});} ;// CONCATENATED MODULE: ./src/hooks/Setting.js const SettingContext=/*#__PURE__*/(0,react.createContext)({setting:setting_DEFAULT_SETTING,updateSetting:()=>{},reloadSetting:()=>{}});function SettingProvider(_ref){let{children}=_ref;const{data:setting,isLoading,update,reload}=useStorage(storage_STOKEY_SETTING,setting_DEFAULT_SETTING,storage_KV_SETTING_KEY);(0,react.useEffect)(()=>{if(typeof(setting===null||setting===void 0?void 0:setting.darkMode)==="boolean"){update(currentSetting=>({...currentSetting,darkMode:currentSetting.darkMode?"dark":"light"}));}},[setting===null||setting===void 0?void 0:setting.darkMode,update]);(0,react.useEffect)(()=>{(async()=>{try{logger.setLevel(setting===null||setting===void 0?void 0:setting.logLevel);if(isExt){await sendBgMsg(MSG_SET_LOGLEVEL,setting===null||setting===void 0?void 0:setting.logLevel);}}catch(error){logger.error("Failed to fetch log level, using default.",error);}})();},[setting]);const updateSetting=(0,react.useCallback)(objOrFn=>{update(objOrFn);debounceSyncMeta(storage_KV_SETTING_KEY);},[update]);const updateChild=(0,react.useCallback)(key=>async obj=>{updateSetting(prev=>({...prev,[key]:{...((prev===null||prev===void 0?void 0:prev[key])||{}),...obj}}));},[updateSetting]);const value=(0,react.useMemo)(()=>({setting,updateSetting,updateChild,reloadSetting:reload}),[setting,updateSetting,updateChild,reload]);if(isLoading){return/*#__PURE__*/(0,jsx_runtime.jsx)(Loading,{});}if(!setting){/*#__PURE__*/(0,jsx_runtime.jsx)("center",{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Alert_Alert,{severity:"error",sx:{maxWidth:600,margin:"60px auto"},children:[/*#__PURE__*/(0,jsx_runtime.jsx)("p",{children:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002"}),/*#__PURE__*/(0,jsx_runtime.jsx)("p",{children:"Data loading error, please refresh the page or uninstall and reinstall."})]})});}return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingContext.Provider,{value:value,children:children});}/** * 设置 hook @@ -46856,7 +46867,7 @@ var LibraryAddCheck = __webpack_require__(1064); ;// CONCATENATED MODULE: ./src/views/Selection/CopyBtn.js function CopyBtn(_ref){let{text}=_ref;const[copied,setCopied]=(0,react.useState)(false);const handleClick=async e=>{e.stopPropagation();await navigator.clipboard.writeText(text);setCopied(true);const timer=setTimeout(()=>{clearTimeout(timer);setCopied(false);},500);};return/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",sx:{opacity:0.5,"&:hover":{opacity:1}},onClick:handleClick,children:copied?/*#__PURE__*/(0,jsx_runtime.jsx)(LibraryAddCheck/* default */.Z,{fontSize:"inherit"}):/*#__PURE__*/(0,jsx_runtime.jsx)(ContentCopy/* default */.Z,{fontSize:"inherit"})});} ;// CONCATENATED MODULE: ./src/views/Selection/TranCont.js -function TranCont(_ref){let{text,fromLang,toLang,apiSlug,transApis,simpleStyle=false}=_ref;const i18n=useI18n();const[trText,setTrText]=(0,react.useState)("");const[loading,setLoading]=(0,react.useState)(false);const[error,setError]=(0,react.useState)("");const apiSetting=(0,react.useMemo)(()=>transApis.find(api=>api.apiSlug===apiSlug),[transApis,apiSlug]);(0,react.useEffect)(()=>{if(!(text!==null&&text!==void 0&&text.trim())||!apiSetting){return;}(async()=>{try{setLoading(true);setTrText("");setError("");const[trText]=await apiTranslate({text,fromLang,toLang,apiSetting});setTrText(trText);}catch(err){setError(err.message);}finally{setLoading(false);}})();},[text,fromLang,toLang,apiSetting]);if(simpleStyle){return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:error?/*#__PURE__*/(0,jsx_runtime.jsx)(Alert_Alert,{severity:"error",children:error}):loading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{style:{whiteSpace:"pre-line"},children:trText})});}return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"".concat(i18n("translated_text")," - ").concat(apiSetting.apiName)// disabled +function TranCont(_ref){let{text,fromLang,toLang,apiSlug,transApis,simpleStyle=false}=_ref;const i18n=useI18n();const[trText,setTrText]=(0,react.useState)("");const[loading,setLoading]=(0,react.useState)(false);const[error,setError]=(0,react.useState)("");const apiSetting=(0,react.useMemo)(()=>transApis.find(api=>api.apiSlug===apiSlug),[transApis,apiSlug]);(0,react.useEffect)(()=>{if(!(text!==null&&text!==void 0&&text.trim())||!apiSetting){return;}(async()=>{try{setLoading(true);setTrText("");setError("");const{trText}=await apiTranslate({text,fromLang,toLang,apiSetting});setTrText(trText);}catch(err){setError(err.message);}finally{setLoading(false);}})();},[text,fromLang,toLang,apiSetting]);if(simpleStyle){return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:error?/*#__PURE__*/(0,jsx_runtime.jsx)(Alert_Alert,{severity:"error",children:error}):loading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{style:{whiteSpace:"pre-line"},children:trText})});}return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"".concat(i18n("translated_text")," - ").concat(apiSetting.apiName)// disabled ,fullWidth:true,multiline:true,value:trText,helperText:error,InputProps:{startAdornment:loading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):null,endAdornment:/*#__PURE__*/(0,jsx_runtime.jsx)(Stack_Stack,{direction:"row",sx:{position:"absolute",right:0,top:0},children:/*#__PURE__*/(0,jsx_runtime.jsx)(CopyBtn,{text:trText})})}})});} // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+icons-material@5.15.15_@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@1_1e29dcefa4691dc57f2acd9f73947cfd/node_modules/@mui/icons-material/Favorite.js var Favorite = __webpack_require__(6510); @@ -46892,7 +46903,7 @@ function SugBaidu(_ref){let{text}=_ref;const{loading,error,data}=useAsyncNow(api function TranForm(_ref){let{text,setText,apiSlugs:initApiSlugs,fromLang:initFromLang,toLang:initToLang,toLang2:initToLang2,transApis,simpleStyle=false,langDetector:initLangDetector="-",enDict:initEnDict="-",enSug:initEnSug="-",isPlaygound=false}=_ref;const i18n=useI18n();const[editMode,setEditMode]=(0,react.useState)(false);const[editText,setEditText]=(0,react.useState)(text);const[apiSlugs,setApiSlugs]=(0,react.useState)(initApiSlugs);const[fromLang,setFromLang]=(0,react.useState)(initFromLang);const[toLang,setToLang]=(0,react.useState)(initToLang);const[toLang2,setToLang2]=(0,react.useState)(initToLang2);const[langDetector,setLangDetector]=(0,react.useState)(initLangDetector);const[enDict,setEnDict]=(0,react.useState)(initEnDict);const[enSug,setEnSug]=(0,react.useState)(initEnSug);const[deLang,setDeLang]=(0,react.useState)("");const[deLoading,setDeLoading]=(0,react.useState)(false);(0,react.useEffect)(()=>{if(!editMode){setEditText(text);}},[text,editMode]);(0,react.useEffect)(()=>{if(!text.trim()){setDeLang("");return;}(async()=>{try{setDeLoading(true);const deLang=await tryDetectLang(text,langDetector);if(deLang){setDeLang(deLang);}}catch(err){log_kissLog("tranbox: detect lang",err);}finally{setDeLoading(false);}})();},[text,langDetector,setDeLang,setDeLoading]);// todo: 语言变化后,realToLang引发二次翻译请求 const realToLang=(0,react.useMemo)(()=>{if(fromLang==="auto"&&toLang!==toLang2&&toLang2!=="-"&&deLang===toLang){return toLang2;}return toLang;},[fromLang,toLang,toLang2,deLang]);const optApis=(0,react.useMemo)(()=>transApis.filter(api=>!api.isDisabled).map(api=>({key:api.apiSlug,name:api.apiName||api.apiSlug})),[transApis]);const isWord=(0,react.useMemo)(()=>isValidWord(text),[text]);const xs=(0,react.useMemo)(()=>isPlaygound?3:4,[isPlaygound]);return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:simpleStyle?1:2,children:[!simpleStyle&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,SelectProps:{multiple:true,MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",value:apiSlugs,name:"apiSlugs",label:i18n("translate_service_multiple"),onChange:e=>{setApiSlugs(e.target.value);},children:optApis.map(_ref2=>{let{key,name}=_ref2;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:key,children:name},key);})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"fromLang",value:fromLang,label:i18n("from_lang"),onChange:e=>{setFromLang(e.target.value);},children:OPT_LANGS_FROM.map(_ref3=>{let[lang,name]=_ref3;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"toLang",value:toLang,label:i18n("to_lang"),onChange:e=>{setToLang(e.target.value);},children:OPT_LANGS_TO.map(_ref4=>{let[lang,name]=_ref4;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})})}),isPlaygound&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"toLang2",value:toLang2,label:i18n("to_lang2"),onChange:e=>{setToLang2(e.target.value);},children:OPT_LANGS_TO.map(_ref5=>{let[lang,name]=_ref5;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"enDict",value:enDict,label:i18n("english_dict"),onChange:e=>{setEnDict(e.target.value);},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"-",children:i18n("disable")}),OPT_DICT_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:item},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"enSug",value:enSug,label:i18n("english_suggest"),onChange:e=>{setEnSug(e.target.value);},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"-",children:i18n("disable")}),OPT_SUG_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:item},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"langDetector",value:langDetector,label:i18n("detected_lang"),onChange:e=>{setLangDetector(e.target.value);},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"-",children:i18n("disable")}),OPT_LANGDETECTOR_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:item},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{fullWidth:true,size:"small",name:"deLang",value:deLang&&OPT_LANGS_MAP.get(deLang),label:i18n("detected_result"),disabled:true,InputProps:{startAdornment:deLoading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):null}})})]})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("original_text"),fullWidth:true,multiline:true,minRows:isPlaygound?2:1,maxRows:10,value:editText,onChange:e=>{setEditText(e.target.value);},onFocus:()=>{setEditMode(true);},onBlur:()=>{setEditMode(false);setText(editText.trim());},InputProps:{endAdornment:/*#__PURE__*/(0,jsx_runtime.jsx)(Stack_Stack,{direction:"row",sx:{position:"absolute",right:0,top:0},children:editMode?/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",onClick:e=>{e.stopPropagation();setEditMode(false);setText(editText.trim());},children:/*#__PURE__*/(0,jsx_runtime.jsx)(Done/* default */.Z,{fontSize:"inherit"})}):/*#__PURE__*/(0,jsx_runtime.jsx)(CopyBtn,{text:text})})}})})]}),apiSlugs.map(slug=>/*#__PURE__*/(0,jsx_runtime.jsx)(TranCont,{text:text,fromLang:fromLang,toLang:realToLang,simpleStyle:simpleStyle,apiSlug:slug,transApis:transApis},slug)),isWord&&OPT_DICT_MAP.has(enDict)&&/*#__PURE__*/(0,jsx_runtime.jsx)(DictCont,{text:text,enDict:enDict}),isWord&&OPT_SUG_MAP.has(enSug)&&/*#__PURE__*/(0,jsx_runtime.jsx)(SugCont,{text:text,enSug:enSug})]});} ;// CONCATENATED MODULE: ./src/views/Selection/TranBox.js -function Header(_ref){let{setShowBox,simpleStyle,setSimpleStyle,hideClickAway,setHideClickAway,followSelection,setFollowSelection,mouseHover}=_ref;const i18n=useI18n();if(!isMobile&&simpleStyle&&!mouseHover){return;}return/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{onMouseUp:e=>e.stopPropagation(),onTouchEnd:e=>e.stopPropagation(),children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"space-between",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(DragIndicator/* default */.Z,{fontSize:"small"}),/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{variant:"body2",sx:{userSelect:"none",WebkitUserSelect:"none",fontWeight:"bold"},children:"".concat("KISS Translator"," v").concat("2.0.4")})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_click_away"),onClick:()=>{setHideClickAway(pre=>!pre);},children:hideClickAway?/*#__PURE__*/(0,jsx_runtime.jsx)(LockOpen/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(Lock/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_follow_selection"),onClick:()=>{setFollowSelection(pre=>!pre);},children:followSelection?/*#__PURE__*/(0,jsx_runtime.jsx)(PushPinOutlined/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(PushPin/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_simple_style"),onClick:()=>{setSimpleStyle(pre=>!pre);},children:simpleStyle?/*#__PURE__*/(0,jsx_runtime.jsx)(UnfoldMore/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(UnfoldLess/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",onClick:()=>{setShowBox(false);},children:/*#__PURE__*/(0,jsx_runtime.jsx)(icons_material_Close/* default */.Z,{fontSize:"small"})})]})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{})]});}function TranBox(_ref2){let{showBox,text,setText,setShowBox,tranboxSetting:{enDict,enSug,apiSlugs,fromLang,toLang,toLang2,autoHeight},transApis,boxSize,setBoxSize,boxPosition,setBoxPosition,simpleStyle,setSimpleStyle,hideClickAway,setHideClickAway,followSelection,setFollowSelection,extStyles="",langDetector}=_ref2;const[mouseHover,setMouseHover]=(0,react.useState)(false);// todo: 这里的 SettingProvider 不应和 background 的共用 +function Header(_ref){let{setShowBox,simpleStyle,setSimpleStyle,hideClickAway,setHideClickAway,followSelection,setFollowSelection,mouseHover}=_ref;const i18n=useI18n();if(!isMobile&&simpleStyle&&!mouseHover){return;}return/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{onMouseUp:e=>e.stopPropagation(),onTouchEnd:e=>e.stopPropagation(),children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"space-between",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(DragIndicator/* default */.Z,{fontSize:"small"}),/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{variant:"body2",sx:{userSelect:"none",WebkitUserSelect:"none",fontWeight:"bold"},children:"".concat("KISS Translator"," v").concat("2.0.5")})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_click_away"),onClick:()=>{setHideClickAway(pre=>!pre);},children:hideClickAway?/*#__PURE__*/(0,jsx_runtime.jsx)(LockOpen/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(Lock/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_follow_selection"),onClick:()=>{setFollowSelection(pre=>!pre);},children:followSelection?/*#__PURE__*/(0,jsx_runtime.jsx)(PushPinOutlined/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(PushPin/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_simple_style"),onClick:()=>{setSimpleStyle(pre=>!pre);},children:simpleStyle?/*#__PURE__*/(0,jsx_runtime.jsx)(UnfoldMore/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(UnfoldLess/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",onClick:()=>{setShowBox(false);},children:/*#__PURE__*/(0,jsx_runtime.jsx)(icons_material_Close/* default */.Z,{fontSize:"small"})})]})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{})]});}function TranBox(_ref2){let{showBox,text,setText,setShowBox,tranboxSetting:{enDict,enSug,apiSlugs,fromLang,toLang,toLang2,autoHeight},transApis,boxSize,setBoxSize,boxPosition,setBoxPosition,simpleStyle,setSimpleStyle,hideClickAway,setHideClickAway,followSelection,setFollowSelection,extStyles="",langDetector}=_ref2;const[mouseHover,setMouseHover]=(0,react.useState)(false);// todo: 这里的 SettingProvider 不应和 background 的共用 return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Theme,{styles:extStyles,children:showBox&&/*#__PURE__*/(0,jsx_runtime.jsx)(DraggableResizable,{position:boxPosition,size:boxSize,setSize:setBoxSize,setPosition:setBoxPosition,autoHeight:autoHeight,header:/*#__PURE__*/(0,jsx_runtime.jsx)(Header,{setShowBox:setShowBox,simpleStyle:simpleStyle,setSimpleStyle:setSimpleStyle,hideClickAway:hideClickAway,setHideClickAway:setHideClickAway,followSelection:followSelection,setFollowSelection:setFollowSelection,mouseHover:mouseHover}),onClick:e=>e.stopPropagation(),onMouseEnter:()=>setMouseHover(true),onMouseLeave:()=>setMouseHover(false),children:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{sx:{p:simpleStyle?1:2},children:/*#__PURE__*/(0,jsx_runtime.jsx)(TranForm,{text:text,setText:setText,apiSlugs:apiSlugs,fromLang:fromLang,toLang:toLang,toLang2:toLang2,transApis:transApis,simpleStyle:simpleStyle,langDetector:langDetector,enDict:enDict,enSug:enSug})})})})});} ;// CONCATENATED MODULE: ./src/views/Selection/index.js function Slection(_ref){let{contextMenuType,tranboxSetting,transApis,uiLang,langDetector}=_ref;const{hideTranBtn=false,simpleStyle:initSimpleStyle=false,hideClickAway:initHideClickAway=false,followSelection:initFollowMouse=false,tranboxShortcut=DEFAULT_TRANBOX_SHORTCUT,triggerMode=OPT_TRANBOX_TRIGGER_CLICK,// extStyles, @@ -46921,7 +46932,7 @@ var BrightnessAuto = __webpack_require__(5538); ;// CONCATENATED MODULE: ./src/views/Options/DarkModeButton.js function DarkModeButton(){const{darkMode,toggleDarkMode}=useDarkMode();return/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{sx:{ml:1},onClick:toggleDarkMode,color:"inherit",children:darkMode==="dark"?/*#__PURE__*/(0,jsx_runtime.jsx)(DarkMode/* default */.Z,{}):darkMode==="light"?/*#__PURE__*/(0,jsx_runtime.jsx)(LightMode/* default */.Z,{}):/*#__PURE__*/(0,jsx_runtime.jsx)(BrightnessAuto/* default */.Z,{})});} ;// CONCATENATED MODULE: ./src/views/Popup/Header.js -function Header_Header(_ref){let{onClose}=_ref;const handleHomepage=()=>{window.open("https://github.com/fishjar/kiss-translator","_blank");};return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"space-between",alignItems:"center",spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"flex-start",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{onClick:handleHomepage,children:/*#__PURE__*/(0,jsx_runtime.jsx)(Home/* default */.Z,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{component:"div",sx:{userSelect:"none",WebkitUserSelect:"none",fontWeight:"bold"},children:"".concat("KISS Translator"," v").concat("2.0.4")})]}),onClose?/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{onClick:()=>{onClose();},children:/*#__PURE__*/(0,jsx_runtime.jsx)(icons_material_Close/* default */.Z,{})}):/*#__PURE__*/(0,jsx_runtime.jsx)(DarkModeButton,{})]});} +function Header_Header(_ref){let{onClose}=_ref;const handleHomepage=()=>{window.open("https://github.com/fishjar/kiss-translator","_blank");};return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"space-between",alignItems:"center",spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"flex-start",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{onClick:handleHomepage,children:/*#__PURE__*/(0,jsx_runtime.jsx)(Home/* default */.Z,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{component:"div",sx:{userSelect:"none",WebkitUserSelect:"none",fontWeight:"bold"},children:"".concat("KISS Translator"," v").concat("2.0.5")})]}),onClose?/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{onClick:()=>{onClose();},children:/*#__PURE__*/(0,jsx_runtime.jsx)(icons_material_Close/* default */.Z,{})}):/*#__PURE__*/(0,jsx_runtime.jsx)(DarkModeButton,{})]});} ;// CONCATENATED MODULE: ./src/hooks/WindowSize.js function useWindowSize(){const[windowSize,setWindowSize]=(0,react.useState)({w:window.innerWidth,h:window.innerHeight});const debounceWindowResize=useDebouncedCallback(()=>{setWindowSize({w:window.innerWidth,h:window.innerHeight});},200);(0,react.useEffect)(()=>{debounceWindowResize();window.addEventListener("resize",debounceWindowResize);return()=>{window.removeEventListener("resize",debounceWindowResize);};},[debounceWindowResize]);return windowSize;}/* harmony default export */ const WindowSize = (useWindowSize); ;// CONCATENATED MODULE: ./node_modules/.pnpm/@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@18.2.79_react@18.2.0__@emotio_d9048b84de05bb23a91868a7ef37c0cc/node_modules/@mui/material/FormControlLabel/formControlLabelClasses.js @@ -48071,20 +48082,20 @@ const Fab = /*#__PURE__*/react.forwardRef(function Fab(inProps, ref) { // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+icons-material@5.15.15_@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@1_1e29dcefa4691dc57f2acd9f73947cfd/node_modules/@mui/icons-material/Translate.js var Translate = __webpack_require__(2761); ;// CONCATENATED MODULE: ./src/views/Action/ContentFab.js -function ContentFab(_ref){let{translator,fabConfig:{x:fabX,y:fabY,fabClickAction=0}={},processActions}=_ref;const fabWidth=40;const windowSize=WindowSize();const[moved,setMoved]=(0,react.useState)(false);const handleStart=(0,react.useCallback)(()=>{setMoved(false);},[]);const handleMove=(0,react.useCallback)(()=>{setMoved(true);},[]);const handleClick=(0,react.useCallback)(()=>{if(!moved){if(fabClickAction===1){translator.toggle();sendIframeMsg(MSG_TRANS_TOGGLE);}else{processActions({action:MSG_POPUP_TOGGLE});}}},[moved,translator,fabClickAction,processActions]);const fabProps=(0,react.useMemo)(()=>({windowSize,width:fabWidth,height:fabWidth,left:fabX!==null&&fabX!==void 0?fabX:-fabWidth,top:fabY!==null&&fabY!==void 0?fabY:windowSize.h/2}),[windowSize,fabWidth,fabX,fabY]);return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Theme,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Draggable,{snapEdge:true,...fabProps,onStart:handleStart,onMove:handleMove,handler:/*#__PURE__*/(0,jsx_runtime.jsx)(Fab_Fab,{size:"small",color:"primary",onClick:handleClick,children:/*#__PURE__*/(0,jsx_runtime.jsx)(Translate/* default */.Z,{sx:{width:24,height:24}})})},"fab")})});} +function ContentFab(_ref){let{fabConfig:{x:fabX,y:fabY,fabClickAction=0}={},processActions}=_ref;const fabWidth=40;const windowSize=WindowSize();const[moved,setMoved]=(0,react.useState)(false);const handleStart=(0,react.useCallback)(()=>{setMoved(false);},[]);const handleMove=(0,react.useCallback)(()=>{setMoved(true);},[]);const handleClick=(0,react.useCallback)(()=>{if(!moved){if(fabClickAction===1){processActions({action:MSG_TRANS_TOGGLE});}else{processActions({action:MSG_POPUP_TOGGLE});}}},[moved,fabClickAction,processActions]);const fabProps=(0,react.useMemo)(()=>({windowSize,width:fabWidth,height:fabWidth,left:fabX!==null&&fabX!==void 0?fabX:-fabWidth,top:fabY!==null&&fabY!==void 0?fabY:windowSize.h/2}),[windowSize,fabWidth,fabX,fabY]);return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Theme,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Draggable,{snapEdge:true,...fabProps,onStart:handleStart,onMove:handleMove,handler:/*#__PURE__*/(0,jsx_runtime.jsx)(Fab_Fab,{size:"small",color:"primary",onClick:handleClick,children:/*#__PURE__*/(0,jsx_runtime.jsx)(Translate/* default */.Z,{sx:{width:24,height:24}})})},"fab")})});} ;// CONCATENATED MODULE: ./src/libs/fabManager.js -class FabManager extends ShadowDomManager{constructor(_ref){let{translator,processActions,fabConfig}=_ref;super({id:APP_CONSTS.fabID,className:"notranslate",reactComponent:ContentFab,props:{translator,processActions,fabConfig}});if(!(fabConfig!==null&&fabConfig!==void 0&&fabConfig.isHide)){this.show();}}} +class FabManager extends ShadowDomManager{constructor(_ref){let{processActions,fabConfig}=_ref;super({id:APP_CONSTS.fabID,className:"notranslate",reactComponent:ContentFab,props:{processActions,fabConfig}});if(!(fabConfig!==null&&fabConfig!==void 0&&fabConfig.isHide)){this.show();}}} ;// CONCATENATED MODULE: ./src/libs/translatorManager.js -var _clearShortcuts=/*#__PURE__*/_classPrivateFieldKey("clearShortcuts");var _menuCommandIds=/*#__PURE__*/_classPrivateFieldKey("menuCommandIds");var _clearTouchListeners=/*#__PURE__*/_classPrivateFieldKey("clearTouchListeners");var _isActive=/*#__PURE__*/_classPrivateFieldKey("isActive");var _isUserscript=/*#__PURE__*/_classPrivateFieldKey("isUserscript");var _isIframe=/*#__PURE__*/_classPrivateFieldKey("isIframe");var _windowMessageHandler=/*#__PURE__*/_classPrivateFieldKey("windowMessageHandler");var _browserMessageHandler=/*#__PURE__*/_classPrivateFieldKey("browserMessageHandler");var _setupMessageListeners=/*#__PURE__*/_classPrivateFieldKey("setupMessageListeners");var _setupTouchOperations=/*#__PURE__*/_classPrivateFieldKey("setupTouchOperations");var _handleWindowMessage=/*#__PURE__*/_classPrivateFieldKey("handleWindowMessage");var _handleBrowserMessage=/*#__PURE__*/_classPrivateFieldKey("handleBrowserMessage");var _registerShortcuts=/*#__PURE__*/_classPrivateFieldKey("registerShortcuts");var _registerMenus=/*#__PURE__*/_classPrivateFieldKey("registerMenus");var _processActions=/*#__PURE__*/_classPrivateFieldKey("processActions");class TranslatorManager{constructor(_ref){let{setting,rule,fabConfig,favWords,isIframe,isUserscript}=_ref;Object.defineProperty(this,_processActions,{value:_processActions2});Object.defineProperty(this,_registerMenus,{value:_registerMenus2});Object.defineProperty(this,_registerShortcuts,{value:_registerShortcuts2});Object.defineProperty(this,_handleBrowserMessage,{value:_handleBrowserMessage2});Object.defineProperty(this,_handleWindowMessage,{value:_handleWindowMessage2});Object.defineProperty(this,_setupTouchOperations,{value:_setupTouchOperations2});Object.defineProperty(this,_setupMessageListeners,{value:_setupMessageListeners2});Object.defineProperty(this,_clearShortcuts,{writable:true,value:[]});Object.defineProperty(this,_menuCommandIds,{writable:true,value:[]});Object.defineProperty(this,_clearTouchListeners,{writable:true,value:[]});Object.defineProperty(this,_isActive,{writable:true,value:false});Object.defineProperty(this,_isUserscript,{writable:true,value:void 0});Object.defineProperty(this,_isIframe,{writable:true,value:void 0});Object.defineProperty(this,_windowMessageHandler,{writable:true,value:null});Object.defineProperty(this,_browserMessageHandler,{writable:true,value:null});_classPrivateFieldBase(this,_isIframe)[_isIframe]=isIframe;_classPrivateFieldBase(this,_isUserscript)[_isUserscript]=isUserscript;this._translator=new translator_Translator({rule,setting,favWords,isUserscript,isIframe});if(!isIframe){this._transboxManager=new TransboxManager(setting);this._inputTranslator=new InputTranslator(setting);this._popupManager=new PopupManager({translator:this._translator,processActions:_classPrivateFieldBase(this,_processActions)[_processActions].bind(this)});this._fabManager=new FabManager({translator:this._translator,processActions:_classPrivateFieldBase(this,_processActions)[_processActions].bind(this),fabConfig});}_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]=_classPrivateFieldBase(this,_handleWindowMessage)[_handleWindowMessage].bind(this);_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]=_classPrivateFieldBase(this,_handleBrowserMessage)[_handleBrowserMessage].bind(this);}start(){if(_classPrivateFieldBase(this,_isActive)[_isActive]){logger.info("TranslatorManager is already started.");return;}_classPrivateFieldBase(this,_setupMessageListeners)[_setupMessageListeners]();_classPrivateFieldBase(this,_setupTouchOperations)[_setupTouchOperations]();if(!_classPrivateFieldBase(this,_isIframe)[_isIframe]&&_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){_classPrivateFieldBase(this,_registerShortcuts)[_registerShortcuts]();_classPrivateFieldBase(this,_registerMenus)[_registerMenus]();}_classPrivateFieldBase(this,_isActive)[_isActive]=true;logger.info("TranslatorManager started.");}stop(){var _this$_popupManager,_this$_fabManager,_this$_transboxManage,_this$_inputTranslato;if(!_classPrivateFieldBase(this,_isActive)[_isActive]){logger.info("TranslatorManager is not running.");return;}// 移除消息监听器 -if(_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){window.removeEventListener("message",_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]);}else if(browser.runtime.onMessage.hasListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler])){browser.runtime.onMessage.removeListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]);}// 已注册的快捷键 +var _clearShortcuts=/*#__PURE__*/_classPrivateFieldKey("clearShortcuts");var _menuCommandIds=/*#__PURE__*/_classPrivateFieldKey("menuCommandIds");var _clearTouchListeners=/*#__PURE__*/_classPrivateFieldKey("clearTouchListeners");var _isActive=/*#__PURE__*/_classPrivateFieldKey("isActive");var _isUserscript=/*#__PURE__*/_classPrivateFieldKey("isUserscript");var _isIframe=/*#__PURE__*/_classPrivateFieldKey("isIframe");var translatorManager_windowMessageHandler=/*#__PURE__*/_classPrivateFieldKey("windowMessageHandler");var _browserMessageHandler=/*#__PURE__*/_classPrivateFieldKey("browserMessageHandler");var _setupMessageListeners=/*#__PURE__*/_classPrivateFieldKey("setupMessageListeners");var _setupTouchOperations=/*#__PURE__*/_classPrivateFieldKey("setupTouchOperations");var translatorManager_handleWindowMessage=/*#__PURE__*/_classPrivateFieldKey("handleWindowMessage");var _handleBrowserMessage=/*#__PURE__*/_classPrivateFieldKey("handleBrowserMessage");var _registerShortcuts=/*#__PURE__*/_classPrivateFieldKey("registerShortcuts");var _registerMenus=/*#__PURE__*/_classPrivateFieldKey("registerMenus");var _processActions=/*#__PURE__*/_classPrivateFieldKey("processActions");class TranslatorManager{constructor(_ref){let{setting,rule,fabConfig,favWords,isIframe,isUserscript}=_ref;Object.defineProperty(this,_processActions,{value:_processActions2});Object.defineProperty(this,_registerMenus,{value:_registerMenus2});Object.defineProperty(this,_registerShortcuts,{value:_registerShortcuts2});Object.defineProperty(this,_handleBrowserMessage,{value:_handleBrowserMessage2});Object.defineProperty(this,translatorManager_handleWindowMessage,{value:translatorManager_handleWindowMessage2});Object.defineProperty(this,_setupTouchOperations,{value:_setupTouchOperations2});Object.defineProperty(this,_setupMessageListeners,{value:_setupMessageListeners2});Object.defineProperty(this,_clearShortcuts,{writable:true,value:[]});Object.defineProperty(this,_menuCommandIds,{writable:true,value:[]});Object.defineProperty(this,_clearTouchListeners,{writable:true,value:[]});Object.defineProperty(this,_isActive,{writable:true,value:false});Object.defineProperty(this,_isUserscript,{writable:true,value:void 0});Object.defineProperty(this,_isIframe,{writable:true,value:void 0});Object.defineProperty(this,translatorManager_windowMessageHandler,{writable:true,value:null});Object.defineProperty(this,_browserMessageHandler,{writable:true,value:null});_classPrivateFieldBase(this,_isIframe)[_isIframe]=isIframe;_classPrivateFieldBase(this,_isUserscript)[_isUserscript]=isUserscript;this._translator=new translator_Translator({rule,setting,favWords,isUserscript,isIframe});this._transboxManager=new TransboxManager(setting);if(!isIframe){this._inputTranslator=new InputTranslator(setting);this._popupManager=new PopupManager({translator:this._translator,processActions:_classPrivateFieldBase(this,_processActions)[_processActions].bind(this)});this._fabManager=new FabManager({processActions:_classPrivateFieldBase(this,_processActions)[_processActions].bind(this),fabConfig});}_classPrivateFieldBase(this,translatorManager_windowMessageHandler)[translatorManager_windowMessageHandler]=_classPrivateFieldBase(this,translatorManager_handleWindowMessage)[translatorManager_handleWindowMessage].bind(this);_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]=_classPrivateFieldBase(this,_handleBrowserMessage)[_handleBrowserMessage].bind(this);}start(){if(_classPrivateFieldBase(this,_isActive)[_isActive]){logger.info("TranslatorManager is already started.");return;}_classPrivateFieldBase(this,_setupMessageListeners)[_setupMessageListeners]();_classPrivateFieldBase(this,_setupTouchOperations)[_setupTouchOperations]();if(!_classPrivateFieldBase(this,_isIframe)[_isIframe]&&_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){_classPrivateFieldBase(this,_registerShortcuts)[_registerShortcuts]();_classPrivateFieldBase(this,_registerMenus)[_registerMenus]();}_classPrivateFieldBase(this,_isActive)[_isActive]=true;logger.info("TranslatorManager started.");}stop(){var _this$_popupManager,_this$_fabManager,_this$_transboxManage,_this$_inputTranslato;if(!_classPrivateFieldBase(this,_isActive)[_isActive]){logger.info("TranslatorManager is not running.");return;}// 移除消息监听器 +if(_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){window.removeEventListener("message",_classPrivateFieldBase(this,translatorManager_windowMessageHandler)[translatorManager_windowMessageHandler]);}else if(browser.runtime.onMessage.hasListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler])){browser.runtime.onMessage.removeListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]);}// 已注册的快捷键 _classPrivateFieldBase(this,_clearShortcuts)[_clearShortcuts].forEach(clear=>clear());_classPrivateFieldBase(this,_clearShortcuts)[_clearShortcuts]=[];// 触屏 _classPrivateFieldBase(this,_clearTouchListeners)[_clearTouchListeners].forEach(clear=>clear());_classPrivateFieldBase(this,_clearTouchListeners)[_clearTouchListeners]=[];// 油猴菜单 if(globalThis.GM&&_classPrivateFieldBase(this,_menuCommandIds)[_menuCommandIds].length>0){_classPrivateFieldBase(this,_menuCommandIds)[_menuCommandIds].forEach(id=>globalThis.GM.unregisterMenuCommand(id));_classPrivateFieldBase(this,_menuCommandIds)[_menuCommandIds]=[];}// 子模块 -(_this$_popupManager=this._popupManager)===null||_this$_popupManager===void 0?void 0:_this$_popupManager.destroy();(_this$_fabManager=this._fabManager)===null||_this$_fabManager===void 0?void 0:_this$_fabManager.destroy();(_this$_transboxManage=this._transboxManager)===null||_this$_transboxManage===void 0?void 0:_this$_transboxManage.disable();(_this$_inputTranslato=this._inputTranslator)===null||_this$_inputTranslato===void 0?void 0:_this$_inputTranslato.disable();this._translator.stop();_classPrivateFieldBase(this,_isActive)[_isActive]=false;logger.info("TranslatorManager stopped.");}}function _setupMessageListeners2(){if(_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){window.addEventListener("message",_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]);}else{browser.runtime.onMessage.addListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]);}}function _setupTouchOperations2(){if(_classPrivateFieldBase(this,_isIframe)[_isIframe])return;const{touchModes=[2]}=this._translator.setting;if(touchModes.length===0){return;}const handleTap=()=>{_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE});};const handleListener=mode=>{let options=null;switch(mode){case 2:case 3:case 4:options={taps:1,fingers:mode};break;case 5:options={taps:2,fingers:1};break;case 6:options={taps:3,fingers:1};break;case 7:options={taps:2,fingers:2};break;default:}if(options){_classPrivateFieldBase(this,_clearTouchListeners)[_clearTouchListeners].push(touchTapListener(handleTap,options));}};touchModes.forEach(mode=>handleListener(mode));}function _handleWindowMessage2(event){_classPrivateFieldBase(this,_processActions)[_processActions](event.data);}function _handleBrowserMessage2(message,sender,sendResponse){const result=_classPrivateFieldBase(this,_processActions)[_processActions](message);const response=result||{rule:this._translator.rule,setting:this._translator.setting};sendResponse(response);return true;}function _registerShortcuts2(){const{shortcuts}=this._translator.setting;_classPrivateFieldBase(this,_clearShortcuts)[_clearShortcuts]=[shortcutRegister(shortcuts[OPT_SHORTCUT_TRANSLATE],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_STYLE],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE_STYLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_POPUP],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_POPUP_TOGGLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_SETTING],()=>window.open("https://fishjar.github.io/kiss-translator/options.html","_blank"))];}function _registerMenus2(){if(!globalThis.GM)return;const{contextMenuType,uiLang}=this._translator.setting;if(contextMenuType===0)return;const i18n=newI18n(uiLang||"zh");const GM=globalThis.GM;_classPrivateFieldBase(this,_menuCommandIds)[_menuCommandIds]=[GM.registerMenuCommand(i18n("translate_switch"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE}),"Q"),GM.registerMenuCommand(i18n("toggle_style"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE_STYLE}),"C"),GM.registerMenuCommand(i18n("open_menu"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_POPUP_TOGGLE}),"K"),GM.registerMenuCommand(i18n("open_setting"),()=>window.open("https://fishjar.github.io/kiss-translator/options.html","_blank"),"O")];}function _processActions2(){var _this$_popupManager2,_this$_transboxManage2,_this$_inputTranslato2;let{action,args}=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};if(_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){sendIframeMsg(action);}switch(action){case MSG_TRANS_TOGGLE:this._translator.toggle();break;case MSG_TRANS_TOGGLE_STYLE:this._translator.toggleStyle();break;case MSG_TRANS_GETRULE:break;case MSG_TRANS_PUTRULE:this._translator.updateRule(args);break;case MSG_OPEN_TRANBOX:document.dispatchEvent(new CustomEvent(EVENT_KISS,{detail:{action:MSG_OPEN_TRANBOX}}));break;case MSG_POPUP_TOGGLE:(_this$_popupManager2=this._popupManager)===null||_this$_popupManager2===void 0?void 0:_this$_popupManager2.toggle();break;case MSG_TRANSBOX_TOGGLE:(_this$_transboxManage2=this._transboxManager)===null||_this$_transboxManage2===void 0?void 0:_this$_transboxManage2.toggle();this._translator.toggleTransbox();break;case MSG_MOUSEHOVER_TOGGLE:this._translator.toggleMouseHover();break;case MSG_TRANSINPUT_TOGGLE:(_this$_inputTranslato2=this._inputTranslator)===null||_this$_inputTranslato2===void 0?void 0:_this$_inputTranslato2.toggle();this._translator.toggleInputTranslate();break;default:logger.info("Message action is unavailable: ".concat(action));return{error:"Message action is unavailable: ".concat(action)};}} +(_this$_popupManager=this._popupManager)===null||_this$_popupManager===void 0?void 0:_this$_popupManager.destroy();(_this$_fabManager=this._fabManager)===null||_this$_fabManager===void 0?void 0:_this$_fabManager.destroy();(_this$_transboxManage=this._transboxManager)===null||_this$_transboxManage===void 0?void 0:_this$_transboxManage.disable();(_this$_inputTranslato=this._inputTranslator)===null||_this$_inputTranslato===void 0?void 0:_this$_inputTranslato.disable();this._translator.stop();_classPrivateFieldBase(this,_isActive)[_isActive]=false;logger.info("TranslatorManager stopped.");}}function _setupMessageListeners2(){if(_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){window.addEventListener("message",_classPrivateFieldBase(this,translatorManager_windowMessageHandler)[translatorManager_windowMessageHandler]);}else{browser.runtime.onMessage.addListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]);if(_classPrivateFieldBase(this,_isIframe)[_isIframe]){window.addEventListener("message",_classPrivateFieldBase(this,translatorManager_windowMessageHandler)[translatorManager_windowMessageHandler]);}}}function _setupTouchOperations2(){if(_classPrivateFieldBase(this,_isIframe)[_isIframe])return;const{touchModes=[2]}=this._translator.setting;if(touchModes.length===0){return;}const handleTap=()=>{_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE});};const handleListener=mode=>{let options=null;switch(mode){case 2:case 3:case 4:options={taps:1,fingers:mode};break;case 5:options={taps:2,fingers:1};break;case 6:options={taps:3,fingers:1};break;case 7:options={taps:2,fingers:2};break;default:}if(options){_classPrivateFieldBase(this,_clearTouchListeners)[_clearTouchListeners].push(touchTapListener(handleTap,options));}};touchModes.forEach(mode=>handleListener(mode));}function translatorManager_handleWindowMessage2(event){_classPrivateFieldBase(this,_processActions)[_processActions](event.data);}function _handleBrowserMessage2(message,sender,sendResponse){const result=_classPrivateFieldBase(this,_processActions)[_processActions](message,true);const response=result||{rule:this._translator.rule,setting:this._translator.setting};sendResponse(response);return true;}function _registerShortcuts2(){const{shortcuts}=this._translator.setting;_classPrivateFieldBase(this,_clearShortcuts)[_clearShortcuts]=[shortcutRegister(shortcuts[OPT_SHORTCUT_TRANSLATE],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_STYLE],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE_STYLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_POPUP],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_POPUP_TOGGLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_SETTING],()=>window.open("https://fishjar.github.io/kiss-translator/options.html","_blank"))];}function _registerMenus2(){if(!globalThis.GM)return;const{contextMenuType,uiLang}=this._translator.setting;if(contextMenuType===0)return;const i18n=newI18n(uiLang||"zh");const GM=globalThis.GM;_classPrivateFieldBase(this,_menuCommandIds)[_menuCommandIds]=[GM.registerMenuCommand(i18n("translate_switch"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE}),"Q"),GM.registerMenuCommand(i18n("toggle_style"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE_STYLE}),"C"),GM.registerMenuCommand(i18n("open_menu"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_POPUP_TOGGLE}),"K"),GM.registerMenuCommand(i18n("open_setting"),()=>window.open("https://fishjar.github.io/kiss-translator/options.html","_blank"),"O")];}function _processActions2(){var _this$_popupManager2,_this$_transboxManage2,_this$_inputTranslato2;let{action,args}=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};let fromExt=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(!fromExt){sendIframeMsg(action,args);}switch(action){case MSG_TRANS_TOGGLE:this._translator.toggle();break;case MSG_TRANS_TOGGLE_STYLE:this._translator.toggleStyle();break;case MSG_TRANS_GETRULE:break;case MSG_TRANS_PUTRULE:this._translator.updateRule(args);break;case MSG_OPEN_TRANBOX:document.dispatchEvent(new CustomEvent(EVENT_KISS,{detail:{action:MSG_OPEN_TRANBOX}}));break;case MSG_POPUP_TOGGLE:(_this$_popupManager2=this._popupManager)===null||_this$_popupManager2===void 0?void 0:_this$_popupManager2.toggle();break;case MSG_TRANSBOX_TOGGLE:(_this$_transboxManage2=this._transboxManager)===null||_this$_transboxManage2===void 0?void 0:_this$_transboxManage2.toggle();this._translator.toggleTransbox();break;case MSG_MOUSEHOVER_TOGGLE:this._translator.toggleMouseHover();break;case MSG_TRANSINPUT_TOGGLE:(_this$_inputTranslato2=this._inputTranslator)===null||_this$_inputTranslato2===void 0?void 0:_this$_inputTranslato2.toggle();this._translator.toggleInputTranslate();break;default:logger.info("Message action is unavailable: ".concat(action));return{error:"Message action is unavailable: ".concat(action)};}} ;// CONCATENATED MODULE: ./src/common.js /** * 油猴脚本设置页面 - */function runSettingPage(){var _GM,_GM$info,_GM$info$script,_GM$info$script$grant;if((_GM=GM)!==null&&_GM!==void 0&&(_GM$info=_GM.info)!==null&&_GM$info!==void 0&&(_GM$info$script=_GM$info.script)!==null&&_GM$info$script!==void 0&&(_GM$info$script$grant=_GM$info$script.grant)!==null&&_GM$info$script$grant!==void 0&&_GM$info$script$grant.includes("unsafeWindow")){unsafeWindow.GM=GM;unsafeWindow.APP_INFO={name:"KISS Translator",version:"2.0.4"};}else{const ping=utils_genEventName();window.addEventListener(ping,handlePing);// window.eval(`(${injectScript})("${ping}")`); // eslint-disable-line + */function runSettingPage(){var _GM,_GM$info,_GM$info$script,_GM$info$script$grant;if((_GM=GM)!==null&&_GM!==void 0&&(_GM$info=_GM.info)!==null&&_GM$info!==void 0&&(_GM$info$script=_GM$info.script)!==null&&_GM$info$script!==void 0&&(_GM$info$script$grant=_GM$info$script.grant)!==null&&_GM$info$script$grant!==void 0&&_GM$info$script$grant.includes("unsafeWindow")){unsafeWindow.GM=GM;unsafeWindow.APP_INFO={name:"KISS Translator",version:"2.0.5"};}else{const ping=utils_genEventName();window.addEventListener(ping,handlePing);// window.eval(`(${injectScript})("${ping}")`); // eslint-disable-line injectInlineJs("(".concat(injectScript,")(\"").concat(ping,"\")"),"kiss-translator-options-injector");}}/** * 显示错误信息到页面顶部 * @param {*} message diff --git a/kiss-translator-rules.json b/kiss-translator-rules.json index 5dafdf8..425fae1 100644 --- a/kiss-translator-rules.json +++ b/kiss-translator-rules.json @@ -27,5 +27,11 @@ "rootsSelector": "ytd-page-manager", "ignoreSelector": "aside, button, footer, form, header, pre, mark, nav, #player, #container, .caption-window, .ytp-settings-menu", "pattern": "www.youtube.com" + }, + { + "autoScan": "false", + "selector": ".text-content, .embedded-text-wrapper", + "rootsSelector": ".Transition", + "pattern": "web.telegram.org" } ] \ No newline at end of file diff --git a/kiss-translator.user.js b/kiss-translator.user.js index d0270cb..2e4829a 100644 --- a/kiss-translator.user.js +++ b/kiss-translator.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name KISS Translator // @namespace https://github.com/fishjar/kiss-translator -// @version 2.0.4 +// @version 2.0.5 // @description A simple bilingual translation extension & Greasemonkey script (一个简约的双语对照翻译扩展 & 油猴脚本) // @author Gabe // @homepageURL https://github.com/fishjar/kiss-translator @@ -29407,7 +29407,7 @@ __webpack_require__.d(base_namespaceObject, { }); ;// CONCATENATED MODULE: ./src/config/app.js -const APP_NAME="KISS Translator".trim().split(/\s+/).join("-");const APP_LCNAME=APP_NAME.toLowerCase();const APP_UPNAME=APP_NAME.toUpperCase();const APP_CONSTS={fabID:"".concat(APP_LCNAME,"-fab"),boxID:"".concat(APP_LCNAME,"-box"),popupID:"".concat(APP_LCNAME,"-popup")};const APP_VERSION="2.0.4".split(".");const THEME_LIGHT="light";const THEME_DARK="dark"; +const APP_NAME="KISS Translator".trim().split(/\s+/).join("-");const APP_LCNAME=APP_NAME.toLowerCase();const APP_UPNAME=APP_NAME.toUpperCase();const APP_CONSTS={fabID:"".concat(APP_LCNAME,"-fab"),boxID:"".concat(APP_LCNAME,"-box"),popupID:"".concat(APP_LCNAME,"-popup")};const APP_VERSION="2.0.5".split(".");const THEME_LIGHT="light";const THEME_DARK="dark"; ;// CONCATENATED MODULE: ./src/config/api.js const DEFAULT_HTTP_TIMEOUT=10000;// 调用超时时间 const DEFAULT_FETCH_LIMIT=10;// 默认最大任务数量 @@ -29424,10 +29424,10 @@ const INPUT_PLACE_KEY="{{key}}";// 占位符 const INPUT_PLACE_MODEL="{{model}}";// 占位符 // export const OPT_DICT_BAIDU = "Baidu"; const OPT_DICT_BING="Bing";const OPT_DICT_YOUDAO="Youdao";const OPT_DICT_ALL=[OPT_DICT_BING,OPT_DICT_YOUDAO];const OPT_DICT_MAP=new Set(OPT_DICT_ALL);const OPT_SUG_BAIDU="Baidu";const OPT_SUG_YOUDAO="Youdao";const OPT_SUG_ALL=[OPT_SUG_BAIDU,OPT_SUG_YOUDAO];const OPT_SUG_MAP=new Set(OPT_SUG_ALL);const OPT_TRANS_BUILTINAI="BuiltinAI";const OPT_TRANS_GOOGLE="Google";const OPT_TRANS_GOOGLE_2="Google2";const OPT_TRANS_MICROSOFT="Microsoft";const OPT_TRANS_AZUREAI="AzureAI";const OPT_TRANS_DEEPL="DeepL";const OPT_TRANS_DEEPLX="DeepLX";const OPT_TRANS_DEEPLFREE="DeepLFree";const OPT_TRANS_NIUTRANS="NiuTrans";const OPT_TRANS_BAIDU="Baidu";const OPT_TRANS_TENCENT="Tencent";const OPT_TRANS_VOLCENGINE="Volcengine";const OPT_TRANS_OPENAI="OpenAI";const OPT_TRANS_GEMINI="Gemini";const OPT_TRANS_GEMINI_2="Gemini2";const OPT_TRANS_CLAUDE="Claude";const OPT_TRANS_CLOUDFLAREAI="CloudflareAI";const OPT_TRANS_OLLAMA="Ollama";const OPT_TRANS_OPENROUTER="OpenRouter";const OPT_TRANS_CUSTOMIZE="Custom";// 内置支持的翻译引擎 -const OPT_ALL_TYPES=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_GOOGLE_2,OPT_TRANS_MICROSOFT,OPT_TRANS_AZUREAI,// OPT_TRANS_BAIDU, +const OPT_ALL_TRANS_TYPES=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_GOOGLE_2,OPT_TRANS_MICROSOFT,OPT_TRANS_AZUREAI,// OPT_TRANS_BAIDU, OPT_TRANS_TENCENT,OPT_TRANS_VOLCENGINE,OPT_TRANS_DEEPL,OPT_TRANS_DEEPLFREE,OPT_TRANS_DEEPLX,OPT_TRANS_NIUTRANS,OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_CLAUDE,OPT_TRANS_CLOUDFLAREAI,OPT_TRANS_OLLAMA,OPT_TRANS_OPENROUTER,OPT_TRANS_CUSTOMIZE];const OPT_LANGDETECTOR_ALL=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_MICROSOFT,OPT_TRANS_BAIDU,OPT_TRANS_TENCENT];const OPT_LANGDETECTOR_MAP=new Set(OPT_LANGDETECTOR_ALL);// 翻译引擎特殊集合 const API_SPE_TYPES={// 内置翻译 -builtin:new Set(OPT_ALL_TYPES),// 机器翻译 +builtin:new Set(OPT_ALL_TRANS_TYPES),// 机器翻译 machine:new Set([OPT_TRANS_MICROSOFT,OPT_TRANS_DEEPLFREE,OPT_TRANS_BAIDU,OPT_TRANS_TENCENT,OPT_TRANS_VOLCENGINE]),// AI翻译 ai:new Set([OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_CLAUDE,OPT_TRANS_OLLAMA,OPT_TRANS_OPENROUTER]),// 支持多key mulkeys:new Set([OPT_TRANS_AZUREAI,OPT_TRANS_DEEPL,OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_CLAUDE,OPT_TRANS_CLOUDFLAREAI,OPT_TRANS_OLLAMA,OPT_TRANS_OPENROUTER,OPT_TRANS_NIUTRANS,OPT_TRANS_CUSTOMIZE]),// 支持批处理 @@ -29447,7 +29447,7 @@ context:new Set([OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_ "concise"// 简明风格 ];const BUILTIN_PLACEHOLDERS=["{ }","{{ }}","[ ]","[[ ]]"];const BUILTIN_PLACETAGS=["i","a","b","x"];const OPT_LANGS_TO=[["en","English - English"],["zh-CN","Simplified Chinese - 简体中文"],["zh-TW","Traditional Chinese - 繁體中文"],["ar","Arabic - العربية"],["bg","Bulgarian - Български"],["ca","Catalan - Català"],["hr","Croatian - Hrvatski"],["cs","Czech - Čeština"],["da","Danish - Dansk"],["nl","Dutch - Nederlands"],["fi","Finnish - Suomi"],["fr","French - Français"],["de","German - Deutsch"],["el","Greek - Ελληνικά"],["hi","Hindi - हिन्दी"],["hu","Hungarian - Magyar"],["id","Indonesian - Indonesia"],["it","Italian - Italiano"],["ja","Japanese - 日本語"],["ko","Korean - 한국어"],["ms","Malay - Melayu"],["mt","Maltese - Malti"],["nb","Norwegian - Norsk Bokmål"],["pl","Polish - Polski"],["pt","Portuguese - Português"],["ro","Romanian - Română"],["ru","Russian - Русский"],["sk","Slovak - Slovenčina"],["sl","Slovenian - Slovenščina"],["es","Spanish - Español"],["sv","Swedish - Svenska"],["ta","Tamil - தமிழ்"],["te","Telugu - తెలుగు"],["th","Thai - ไทย"],["tr","Turkish - Türkçe"],["uk","Ukrainian - Українська"],["vi","Vietnamese - Tiếng Việt"]];const OPT_LANGS_LIST=OPT_LANGS_TO.map(_ref=>{let[lang]=_ref;return lang;});const OPT_LANGS_FROM=[["auto","Auto-detect"],...OPT_LANGS_TO];const OPT_LANGS_MAP=new Map(OPT_LANGS_TO);// CODE->名称 const OPT_LANGS_SPEC_NAME=new Map(OPT_LANGS_FROM.map(_ref2=>{let[key,val]=_ref2;return[key,val.split(" - ")[0]];}));const OPT_LANGS_SPEC_DEFAULT=new Map(OPT_LANGS_FROM.map(_ref3=>{let[key]=_ref3;return[key,key];}));const OPT_LANGS_SPEC_DEFAULT_UC=new Map(OPT_LANGS_FROM.map(_ref4=>{let[key]=_ref4;return[key,key.toUpperCase()];}));const OPT_LANGS_TO_SPEC={[OPT_TRANS_BUILTINAI]:new Map([...OPT_LANGS_SPEC_DEFAULT,["zh-CN","zh"],["zh-TW","zh"]]),[OPT_TRANS_GOOGLE]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_GOOGLE_2]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_MICROSOFT]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto",""],["zh-CN","zh-Hans"],["zh-TW","zh-Hant"]]),[OPT_TRANS_AZUREAI]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto",""],["zh-CN","zh-Hans"],["zh-TW","zh-Hant"]]),[OPT_TRANS_DEEPL]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto",""],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_DEEPLFREE]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto","auto"],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_DEEPLX]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto","auto"],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_NIUTRANS]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto","auto"],["zh-CN","zh"],["zh-TW","cht"]]),[OPT_TRANS_VOLCENGINE]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto","auto"],["zh-CN","zh"],["zh-TW","zh-Hant"]]),[OPT_TRANS_BAIDU]:new Map([...OPT_LANGS_SPEC_DEFAULT,["zh-CN","zh"],["zh-TW","cht"],["ar","ara"],["bg","bul"],["ca","cat"],["hr","hrv"],["da","dan"],["fi","fin"],["fr","fra"],["hi","mai"],["ja","jp"],["ko","kor"],["ms","may"],["mt","mlt"],["nb","nor"],["ro","rom"],["ru","ru"],["sl","slo"],["es","spa"],["sv","swe"],["ta","tam"],["te","tel"],["uk","ukr"],["vi","vie"]]),[OPT_TRANS_TENCENT]:new Map([["auto","auto"],["zh-CN","zh"],["zh-TW","zh"],["en","en"],["ar","ar"],["de","de"],["ru","ru"],["fr","fr"],["fi","fil"],["ko","ko"],["ms","ms"],["pt","pt"],["ja","ja"],["th","th"],["tr","tr"],["es","es"],["it","it"],["hi","hi"],["id","id"],["vi","vi"]]),[OPT_TRANS_OPENAI]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_GEMINI]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_GEMINI_2]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_CLAUDE]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_OLLAMA]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_OPENROUTER]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_CLOUDFLAREAI]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_CUSTOMIZE]:OPT_LANGS_SPEC_DEFAULT};const specToCode=m=>new Map(Array.from(m.entries()).map(_ref5=>{let[k,v]=_ref5;if(v===""){return["auto","auto"];}if(v==="zh"||v==="ZH"){return[v,"zh-CN"];}return[v,k];}));// 名称->CODE -const OPT_LANGS_TO_CODE={};Object.entries(OPT_LANGS_TO_SPEC).forEach(_ref6=>{let[t,m]=_ref6;OPT_LANGS_TO_CODE[t]=specToCode(m);});const defaultSystemPrompt="Act as a translation API. Output a single raw JSON object only. No extra text or fences.\n\nInput:\n{\"targetLanguage\":\"\",\"title\":\"\",\"description\":\"\",\"segments\":[{\"id\":1,\"text\":\"...\"}],\"glossary\":{\"sourceTerm\":\"targetTerm\"},\"tone\":\"\"}\n\nOutput:\n{\"translations\":[{\"id\":1,\"text\":\"...\",\"sourceLanguage\":\"\"}]}\n\nRules:\n1. Use title/description for context only; do not output them.\n2. Keep id, order, and count of segments.\n3. Preserve whitespace, HTML entities, and all HTML-like tags (e.g., , ). Translate inner text only.\n4. Highest priority: Follow 'glossary'. Use value for translation; if value is \"\", keep the key.\n5. Do not translate: content in ,
, text enclosed in backticks, or placeholders like {1}, {{1}}, [1], [[1]].\n6.  Apply the specified tone to the translation.\n7.  Detect sourceLanguage for each segment.\n8.  Return empty or unchanged inputs as is.\n\nExample:\nInput: {\"targetLanguage\":\"zh-CN\",\"segments\":[{\"id\":1,\"text\":\"A React component.\"}],\"glossary\":{\"component\":\"\u7EC4\u4EF6\",\"React\":\"\"}}\nOutput: {\"translations\":[{\"id\":1,\"text\":\"\u4E00\u4E2AReact\u7EC4\u4EF6\",\"sourceLanguage\":\"en\"}]}\n\nFail-safe: On any error, return {\"translations\":[]}.";// const defaultSubtitlePrompt = `Goal: Convert raw subtitle event JSON into a clean, sentence-based JSON array.
+const OPT_LANGS_TO_CODE={};Object.entries(OPT_LANGS_TO_SPEC).forEach(_ref6=>{let[t,m]=_ref6;OPT_LANGS_TO_CODE[t]=specToCode(m);});const defaultNobatchPrompt="You are a professional, authentic machine translation engine.";const defaultNobatchUserPrompt="Translate the following source text from ".concat(INPUT_PLACE_FROM," to ").concat(INPUT_PLACE_TO,". Output translation directly without any additional text.\n\nSource Text: ").concat(INPUT_PLACE_TEXT,"\n\nTranslated Text:");const defaultSystemPrompt="Act as a translation API. Output a single raw JSON object only. No extra text or fences.\n\nInput:\n{\"targetLanguage\":\"\",\"title\":\"\",\"description\":\"\",\"segments\":[{\"id\":1,\"text\":\"...\"}],\"glossary\":{\"sourceTerm\":\"targetTerm\"},\"tone\":\"\"}\n\nOutput:\n{\"translations\":[{\"id\":1,\"text\":\"...\",\"sourceLanguage\":\"\"}]}\n\nRules:\n1.  Use title/description for context only; do not output them.\n2.  Keep id, order, and count of segments.\n3.  Preserve whitespace, HTML entities, and all HTML-like tags (e.g., , ). Translate inner text only.\n4.  Highest priority: Follow 'glossary'. Use value for translation; if value is \"\", keep the key.\n5.  Do not translate: content in , 
, text enclosed in backticks, or placeholders like {1}, {{1}}, [1], [[1]].\n6.  Apply the specified tone to the translation.\n7.  Detect sourceLanguage for each segment.\n8.  Return empty or unchanged inputs as is.\n\nExample:\nInput: {\"targetLanguage\":\"zh-CN\",\"segments\":[{\"id\":1,\"text\":\"A React component.\"}],\"glossary\":{\"component\":\"\u7EC4\u4EF6\",\"React\":\"\"}}\nOutput: {\"translations\":[{\"id\":1,\"text\":\"\u4E00\u4E2AReact\u7EC4\u4EF6\",\"sourceLanguage\":\"en\"}]}\n\nFail-safe: On any error, return {\"translations\":[]}.";// const defaultSubtitlePrompt = `Goal: Convert raw subtitle event JSON into a clean, sentence-based JSON array.
 // Output (valid JSON array, output ONLY this array):
 // [{
 //   "text": "string",        // Full sentence with correct punctuation
@@ -29466,7 +29466,7 @@ const defaultApi={apiSlug:"",// 唯一标识
 apiName:"",// 接口名称
 apiType:"",// 接口类型
 url:"",key:"",model:"",// 模型名称
-systemPrompt:defaultSystemPrompt,subtitlePrompt:defaultSubtitlePrompt,userPrompt:"",tone:BUILTIN_STONES[0],// 翻译风格
+systemPrompt:defaultSystemPrompt,subtitlePrompt:defaultSubtitlePrompt,nobatchPrompt:defaultNobatchPrompt,nobatchUserPrompt:defaultNobatchUserPrompt,userPrompt:"",tone:BUILTIN_STONES[0],// 翻译风格
 placeholder:BUILTIN_PLACEHOLDERS[0],// 占位符
 placetag:[BUILTIN_PLACETAGS[0]],// 占位标签
 // aiTerms: false, // AI智能专业术语 (todo: 备用)
@@ -29481,10 +29481,12 @@ batchLength:DEFAULT_BATCH_LENGTH,// 每次发送最大文字数量
 useBatchFetch:false,// 是否启用聚合发送请求
 useContext:false,// 是否启用智能上下文
 contextSize:DEFAULT_CONTEXT_SIZE,// 智能上下文保留会话数
-temperature:0.0,maxTokens:20480,think:false,thinkIgnore:"qwen3,deepseek-r1",isDisabled:false,// 是否不显示,
+temperature:0.0,maxTokens:20480,// think: false, // (OpenAI 兼容接口未支持,暂时移除)
+// thinkIgnore: "qwen3,deepseek-r1", // (OpenAI 兼容接口未支持,暂时移除)
+isDisabled:false,// 是否不显示,
 region:""// Azure 专用
-};const defaultApiOpts={[OPT_TRANS_BUILTINAI]:defaultApi,[OPT_TRANS_GOOGLE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single"},[OPT_TRANS_GOOGLE_2]:{...defaultApi,url:"https://translate-pa.googleapis.com/v1/translateHtml",key:"AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520",useBatchFetch:true},[OPT_TRANS_MICROSOFT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_AZUREAI]:{...defaultApi,url:"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0",useBatchFetch:true},[OPT_TRANS_BAIDU]:{...defaultApi},[OPT_TRANS_TENCENT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_VOLCENGINE]:{...defaultApi},[OPT_TRANS_DEEPL]:{...defaultApi,url:"https://api-free.deepl.com/v2/translate",useBatchFetch:true},[OPT_TRANS_DEEPLFREE]:{...defaultApi,fetchLimit:1},[OPT_TRANS_DEEPLX]:{...defaultApi,url:"http://localhost:1188/translate",fetchLimit:1},[OPT_TRANS_NIUTRANS]:{...defaultApi,url:"https://api.niutrans.com/NiuTransServer/translation",dictNo:"",memoryNo:""},[OPT_TRANS_OPENAI]:{...defaultApi,url:"https://api.openai.com/v1/chat/completions",model:"gpt-4",useBatchFetch:true,fetchLimit:1},[OPT_TRANS_GEMINI]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1/models/".concat(INPUT_PLACE_MODEL,":generateContent?key=").concat(INPUT_PLACE_KEY),model:"gemini-2.5-flash",useBatchFetch:true},[OPT_TRANS_GEMINI_2]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",model:"gemini-2.0-flash",useBatchFetch:true},[OPT_TRANS_CLAUDE]:{...defaultApi,url:"https://api.anthropic.com/v1/messages",model:"claude-3-haiku-20240307",useBatchFetch:true},[OPT_TRANS_CLOUDFLAREAI]:{...defaultApi,url:"https://api.cloudflare.com/client/v4/accounts/{{ACCOUNT_ID}}/ai/run/@cf/meta/m2m100-1.2b"},[OPT_TRANS_OLLAMA]:{...defaultApi,url:"http://localhost:11434/v1/chat/completions",model:"llama3.1",useBatchFetch:true},[OPT_TRANS_OPENROUTER]:{...defaultApi,url:"https://openrouter.ai/api/v1/chat/completions",model:"openai/gpt-4o",useBatchFetch:true},[OPT_TRANS_CUSTOMIZE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN",reqHook:defaultRequestHook,resHook:defaultResponseHook}};// 内置翻译接口列表(带参数)
-const DEFAULT_API_LIST=OPT_ALL_TYPES.map(apiType=>({...defaultApiOpts[apiType],apiSlug:apiType,apiName:apiType,apiType}));const DEFAULT_API_TYPE=OPT_TRANS_MICROSOFT;const DEFAULT_API_SETTING=DEFAULT_API_LIST[DEFAULT_API_TYPE];
+};const defaultApiOpts={[OPT_TRANS_BUILTINAI]:defaultApi,[OPT_TRANS_GOOGLE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single"},[OPT_TRANS_GOOGLE_2]:{...defaultApi,url:"https://translate-pa.googleapis.com/v1/translateHtml",key:"AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520",useBatchFetch:true},[OPT_TRANS_MICROSOFT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_AZUREAI]:{...defaultApi,url:"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0",useBatchFetch:true},[OPT_TRANS_BAIDU]:{...defaultApi},[OPT_TRANS_TENCENT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_VOLCENGINE]:{...defaultApi},[OPT_TRANS_DEEPL]:{...defaultApi,url:"https://api-free.deepl.com/v2/translate",useBatchFetch:true},[OPT_TRANS_DEEPLFREE]:{...defaultApi,fetchLimit:1},[OPT_TRANS_DEEPLX]:{...defaultApi,url:"http://localhost:1188/translate"},[OPT_TRANS_NIUTRANS]:{...defaultApi,url:"https://api.niutrans.com/NiuTransServer/translation",dictNo:"",memoryNo:""},[OPT_TRANS_OPENAI]:{...defaultApi,url:"https://api.openai.com/v1/chat/completions",model:"gpt-4",useBatchFetch:true},[OPT_TRANS_GEMINI]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1/models/".concat(INPUT_PLACE_MODEL,":generateContent?key=").concat(INPUT_PLACE_KEY),model:"gemini-2.5-flash",useBatchFetch:true},[OPT_TRANS_GEMINI_2]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",model:"gemini-2.0-flash",useBatchFetch:true},[OPT_TRANS_CLAUDE]:{...defaultApi,url:"https://api.anthropic.com/v1/messages",model:"claude-3-haiku-20240307",useBatchFetch:true},[OPT_TRANS_CLOUDFLAREAI]:{...defaultApi,url:"https://api.cloudflare.com/client/v4/accounts/{{ACCOUNT_ID}}/ai/run/@cf/meta/m2m100-1.2b"},[OPT_TRANS_OLLAMA]:{...defaultApi,url:"http://localhost:11434/v1/chat/completions",model:"llama3.1",useBatchFetch:true},[OPT_TRANS_OPENROUTER]:{...defaultApi,url:"https://openrouter.ai/api/v1/chat/completions",model:"openai/gpt-4o",useBatchFetch:true},[OPT_TRANS_CUSTOMIZE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN",reqHook:defaultRequestHook,resHook:defaultResponseHook}};// 内置翻译接口列表(带参数)
+const DEFAULT_API_LIST=OPT_ALL_TRANS_TYPES.map(apiType=>({...defaultApiOpts[apiType],apiSlug:apiType,apiName:apiType,apiType}));const DEFAULT_API_TYPE=OPT_TRANS_MICROSOFT;const DEFAULT_API_SETTING=DEFAULT_API_LIST.find(a=>a.apiType===DEFAULT_API_TYPE);
 ;// CONCATENATED MODULE: ./src/config/rules.js
 const GLOBAL_KEY="*";const REMAIN_KEY="-";const SHADOW_KEY=">>>";const DEFAULT_COLOR="#209CEE";// 默认高亮背景色/线条颜色
 const DEFAULT_TRANS_TAG="font";const DEFAULT_SELECT_STYLE="-webkit-line-clamp: unset; max-height: none; height: auto;";const OPT_STYLE_NONE="style_none";// 无
@@ -29520,7 +29522,7 @@ selectStyle:"",// 选择器节点样式
 parentStyle:"",// 选择器父节点样式
 grandStyle:"",// 选择器父节点样式
 injectJs:"",// 注入JS
-injectCss:"",// 注入CSS
+// injectCss: "", // 注入CSS (作废)
 transOnly:GLOBAL_KEY,// 是否仅显示译文
 // transTiming: GLOBAL_KEY, // 翻译时机/鼠标悬停翻译  (暂时作废)
 transTag:GLOBAL_KEY,// 译文元素标签
@@ -29560,7 +29562,7 @@ selectStyle:DEFAULT_SELECT_STYLE,// 选择器节点样式
 parentStyle:DEFAULT_SELECT_STYLE,// 选择器父节点样式
 grandStyle:DEFAULT_SELECT_STYLE,// 选择器祖节点样式
 injectJs:"",// 注入JS
-injectCss:"",// 注入CSS
+// injectCss: "", // 注入CSS(作废)
 transOnly:"false",// 是否仅显示译文
 // transTiming: OPT_TIMING_PAGESCROLL, // 翻译时机/鼠标悬停翻译 (暂时作废)
 transTag:DEFAULT_TRANS_TAG,// 译文元素标签
@@ -29585,7 +29587,7 @@ highlightWords:OPT_HIGHLIGHT_WORDS_DISABLE// 高亮词汇
 const RULES_MAP={// "www.google.com/search": {
 //   rootsSelector: `#rcnt`,
 // },
-"en.wikipedia.org":{ignoreSelector:".button, code, footer, form, mark, pre, .mwe-math-element, .mw-editsection"},"news.ycombinator.com":{selector:"p, .titleline, .commtext, .hn-item-title, .hn-comment-text, .hn-story-title",keepSelector:"code, img, svg, pre, .sitebit",ignoreSelector:"button, code, footer, form, header, mark, nav, pre, .reply",autoScan:"false"},"twitter.com, https://x.com":{selector:"[data-testid='tweetText']",keepSelector:"img, svg, a, span:has(a), div:has(a)",ignoreSelector:"button, [data-testid='videoPlayer'], [role='group']",autoScan:"false"},"www.youtube.com/live_chat":{rootsSelector:"div#items",selector:"span.yt-live-chat-text-message-renderer",autoScan:"false"},"www.youtube.com":{rootsSelector:"ytd-page-manager",ignoreSelector:"aside, button, footer, form, header, pre, mark, nav, #player, #container, .caption-window, .ytp-settings-menu"}};const rules_BUILTIN_RULES=Object.entries(RULES_MAP).map(_ref=>{let[pattern,rule]=_ref;return{// ...DEFAULT_RULE,
+"en.wikipedia.org":{ignoreSelector:".button, code, footer, form, mark, pre, .mwe-math-element, .mw-editsection"},"news.ycombinator.com":{selector:"p, .titleline, .commtext, .hn-item-title, .hn-comment-text, .hn-story-title",keepSelector:"code, img, svg, pre, .sitebit",ignoreSelector:"button, code, footer, form, header, mark, nav, pre, .reply",autoScan:"false"},"twitter.com, https://x.com":{selector:"[data-testid='tweetText']",keepSelector:"img, svg, a, span:has(a), div:has(a)",ignoreSelector:"button, [data-testid='videoPlayer'], [role='group']",autoScan:"false"},"www.youtube.com/live_chat":{rootsSelector:"div#items",selector:"span.yt-live-chat-text-message-renderer",autoScan:"false"},"www.youtube.com":{rootsSelector:"ytd-page-manager",ignoreSelector:"aside, button, footer, form, header, pre, mark, nav, #player, #container, .caption-window, .ytp-settings-menu"},"web.telegram.org":{autoScan:"false",selector:".text-content, .embedded-text-wrapper",rootsSelector:".Transition"}};const rules_BUILTIN_RULES=Object.entries(RULES_MAP).map(_ref=>{let[pattern,rule]=_ref;return{// ...DEFAULT_RULE,
 ...rule,pattern};});
 ;// CONCATENATED MODULE: ./src/libs/log.js
 // 定义日志级别
@@ -29662,6 +29664,7 @@ apiSlug:OPT_TRANS_MICROSOFT,segSlug:"-",// AI智能断句
 chunkLength:1000,// AI处理切割长度
 // fromLang: "en",
 toLang:"zh-CN",isBilingual:true,// 是否双语显示
+skipAd:false,// 是否快进广告
 windowStyle:SUBTITLE_WINDOW_STYLE,// 背景样式
 originStyle:SUBTITLE_ORIGIN_STYLE,// 原文样式
 translationStyle:SUBTITLE_TRANSLATION_STYLE// 译文样式
@@ -29702,10 +29705,11 @@ mouseHoverSetting:DEFAULT_MOUSE_HOVER_SETTING,// 鼠标悬停翻译
 preInit:true,// 是否预加载脚本
 transAllnow:false,// 是否立即全部翻译
 subtitleSetting:DEFAULT_SUBTITLE_SETTING,// 字幕设置
-logLevel:LogLevel.INFO.value// 日志级别
+logLevel:LogLevel.INFO.value,// 日志级别
+rootMargin:500// 提前触发翻译
 };
 ;// CONCATENATED MODULE: ./src/config/i18n.js
-const UI_LANGS=(/* unused pure expression or super */ null && ([["en","English"],["zh","简体中文"],["zh_TW","繁體中文"]]));const customApiLangs="[\"en\", \"English - English\"],\n[\"zh-CN\", \"Simplified Chinese - \u7B80\u4F53\u4E2D\u6587\"],\n[\"zh-TW\", \"Traditional Chinese - \u7E41\u9AD4\u4E2D\u6587\"],\n[\"ar\", \"Arabic - \u0627\u0644\u0639\u0631\u0628\u064A\u0629\"],\n[\"bg\", \"Bulgarian - \u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438\"],\n[\"ca\", \"Catalan - Catal\xE0\"],\n[\"hr\", \"Croatian - Hrvatski\"],\n[\"cs\", \"Czech - \u010Ce\u0161tina\"],\n[\"da\", \"Danish - Dansk\"],\n[\"nl\", \"Dutch - Nederlands\"],\n[\"fi\", \"Finnish - Suomi\"],\n[\"fr\", \"French - Fran\xE7ais\"],\n[\"de\", \"German - Deutsch\"],\n[\"el\", \"Greek - \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\"],\n[\"hi\", \"Hindi - \u0939\u093F\u0928\u094D\u0926\u0940\"],\n[\"hu\", \"Hungarian - Magyar\"],\n[\"id\", \"Indonesian - Indonesia\"],\n[\"it\", \"Italian - Italiano\"],\n[\"ja\", \"Japanese - \u65E5\u672C\u8A9E\"],\n[\"ko\", \"Korean - \uD55C\uAD6D\uC5B4\"],\n[\"ms\", \"Malay - Melayu\"],\n[\"mt\", \"Maltese - Malti\"],\n[\"nb\", \"Norwegian - Norsk Bokm\xE5l\"],\n[\"pl\", \"Polish - Polski\"],\n[\"pt\", \"Portuguese - Portugu\xEAs\"],\n[\"ro\", \"Romanian - Rom\xE2n\u0103\"],\n[\"ru\", \"Russian - \u0420\u0443\u0441\u0441\u043A\u0438\u0439\"],\n[\"sk\", \"Slovak - Sloven\u010Dina\"],\n[\"sl\", \"Slovenian - Sloven\u0161\u010Dina\"],\n[\"es\", \"Spanish - Espa\xF1ol\"],\n[\"sv\", \"Swedish - Svenska\"],\n[\"ta\", \"Tamil - \u0BA4\u0BAE\u0BBF\u0BB4\u0BCD\"],\n[\"te\", \"Telugu - \u0C24\u0C46\u0C32\u0C41\u0C17\u0C41\"],\n[\"th\", \"Thai - \u0E44\u0E17\u0E22\"],\n[\"tr\", \"Turkish - T\xFCrk\xE7e\"],\n[\"uk\", \"Ukrainian - \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430\"],\n[\"vi\", \"Vietnamese - Ti\u1EBFng Vi\u1EC7t\"],\n";const customApiHelpZH="// \u8BF7\u6C42\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n  \"url\": \"{{url}}\",\n  \"method\": \"POST\",\n  \"headers\": {\n    \"Content-type\": \"application/json\",\n    \"Authorization\": \"Bearer {{key}}\"\n  },\n  \"body\": {\n    \"text\": \"{{text}}\", // \u5F85\u7FFB\u8BD1\u6587\u5B57\n    \"from\": \"{{from}}\", // \u6587\u5B57\u7684\u8BED\u8A00\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09\n    \"to\": \"{{to}}\",     // \u76EE\u6807\u8BED\u8A00\n  },\n}\n\n\n// \u8FD4\u56DE\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n  text: \"\", // \u7FFB\u8BD1\u540E\u7684\u6587\u5B57\n  from: \"\", // \u8BC6\u522B\u7684\u6E90\u8BED\u8A00\n  to: \"\",   // \u76EE\u6807\u8BED\u8A00\uFF08\u53EF\u9009\uFF09\n}\n\n\n// Hook \u8303\u4F8B\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n  headers: {\n      \"Content-type\": \"application/json\",\n  },\n  method: \"GET\",\n  body: null,\n}]\n\n// Response Hook\n// \u5176\u4E2D\u8FD4\u56DE\u6570\u7EC4\u7B2C\u4E00\u4E2A\u503C\u8868\u793A\u8BD1\u6587\u5B57\u7B26\u4E32\uFF0C\u7B2C\u4E8C\u4E2A\u503C\u4E3A\u5E03\u5C14\u503C\uFF0C\u8868\u793A\u539F\u6587\u8BED\u8A00\u4E0E\u76EE\u6807\u8BED\u8A00\u662F\u5426\u76F8\u540C\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// \u652F\u6301\u7684\u8BED\u8A00\u4EE3\u7801\u5982\u4E0B\n".concat(customApiLangs,"\n");const customApiHelpEN="// Default request\n{\n  \"url\": \"{{url}}\",\n  \"method\": \"POST\",\n  \"headers\": {\n    \"Content-type\": \"application/json\",\n    \"Authorization\": \"Bearer {{key}}\"\n  },\n  \"body\": {\n    \"text\": \"{{text}}\", // Text to be translated\n    \"from\": \"{{from}}\", // The language of the text (may be empty)\n    \"to\": \"{{to}}\",     // Target language\n  },\n}\n\n\n// Default response\n{\n  text: \"\", // translated text\n  from: \"\", // Recognized source language\n  to: \"\",   // Target language (optional)\n}\n\n\n/// Hook Example\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n  headers: {\n      \"Content-type\": \"application/json\",\n  },\n  method: \"GET\",\n  body: null,\n}]\n\n// Response Hook\n// In the returned array, the first value is the translated string, while the second value is a boolean\n// that indicates whether the source language is the same as the target language.\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// The supported language codes are as follows\n".concat(customApiLangs,"\n");const requestHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'url', 'body', 'headers', 'method'\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n  return { url, body, headers, userMsg, method };\n}";const requestHookHelperEN="1. The first parameter contains the following fields: 'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2. The return value must be an object containing the following fields: 'url', 'body', 'headers', 'method'\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n  return { url, body, headers, userMsg, method };\n}";const responsetHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'res', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'translations'\n  \uFF08'translations' \u5E94\u4E3A\u4E00\u4E2A\u4E8C\u7EF4\u6570\u7EC4\uFF1A[[\u8BD1\u6587, \u539F\u6587\u8BED\u8A00]]\uFF09\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync ({ res, ...args }) => {\n  const translations = [[\"\u4F60\u597D\", \"en\"]];\n  const modelMsg = {}; // \u7528\u4E8EAI\u4E0A\u4E0B\u6587\n  return { translations, modelMsg };\n}";const responsetHookHelperEN="1. The first parameter contains the following fields: 'res', ...\n2. The return value must be an object containing the following fields: 'translations'\n  ('translations' should be a two-dimensional array: [[translation, source language]]).\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync ({ res, ...args }) => {\n  const translations = [[\"\u4F60\u597D\", \"en\"]];\n  const modelMsg = {}; // For AI context\n  return { translations, modelMsg };\n}";const I18N={app_name:{zh:"\u7B80\u7EA6\u7FFB\u8BD1",en:"KISS Translator",zh_TW:"\u7C21\u7D04\u7FFB\u8B6F"},translate:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},custom_api_help:{zh:customApiHelpZH,en:customApiHelpEN,zh_TW:customApiHelpZH},request_hook_helper:{zh:requestHookHelperZH,en:requestHookHelperEN,zh_TW:requestHookHelperZH},response_hook_helper:{zh:responsetHookHelperZH,en:responsetHookHelperEN,zh_TW:responsetHookHelperZH},translate_alt:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},basic_setting:{zh:"\u57FA\u672C\u8BBE\u7F6E",en:"Basic Setting",zh_TW:"\u57FA\u672C\u8A2D\u5B9A"},rules_setting:{zh:"\u89C4\u5219\u8BBE\u7F6E",en:"Rules Setting",zh_TW:"\u898F\u5247\u8A2D\u5B9A"},apis_setting:{zh:"\u63A5\u53E3\u8BBE\u7F6E",en:"Apis Setting",zh_TW:"API\u8A2D\u5B9A"},sync_setting:{zh:"\u540C\u6B65\u8BBE\u7F6E",en:"Sync Setting",zh_TW:"\u540C\u6B65\u8A2D\u5B9A"},patch_setting:{zh:"\u8865\u4E01\u8BBE\u7F6E",en:"Patch Setting",zh_TW:"\u4FEE\u88DC\u8A2D\u5B9A"},patch_setting_help:{zh:"\u9488\u5BF9\u4E00\u4E9B\u7279\u6B8A\u7F51\u7AD9\u7684\u4FEE\u6B63\u811A\u672C\uFF0C\u4EE5\u4FBF\u7FFB\u8BD1\u8F6F\u4EF6\u5F97\u5230\u66F4\u597D\u7684\u5C55\u793A\u6548\u679C\u3002",en:"Corrected scripts for some special websites so that the translation software can get better display results.",zh_TW:"\u91DD\u5C0D\u67D0\u4E9B\u7279\u6B8A\u7DB2\u7AD9\u7684\u4FEE\u6B63\u8173\u672C\uFF0C\u8B93\u7FFB\u8B6F\u8EDF\u9AD4\u6709\u66F4\u597D\u7684\u986F\u793A\u6548\u679C\u3002"},inject_webfix:{zh:"\u6CE8\u5165\u4FEE\u590D\u8865\u4E01",en:"Inject Webfix",zh_TW:"\u6CE8\u5165\u4FEE\u6B63\u88DC\u4E01"},about:{zh:"\u5173\u4E8E",en:"About",zh_TW:"\u95DC\u65BC"},about_md:{zh:"README.md",en:"README.en.md",zh_TW:"README.md"},about_md_local:{zh:"\u8BF7 [\u70B9\u51FB\u8FD9\u91CC](".concat("https://github.com/fishjar/kiss-translator",") \u67E5\u770B\u8BE6\u60C5\u3002"),en:"Please [click here](".concat("https://github.com/fishjar/kiss-translator",") for details."),zh_TW:"\u8ACB\u3010\u9EDE\u9019\u88E1\u3011\u67E5\u770B\u8A73\u7D30\u5167\u5BB9\u3002"},ui_lang:{zh:"\u754C\u9762\u8BED\u8A00",en:"Interface Language",zh_TW:"\u4ECB\u9762\u8A9E\u8A00"},fetch_limit:{zh:"\u6700\u5927\u5E76\u53D1\u8BF7\u6C42\u6570\u91CF (1-100)",en:"Maximum Number Of Concurrent Requests (1-100)",zh_TW:"\u6700\u5927\u540C\u6642\u8ACB\u6C42\u6578\u91CF (1-100)"},if_think:{zh:"\u542F\u7528\u6216\u7981\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B",en:"Enable or disable the model\u2019s thinking behavior ",zh_TW:"\u555F\u7528\u6216\u505C\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B"},think:{zh:"\u542F\u7528\u6DF1\u5EA6\u601D\u8003",en:"enable thinking",zh_TW:"\u555F\u7528\u6DF1\u5EA6\u601D\u8003"},nothink:{zh:"\u7981\u7528\u6DF1\u5EA6\u601D\u8003",en:"disable thinking",zh_TW:"\u505C\u7528\u6DF1\u5EA6\u601D\u8003"},think_ignore:{zh:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684\u8F93\u51FA,\u9017\u53F7(,)\u5206\u5272,\u5F53\u6A21\u578B\u652F\u6301\u601D\u8003\u4F46ollama\u4E0D\u652F\u6301\u65F6\u9700\u8981\u586B\u5199\u672C\u53C2\u6570",en:"Ignore the  block for the following models, comma (,) separated",zh_TW:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684  \u8F38\u51FA\uFF0C\u4EE5\u9017\u865F (,) \u5206\u9694\uFF1B\u7576\u6A21\u578B\u652F\u63F4\u601D\u8003\u4F46 ollama \u4E0D\u652F\u63F4\u6642\u9700\u8981\u586B\u5BEB\u6B64\u53C3\u6578"},fetch_interval:{zh:"\u6BCF\u6B21\u8BF7\u6C42\u95F4\u9694\u65F6\u95F4 (0-5000ms)",en:"Time Between Requests (0-5000ms)",zh_TW:"\u6BCF\u6B21\u8ACB\u6C42\u9593\u9694\u6642\u9593 (0-5000ms)"},translate_interval:{zh:"\u7FFB\u8BD1\u95F4\u9694\u65F6\u95F4 (10-2000ms)",en:"Translation Interval (10-2000ms)",zh_TW:"\u7FFB\u8B6F\u9593\u9694\u6642\u9593 (10-2000ms)"},http_timeout:{zh:"\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4 (5000-60000ms)",en:"Request Timeout Time (5000-60000ms)",zh_TW:"\u8ACB\u6C42\u903E\u6642\u6642\u9593 (5000-60000ms)"},custom_header:{zh:"\u81EA\u5B9A\u4E49Header\u53C2\u6570",en:"Custom Header Params"},custom_header_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\"",en:"Use JSON format, for example \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\""},custom_body:{zh:"\u81EA\u5B9A\u4E49Body\u53C2\u6570",en:"Custom Body Params"},custom_body_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"top_p\": 0.7",en:"Use JSON format, for example \"top_p\": 0.7"},min_translate_length:{zh:"\u6700\u5C0F\u7FFB\u8BD1\u5B57\u7B26\u6570 (1-100)",en:"Minimum number Of Translated Characters (1-100)",zh_TW:"\u6700\u5C0F\u7FFB\u8B6F\u5B57\u5143\u6578 (1-100)"},max_translate_length:{zh:"\u6700\u5927\u7FFB\u8BD1\u5B57\u7B26\u6570 (100-100000)",en:"Maximum number Of Translated Characters (100-100000)",zh_TW:"\u6700\u5927\u7FFB\u8B6F\u5B57\u5143\u6578 (100-100000)"},num_of_newline_characters:{zh:"\u6362\u884C\u5B57\u7B26\u6570 (1-1000)",en:"Number of Newline Characters (1-1000)",zh_TW:"\u63DB\u884C\u5B57\u5143\u6578 (1-1000)"},translate_service:{zh:"\u7FFB\u8BD1\u670D\u52A1",en:"Translate Service",zh_TW:"\u7FFB\u8B6F\u670D\u52D9"},translate_service_multiple:{zh:"\u7FFB\u8BD1\u670D\u52A1 (\u652F\u6301\u591A\u9009)",en:"Translation service (multiple supported)",zh_TW:"\u7FFB\u8B6F\u670D\u52D9 (\u652F\u63F4\u591A\u9078)"},translate_timing:{zh:"\u7FFB\u8BD1\u65F6\u673A",en:"Translate Timing",zh_TW:"\u7FFB\u8B6F\u6642\u6A5F"},mk_pagescroll:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u7FFB\u8BD1\uFF08\u63A8\u8350\uFF09",en:"Rolling Loading (Suggested)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u7FFB\u8B6F\uFF08\u5EFA\u8B70\uFF09"},mk_pageopen:{zh:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8BD1",en:"Translate all now",zh_TW:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8B6F"},mk_mouseover:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},mk_ctrlKey:{zh:"Control + \u9F20\u6807\u60AC\u505C",en:"Control + Mouseover",zh_TW:"Control + \u6ED1\u9F20\u61F8\u505C"},mk_shiftKey:{zh:"Shift + \u9F20\u6807\u60AC\u505C",en:"Shift + Mouseover",zh_TW:"Shift + \u6ED1\u9F20\u61F8\u505C"},mk_altKey:{zh:"Alt + \u9F20\u6807\u60AC\u505C",en:"Alt + Mouseover",zh_TW:"Alt + \u6ED1\u9F20\u61F8\u505C"},from_lang:{zh:"\u539F\u6587\u8BED\u8A00",en:"Source Language",zh_TW:"\u539F\u6587\u8A9E\u8A00"},to_lang:{zh:"\u76EE\u6807\u8BED\u8A00",en:"Target Language",zh_TW:"\u76EE\u6A19\u8A9E\u8A00"},to_lang2:{zh:"\u7B2C\u4E8C\u76EE\u6807\u8BED\u8A00",en:"Target Language 2",zh_TW:"\u7B2C\u4E8C\u76EE\u6A19\u8A9E\u8A00"},to_lang2_helper:{zh:"\u8BBE\u5B9A\u540E\uFF0C\u4E0E\u76EE\u6807\u8BED\u8A00\u4EA7\u751F\u4E92\u8BD1\u6548\u679C\uFF0C\u4F46\u4F9D\u8D56\u8FDC\u7A0B\u8BED\u8A00\u8BC6\u522B\u3002",en:"After setting, it will produce mutual translation effect with the target language, but it relies on remote language recognition.",zh_TW:"\u8A2D\u5B9A\u5F8C\u6703\u8207\u76EE\u6A19\u8A9E\u8A00\u4E92\u8B6F\uFF0C\u4F46\u4F9D\u8CF4\u9060\u7AEF\u8A9E\u8A00\u8B58\u5225\u3002"},text_style:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},text_style_alt:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},bg_color:{zh:"\u6837\u5F0F\u989C\u8272",en:"Style Color",zh_TW:"\u6A23\u5F0F\u984F\u8272"},remain_unchanged:{zh:"\u4FDD\u7559\u4E0D\u53D8",en:"Remain Unchanged",zh_TW:"\u4FDD\u7559\u4E0D\u8B8A"},google_api:{zh:"\u8C37\u6B4C\u7FFB\u8BD1\u63A5\u53E3",en:"Google Translate API",zh_TW:"Google \u7FFB\u8B6F\u4ECB\u9762"},default_selector:{zh:"\u9ED8\u8BA4\u9009\u62E9\u5668",en:"Default selector",zh_TW:"\u9810\u8A2D\u9078\u64C7\u5668"},selector_rules:{zh:"\u9009\u62E9\u5668\u89C4\u5219",en:"Selector Rules",zh_TW:"\u9078\u64C7\u5668\u898F\u5247"},save:{zh:"\u4FDD\u5B58",en:"Save",zh_TW:"\u5132\u5B58"},edit:{zh:"\u7F16\u8F91",en:"Edit",zh_TW:"\u7DE8\u8F2F"},cancel:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},delete:{zh:"\u5220\u9664",en:"Delete",zh_TW:"\u522A\u9664"},reset:{zh:"\u91CD\u7F6E",en:"Reset",zh_TW:"\u91CD\u8A2D"},add:{zh:"\u6DFB\u52A0",en:"Add",zh_TW:"\u65B0\u589E"},inject_rules:{zh:"\u6CE8\u5165\u8BA2\u9605\u89C4\u5219",en:"Inject Subscribe Rules",zh_TW:"\u6CE8\u5165\u8A02\u95B1\u898F\u5247"},personal_rules:{zh:"\u4E2A\u4EBA\u89C4\u5219",en:"Rules",zh_TW:"\u500B\u4EBA\u898F\u5247"},subscribe_rules:{zh:"\u8BA2\u9605\u89C4\u5219",en:"Subscribe",zh_TW:"\u8A02\u95B1\u898F\u5247"},overwrite_subscribe_rules:{zh:"\u8986\u5199\u8BA2\u9605\u89C4\u5219",en:"Overwrite",zh_TW:"\u8986\u5BEB\u8A02\u95B1\u898F\u5247"},subscribe_url:{zh:"\u8BA2\u9605\u5730\u5740",en:"Subscribe URL",zh_TW:"\u8A02\u95B1\u7DB2\u5740"},rules_warn_1:{zh:"1\u3001\u89C4\u5219\u751F\u6548\u7684\u4F18\u5148\u7EA7\u4F9D\u6B21\u4E3A\uFF1A\u4E2A\u4EBA\u89C4\u5219 > \u8BA2\u9605\u89C4\u5219 > \u5168\u5C40\u89C4\u5219\u3002\"\u5168\u5C40\u89C4\u5219\"\u76F8\u5F53\u4E8E\u515C\u5E95\u89C4\u5219\u3002",en:"1. The priority of rules is: personal rules > subscription rules > global rules. \"Global rules\" are like a fallback rule.",zh_TW:"1.\u898F\u5247\u751F\u6548\u7684\u512A\u5148\u9806\u5E8F\u4F9D\u5E8F\u70BA\uFF1A\u500B\u4EBA\u898F\u5247 > \u8A02\u95B1\u898F\u5247 > \u5168\u57DF\u898F\u5247\u3002 \"\u5168\u57DF\u898F\u5247\"\u76F8\u7576\u65BC\u515C\u5E95\u898F\u5247\u3002"},rules_warn_2:{zh:"2\u3001\u201C\u8BA2\u9605\u89C4\u5219\u201D\u9009\u62E9\u6CE8\u5165\u540E\u624D\u4F1A\u751F\u6548\u3002",en:"2. \"Subscription rules\" will take effect only after injection is selected.",zh_TW:"2\u3001\u300C\u8A02\u95B1\u898F\u5247\u300D\u9078\u64C7\u6CE8\u5165\u5F8C\u624D\u6703\u751F\u6548\u3002"},rules_warn_3:{zh:"3\u3001\u5173\u4E8E\u89C4\u5219\u586B\u5199\uFF1A\u8F93\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u6846\u9009\u201C*\u201D\u8868\u793A\u91C7\u7528\u5168\u5C40\u89C4\u5219\u3002",en:"3. Regarding filling in the rules: Leave the input box blank or select \"*\" in the drop-down box to use global rule.",zh_TW:"3. \u898F\u5247\u586B\u5BEB\u8AAA\u660E\uFF1A\u8F38\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u9078\u64C7\u300C*\u300D\u8868\u793A\u4F7F\u7528\u5168\u57DF\u898F\u5247\u3002"},sync_warn:{zh:"\u6D89\u53CA\u9690\u79C1\u6570\u636E\u7684\u540C\u6B65\u8BF7\u8C28\u614E\u9009\u62E9\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52A1\uFF0C\u5EFA\u8BAE\u81EA\u884C\u642D\u5EFA kiss-worker \u6216 WebDAV \u670D\u52A1\u3002",en:"When synchronizing data that involves privacy, please be cautious about choosing third-party sync services. It is recommended to set up your own sync service using kiss-worker or WebDAV.",zh_TW:"\u540C\u6B65\u6D89\u53CA\u96B1\u79C1\u8CC7\u6599\u6642\uFF0C\u8ACB\u8B39\u614E\u9078\u64C7\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52D9\uFF1B\u5EFA\u8B70\u81EA\u5EFA kiss-worker \u6216 WebDAV \u670D\u52D9\u3002"},sync_warn_2:{zh:"\u5982\u679C\u670D\u52A1\u5668\u5B58\u5728\u5176\u4ED6\u5BA2\u6237\u7AEF\u540C\u6B65\u7684\u6570\u636E\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u5C06\u76F4\u63A5\u8986\u76D6\u672C\u5730\u914D\u7F6E\uFF0C\u540E\u9762\u5219\u6839\u636E\u4FEE\u6539\u65F6\u95F4\uFF0C\u65B0\u7684\u8986\u76D6\u65E7\u7684\u3002",en:"If the server has data synchronized by other clients, the first synchronization will directly overwrite the local configuration, and later, according to the modification time, the new one will overwrite the old one.",zh_TW:"\u82E5\u4F3A\u670D\u5668\u4E0A\u5B58\u5728\u5176\u4ED6\u7528\u6236\u7AEF\u540C\u6B65\u7684\u8CC7\u6599\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u6703\u76F4\u63A5\u8986\u84CB\u672C\u6A5F\u8A2D\u5B9A\uFF1B\u4E4B\u5F8C\u5247\u4F9D\u4FEE\u6539\u6642\u9593\uFF0C\u7531\u65B0\u7684\u8986\u84CB\u820A\u7684\u3002"},about_sync_api:{zh:"\u81EA\u5EFAkiss-wroker\u6570\u636E\u540C\u6B65\u670D\u52A1",en:"Self-hosting a Kiss-worker data sync service",zh_TW:"\u81EA\u5EFA kiss-wroker \u8CC7\u6599\u540C\u6B65\u670D\u52D9"},about_api:{zh:"1\u3001\u5176\u4E2D BuiltinAI \u4E3A\u6D4F\u89C8\u5668\u5185\u7F6EAI\u7FFB\u8BD1\uFF0C\u76EE\u524D\u4EC5 Chrome 138 \u53CA\u4EE5\u4E0A\u7248\u672C\u5F97\u5230\u652F\u6301\u3002",en:"1. BuiltinAI is the browser's built-in AI translation, which is currently only supported by Chrome 138 and above.",zh_TW:"1.\u5176\u4E2D BuiltinAI \u70BA\u700F\u89BD\u5668\u5167\u5EFAAI\u7FFB\u8B6F\uFF0C\u76EE\u524D\u50C5 Chrome 138 \u4EE5\u4E0A\u7248\u672C\u652F\u63F4\u3002"},about_api_2:{zh:"2\u3001\u5927\u90E8\u5206AI\u63A5\u53E3\u90FD\u4E0EOpenAI\u517C\u5BB9\uFF0C\u56E0\u6B64\u9009\u62E9\u6DFB\u52A0OpenAI\u7C7B\u578B\u5373\u53EF\u3002",en:"2. Most AI interfaces are compatible with OpenAI, so just choose to add the OpenAI type.",zh_TW:"2.\u5927\u90E8\u5206AI\u4ECB\u9762\u90FD\u8207OpenAI\u76F8\u5BB9\uFF0C\u56E0\u6B64\u9078\u64C7\u65B0\u589EOpenAI\u985E\u578B\u5373\u53EF\u3002"},about_api_3:{zh:"3\u3001\u6682\u672A\u5217\u51FA\u7684\u63A5\u53E3\uFF0C\u7406\u8BBA\u4E0A\u90FD\u53EF\u4EE5\u901A\u8FC7\u81EA\u5B9A\u4E49\u63A5\u53E3 (Custom) \u7684\u5F62\u5F0F\u652F\u6301\u3002",en:"3. Interfaces that have not yet been launched can theoretically be supported through custom interfaces.",zh_TW:"3\u3001\u66AB\u672A\u5217\u51FA\u7684\u4ECB\u9762\uFF0C\u7406\u8AD6\u4E0A\u90FD\u53EF\u900F\u904E\u81EA\u8A02\u4ECB\u9762  (Custom)  \u7684\u5F62\u5F0F\u652F\u63F4\u3002"},about_api_proxy:{zh:"\u67E5\u770B\u81EA\u5EFA\u4E00\u4E2A\u7FFB\u8BD1\u63A5\u53E3\u4EE3\u7406",en:"Check out the self-built translation interface proxy",zh_TW:"\u67E5\u770B\u5982\u4F55\u81EA\u5EFA\u7FFB\u8B6F\u4ECB\u9762 Proxy"},setting_helper:{zh:"\u65B0\u65E7\u914D\u7F6E\u5E76\u4E0D\u517C\u5BB9\uFF0C\u5BFC\u51FA\u7684\u65E7\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u5BFC\u5165\u3002",en:"The old and new configurations are not compatible. Do not import the exported old configuration again.",zh_TW:"\u65B0\u820A\u914D\u7F6E\u4E26\u4E0D\u76F8\u5BB9\uFF0C\u532F\u51FA\u7684\u820A\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u532F\u5165\u3002"},style_none:{zh:"\u65E0",en:"None",zh_TW:"\u7121"},under_line:{zh:"\u4E0B\u5212\u76F4\u7EBF",en:"Underline",zh_TW:"\u4E0B\u5283\u76F4\u7DDA"},dot_line:{zh:"\u4E0B\u5212\u70B9\u72B6\u7EBF",en:"Dotted Underline",zh_TW:"\u4E0B\u5283\u9EDE\u72C0\u7DDA"},dash_line:{zh:"\u4E0B\u5212\u865A\u7EBF",en:"Dashed Underline",zh_TW:"\u4E0B\u5283\u865B\u7DDA"},dash_box:{zh:"\u865A\u7EBF\u6846",en:"Dashed Box"},wavy_line:{zh:"\u4E0B\u5212\u6CE2\u6D6A\u7EBF",en:"Wavy Underline",zh_TW:"\u4E0B\u5283\u6CE2\u6D6A\u7DDA"},fuzzy:{zh:"\u6A21\u7CCA",en:"Fuzzy",zh_TW:"\u6A21\u7CCA"},highlight:{zh:"\u9AD8\u4EAE",en:"Highlight",zh_TW:"\u53CD\u767D\u6A19\u793A"},blockquote:{zh:"\u5F15\u7528",en:"Blockquote",zh_TW:"\u5F15\u7528"},gradient:{zh:"\u6E10\u53D8",en:"Gradient",zh_TW:"\u6F38\u8B8A"},blink:{zh:"\u95EA\u73B0",en:"Blink",zh_TW:"\u9583\u73FE"},glow:{zh:"\u53D1\u5149",en:"Glow",zh_TW:"\u767C\u5149"},diy_style:{zh:"\u81EA\u5B9A\u4E49\u6837\u5F0F",en:"Custom Style",zh_TW:"\u81EA\u8A02\u6A23\u5F0F"},diy_style_helper:{zh:"\u9075\u5FAA\u201CCSS\u201D\u7684\u8BED\u6CD5",en:"Follow the syntax of \"CSS\"",zh_TW:"\u9075\u5FAA CSS \u8A9E\u6CD5"},setting:{zh:"\u8BBE\u7F6E",en:"Setting",zh_TW:"\u8A2D\u5B9A"},pattern:{zh:"\u5339\u914D\u7F51\u5740",en:"URL pattern",zh_TW:"\u5339\u914D\u7DB2\u5740"},pattern_helper:{zh:"1\u3001\u652F\u6301\u661F\u53F7(*)\u901A\u914D\u7B26\u30022\u3001\u591A\u4E2AURL\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\u3002",en:"1. Supports the asterisk (*) wildcard character. 2. Separate multiple URLs with newlines or English commas \",\".",zh_TW:"1. \u652F\u63F4\u661F\u865F (*) \u842C\u7528\u5B57\u5143\u30022. \u591A\u500B URL \u8ACB\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u3002"},selector_helper:{zh:"1\u3001\u9700\u8981\u7FFB\u8BD1\u7684\u76EE\u6807\u5143\u7D20\u30022\u3001\u5F00\u542F\u81EA\u52A8\u626B\u63CF\u9875\u9762\u540E\uFF0C\u672C\u8BBE\u7F6E\u65E0\u6548\u30023\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The target element to be translated. 2. This setting is invalid when automatic page scanning is enabled. 3. Follow the CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u7FFB\u8B6F\u7684\u76EE\u6A19\u5143\u7D20\u3002 2.\u958B\u555F\u81EA\u52D5\u6383\u63CF\u9801\u9762\u5F8C\uFF0C\u672C\u8A2D\u5B9A\u7121\u6548\u3002 3.\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},translate_switch:{zh:"\u5F00\u542F\u7FFB\u8BD1",en:"Translate Switch",zh_TW:"\u958B\u555F\u7FFB\u8B6F"},default_enabled:{zh:"\u9ED8\u8BA4\u5F00\u542F",en:"Enabled",zh_TW:"\u9810\u8A2D\u958B\u555F"},default_disabled:{zh:"\u9ED8\u8BA4\u5173\u95ED",en:"Disabled",zh_TW:"\u9810\u8A2D\u95DC\u9589"},selector:{zh:"\u9009\u62E9\u5668",en:"Selector",zh_TW:"\u9078\u64C7\u5668"},target_selector:{zh:"\u76EE\u6807\u5143\u7D20\u9009\u62E9\u5668",en:"Target element selector",zh_TW:"\u76EE\u6A19\u5143\u7D20\u9078\u64C7\u5668"},keep_selector:{zh:"\u4FDD\u7559\u5143\u7D20\u9009\u62E9\u5668",en:"Keep unchanged selector",zh_TW:"\u4FDD\u7559\u5143\u7D20\u9078\u64C7\u5668"},keep_selector_helper:{zh:"1\u3001\u76EE\u6807\u5143\u7D20\u4E0B\u9762\u9700\u8981\u539F\u6837\u4FDD\u7559\u7684\u5B50\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The child nodes under the target element need to remain intact. 2. Follow the CSS selector syntax.",zh_TW:"1. \u76EE\u6A19\u5143\u7D20\u4E0B\u7684\u5B50\u7BC0\u9EDE\u9700\u8981\u4FDD\u6301\u539F\u6A23\u3002 2. \u9075\u5FAA CSS \u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},root_selector:{zh:"\u6839\u8282\u70B9\u9009\u62E9\u5668",en:"Root node selector",zh_TW:"\u6839\u7BC0\u9EDE\u9078\u64C7\u5668"},root_selector_helper:{zh:"1\u3001\u7528\u4E8E\u7F29\u5C0F\u9875\u9762\u7FFB\u8BD1\u8303\u56F4\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Used to narrow the translation scope of the page. 2. Follow the CSS selector syntax.",zh_TW:"1.\u7528\u65BC\u7E2E\u5C0F\u9801\u9762\u7FFB\u8B6F\u7BC4\u570D\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},ignore_selector:{zh:"\u4E0D\u7FFB\u8BD1\u8282\u70B9\u9009\u62E9\u5668",en:"Ignore node selectors",zh_TW:"\u4E0D\u7FFB\u8B6F\u7BC0\u9EDE\u9078\u64C7\u5668"},ignore_selector_helper:{zh:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Nodes to be ignored. 2. Follow CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u7BC0\u9EDE\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},terms:{zh:"\u4E13\u4E1A\u672F\u8BED",en:"Terms",zh_TW:"\u5C08\u696D\u8853\u8A9E"},terms_helper:{zh:"1\u3001\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u65E0\u9700\u659C\u6746\uFF0C\u4E0D\u652F\u6301\u4FEE\u9970\u7B26\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. Supports regular expression matching, no slash required, and no modifiers are supported. 2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1. \u652F\u63F4\u6B63\u5247\u8868\u9054\u5F0F\u6BD4\u5C0D\uFF0C\u7121\u9700\u659C\u7DDA\uFF0C\u4E14\u4E0D\u652F\u63F4\u4FEE\u98FE\u7B26\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},ai_terms:{zh:"AI\u4E13\u4E1A\u672F\u8BED",en:"AI Terms",zh_TW:"AI\u5C08\u696D\u8853\u8A9E"},ai_terms_helper:{zh:"1\u3001AI\u667A\u80FD\u66FF\u6362\uFF0C\u4E0D\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. AI intelligent replacement does not support regular expressions.2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1.AI\u667A\u80FD\u66FF\u63DB\uFF0C\u4E0D\u652F\u63F4\u6B63\u898F\u8868\u793A\u5F0F\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},selector_style:{zh:"\u9009\u62E9\u5668\u8282\u70B9\u6837\u5F0F",en:"Selector Style",zh_TW:"\u9078\u64C7\u5668\u7BC0\u9EDE\u6A23\u5F0F"},terms_style:{zh:"\u4E13\u4E1A\u672F\u8BED\u6837\u5F0F",en:"Terms Style",zh_TW:"\u5C08\u696D\u8853\u8A9E\u6A23\u5F0F"},highlight_style:{zh:"\u8BCD\u6C47\u9AD8\u4EAE\u6837\u5F0F",en:"Fav Words highlight style",zh_TW:"\u8A5E\u5F59\u9AD8\u4EAE\u6A23\u5F0F"},selector_style_helper:{zh:"\u5F00\u542F\u7FFB\u8BD1\u65F6\u6CE8\u5165\u3002",en:"It is injected when translation is turned on.",zh_TW:"\u5728\u958B\u555F\u7FFB\u8B6F\u6642\u6CE8\u5165\u3002"},selector_parent_style:{zh:"\u9009\u62E9\u5668\u7236\u8282\u70B9\u6837\u5F0F",en:"Parent Selector Style",zh_TW:"\u9078\u64C7\u5668\u7236\u7BC0\u9EDE\u6A23\u5F0F"},selector_grand_style:{zh:"\u9009\u62E9\u5668\u7956\u8282\u70B9\u6837\u5F0F",en:"Grand Selector Style",zh_TW:"\u9078\u64C7\u5668\u7956\u7BC0\u9EDE\u6A23\u5F0F"},inject_js:{zh:"\u6CE8\u5165JS",en:"Inject JS",zh_TW:"\u6CE8\u5165 JS"},inject_js_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},inject_css:{zh:"\u6CE8\u5165CSS",en:"Inject CSS",zh_TW:"\u6CE8\u5165 CSS"},inject_css_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},fixer_function:{zh:"\u4FEE\u590D\u51FD\u6570",en:"Fixer Function",zh_TW:"\u4FEE\u5FA9\u51FD\u5F0F"},fixer_function_helper:{zh:"1\u3001br\u662F\u5C06
\u6362\u884C\u66FF\u6362\u6210

\u30022\u3001bn\u662F\u5C06\\n\u6362\u884C\u66FF\u6362\u6210

\u30023\u3001brToDiv\u548CbnToDiv\u662F\u66FF\u6362\u6210

\u3002",en:"1. br replaces
line breaks with

. 2. bn replaces \\n newline with

. 3. brToDiv and bnToDiv are replaced with

.",zh_TW:"1. br \u6703\u5C07
\u63DB\u884C\u66FF\u63DB\u70BA

\u30022. bn \u6703\u5C07 \\n \u63DB\u884C\u66FF\u63DB\u70BA

\u30023. brToDiv \u8207 bnToDiv \u6703\u66FF\u63DB\u70BA

\u3002"},import:{zh:"\u5BFC\u5165",en:"Import",zh_TW:"\u532F\u5165"},export:{zh:"\u5BFC\u51FA",en:"Export",zh_TW:"\u532F\u51FA"},export_translation:{zh:"\u5BFC\u51FA\u91CA\u4E49",en:"Export Translation",zh_TW:"\u532F\u51FA\u91CB\u7FA9"},error_cant_be_blank:{zh:"\u4E0D\u80FD\u4E3A\u7A7A",en:"Can not be blank",zh_TW:"\u4E0D\u53EF\u70BA\u7A7A"},error_duplicate_values:{zh:"\u5B58\u5728\u91CD\u590D\u7684\u503C",en:"There are duplicate values",zh_TW:"\u5B58\u5728\u91CD\u8907\u7684\u503C"},error_wrong_file_type:{zh:"\u9519\u8BEF\u7684\u6587\u4EF6\u7C7B\u578B",en:"Wrong file type",zh_TW:"\u6A94\u6848\u985E\u578B\u932F\u8AA4"},error_fetch_url:{zh:"\u8BF7\u68C0\u67E5url\u5730\u5740\u662F\u5426\u6B63\u786E\u6216\u7A0D\u540E\u518D\u8BD5\u3002",en:"Please check if the url address is correct or try again later.",zh_TW:"\u8ACB\u6AA2\u67E5 URL \u662F\u5426\u6B63\u78BA\u6216\u7A0D\u5F8C\u518D\u8A66\u3002"},deepl_api:{zh:"DeepL \u63A5\u53E3",en:"DeepL API",zh_TW:"DeepL \u4ECB\u9762"},deepl_key:{zh:"DeepL \u5BC6\u94A5",en:"DeepL Key",zh_TW:"DeepL \u91D1\u9470"},openai_api:{zh:"OpenAI \u63A5\u53E3",en:"OpenAI API",zh_TW:"OpenAI \u4ECB\u9762"},openai_key:{zh:"OpenAI \u5BC6\u94A5",en:"OpenAI Key",zh_TW:"OpenAI \u91D1\u9470"},openai_model:{zh:"OpenAI \u6A21\u578B",en:"OpenAI Model",zh_TW:"OpenAI \u6A21\u578B"},openai_prompt:{zh:"OpenAI \u63D0\u793A\u8BCD",en:"OpenAI Prompt",zh_TW:"OpenAI \u63D0\u793A\u8A5E"},if_clear_cache:{zh:"\u662F\u5426\u6E05\u9664\u7F13\u5B58\uFF08\u9ED8\u8BA4\u7F13\u5B587\u5929\uFF09",en:"Whether clear cache (Default cache is 7 days)",zh_TW:"\u662F\u5426\u6E05\u9664\u5FEB\u53D6\uFF08\u9810\u8A2D\u5FEB\u53D67\u5929\uFF09"},clear_cache_never:{zh:"\u4E0D\u6E05\u9664\u7F13\u5B58",en:"Never clear cache",zh_TW:"\u4E0D\u6E05\u9664\u5FEB\u53D6"},clear_cache_restart:{zh:"\u91CD\u542F\u6D4F\u89C8\u5668\u65F6\u6E05\u9664\u7F13\u5B58",en:"Clear cache when restarting browser",zh_TW:"\u91CD\u65B0\u555F\u52D5\u700F\u89BD\u5668\u6642\u6E05\u9664\u5FEB\u53D6"},data_sync_type:{zh:"\u6570\u636E\u540C\u6B65\u65B9\u5F0F",en:"Data Sync Type",zh_TW:"\u8CC7\u6599\u540C\u6B65\u65B9\u5F0F"},data_sync_url:{zh:"\u6570\u636E\u540C\u6B65\u63A5\u53E3",en:"Data Sync API",zh_TW:"\u8CC7\u6599\u540C\u6B65\u4ECB\u9762"},data_sync_user:{zh:"\u6570\u636E\u540C\u6B65\u8D26\u6237",en:"Data Sync User",zh_TW:"\u8CC7\u6599\u540C\u6B65\u5E33\u865F"},data_sync_key:{zh:"\u6570\u636E\u540C\u6B65\u5BC6\u94A5",en:"Data Sync Key",zh_TW:"\u8CC7\u6599\u540C\u6B65\u91D1\u9470"},sync_now:{zh:"\u7ACB\u5373\u540C\u6B65",en:"Sync Now",zh_TW:"\u7ACB\u5373\u540C\u6B65"},sync_success:{zh:"\u540C\u6B65\u6210\u529F\uFF01",en:"Sync Success",zh_TW:"\u540C\u6B65\u6210\u529F\uFF01"},sync_failed:{zh:"\u540C\u6B65\u5931\u8D25\uFF01",en:"Sync Error",zh_TW:"\u540C\u6B65\u5931\u6557\uFF01"},error_got_some_wrong:{zh:"\u62B1\u6B49\uFF0C\u51FA\u9519\u4E86\uFF01",en:"Sorry, something went wrong!",zh_TW:"\u62B1\u6B49\uFF0C\u767C\u751F\u932F\u8AA4\uFF01"},error_sync_setting:{zh:"\u60A8\u7684\u540C\u6B65\u7C7B\u578B\u5FC5\u987B\u4E3A\u201CKISS-Worker\u201D\uFF0C\u4E14\u9700\u586B\u5199\u5B8C\u6574",en:"Your sync type must be \"KISS-Worker\" and must be filled in completely",zh_TW:"\u60A8\u7684\u540C\u6B65\u578B\u614B\u5FC5\u9808\u70BA\u300CKISS-Worker\u300D\uFF0C\u4E14\u9700\u586B\u5BEB\u5B8C\u6574\u3002"},click_test:{zh:"\u70B9\u51FB\u6D4B\u8BD5",en:"Click Test",zh_TW:"\u9EDE\u64CA\u6E2C\u8A66"},test_success:{zh:"\u6D4B\u8BD5\u6210\u529F",en:"Test success",zh_TW:"\u6E2C\u8A66\u6210\u529F"},test_failed:{zh:"\u6D4B\u8BD5\u5931\u8D25",en:"Test failed",zh_TW:"\u6E2C\u8A66\u5931\u6557"},clear_all_cache_now:{zh:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u7F13\u5B58",en:"Clear all cache now",zh_TW:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u5FEB\u53D6"},clear_cache:{zh:"\u6E05\u9664\u7F13\u5B58",en:"Clear Cache",zh_TW:"\u6E05\u9664\u5FEB\u53D6"},clear_success:{zh:"\u6E05\u9664\u6210\u529F",en:"Clear success",zh_TW:"\u6E05\u9664\u6210\u529F"},clear_failed:{zh:"\u6E05\u9664\u5931\u8D25",en:"Clear failed",zh_TW:"\u6E05\u9664\u5931\u6557"},share:{zh:"\u5206\u4EAB",en:"Share",zh_TW:"\u5206\u4EAB"},clear_all:{zh:"\u6E05\u7A7A",en:"Clear All",zh_TW:"\u6E05\u7A7A"},help:{zh:"\u6C42\u52A9",en:"Help",zh_TW:"\u6C42\u52A9"},restore_default:{zh:"\u6062\u590D\u9ED8\u8BA4",en:"Restore Default",zh_TW:"\u6062\u5FA9\u9810\u8A2D"},shortcuts_setting:{zh:"\u5FEB\u6377\u952E\u8BBE\u7F6E",en:"Shortcuts Setting",zh_TW:"\u5FEB\u6377\u9375\u8A2D\u5B9A"},toggle_translate_shortcut:{zh:"\"\u5F00\u542F\u7FFB\u8BD1\"\u5FEB\u6377\u952E",en:"\"Toggle Translate\" Shortcut",zh_TW:"\u300C\u958B\u555F\u7FFB\u8B6F\u300D\u5FEB\u6377\u9375"},toggle_style_shortcut:{zh:"\"\u5207\u6362\u6837\u5F0F\"\u5FEB\u6377\u952E",en:"\"Toggle Style\" Shortcut",zh_TW:"\u300C\u5207\u63DB\u6A23\u5F0F\u300D\u5FEB\u6377\u9375"},toggle_popup_shortcut:{zh:"\"\u6253\u5F00\u5F39\u7A97\"\u5FEB\u6377\u952E",en:"\"Open Popup\" Shortcut",zh_TW:"\u300C\u958B\u555F\u5F48\u7A97\u300D\u5FEB\u6377\u9375"},open_setting_shortcut:{zh:"\"\u6253\u5F00\u8BBE\u7F6E\"\u5FEB\u6377\u952E",en:"\"Open Setting\" Shortcut",zh_TW:"\u300C\u958B\u555F\u8A2D\u5B9A\u300D\u5FEB\u6377\u9375"},hide_fab_button:{zh:"\u9690\u85CF\u60AC\u6D6E\u6309\u94AE",en:"Hide Fab Button",zh_TW:"\u96B1\u85CF\u61F8\u6D6E\u6309\u9215"},fab_click_action:{zh:"\u5355\u51FB\u60AC\u6D6E\u6309\u94AE\u52A8\u4F5C",en:"Single Click Fab Action",zh_TW:"\u55AE\u64CA\u61F8\u6D6E\u6309\u94AE\u52D5\u4F5C"},fab_click_menu:{zh:"\u5F39\u51FA\u83DC\u5355",en:"Popup Menu",zh_TW:"\u5F48\u51FA\u9078\u55AE"},fab_click_translate:{zh:"\u76F4\u63A5\u7FFB\u8BD1",en:"Translate",zh_TW:"\u76F4\u63A5\u7FFB\u8B6F"},hide_tran_button:{zh:"\u9690\u85CF\u7FFB\u8BD1\u6309\u94AE",en:"Hide Translate Button",zh_TW:"\u96B1\u85CF\u7FFB\u8B6F\u6309\u9215"},hide_click_away:{zh:"\u70B9\u51FB\u5916\u90E8\u5173\u95ED\u5F39\u7A97",en:"Click outside to close the pop-up window",zh_TW:"\u9EDE\u64CA\u5916\u90E8\u95DC\u9589\u5F48\u7A97"},use_simple_style:{zh:"\u4F7F\u7528\u7B80\u6D01\u754C\u9762",en:"Use a simple interface",zh_TW:"\u4F7F\u7528\u7C21\u6F54\u4ECB\u9762"},show:{zh:"\u663E\u793A",en:"Show",zh_TW:"\u986F\u793A"},hide:{zh:"\u9690\u85CF",en:"Hide",zh_TW:"\u96B1\u85CF"},save_rule:{zh:"\u4FDD\u5B58\u89C4\u5219",en:"Save Rule",zh_TW:"\u5132\u5B58\u898F\u5247"},global_rule:{zh:"\u5168\u5C40\u89C4\u5219",en:"Global Rule",zh_TW:"\u5168\u57DF\u898F\u5247"},input_translate:{zh:"\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u8F38\u5165\u6846\u7FFB\u8B6F"},use_input_box_translation:{zh:"\u542F\u7528\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u555F\u7528\u8F38\u5165\u6846\u7FFB\u8B6F"},input_selector:{zh:"\u8F93\u5165\u6846\u9009\u62E9\u5668",en:"Input Selector",zh_TW:"\u8F38\u5165\u6846\u9078\u64C7\u5668"},input_selector_helper:{zh:"\u7528\u4E8E\u8F93\u5165\u6846\u7FFB\u8BD1\u3002",en:"Used for input box translation.",zh_TW:"\u7528\u65BC\u8F38\u5165\u6846\u7FFB\u8B6F\u3002"},trigger_trans_shortcut:{zh:"\u89E6\u53D1\u7FFB\u8BD1\u5FEB\u6377\u952E",en:"Trigger Translation Shortcut Keys",zh_TW:"\u89F8\u767C\u7FFB\u8B6F\u5FEB\u6377\u9375"},trigger_trans_shortcut_help:{zh:"\u9ED8\u8BA4\u4E3A\u5355\u51FB\u201CAltLeft+KeyI\u201D",en:"Default is \"AltLeft+KeyI\"",zh_TW:"\u9810\u8A2D\u70BA\u6309\u4E0B\u300CAltLeft+KeyI\u300D"},shortcut_press_count:{zh:"\u5FEB\u6377\u952E\u8FDE\u51FB\u6B21\u6570",en:"Shortcut Press Number",zh_TW:"\u5FEB\u6377\u9375\u9023\u64CA\u6B21\u6578"},combo_timeout:{zh:"\u8FDE\u51FB\u8D85\u65F6\u65F6\u95F4 (10-1000ms)",en:"Combo Timeout (10-1000ms)",zh_TW:"\u9023\u64CA\u903E\u6642 (10-1000ms)"},input_trans_start_sign:{zh:"\u7FFB\u8BD1\u8D77\u59CB\u6807\u8BC6",en:"Translation Start Sign",zh_TW:"\u7FFB\u8B6F\u8D77\u59CB\u6A19\u8A18"},input_trans_start_sign_help:{zh:"\u6807\u8BC6\u540E\u9762\u53EF\u4EE5\u52A0\u76EE\u6807\u8BED\u8A00\u4EE3\u7801\uFF0C\u5982\uFF1A \u201C/en \u4F60\u597D\u201D\u3001\u201C/zh hello\u201D",en:"The target language code can be added after the sign, such as: \"/en \u4F60\u597D\", \"/zh hello\"",zh_TW:"\u6A19\u8A18\u5F8C\u53EF\u52A0\u4E0A\u76EE\u6A19\u8A9E\u8A00\u4EE3\u78BC\uFF0C\u4F8B\u5982\uFF1A\u300C/en \u4F60\u597D\u300D\u3001\u300C/zh hello\u300D"},detect_lang_remote:{zh:"\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B",en:"Remote language detection",zh_TW:"\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C"},detect_lang_remote_help:{zh:"\u542F\u7528\u540E\u68C0\u6D4B\u51C6\u786E\u5EA6\u589E\u52A0\uFF0C\u4F46\u4F1A\u964D\u4F4E\u7FFB\u8BD1\u901F\u5EA6\uFF0C\u8BF7\u914C\u60C5\u5F00\u542F",en:"After enabling, the detection accuracy will increase, but it will reduce the translation speed. Please enable it as appropriate.",zh_TW:"\u555F\u7528\u5F8C\u53EF\u63D0\u5347\u5075\u6E2C\u6E96\u78BA\u5EA6\uFF0C\u4F46\u6703\u964D\u4F4E\u7FFB\u8B6F\u901F\u5EA6\uFF0C\u8ACB\u8996\u9700\u8981\u958B\u555F\u3002"},detect_lang_service:{zh:"\u8BED\u8A00\u68C0\u6D4B\u670D\u52A1",en:"Language detect service",zh_TW:"\u8A9E\u8A00\u6AA2\u6E2C\u670D\u52D9"},disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},enable:{zh:"\u542F\u7528",en:"Enable",zh_TW:"\u555F\u7528"},selection_translate:{zh:"\u5212\u8BCD\u7FFB\u8BD1",en:"Selection Translate",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F"},toggle_selection_translate:{zh:"\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"Use Selection Translate",zh_TW:"\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},trigger_tranbox_shortcut:{zh:"\u663E\u793A\u7FFB\u8BD1\u6846/\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57\u5FEB\u6377\u952E",en:"Open Translate Popup/Translate Selected Shortcut",zh_TW:"\u986F\u793A\u7FFB\u8B6F\u6846\uFF0F\u7FFB\u8B6F\u9078\u4E2D\u6587\u5B57\u5FEB\u6377\u9375"},tranbtn_offset_x:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Button Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbtn_offset_y:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Button Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},tranbox_offset_x:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Box Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbox_offset_y:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Box Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},translated_text:{zh:"\u8BD1\u6587",en:"Translated Text",zh_TW:"\u8B6F\u6587"},original_text:{zh:"\u539F\u6587",en:"Original Text",zh_TW:"\u539F\u6587"},favorite_words:{zh:"\u6536\u85CF\u8BCD\u6C47",en:"Favorite Words",zh_TW:"\u6536\u85CF\u8A5E\u5F59"},touch_setting:{zh:"\u89E6\u5C4F\u8BBE\u7F6E",en:"Touch Setting",zh_TW:"\u89F8\u63A7\u8A2D\u5B9A"},touch_translate_shortcut:{zh:"\u89E6\u5C4F\u7FFB\u8BD1\u5FEB\u6377\u65B9\u5F0F (\u652F\u6301\u591A\u9009)",en:"Touch Translate Shortcut (multiple supported)",zh_TW:"\u89F8\u63A7\u7FFB\u8B6F\u6377\u5F91 (\u652F\u63F4\u591A\u9078)"},touch_tap_0:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},touch_tap_2:{zh:"\u53CC\u6307\u8F7B\u89E6",en:"Two finger tap",zh_TW:"\u96D9\u6307\u8F15\u89F8"},touch_tap_3:{zh:"\u4E09\u6307\u8F7B\u89E6",en:"Three finger tap",zh_TW:"\u4E09\u6307\u8F15\u89F8"},touch_tap_4:{zh:"\u56DB\u6307\u8F7B\u89E6",en:"Four finger tap",zh_TW:"\u56DB\u6307\u8F15\u89F8"},touch_tap_5:{zh:"\u5355\u6307\u53CC\u51FB",en:"Double-click",zh_TW:"\u55AE\u6307\u96D9\u64CA"},touch_tap_6:{zh:"\u5355\u6307\u4E09\u51FB",en:"Triple-click",zh_TW:"\u55AE\u6307\u4E09\u64CA"},touch_tap_7:{zh:"\u53CC\u6307\u53CC\u51FB",en:"Two-finger double-click",zh_TW:"\u96D9\u6307\u96D9\u64CA"},translate_blacklist:{zh:"\u7981\u7528\u7FFB\u8BD1\u540D\u5355",en:"Translate Blacklist",zh_TW:"\u505C\u7528\u7FFB\u8B6F\u540D\u55AE"},disabled_orilist:{zh:"\u7981\u7528Origin\u540D\u5355",en:"Disabled Origin List",zh_TW:"\u505C\u7528 Origin \u540D\u55AE"},disabled_csplist:{zh:"\u7981\u7528CSP\u540D\u5355",en:"Disabled CSP List",zh_TW:"\u505C\u7528 CSP \u540D\u55AE"},disabled_csplist_helper:{zh:"3\u3001\u901A\u8FC7\u8C03\u6574CSP\u7B56\u7565\uFF0C\u4F7F\u5F97\u67D0\u4E9B\u9875\u9762\u80FD\u591F\u6CE8\u5165JS/CSS/Media\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6653\u76F8\u5173\u98CE\u9669\u3002",en:"3. By adjusting the CSP policy, some pages can inject JS/CSS/Media. Please use it with caution unless you are aware of the related risks.",zh_TW:"3. \u900F\u904E\u8ABF\u6574 CSP \u653F\u7B56\uFF0C\u4F7F\u90E8\u5206\u9801\u9762\u53EF\u6CE8\u5165 JS/CSS/Media\u3002\u8ACB\u8B39\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6089\u76F8\u95DC\u98A8\u96AA\u3002"},skip_langs:{zh:"\u4E0D\u7FFB\u8BD1\u7684\u8BED\u8A00",en:"Disable Languages",zh_TW:"\u4E0D\u7FFB\u8B6F\u7684\u8A9E\u8A00"},skip_langs_helper:{zh:"\u6B64\u529F\u80FD\u4F9D\u8D56\u51C6\u786E\u7684\u8BED\u8A00\u68C0\u6D4B\uFF0C\u5EFA\u8BAE\u542F\u7528\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B\u3002",en:"This feature relies on accurate language detection. It is recommended to enable remote language detection.",zh_TW:"\u6B64\u529F\u80FD\u4EF0\u8CF4\u6E96\u78BA\u7684\u8A9E\u8A00\u5075\u6E2C\uFF0C\u5EFA\u8B70\u555F\u7528\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C\u3002"},context_menus:{zh:"\u53F3\u952E\u83DC\u5355",en:"Context Menus",zh_TW:"\u53F3\u9375\u9078\u55AE"},hide_context_menus:{zh:"\u9690\u85CF\u53F3\u952E\u83DC\u5355",en:"Hide Context Menus",zh_TW:"\u96B1\u85CF\u53F3\u9375\u9078\u55AE"},simple_context_menus:{zh:"\u7B80\u5355\u53F3\u952E\u83DC\u5355",en:"Simple_context_menus Context Menus",zh_TW:"\u7C21\u6613\u53F3\u9375\u9078\u55AE"},secondary_context_menus:{zh:"\u4E8C\u7EA7\u53F3\u952E\u83DC\u5355",en:"Secondary Context Menus",zh_TW:"\u6B21\u7D1A\u53F3\u9375\u9078\u55AE"},mulkeys_help:{zh:"\u652F\u6301\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\uFF0C\u8F6E\u8BE2\u8C03\u7528\u3002",en:"Supports polling calls separated by newlines or English commas \",\".",zh_TW:"\u652F\u63F4\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\uFF0C\u8F2A\u8A62\u547C\u53EB\u3002"},translation_element_tag:{zh:"\u8BD1\u6587\u5143\u7D20\u6807\u7B7E",en:"Translation Element Tag",zh_TW:"\u8B6F\u6587\u5143\u7D20\u6A19\u7C64"},show_only_translations:{zh:"\u4EC5\u663E\u793A\u8BD1\u6587",en:"Show Only Translations",zh_TW:"\u50C5\u986F\u793A\u8B6F\u6587"},show_only_translations_help:{zh:"\u975E\u5B8C\u7F8E\u5B9E\u73B0\uFF0C\u67D0\u4E9B\u9875\u9762\u53EF\u80FD\u6709\u6837\u5F0F\u7B49\u95EE\u9898\u3002",en:"It is not a perfect implementation and some pages may have style issues.",zh_TW:"\u6B64\u70BA\u975E\u5B8C\u7F8E\u5BE6\u4F5C\uFF0C\u90E8\u5206\u9801\u9762\u53EF\u80FD\u51FA\u73FE\u6A23\u5F0F\u7B49\u554F\u984C\u3002"},translate_page_title:{zh:"\u662F\u5426\u7FFB\u8BD1\u9875\u9762\u6807\u9898",en:"Translate Page Title",zh_TW:"\u662F\u5426\u7FFB\u8B6F\u9801\u9762\u6A19\u984C"},more:{zh:"\u66F4\u591A",en:"More",zh_TW:"\u66F4\u591A"},less:{zh:"\u66F4\u5C11",en:"Less",zh_TW:"\u66F4\u5C11"},fixer_selector:{zh:"\u7F51\u9875\u4FEE\u590D\u9009\u62E9\u5668",en:"Fixer Selector",zh_TW:"\u7DB2\u9801\u4FEE\u5FA9\u9078\u64C7\u5668"},reg_niutrans:{zh:"\u83B7\u53D6\u5C0F\u725B\u7FFB\u8BD1\u5BC6\u94A5\u3010\u7B80\u7EA6\u7FFB\u8BD1\u4E13\u5C5E\u65B0\u7528\u6237\u6CE8\u518C\u8D60\u9001300\u4E07\u5B57\u7B26\u3011",en:"Get NiuTrans APIKey [KISS Translator Exclusive New User Registration Free 3 Million Characters]",zh_TW:"\u53D6\u5F97\u5C0F\u725B\u7FFB\u8B6F\u91D1\u9470\u3010\u7C21\u7D04\u7FFB\u8B6F\u5C08\u5C6C\u65B0\u7528\u6236\u8A3B\u518A\u8D08\u9001 300 \u842C\u5B57\u5143\u3011"},trigger_mode:{zh:"\u89E6\u53D1\u65B9\u5F0F",en:"Trigger Mode",zh_TW:"\u89F8\u767C\u65B9\u5F0F"},trigger_click:{zh:"\u70B9\u51FB\u89E6\u53D1",en:"Click Trigger",zh_TW:"\u9EDE\u64CA\u89F8\u767C"},trigger_hover:{zh:"\u9F20\u6807\u60AC\u505C\u89E6\u53D1",en:"Hover Trigger",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u89F8\u767C"},trigger_select:{zh:"\u9009\u4E2D\u89E6\u53D1",en:"Select Trigger",zh_TW:"\u9078\u53D6\u89F8\u767C"},extend_styles:{zh:"\u9644\u52A0\u6837\u5F0F",en:"Extend Styles",zh_TW:"\u9644\u52A0\u6A23\u5F0F"},custom_option:{zh:"\u81EA\u5B9A\u4E49\u9009\u9879",en:"Custom Option",zh_TW:"\u81EA\u8A02\u9078\u9805"},translate_selected_text:{zh:"\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57",en:"Translate Selected Text",zh_TW:"\u7FFB\u8B6F\u9078\u53D6\u6587\u5B57"},toggle_style:{zh:"\u5207\u6362\u6837\u5F0F",en:"Toggle Style",zh_TW:"\u5207\u63DB\u6A23\u5F0F"},open_menu:{zh:"\u6253\u5F00\u5F39\u7A97\u83DC\u5355",en:"Open Popup Menu",zh_TW:"\u958B\u555F\u5F48\u7A97\u9078\u55AE"},open_setting:{zh:"\u6253\u5F00\u8BBE\u7F6E",en:"Open Setting",zh_TW:"\u958B\u555F\u8A2D\u5B9A"},follow_selection:{zh:"\u7FFB\u8BD1\u6846\u8DDF\u968F\u9009\u4E2D\u6587\u672C",en:"Transbox Follow Selection",zh_TW:"\u7FFB\u8B6F\u6846\u8DDF\u96A8\u9078\u53D6\u6587\u5B57"},tranbox_auto_height:{zh:"\u7FFB\u8BD1\u6846\u81EA\u9002\u5E94\u9AD8\u5EA6",en:"Translation box adaptive height",zh_TW:"\u7FFB\u8B6F\u6846\u81EA\u9069\u61C9\u9AD8\u5EA6"},translate_start_hook:{zh:"\u7FFB\u8BD1\u5F00\u59CB\u94A9\u5B50\u51FD\u6570",en:"Translate Start Hook",zh_TW:"\u7FFB\u8B6F\u958B\u59CB Hook"},translate_start_hook_helper:{zh:"\u7FFB\u8BD1\u524D\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes})",en:"Run before translation, input parameters are: ({hostNode, parentNode, nodes})",zh_TW:"\u7FFB\u8B6F\u524D\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes})"},translate_end_hook:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u94A9\u5B50\u51FD\u6570",en:"Translate End Hook",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210 Hook"},translate_end_hook_helper:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})",en:"Run when translation is complete, input parameters are: ({hostNode, parentNode, nodes, wrapperNode, innerNode})",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})"},translate_remove_hook:{zh:"\u7FFB\u8BD1\u79FB\u9664\u94A9\u5B50\u51FD\u6570",en:"Translate Removed Hook",zh_TW:"\u7FFB\u8B6F\u79FB\u9664 Hook"},translate_remove_hook_helper:{zh:"\u7FFB\u8BD1\u79FB\u9664\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A \u7FFB\u8BD1\u8282\u70B9\u3002",en:"Run when translation is removed, the input parameters are: translation node.",zh_TW:"\u79FB\u9664\u7FFB\u8B6F\u6642\u57F7\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A\u7FFB\u8B6F\u7BC0\u9EDE\u3002"},english_dict:{zh:"\u82F1\u6587\u8BCD\u5178",en:"English Dictionary",zh_TW:"\u82F1\u6587\u5B57\u5178"},english_suggest:{zh:"\u82F1\u6587\u5EFA\u8BAE",en:"English Suggest",zh_TW:"\u82F1\u6587\u5EFA\u8B70"},api_name:{zh:"\u63A5\u53E3\u540D\u79F0",en:"API Name",zh_TW:"\u4ECB\u9762\u540D\u7A31"},is_disabled:{zh:"\u662F\u5426\u7981\u7528",en:"Is Disabled",zh_TW:"\u662F\u5426\u505C\u7528"},translate_selected:{zh:"\u662F\u5426\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"If translate selected",zh_TW:"\u662F\u5426\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},use_batch_fetch:{zh:"\u662F\u5426\u805A\u5408\u53D1\u9001\u7FFB\u8BD1\u8BF7\u6C42",en:"Whether to aggregate and send translation requests",zh_TW:"\u662F\u5426\u805A\u5408\u767C\u9001\u7FFB\u8B6F\u8ACB\u6C42"},batch_interval:{zh:"\u805A\u5408\u8BF7\u6C42\u7B49\u5F85\u65F6\u95F4(100-10000)",en:"Aggregation request waiting time (100-10000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u7B49\u5F85\u6642\u9593(100-10000)"},batch_size:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6BB5\u843D\u6570(1-100)",en:"Maximum number of paragraphs in an aggregation request (1-100)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6BB5\u843D\u6578(1-100)"},batch_length:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6587\u672C\u957F\u5EA6(1000-100000)",en:"Maximum text length for aggregation requests (1000-100000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6587\u5B57\u9577\u5EA6(1000-100000)"},use_context:{zh:"\u662F\u5426\u542F\u7528\u667A\u80FD\u4E0A\u4E0B\u6587",en:"Whether to enable AI context",zh_TW:"\u662F\u5426\u555F\u7528\u667A\u6167\u4E0A\u4E0B\u6587"},context_size:{zh:"\u4E0A\u4E0B\u6587\u4F1A\u8BDD\u6570\u91CF(1-20)",en:"Number of context sessions(1-20)",zh_TW:"\u4E0A\u4E0B\u6587\u6703\u8A71\u6578\u91CF(1-20)"},auto_scan_page:{zh:"\u81EA\u52A8\u626B\u63CF\u9875\u9762",en:"Auto scan page",zh_TW:"\u81EA\u52D5\u6383\u63CF\u9801\u9762"},has_rich_text:{zh:"\u542F\u7528\u5BCC\u6587\u672C\u7FFB\u8BD1",en:"Enable rich text translation",zh_TW:"\u555F\u7528\u5BCC\u6587\u672C\u7FFB\u8B6F"},has_shadowroot:{zh:"\u626B\u63CFShadowroot",en:"Scan Shadowroot",zh_TW:"\u6383\u63CFShadowroot"},mousehover_translate:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover Translation",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},use_mousehover_translation:{zh:"\u542F\u7528\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Enable mouseover translation",zh_TW:"\u555F\u7528\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},selected_translation_alert:{zh:"\u5212\u8BCD\u7FFB\u8BD1\u7684\u5F00\u542F\u548C\u5173\u95ED\u8BF7\u5230\u201C\u89C4\u5219\u8BBE\u7F6E\u201D\u91CC\u9762\u8BBE\u7F6E\u3002",en:"To turn selected translation on or off, please go to \"Rule Settings\".",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F\u7684\u958B\u555F\u548C\u95DC\u9589\u8ACB\u5230\u300C\u898F\u5247\u8A2D\u5B9A\u300D\u88E1\u9762\u8A2D\u5B9A\u3002"},mousehover_key_help:{zh:"\u5F53\u5FEB\u6377\u952E\u7F6E\u7A7A\u65F6\u8868\u793A\u9F20\u6807\u60AC\u505C\u76F4\u63A5\u7FFB\u8BD1",en:"When the shortcut key is empty, it means that the mouse hovers to translate directly",zh_TW:"\u7576\u5FEB\u6377\u9375\u7F6E\u7A7A\u6642\u8868\u793A\u6ED1\u9F20\u61F8\u505C\u76F4\u63A5\u7FFB\u8B6F"},autoscan_alt:{zh:"\u81EA\u52A8\u626B\u63CF",en:"Auto Scan",zh_TW:"\u81EA\u52D5\u6383\u63CF"},shadowroot_alt:{zh:"ShadowRoot",en:"ShadowRoot",zh_TW:"ShadowRoot"},richtext_alt:{zh:"\u4FDD\u7559\u5BCC\u6587\u672C",en:"Rich Text",zh_TW:"\u4FDD\u7559\u5BCC\u6587\u672C"},transonly_alt:{zh:"\u9690\u85CF\u539F\u6587",en:"Hide Original",zh_TW:"\u96B1\u85CF\u539F\u6587"},confirm_title:{zh:"\u786E\u8BA4",en:"Confirm",zh_TW:"\u78BA\u8A8D"},confirm_message:{zh:"\u786E\u5B9A\u64CD\u4F5C\u5417\uFF1F",en:"Are you sure you want to proceed?",zh_TW:"\u78BA\u5B9A\u64CD\u4F5C\u55CE\uFF1F"},confirm_action:{zh:"\u786E\u5B9A",en:"Confirm",zh_TW:"\u78BA\u5B9A"},cancel_action:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},pls_press_shortcut:{zh:"\u8BF7\u6309\u4E0B\u5FEB\u6377\u952E\u7EC4\u5408",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},load_setting_err:{zh:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},translation_style:{zh:"\u7FFB\u8BD1\u98CE\u683C",en:"Translation style",zh_TW:"\u7FFB\u8B6F\u98A8\u683C"},placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},tag_name:{zh:"\u5360\u4F4D\u6807\u7B7E\u540D",en:"Placeholder tag name",zh_TW:"\u4F54\u4F4D\u6A19\u540D"},system_prompt_helper:{zh:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9ED8\u8BA4Prompt\u7684\u60C5\u51B5\u4E0B\uFF0C\u8BF7\u52FF\u968F\u610F\u4FEE\u6539\uFF0C\u5426\u5219\u53EF\u80FD\u65E0\u6CD5\u5DE5\u4F5C\u3002",en:"Do not modify the default prompt without fully understanding it, otherwise it may not work.",zh_TW:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9810\u8A2DPrompt\u7684\u60C5\u6CC1\u4E0B\uFF0C\u8ACB\u52FF\u96A8\u610F\u4FEE\u6539\uFF0C\u5426\u5247\u53EF\u80FD\u7121\u6CD5\u904B\u4F5C\u3002"},if_pre_init:{zh:"\u662F\u5426\u9884\u521D\u59CB\u5316",en:"Whether to pre-initialize",zh_TW:"\u662F\u5426\u9810\u521D\u59CB\u5316"},export_old:{zh:"\u5BFC\u51FA\u65E7\u7248",en:"Export old version",zh_TW:"\u532F\u51FA\u820A\u7248"},favorite_words_helper:{zh:"\u5BFC\u5165\u8BCD\u6C47\u8BF7\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u4E2A\u5355\u8BCD\u3002",en:"To import vocabulary, please use a txt file with one word per line.",zh_TW:"\u532F\u5165\u8A5E\u5F59\u8ACB\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u500B\u55AE\u5B57\u3002"},btn_tip_click_away:{zh:"\u5931\u7126\u9690\u85CF/\u663E\u793A",en:"Loss of focus hide/show",zh_TW:"\u5931\u7126\u96B1\u85CF/\u986F\u793A"},btn_tip_follow_selection:{zh:"\u8DDF\u968F/\u56FA\u5B9A\u6A21\u5F0F",en:"Follow/Fixed Mode",zh_TW:"\u8DDF\u96A8/\u56FA\u5B9A\u6A21\u5F0F"},btn_tip_simple_style:{zh:"\u8FF7\u4F60/\u5E38\u89C4\u6A21\u5F0F",en:"Mini/Regular Mode",zh_TW:"\u8FF7\u4F60/\u5E38\u898F\u6A21\u5F0F"},api_placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},api_placetag:{zh:"\u5360\u4F4D\u6807\u7B7E",en:"Placeholder tags",zh_TW:"\u4F54\u4F4D\u6A19"},detected_lang:{zh:"\u8BED\u8A00\u68C0\u6D4B",en:"Language detection",zh_TW:"\u8A9E\u8A00\u5075\u6E2C"},detected_result:{zh:"\u68C0\u6D4B\u7ED3\u679C",en:"Detect result",zh_TW:"\u6AA2\u6E2C\u7D50\u679C"},subtitle_translate:{zh:"\u5B57\u5E55\u7FFB\u8BD1",en:"Subtitle translate",zh_TW:"\u5B57\u5E55\u7FFB\u8B6F"},toggle_subtitle_translate:{zh:"\u542F\u7528\u5B57\u5E55\u7FFB\u8BD1",en:"Enable subtitle translation",zh_TW:"\u555F\u7528\u5B57\u5E55\u7FFB\u8B6F"},is_bilingual_view:{zh:"\u53CC\u8BED\u663E\u793A",en:"Enable bilingual display",zh_TW:"\u96D9\u8A9E\u986F\u793A"},background_styles:{zh:"\u80CC\u666F\u6837\u5F0F",en:"DBackground Style",zh_TW:"\u80CC\u666F\u6A23\u5F0F"},origin_styles:{zh:"\u539F\u6587\u6837\u5F0F",en:"Original style",zh_TW:"\u539F\u6587\u6A23\u5F0F"},translation_styles:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Translation style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},ai_segmentation:{zh:"AI\u667A\u80FD\u65AD\u53E5",en:"AI intelligent punctuation",zh_TW:"AI\u667A\u6167\u65B7\u53E5"},ai_chunk_length:{zh:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)",en:"AI processing chunk length(200-20000)",zh_TW:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)"},subtitle_helper_1:{zh:"1\u3001\u76EE\u524D\u4EC5\u652F\u6301Youtube\u684C\u9762\u7F51\u7AD9\u3002",en:"1. Currently only supports Youtube desktop website.",zh_TW:"1.\u76EE\u524D\u50C5\u652F\u63F4Youtube\u684C\u9762\u7DB2\u7AD9\uFF0C\u4E14\u50C5\u652F\u63F4\u700F\u89BD\u5668\u64F4\u5145\u529F\u80FD\u3002"},subtitle_helper_2:{zh:"2\u3001\u63D2\u4EF6\u5185\u7F6E\u57FA\u7840\u7684\u5B57\u5E55\u5408\u5E76\u3001\u65AD\u53E5\u7B97\u6CD5\uFF0C\u53EF\u6EE1\u8DB3\u5927\u90E8\u5206\u60C5\u51B5\u3002",en:"2. The plug-in has built-in basic subtitle merging and sentence segmentation algorithms, which can meet most situations.",zh_TW:"2.\u63D2\u4EF6\u5167\u5EFA\u57FA\u790E\u7684\u5B57\u5E55\u5408\u4F75\u3001\u65B7\u53E5\u6F14\u7B97\u6CD5\uFF0C\u53EF\u6EFF\u8DB3\u5927\u90E8\u5206\u60C5\u6CC1\u3002"},subtitle_helper_3:{zh:"3\u3001\u4EA6\u53EF\u4EE5\u542F\u7528AI\u667A\u80FD\u65AD\u53E5\uFF0C\u4F46\u9700\u8003\u8651\u5207\u5272\u957F\u5EA6\u53CAAI\u63A5\u53E3\u80FD\u529B\uFF0C\u53EF\u80FD\u5904\u7406\u65F6\u95F4\u4F1A\u5F88\u957F\uFF0C\u751A\u81F3\u5904\u7406\u5931\u8D25\uFF0C\u5BFC\u81F4\u65E0\u6CD5\u770B\u5230\u5B57\u5E55\u3002",en:"3. You can also enable AI intelligent segmentation, but you need to consider the segmentation length and AI interface capabilities. The processing time may be very long or even fail, resulting in the inability to see subtitles.",zh_TW:"3.\u4EA6\u53EF\u555F\u7528AI\u667A\u80FD\u65B7\u53E5\uFF0C\u4F46\u9700\u8003\u616E\u5207\u5272\u9577\u5EA6\u53CAAI\u4ECB\u9762\u80FD\u529B\uFF0C\u53EF\u80FD\u8655\u7406\u6642\u9593\u6703\u5F88\u9577\uFF0C\u751A\u81F3\u8655\u7406\u5931\u6557\uFF0C\u5C0E\u81F4\u7121\u6CD5\u770B\u5230\u5B57\u5E55\u3002"},default_styles_example:{zh:"\u9ED8\u8BA4\u6837\u5F0F\u53C2\u8003\uFF1A",en:"Default styles reference:",zh_TW:"\u8A8D\u6A23\u5F0F\u53C3\u8003\uFF1A"},subtitle_load_succeed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01",en:"Bilingual subtitles loaded successfully!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01"},subtitle_load_failed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01",en:"Failed to load bilingual subtitles!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01"},try_get_subtitle_data:{zh:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019...",en:"Trying to get subtitle data, please wait...",zh_TW:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019..."},subtitle_data_processing:{zh:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D...",en:"Subtitle data processing...",zh_TW:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D..."},starting_to_process_subtitle:{zh:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E...",en:"Starting to process subtitle data...",zh_TW:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E..."},subtitle_data_is_ready:{zh:"\u5B57\u5E55\u6570\u636E\u5DF2\u51C6\u5907\u5C31\u7EEA\uFF0C\u8BF7\u70B9\u51FBKT\u6309\u94AE\u52A0\u8F7D",en:"The subtitle data is ready, please click the KT button to load it",zh_TW:"\u5B57\u5E55\u8CC7\u6599\u5DF2\u6E96\u5099\u5C31\u7DD2\uFF0C\u8ACB\u9EDE\u64CAKT\u6309\u9215\u52A0\u8F09"},log_level:{zh:"\u65E5\u5FD7\u7EA7\u522B",en:"Log Level",zh_TW:"\u65E5\u8A8C\u7B49\u7D1A"},goto_custom_api_example:{zh:"\u70B9\u51FB\u67E5\u770B\u3010\u81EA\u5B9A\u4E49\u63A5\u53E3\u793A\u4F8B\u3011",en:"Click to view [Custom Interface Example]",zh_TW:"\u9EDE\u9078\u67E5\u770B\u3010\u81EA\u8A02\u4ECB\u9762\u7BC4\u4F8B\u3011"},split_paragraph:{zh:"\u5207\u5206\u957F\u6BB5\u843D",en:"Split long paragraph",zh_TW:"\u5207\u5206\u9577\u6BB5\u843D"},split_length:{zh:"\u5207\u5206\u957F\u5EA6 (0-10000)",en:"Segmentation length(0-10000)",zh_TW:"\u5207\u5206\u9577\u5EA6(0-10000)"},highlight_words:{zh:"\u9AD8\u4EAE\u6536\u85CF\u8BCD\u6C47",en:"Highlight favorite words",zh_TW:"\u9AD8\u4EAE\u6536\u85CF\u8A5E\u5F59"},split_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},split_textlength:{zh:"\u6309\u7167\u957F\u5EA6\u5207\u5206",en:"Split by length",zh_TW:"\u4F9D\u9577\u5EA6\u5207\u5206"},split_punctuation:{zh:"\u6309\u7167\u53E5\u5B50\u5207\u5206",en:"Split by sentence",zh_TW:"\u6309\u7167\u53E5\u5B50\u5207\u5206"},highlight_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},highlight_beforetrans:{zh:"\u7FFB\u8BD1\u524D\u9AD8\u4EAE",en:"Highlight before translation",zh_TW:"\u7FFB\u8B6F\u524D\u9AD8\u4EAE"},highlight_aftertrans:{zh:"\u7FFB\u8BD1\u540E\u9AD8\u4EAE",en:"Highlight after translation",zh_TW:"\u7FFB\u8B6F\u5F8C\u9AD8\u4EAE"}};const newI18n=lang=>key=>{var _I18N$key;return((_I18N$key=I18N[key])===null||_I18N$key===void 0?void 0:_I18N$key[lang])||"";}; +const UI_LANGS=(/* unused pure expression or super */ null && ([["en","English"],["zh","简体中文"],["zh_TW","繁體中文"]]));const customApiLangs="[\"en\", \"English - English\"],\n[\"zh-CN\", \"Simplified Chinese - \u7B80\u4F53\u4E2D\u6587\"],\n[\"zh-TW\", \"Traditional Chinese - \u7E41\u9AD4\u4E2D\u6587\"],\n[\"ar\", \"Arabic - \u0627\u0644\u0639\u0631\u0628\u064A\u0629\"],\n[\"bg\", \"Bulgarian - \u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438\"],\n[\"ca\", \"Catalan - Catal\xE0\"],\n[\"hr\", \"Croatian - Hrvatski\"],\n[\"cs\", \"Czech - \u010Ce\u0161tina\"],\n[\"da\", \"Danish - Dansk\"],\n[\"nl\", \"Dutch - Nederlands\"],\n[\"fi\", \"Finnish - Suomi\"],\n[\"fr\", \"French - Fran\xE7ais\"],\n[\"de\", \"German - Deutsch\"],\n[\"el\", \"Greek - \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\"],\n[\"hi\", \"Hindi - \u0939\u093F\u0928\u094D\u0926\u0940\"],\n[\"hu\", \"Hungarian - Magyar\"],\n[\"id\", \"Indonesian - Indonesia\"],\n[\"it\", \"Italian - Italiano\"],\n[\"ja\", \"Japanese - \u65E5\u672C\u8A9E\"],\n[\"ko\", \"Korean - \uD55C\uAD6D\uC5B4\"],\n[\"ms\", \"Malay - Melayu\"],\n[\"mt\", \"Maltese - Malti\"],\n[\"nb\", \"Norwegian - Norsk Bokm\xE5l\"],\n[\"pl\", \"Polish - Polski\"],\n[\"pt\", \"Portuguese - Portugu\xEAs\"],\n[\"ro\", \"Romanian - Rom\xE2n\u0103\"],\n[\"ru\", \"Russian - \u0420\u0443\u0441\u0441\u043A\u0438\u0439\"],\n[\"sk\", \"Slovak - Sloven\u010Dina\"],\n[\"sl\", \"Slovenian - Sloven\u0161\u010Dina\"],\n[\"es\", \"Spanish - Espa\xF1ol\"],\n[\"sv\", \"Swedish - Svenska\"],\n[\"ta\", \"Tamil - \u0BA4\u0BAE\u0BBF\u0BB4\u0BCD\"],\n[\"te\", \"Telugu - \u0C24\u0C46\u0C32\u0C41\u0C17\u0C41\"],\n[\"th\", \"Thai - \u0E44\u0E17\u0E22\"],\n[\"tr\", \"Turkish - T\xFCrk\xE7e\"],\n[\"uk\", \"Ukrainian - \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430\"],\n[\"vi\", \"Vietnamese - Ti\u1EBFng Vi\u1EC7t\"],\n";const customApiHelpZH="// \u8BF7\u6C42\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n \"url\": \"{{url}}\",\n \"method\": \"POST\",\n \"headers\": {\n \"Content-type\": \"application/json\",\n \"Authorization\": \"Bearer {{key}}\"\n },\n \"body\": {\n \"text\": \"{{text}}\", // \u5F85\u7FFB\u8BD1\u6587\u5B57\n \"from\": \"{{from}}\", // \u6587\u5B57\u7684\u8BED\u8A00\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09\n \"to\": \"{{to}}\", // \u76EE\u6807\u8BED\u8A00\n },\n}\n\n\n// \u8FD4\u56DE\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n text: \"\", // \u7FFB\u8BD1\u540E\u7684\u6587\u5B57\n from: \"\", // \u8BC6\u522B\u7684\u6E90\u8BED\u8A00\n to: \"\", // \u76EE\u6807\u8BED\u8A00\uFF08\u53EF\u9009\uFF09\n}\n\n\n// Hook \u8303\u4F8B\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n headers: {\n \"Content-type\": \"application/json\",\n },\n method: \"GET\",\n body: null,\n}]\n\n// Response Hook\n// \u5176\u4E2D\u8FD4\u56DE\u6570\u7EC4\u7B2C\u4E00\u4E2A\u503C\u8868\u793A\u8BD1\u6587\u5B57\u7B26\u4E32\uFF0C\u7B2C\u4E8C\u4E2A\u503C\u4E3A\u5E03\u5C14\u503C\uFF0C\u8868\u793A\u539F\u6587\u8BED\u8A00\u4E0E\u76EE\u6807\u8BED\u8A00\u662F\u5426\u76F8\u540C\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// \u652F\u6301\u7684\u8BED\u8A00\u4EE3\u7801\u5982\u4E0B\n".concat(customApiLangs,"\n");const customApiHelpEN="// Default request\n{\n \"url\": \"{{url}}\",\n \"method\": \"POST\",\n \"headers\": {\n \"Content-type\": \"application/json\",\n \"Authorization\": \"Bearer {{key}}\"\n },\n \"body\": {\n \"text\": \"{{text}}\", // Text to be translated\n \"from\": \"{{from}}\", // The language of the text (may be empty)\n \"to\": \"{{to}}\", // Target language\n },\n}\n\n\n// Default response\n{\n text: \"\", // translated text\n from: \"\", // Recognized source language\n to: \"\", // Target language (optional)\n}\n\n\n/// Hook Example\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n headers: {\n \"Content-type\": \"application/json\",\n },\n method: \"GET\",\n body: null,\n}]\n\n// Response Hook\n// In the returned array, the first value is the translated string, while the second value is a boolean\n// that indicates whether the source language is the same as the target language.\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// The supported language codes are as follows\n".concat(customApiLangs,"\n");const requestHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'url', 'body', 'headers', 'method'\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n return { url, body, headers, userMsg, method };\n}";const requestHookHelperEN="1. The first parameter contains the following fields: 'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2. The return value must be an object containing the following fields: 'url', 'body', 'headers', 'method'\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n return { url, body, headers, userMsg, method };\n}";const responsetHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'res', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'translations'\n \uFF08'translations' \u5E94\u4E3A\u4E00\u4E2A\u4E8C\u7EF4\u6570\u7EC4\uFF1A[[\u8BD1\u6587, \u539F\u6587\u8BED\u8A00]]\uFF09\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync ({ res, ...args }) => {\n const translations = [[\"\u4F60\u597D\", \"en\"]];\n const modelMsg = {}; // \u7528\u4E8EAI\u4E0A\u4E0B\u6587\n return { translations, modelMsg };\n}";const responsetHookHelperEN="1. The first parameter contains the following fields: 'res', ...\n2. The return value must be an object containing the following fields: 'translations'\n ('translations' should be a two-dimensional array: [[translation, source language]]).\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync ({ res, ...args }) => {\n const translations = [[\"\u4F60\u597D\", \"en\"]];\n const modelMsg = {}; // For AI context\n return { translations, modelMsg };\n}";const I18N={app_name:{zh:"\u7B80\u7EA6\u7FFB\u8BD1",en:"KISS Translator",zh_TW:"\u7C21\u7D04\u7FFB\u8B6F"},translate:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},custom_api_help:{zh:customApiHelpZH,en:customApiHelpEN,zh_TW:customApiHelpZH},request_hook_helper:{zh:requestHookHelperZH,en:requestHookHelperEN,zh_TW:requestHookHelperZH},response_hook_helper:{zh:responsetHookHelperZH,en:responsetHookHelperEN,zh_TW:responsetHookHelperZH},translate_alt:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},basic_setting:{zh:"\u57FA\u672C\u8BBE\u7F6E",en:"Basic Setting",zh_TW:"\u57FA\u672C\u8A2D\u5B9A"},rules_setting:{zh:"\u89C4\u5219\u8BBE\u7F6E",en:"Rules Setting",zh_TW:"\u898F\u5247\u8A2D\u5B9A"},apis_setting:{zh:"\u63A5\u53E3\u8BBE\u7F6E",en:"Apis Setting",zh_TW:"API\u8A2D\u5B9A"},sync_setting:{zh:"\u540C\u6B65\u8BBE\u7F6E",en:"Sync Setting",zh_TW:"\u540C\u6B65\u8A2D\u5B9A"},patch_setting:{zh:"\u8865\u4E01\u8BBE\u7F6E",en:"Patch Setting",zh_TW:"\u4FEE\u88DC\u8A2D\u5B9A"},patch_setting_help:{zh:"\u9488\u5BF9\u4E00\u4E9B\u7279\u6B8A\u7F51\u7AD9\u7684\u4FEE\u6B63\u811A\u672C\uFF0C\u4EE5\u4FBF\u7FFB\u8BD1\u8F6F\u4EF6\u5F97\u5230\u66F4\u597D\u7684\u5C55\u793A\u6548\u679C\u3002",en:"Corrected scripts for some special websites so that the translation software can get better display results.",zh_TW:"\u91DD\u5C0D\u67D0\u4E9B\u7279\u6B8A\u7DB2\u7AD9\u7684\u4FEE\u6B63\u8173\u672C\uFF0C\u8B93\u7FFB\u8B6F\u8EDF\u9AD4\u6709\u66F4\u597D\u7684\u986F\u793A\u6548\u679C\u3002"},inject_webfix:{zh:"\u6CE8\u5165\u4FEE\u590D\u8865\u4E01",en:"Inject Webfix",zh_TW:"\u6CE8\u5165\u4FEE\u6B63\u88DC\u4E01"},about:{zh:"\u5173\u4E8E",en:"About",zh_TW:"\u95DC\u65BC"},about_md:{zh:"README.md",en:"README.en.md",zh_TW:"README.md"},about_md_local:{zh:"\u8BF7 [\u70B9\u51FB\u8FD9\u91CC](".concat("https://github.com/fishjar/kiss-translator",") \u67E5\u770B\u8BE6\u60C5\u3002"),en:"Please [click here](".concat("https://github.com/fishjar/kiss-translator",") for details."),zh_TW:"\u8ACB\u3010\u9EDE\u9019\u88E1\u3011\u67E5\u770B\u8A73\u7D30\u5167\u5BB9\u3002"},ui_lang:{zh:"\u754C\u9762\u8BED\u8A00",en:"Interface Language",zh_TW:"\u4ECB\u9762\u8A9E\u8A00"},fetch_limit:{zh:"\u6700\u5927\u5E76\u53D1\u8BF7\u6C42\u6570\u91CF (1-100)",en:"Maximum Number Of Concurrent Requests (1-100)",zh_TW:"\u6700\u5927\u540C\u6642\u8ACB\u6C42\u6578\u91CF (1-100)"},if_think:{zh:"\u542F\u7528\u6216\u7981\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B",en:"Enable or disable the model\u2019s thinking behavior ",zh_TW:"\u555F\u7528\u6216\u505C\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B"},think:{zh:"\u542F\u7528\u6DF1\u5EA6\u601D\u8003",en:"enable thinking",zh_TW:"\u555F\u7528\u6DF1\u5EA6\u601D\u8003"},nothink:{zh:"\u7981\u7528\u6DF1\u5EA6\u601D\u8003",en:"disable thinking",zh_TW:"\u505C\u7528\u6DF1\u5EA6\u601D\u8003"},think_ignore:{zh:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684\u8F93\u51FA,\u9017\u53F7(,)\u5206\u5272,\u5F53\u6A21\u578B\u652F\u6301\u601D\u8003\u4F46ollama\u4E0D\u652F\u6301\u65F6\u9700\u8981\u586B\u5199\u672C\u53C2\u6570",en:"Ignore the block for the following models, comma (,) separated",zh_TW:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684 \u8F38\u51FA\uFF0C\u4EE5\u9017\u865F (,) \u5206\u9694\uFF1B\u7576\u6A21\u578B\u652F\u63F4\u601D\u8003\u4F46 ollama \u4E0D\u652F\u63F4\u6642\u9700\u8981\u586B\u5BEB\u6B64\u53C3\u6578"},fetch_interval:{zh:"\u6BCF\u6B21\u8BF7\u6C42\u95F4\u9694\u65F6\u95F4 (0-5000ms)",en:"Time Between Requests (0-5000ms)",zh_TW:"\u6BCF\u6B21\u8ACB\u6C42\u9593\u9694\u6642\u9593 (0-5000ms)"},translate_interval:{zh:"\u7FFB\u8BD1\u95F4\u9694\u65F6\u95F4 (10-2000ms)",en:"Translation Interval (10-2000ms)",zh_TW:"\u7FFB\u8B6F\u9593\u9694\u6642\u9593 (10-2000ms)"},http_timeout:{zh:"\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4 (5000-60000ms)",en:"Request Timeout Time (5000-60000ms)",zh_TW:"\u8ACB\u6C42\u903E\u6642\u6642\u9593 (5000-60000ms)"},custom_header:{zh:"\u81EA\u5B9A\u4E49Header\u53C2\u6570",en:"Custom Header Params"},custom_header_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\"",en:"Use JSON format, for example \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\""},custom_body:{zh:"\u81EA\u5B9A\u4E49Body\u53C2\u6570",en:"Custom Body Params"},custom_body_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"top_p\": 0.7",en:"Use JSON format, for example \"top_p\": 0.7"},min_translate_length:{zh:"\u6700\u5C0F\u7FFB\u8BD1\u5B57\u7B26\u6570 (1-100)",en:"Minimum number Of Translated Characters (1-100)",zh_TW:"\u6700\u5C0F\u7FFB\u8B6F\u5B57\u5143\u6578 (1-100)"},max_translate_length:{zh:"\u6700\u5927\u7FFB\u8BD1\u5B57\u7B26\u6570 (100-100000)",en:"Maximum number Of Translated Characters (100-100000)",zh_TW:"\u6700\u5927\u7FFB\u8B6F\u5B57\u5143\u6578 (100-100000)"},num_of_newline_characters:{zh:"\u6362\u884C\u5B57\u7B26\u6570 (1-1000)",en:"Number of Newline Characters (1-1000)",zh_TW:"\u63DB\u884C\u5B57\u5143\u6578 (1-1000)"},translate_service:{zh:"\u7FFB\u8BD1\u670D\u52A1",en:"Translate Service",zh_TW:"\u7FFB\u8B6F\u670D\u52D9"},translate_service_multiple:{zh:"\u7FFB\u8BD1\u670D\u52A1 (\u652F\u6301\u591A\u9009)",en:"Translation service (multiple supported)",zh_TW:"\u7FFB\u8B6F\u670D\u52D9 (\u652F\u63F4\u591A\u9078)"},translate_timing:{zh:"\u7FFB\u8BD1\u65F6\u673A",en:"Translate Timing",zh_TW:"\u7FFB\u8B6F\u6642\u6A5F"},mk_pagescroll:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u7FFB\u8BD1\uFF08\u63A8\u8350\uFF09",en:"Rolling Loading (Suggested)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u7FFB\u8B6F\uFF08\u5EFA\u8B70\uFF09"},mk_pageopen:{zh:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8BD1",en:"Translate all now",zh_TW:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8B6F"},mk_mouseover:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},mk_ctrlKey:{zh:"Control + \u9F20\u6807\u60AC\u505C",en:"Control + Mouseover",zh_TW:"Control + \u6ED1\u9F20\u61F8\u505C"},mk_shiftKey:{zh:"Shift + \u9F20\u6807\u60AC\u505C",en:"Shift + Mouseover",zh_TW:"Shift + \u6ED1\u9F20\u61F8\u505C"},mk_altKey:{zh:"Alt + \u9F20\u6807\u60AC\u505C",en:"Alt + Mouseover",zh_TW:"Alt + \u6ED1\u9F20\u61F8\u505C"},from_lang:{zh:"\u539F\u6587\u8BED\u8A00",en:"Source Language",zh_TW:"\u539F\u6587\u8A9E\u8A00"},to_lang:{zh:"\u76EE\u6807\u8BED\u8A00",en:"Target Language",zh_TW:"\u76EE\u6A19\u8A9E\u8A00"},to_lang2:{zh:"\u7B2C\u4E8C\u76EE\u6807\u8BED\u8A00",en:"Target Language 2",zh_TW:"\u7B2C\u4E8C\u76EE\u6A19\u8A9E\u8A00"},to_lang2_helper:{zh:"\u8BBE\u5B9A\u540E\uFF0C\u4E0E\u76EE\u6807\u8BED\u8A00\u4EA7\u751F\u4E92\u8BD1\u6548\u679C\uFF0C\u4F46\u4F9D\u8D56\u8FDC\u7A0B\u8BED\u8A00\u8BC6\u522B\u3002",en:"After setting, it will produce mutual translation effect with the target language, but it relies on remote language recognition.",zh_TW:"\u8A2D\u5B9A\u5F8C\u6703\u8207\u76EE\u6A19\u8A9E\u8A00\u4E92\u8B6F\uFF0C\u4F46\u4F9D\u8CF4\u9060\u7AEF\u8A9E\u8A00\u8B58\u5225\u3002"},text_style:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},text_style_alt:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},bg_color:{zh:"\u6837\u5F0F\u989C\u8272",en:"Style Color",zh_TW:"\u6A23\u5F0F\u984F\u8272"},remain_unchanged:{zh:"\u4FDD\u7559\u4E0D\u53D8",en:"Remain Unchanged",zh_TW:"\u4FDD\u7559\u4E0D\u8B8A"},google_api:{zh:"\u8C37\u6B4C\u7FFB\u8BD1\u63A5\u53E3",en:"Google Translate API",zh_TW:"Google \u7FFB\u8B6F\u4ECB\u9762"},default_selector:{zh:"\u9ED8\u8BA4\u9009\u62E9\u5668",en:"Default selector",zh_TW:"\u9810\u8A2D\u9078\u64C7\u5668"},selector_rules:{zh:"\u9009\u62E9\u5668\u89C4\u5219",en:"Selector Rules",zh_TW:"\u9078\u64C7\u5668\u898F\u5247"},save:{zh:"\u4FDD\u5B58",en:"Save",zh_TW:"\u5132\u5B58"},edit:{zh:"\u7F16\u8F91",en:"Edit",zh_TW:"\u7DE8\u8F2F"},cancel:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},delete:{zh:"\u5220\u9664",en:"Delete",zh_TW:"\u522A\u9664"},reset:{zh:"\u91CD\u7F6E",en:"Reset",zh_TW:"\u91CD\u8A2D"},add:{zh:"\u6DFB\u52A0",en:"Add",zh_TW:"\u65B0\u589E"},inject_rules:{zh:"\u6CE8\u5165\u8BA2\u9605\u89C4\u5219",en:"Inject Subscribe Rules",zh_TW:"\u6CE8\u5165\u8A02\u95B1\u898F\u5247"},personal_rules:{zh:"\u4E2A\u4EBA\u89C4\u5219",en:"Rules",zh_TW:"\u500B\u4EBA\u898F\u5247"},subscribe_rules:{zh:"\u8BA2\u9605\u89C4\u5219",en:"Subscribe",zh_TW:"\u8A02\u95B1\u898F\u5247"},overwrite_subscribe_rules:{zh:"\u8986\u5199\u8BA2\u9605\u89C4\u5219",en:"Overwrite",zh_TW:"\u8986\u5BEB\u8A02\u95B1\u898F\u5247"},subscribe_url:{zh:"\u8BA2\u9605\u5730\u5740",en:"Subscribe URL",zh_TW:"\u8A02\u95B1\u7DB2\u5740"},rules_warn_1:{zh:"1\u3001\u89C4\u5219\u751F\u6548\u7684\u4F18\u5148\u7EA7\u4F9D\u6B21\u4E3A\uFF1A\u4E2A\u4EBA\u89C4\u5219 > \u8BA2\u9605\u89C4\u5219 > \u5168\u5C40\u89C4\u5219\u3002\"\u5168\u5C40\u89C4\u5219\"\u76F8\u5F53\u4E8E\u515C\u5E95\u89C4\u5219\u3002",en:"1. The priority of rules is: personal rules > subscription rules > global rules. \"Global rules\" are like a fallback rule.",zh_TW:"1.\u898F\u5247\u751F\u6548\u7684\u512A\u5148\u9806\u5E8F\u4F9D\u5E8F\u70BA\uFF1A\u500B\u4EBA\u898F\u5247 > \u8A02\u95B1\u898F\u5247 > \u5168\u57DF\u898F\u5247\u3002 \"\u5168\u57DF\u898F\u5247\"\u76F8\u7576\u65BC\u515C\u5E95\u898F\u5247\u3002"},rules_warn_2:{zh:"2\u3001\u201C\u8BA2\u9605\u89C4\u5219\u201D\u9009\u62E9\u6CE8\u5165\u540E\u624D\u4F1A\u751F\u6548\u3002",en:"2. \"Subscription rules\" will take effect only after injection is selected.",zh_TW:"2\u3001\u300C\u8A02\u95B1\u898F\u5247\u300D\u9078\u64C7\u6CE8\u5165\u5F8C\u624D\u6703\u751F\u6548\u3002"},rules_warn_3:{zh:"3\u3001\u5173\u4E8E\u89C4\u5219\u586B\u5199\uFF1A\u8F93\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u6846\u9009\u201C*\u201D\u8868\u793A\u91C7\u7528\u5168\u5C40\u89C4\u5219\u3002",en:"3. Regarding filling in the rules: Leave the input box blank or select \"*\" in the drop-down box to use global rule.",zh_TW:"3. \u898F\u5247\u586B\u5BEB\u8AAA\u660E\uFF1A\u8F38\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u9078\u64C7\u300C*\u300D\u8868\u793A\u4F7F\u7528\u5168\u57DF\u898F\u5247\u3002"},sync_warn:{zh:"\u6D89\u53CA\u9690\u79C1\u6570\u636E\u7684\u540C\u6B65\u8BF7\u8C28\u614E\u9009\u62E9\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52A1\uFF0C\u5EFA\u8BAE\u81EA\u884C\u642D\u5EFA kiss-worker \u6216 WebDAV \u670D\u52A1\u3002",en:"When synchronizing data that involves privacy, please be cautious about choosing third-party sync services. It is recommended to set up your own sync service using kiss-worker or WebDAV.",zh_TW:"\u540C\u6B65\u6D89\u53CA\u96B1\u79C1\u8CC7\u6599\u6642\uFF0C\u8ACB\u8B39\u614E\u9078\u64C7\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52D9\uFF1B\u5EFA\u8B70\u81EA\u5EFA kiss-worker \u6216 WebDAV \u670D\u52D9\u3002"},sync_warn_2:{zh:"\u5982\u679C\u670D\u52A1\u5668\u5B58\u5728\u5176\u4ED6\u5BA2\u6237\u7AEF\u540C\u6B65\u7684\u6570\u636E\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u5C06\u76F4\u63A5\u8986\u76D6\u672C\u5730\u914D\u7F6E\uFF0C\u540E\u9762\u5219\u6839\u636E\u4FEE\u6539\u65F6\u95F4\uFF0C\u65B0\u7684\u8986\u76D6\u65E7\u7684\u3002",en:"If the server has data synchronized by other clients, the first synchronization will directly overwrite the local configuration, and later, according to the modification time, the new one will overwrite the old one.",zh_TW:"\u82E5\u4F3A\u670D\u5668\u4E0A\u5B58\u5728\u5176\u4ED6\u7528\u6236\u7AEF\u540C\u6B65\u7684\u8CC7\u6599\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u6703\u76F4\u63A5\u8986\u84CB\u672C\u6A5F\u8A2D\u5B9A\uFF1B\u4E4B\u5F8C\u5247\u4F9D\u4FEE\u6539\u6642\u9593\uFF0C\u7531\u65B0\u7684\u8986\u84CB\u820A\u7684\u3002"},about_sync_api:{zh:"\u81EA\u5EFAkiss-wroker\u6570\u636E\u540C\u6B65\u670D\u52A1",en:"Self-hosting a Kiss-worker data sync service",zh_TW:"\u81EA\u5EFA kiss-wroker \u8CC7\u6599\u540C\u6B65\u670D\u52D9"},about_api:{zh:"1\u3001\u5176\u4E2D BuiltinAI \u4E3A\u6D4F\u89C8\u5668\u5185\u7F6EAI\u7FFB\u8BD1\uFF0C\u76EE\u524D\u4EC5 Chrome 138 \u53CA\u4EE5\u4E0A\u7248\u672C\u5F97\u5230\u652F\u6301\u3002",en:"1. BuiltinAI is the browser's built-in AI translation, which is currently only supported by Chrome 138 and above.",zh_TW:"1.\u5176\u4E2D BuiltinAI \u70BA\u700F\u89BD\u5668\u5167\u5EFAAI\u7FFB\u8B6F\uFF0C\u76EE\u524D\u50C5 Chrome 138 \u4EE5\u4E0A\u7248\u672C\u652F\u63F4\u3002"},about_api_2:{zh:"2\u3001\u5927\u90E8\u5206AI\u63A5\u53E3\u90FD\u4E0EOpenAI\u517C\u5BB9\uFF0C\u56E0\u6B64\u9009\u62E9\u6DFB\u52A0OpenAI\u7C7B\u578B\u5373\u53EF\u3002",en:"2. Most AI interfaces are compatible with OpenAI, so just choose to add the OpenAI type.",zh_TW:"2.\u5927\u90E8\u5206AI\u4ECB\u9762\u90FD\u8207OpenAI\u76F8\u5BB9\uFF0C\u56E0\u6B64\u9078\u64C7\u65B0\u589EOpenAI\u985E\u578B\u5373\u53EF\u3002"},about_api_3:{zh:"3\u3001\u6682\u672A\u5217\u51FA\u7684\u63A5\u53E3\uFF0C\u7406\u8BBA\u4E0A\u90FD\u53EF\u4EE5\u901A\u8FC7\u81EA\u5B9A\u4E49\u63A5\u53E3 (Custom) \u7684\u5F62\u5F0F\u652F\u6301\u3002",en:"3. Interfaces that have not yet been launched can theoretically be supported through custom interfaces.",zh_TW:"3\u3001\u66AB\u672A\u5217\u51FA\u7684\u4ECB\u9762\uFF0C\u7406\u8AD6\u4E0A\u90FD\u53EF\u900F\u904E\u81EA\u8A02\u4ECB\u9762 (Custom) \u7684\u5F62\u5F0F\u652F\u63F4\u3002"},about_api_proxy:{zh:"\u67E5\u770B\u81EA\u5EFA\u4E00\u4E2A\u7FFB\u8BD1\u63A5\u53E3\u4EE3\u7406",en:"Check out the self-built translation interface proxy",zh_TW:"\u67E5\u770B\u5982\u4F55\u81EA\u5EFA\u7FFB\u8B6F\u4ECB\u9762 Proxy"},setting_helper:{zh:"\u65B0\u65E7\u914D\u7F6E\u5E76\u4E0D\u517C\u5BB9\uFF0C\u5BFC\u51FA\u7684\u65E7\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u5BFC\u5165\u3002",en:"The old and new configurations are not compatible. Do not import the exported old configuration again.",zh_TW:"\u65B0\u820A\u914D\u7F6E\u4E26\u4E0D\u76F8\u5BB9\uFF0C\u532F\u51FA\u7684\u820A\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u532F\u5165\u3002"},style_none:{zh:"\u65E0",en:"None",zh_TW:"\u7121"},under_line:{zh:"\u4E0B\u5212\u76F4\u7EBF",en:"Underline",zh_TW:"\u4E0B\u5283\u76F4\u7DDA"},dot_line:{zh:"\u4E0B\u5212\u70B9\u72B6\u7EBF",en:"Dotted Underline",zh_TW:"\u4E0B\u5283\u9EDE\u72C0\u7DDA"},dash_line:{zh:"\u4E0B\u5212\u865A\u7EBF",en:"Dashed Underline",zh_TW:"\u4E0B\u5283\u865B\u7DDA"},dash_box:{zh:"\u865A\u7EBF\u6846",en:"Dashed Box"},wavy_line:{zh:"\u4E0B\u5212\u6CE2\u6D6A\u7EBF",en:"Wavy Underline",zh_TW:"\u4E0B\u5283\u6CE2\u6D6A\u7DDA"},fuzzy:{zh:"\u6A21\u7CCA",en:"Fuzzy",zh_TW:"\u6A21\u7CCA"},highlight:{zh:"\u9AD8\u4EAE",en:"Highlight",zh_TW:"\u53CD\u767D\u6A19\u793A"},blockquote:{zh:"\u5F15\u7528",en:"Blockquote",zh_TW:"\u5F15\u7528"},gradient:{zh:"\u6E10\u53D8",en:"Gradient",zh_TW:"\u6F38\u8B8A"},blink:{zh:"\u95EA\u73B0",en:"Blink",zh_TW:"\u9583\u73FE"},glow:{zh:"\u53D1\u5149",en:"Glow",zh_TW:"\u767C\u5149"},diy_style:{zh:"\u81EA\u5B9A\u4E49\u6837\u5F0F",en:"Custom Style",zh_TW:"\u81EA\u8A02\u6A23\u5F0F"},diy_style_helper:{zh:"\u9075\u5FAA\u201CCSS\u201D\u7684\u8BED\u6CD5",en:"Follow the syntax of \"CSS\"",zh_TW:"\u9075\u5FAA CSS \u8A9E\u6CD5"},setting:{zh:"\u8BBE\u7F6E",en:"Setting",zh_TW:"\u8A2D\u5B9A"},pattern:{zh:"\u5339\u914D\u7F51\u5740",en:"URL pattern",zh_TW:"\u5339\u914D\u7DB2\u5740"},pattern_helper:{zh:"1\u3001\u652F\u6301\u661F\u53F7(*)\u901A\u914D\u7B26\u30022\u3001\u591A\u4E2AURL\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\u3002",en:"1. Supports the asterisk (*) wildcard character. 2. Separate multiple URLs with newlines or English commas \",\".",zh_TW:"1. \u652F\u63F4\u661F\u865F (*) \u842C\u7528\u5B57\u5143\u30022. \u591A\u500B URL \u8ACB\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u3002"},selector_helper:{zh:"1\u3001\u9700\u8981\u7FFB\u8BD1\u7684\u76EE\u6807\u5143\u7D20\u30022\u3001\u5F00\u542F\u81EA\u52A8\u626B\u63CF\u9875\u9762\u540E\uFF0C\u672C\u8BBE\u7F6E\u65E0\u6548\u30023\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The target element to be translated. 2. This setting is invalid when automatic page scanning is enabled. 3. Follow the CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u7FFB\u8B6F\u7684\u76EE\u6A19\u5143\u7D20\u3002 2.\u958B\u555F\u81EA\u52D5\u6383\u63CF\u9801\u9762\u5F8C\uFF0C\u672C\u8A2D\u5B9A\u7121\u6548\u3002 3.\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},translate_switch:{zh:"\u5F00\u542F\u7FFB\u8BD1",en:"Translate Switch",zh_TW:"\u958B\u555F\u7FFB\u8B6F"},default_enabled:{zh:"\u9ED8\u8BA4\u5F00\u542F",en:"Enabled",zh_TW:"\u9810\u8A2D\u958B\u555F"},default_disabled:{zh:"\u9ED8\u8BA4\u5173\u95ED",en:"Disabled",zh_TW:"\u9810\u8A2D\u95DC\u9589"},selector:{zh:"\u9009\u62E9\u5668",en:"Selector",zh_TW:"\u9078\u64C7\u5668"},target_selector:{zh:"\u76EE\u6807\u5143\u7D20\u9009\u62E9\u5668",en:"Target element selector",zh_TW:"\u76EE\u6A19\u5143\u7D20\u9078\u64C7\u5668"},keep_selector:{zh:"\u4FDD\u7559\u5143\u7D20\u9009\u62E9\u5668",en:"Keep unchanged selector",zh_TW:"\u4FDD\u7559\u5143\u7D20\u9078\u64C7\u5668"},keep_selector_helper:{zh:"1\u3001\u76EE\u6807\u5143\u7D20\u4E0B\u9762\u9700\u8981\u539F\u6837\u4FDD\u7559\u7684\u5B50\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The child nodes under the target element need to remain intact. 2. Follow the CSS selector syntax.",zh_TW:"1. \u76EE\u6A19\u5143\u7D20\u4E0B\u7684\u5B50\u7BC0\u9EDE\u9700\u8981\u4FDD\u6301\u539F\u6A23\u3002 2. \u9075\u5FAA CSS \u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},root_selector:{zh:"\u6839\u8282\u70B9\u9009\u62E9\u5668",en:"Root node selector",zh_TW:"\u6839\u7BC0\u9EDE\u9078\u64C7\u5668"},root_selector_helper:{zh:"1\u3001\u7528\u4E8E\u7F29\u5C0F\u9875\u9762\u7FFB\u8BD1\u8303\u56F4\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Used to narrow the translation scope of the page. 2. Follow the CSS selector syntax.",zh_TW:"1.\u7528\u65BC\u7E2E\u5C0F\u9801\u9762\u7FFB\u8B6F\u7BC4\u570D\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},ignore_selector:{zh:"\u4E0D\u7FFB\u8BD1\u8282\u70B9\u9009\u62E9\u5668",en:"Ignore node selectors",zh_TW:"\u4E0D\u7FFB\u8B6F\u7BC0\u9EDE\u9078\u64C7\u5668"},ignore_selector_helper:{zh:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Nodes to be ignored. 2. Follow CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u7BC0\u9EDE\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},terms:{zh:"\u4E13\u4E1A\u672F\u8BED",en:"Terms",zh_TW:"\u5C08\u696D\u8853\u8A9E"},terms_helper:{zh:"1\u3001\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u65E0\u9700\u659C\u6746\uFF0C\u4E0D\u652F\u6301\u4FEE\u9970\u7B26\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. Supports regular expression matching, no slash required, and no modifiers are supported. 2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1. \u652F\u63F4\u6B63\u5247\u8868\u9054\u5F0F\u6BD4\u5C0D\uFF0C\u7121\u9700\u659C\u7DDA\uFF0C\u4E14\u4E0D\u652F\u63F4\u4FEE\u98FE\u7B26\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},ai_terms:{zh:"AI\u4E13\u4E1A\u672F\u8BED",en:"AI Terms",zh_TW:"AI\u5C08\u696D\u8853\u8A9E"},ai_terms_helper:{zh:"1\u3001AI\u667A\u80FD\u66FF\u6362\uFF0C\u4E0D\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. AI intelligent replacement does not support regular expressions.2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1.AI\u667A\u80FD\u66FF\u63DB\uFF0C\u4E0D\u652F\u63F4\u6B63\u898F\u8868\u793A\u5F0F\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},selector_style:{zh:"\u9009\u62E9\u5668\u8282\u70B9\u6837\u5F0F",en:"Selector Style",zh_TW:"\u9078\u64C7\u5668\u7BC0\u9EDE\u6A23\u5F0F"},terms_style:{zh:"\u4E13\u4E1A\u672F\u8BED\u6837\u5F0F",en:"Terms Style",zh_TW:"\u5C08\u696D\u8853\u8A9E\u6A23\u5F0F"},highlight_style:{zh:"\u8BCD\u6C47\u9AD8\u4EAE\u6837\u5F0F",en:"Fav Words highlight style",zh_TW:"\u8A5E\u5F59\u9AD8\u4EAE\u6A23\u5F0F"},selector_style_helper:{zh:"\u5F00\u542F\u7FFB\u8BD1\u65F6\u6CE8\u5165\u3002",en:"It is injected when translation is turned on.",zh_TW:"\u5728\u958B\u555F\u7FFB\u8B6F\u6642\u6CE8\u5165\u3002"},selector_parent_style:{zh:"\u9009\u62E9\u5668\u7236\u8282\u70B9\u6837\u5F0F",en:"Parent Selector Style",zh_TW:"\u9078\u64C7\u5668\u7236\u7BC0\u9EDE\u6A23\u5F0F"},selector_grand_style:{zh:"\u9009\u62E9\u5668\u7956\u8282\u70B9\u6837\u5F0F",en:"Grand Selector Style",zh_TW:"\u9078\u64C7\u5668\u7956\u7BC0\u9EDE\u6A23\u5F0F"},inject_js:{zh:"\u6CE8\u5165JS",en:"Inject JS",zh_TW:"\u6CE8\u5165 JS"},inject_js_helper:{zh:"\u9884\u52A0\u8F7D\u65F6\u6CE8\u5165\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002\u5185\u7F6E\u5168\u5C40\u5BF9\u8C61 KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }",en:"Injected during preload, runs only once per page. Built-in global object KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }",zh_TW:"\u9810\u5148\u8F09\u5165\u6642\u6CE8\u5165\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002\u5167\u5EFA\u5168\u57DF\u7269\u4EF6 KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }"},inject_css:{zh:"\u6CE8\u5165CSS",en:"Inject CSS",zh_TW:"\u6CE8\u5165 CSS"},inject_css_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},fixer_function:{zh:"\u4FEE\u590D\u51FD\u6570",en:"Fixer Function",zh_TW:"\u4FEE\u5FA9\u51FD\u5F0F"},fixer_function_helper:{zh:"1\u3001br\u662F\u5C06
\u6362\u884C\u66FF\u6362\u6210

\u30022\u3001bn\u662F\u5C06\\n\u6362\u884C\u66FF\u6362\u6210

\u30023\u3001brToDiv\u548CbnToDiv\u662F\u66FF\u6362\u6210

\u3002",en:"1. br replaces
line breaks with

. 2. bn replaces \\n newline with

. 3. brToDiv and bnToDiv are replaced with

.",zh_TW:"1. br \u6703\u5C07
\u63DB\u884C\u66FF\u63DB\u70BA

\u30022. bn \u6703\u5C07 \\n \u63DB\u884C\u66FF\u63DB\u70BA

\u30023. brToDiv \u8207 bnToDiv \u6703\u66FF\u63DB\u70BA

\u3002"},import:{zh:"\u5BFC\u5165",en:"Import",zh_TW:"\u532F\u5165"},export:{zh:"\u5BFC\u51FA",en:"Export",zh_TW:"\u532F\u51FA"},export_translation:{zh:"\u5BFC\u51FA\u91CA\u4E49",en:"Export Translation",zh_TW:"\u532F\u51FA\u91CB\u7FA9"},error_cant_be_blank:{zh:"\u4E0D\u80FD\u4E3A\u7A7A",en:"Can not be blank",zh_TW:"\u4E0D\u53EF\u70BA\u7A7A"},error_duplicate_values:{zh:"\u5B58\u5728\u91CD\u590D\u7684\u503C",en:"There are duplicate values",zh_TW:"\u5B58\u5728\u91CD\u8907\u7684\u503C"},error_wrong_file_type:{zh:"\u9519\u8BEF\u7684\u6587\u4EF6\u7C7B\u578B",en:"Wrong file type",zh_TW:"\u6A94\u6848\u985E\u578B\u932F\u8AA4"},error_fetch_url:{zh:"\u8BF7\u68C0\u67E5url\u5730\u5740\u662F\u5426\u6B63\u786E\u6216\u7A0D\u540E\u518D\u8BD5\u3002",en:"Please check if the url address is correct or try again later.",zh_TW:"\u8ACB\u6AA2\u67E5 URL \u662F\u5426\u6B63\u78BA\u6216\u7A0D\u5F8C\u518D\u8A66\u3002"},deepl_api:{zh:"DeepL \u63A5\u53E3",en:"DeepL API",zh_TW:"DeepL \u4ECB\u9762"},deepl_key:{zh:"DeepL \u5BC6\u94A5",en:"DeepL Key",zh_TW:"DeepL \u91D1\u9470"},openai_api:{zh:"OpenAI \u63A5\u53E3",en:"OpenAI API",zh_TW:"OpenAI \u4ECB\u9762"},openai_key:{zh:"OpenAI \u5BC6\u94A5",en:"OpenAI Key",zh_TW:"OpenAI \u91D1\u9470"},openai_model:{zh:"OpenAI \u6A21\u578B",en:"OpenAI Model",zh_TW:"OpenAI \u6A21\u578B"},openai_prompt:{zh:"OpenAI \u63D0\u793A\u8BCD",en:"OpenAI Prompt",zh_TW:"OpenAI \u63D0\u793A\u8A5E"},if_clear_cache:{zh:"\u662F\u5426\u6E05\u9664\u7F13\u5B58\uFF08\u9ED8\u8BA4\u7F13\u5B587\u5929\uFF09",en:"Whether clear cache (Default cache is 7 days)",zh_TW:"\u662F\u5426\u6E05\u9664\u5FEB\u53D6\uFF08\u9810\u8A2D\u5FEB\u53D67\u5929\uFF09"},clear_cache_never:{zh:"\u4E0D\u6E05\u9664\u7F13\u5B58",en:"Never clear cache",zh_TW:"\u4E0D\u6E05\u9664\u5FEB\u53D6"},clear_cache_restart:{zh:"\u91CD\u542F\u6D4F\u89C8\u5668\u65F6\u6E05\u9664\u7F13\u5B58",en:"Clear cache when restarting browser",zh_TW:"\u91CD\u65B0\u555F\u52D5\u700F\u89BD\u5668\u6642\u6E05\u9664\u5FEB\u53D6"},data_sync_type:{zh:"\u6570\u636E\u540C\u6B65\u65B9\u5F0F",en:"Data Sync Type",zh_TW:"\u8CC7\u6599\u540C\u6B65\u65B9\u5F0F"},data_sync_url:{zh:"\u6570\u636E\u540C\u6B65\u63A5\u53E3",en:"Data Sync API",zh_TW:"\u8CC7\u6599\u540C\u6B65\u4ECB\u9762"},data_sync_user:{zh:"\u6570\u636E\u540C\u6B65\u8D26\u6237",en:"Data Sync User",zh_TW:"\u8CC7\u6599\u540C\u6B65\u5E33\u865F"},data_sync_key:{zh:"\u6570\u636E\u540C\u6B65\u5BC6\u94A5",en:"Data Sync Key",zh_TW:"\u8CC7\u6599\u540C\u6B65\u91D1\u9470"},sync_now:{zh:"\u7ACB\u5373\u540C\u6B65",en:"Sync Now",zh_TW:"\u7ACB\u5373\u540C\u6B65"},sync_success:{zh:"\u540C\u6B65\u6210\u529F\uFF01",en:"Sync Success",zh_TW:"\u540C\u6B65\u6210\u529F\uFF01"},sync_failed:{zh:"\u540C\u6B65\u5931\u8D25\uFF01",en:"Sync Error",zh_TW:"\u540C\u6B65\u5931\u6557\uFF01"},error_got_some_wrong:{zh:"\u62B1\u6B49\uFF0C\u51FA\u9519\u4E86\uFF01",en:"Sorry, something went wrong!",zh_TW:"\u62B1\u6B49\uFF0C\u767C\u751F\u932F\u8AA4\uFF01"},error_sync_setting:{zh:"\u60A8\u7684\u540C\u6B65\u7C7B\u578B\u5FC5\u987B\u4E3A\u201CKISS-Worker\u201D\uFF0C\u4E14\u9700\u586B\u5199\u5B8C\u6574",en:"Your sync type must be \"KISS-Worker\" and must be filled in completely",zh_TW:"\u60A8\u7684\u540C\u6B65\u578B\u614B\u5FC5\u9808\u70BA\u300CKISS-Worker\u300D\uFF0C\u4E14\u9700\u586B\u5BEB\u5B8C\u6574\u3002"},click_test:{zh:"\u70B9\u51FB\u6D4B\u8BD5",en:"Click Test",zh_TW:"\u9EDE\u64CA\u6E2C\u8A66"},test_success:{zh:"\u6D4B\u8BD5\u6210\u529F",en:"Test success",zh_TW:"\u6E2C\u8A66\u6210\u529F"},test_failed:{zh:"\u6D4B\u8BD5\u5931\u8D25",en:"Test failed",zh_TW:"\u6E2C\u8A66\u5931\u6557"},clear_all_cache_now:{zh:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u7F13\u5B58",en:"Clear all cache now",zh_TW:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u5FEB\u53D6"},clear_cache:{zh:"\u6E05\u9664\u7F13\u5B58",en:"Clear Cache",zh_TW:"\u6E05\u9664\u5FEB\u53D6"},clear_success:{zh:"\u6E05\u9664\u6210\u529F",en:"Clear success",zh_TW:"\u6E05\u9664\u6210\u529F"},clear_failed:{zh:"\u6E05\u9664\u5931\u8D25",en:"Clear failed",zh_TW:"\u6E05\u9664\u5931\u6557"},share:{zh:"\u5206\u4EAB",en:"Share",zh_TW:"\u5206\u4EAB"},clear_all:{zh:"\u6E05\u7A7A",en:"Clear All",zh_TW:"\u6E05\u7A7A"},help:{zh:"\u6C42\u52A9",en:"Help",zh_TW:"\u6C42\u52A9"},restore_default:{zh:"\u6062\u590D\u9ED8\u8BA4",en:"Restore Default",zh_TW:"\u6062\u5FA9\u9810\u8A2D"},shortcuts_setting:{zh:"\u5FEB\u6377\u952E\u8BBE\u7F6E",en:"Shortcuts Setting",zh_TW:"\u5FEB\u6377\u9375\u8A2D\u5B9A"},toggle_translate_shortcut:{zh:"\"\u5F00\u542F\u7FFB\u8BD1\"\u5FEB\u6377\u952E",en:"\"Toggle Translate\" Shortcut",zh_TW:"\u300C\u958B\u555F\u7FFB\u8B6F\u300D\u5FEB\u6377\u9375"},toggle_style_shortcut:{zh:"\"\u5207\u6362\u6837\u5F0F\"\u5FEB\u6377\u952E",en:"\"Toggle Style\" Shortcut",zh_TW:"\u300C\u5207\u63DB\u6A23\u5F0F\u300D\u5FEB\u6377\u9375"},toggle_popup_shortcut:{zh:"\"\u6253\u5F00\u5F39\u7A97\"\u5FEB\u6377\u952E",en:"\"Open Popup\" Shortcut",zh_TW:"\u300C\u958B\u555F\u5F48\u7A97\u300D\u5FEB\u6377\u9375"},open_setting_shortcut:{zh:"\"\u6253\u5F00\u8BBE\u7F6E\"\u5FEB\u6377\u952E",en:"\"Open Setting\" Shortcut",zh_TW:"\u300C\u958B\u555F\u8A2D\u5B9A\u300D\u5FEB\u6377\u9375"},hide_fab_button:{zh:"\u9690\u85CF\u60AC\u6D6E\u6309\u94AE",en:"Hide Fab Button",zh_TW:"\u96B1\u85CF\u61F8\u6D6E\u6309\u9215"},fab_click_action:{zh:"\u5355\u51FB\u60AC\u6D6E\u6309\u94AE\u52A8\u4F5C",en:"Single Click Fab Action",zh_TW:"\u55AE\u64CA\u61F8\u6D6E\u6309\u94AE\u52D5\u4F5C"},fab_click_menu:{zh:"\u5F39\u51FA\u83DC\u5355",en:"Popup Menu",zh_TW:"\u5F48\u51FA\u9078\u55AE"},fab_click_translate:{zh:"\u76F4\u63A5\u7FFB\u8BD1",en:"Translate",zh_TW:"\u76F4\u63A5\u7FFB\u8B6F"},hide_tran_button:{zh:"\u9690\u85CF\u7FFB\u8BD1\u6309\u94AE",en:"Hide Translate Button",zh_TW:"\u96B1\u85CF\u7FFB\u8B6F\u6309\u9215"},hide_click_away:{zh:"\u70B9\u51FB\u5916\u90E8\u5173\u95ED\u5F39\u7A97",en:"Click outside to close the pop-up window",zh_TW:"\u9EDE\u64CA\u5916\u90E8\u95DC\u9589\u5F48\u7A97"},use_simple_style:{zh:"\u4F7F\u7528\u7B80\u6D01\u754C\u9762",en:"Use a simple interface",zh_TW:"\u4F7F\u7528\u7C21\u6F54\u4ECB\u9762"},show:{zh:"\u663E\u793A",en:"Show",zh_TW:"\u986F\u793A"},hide:{zh:"\u9690\u85CF",en:"Hide",zh_TW:"\u96B1\u85CF"},save_rule:{zh:"\u4FDD\u5B58\u89C4\u5219",en:"Save Rule",zh_TW:"\u5132\u5B58\u898F\u5247"},global_rule:{zh:"\u5168\u5C40\u89C4\u5219",en:"Global Rule",zh_TW:"\u5168\u57DF\u898F\u5247"},input_translate:{zh:"\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u8F38\u5165\u6846\u7FFB\u8B6F"},use_input_box_translation:{zh:"\u542F\u7528\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u555F\u7528\u8F38\u5165\u6846\u7FFB\u8B6F"},input_selector:{zh:"\u8F93\u5165\u6846\u9009\u62E9\u5668",en:"Input Selector",zh_TW:"\u8F38\u5165\u6846\u9078\u64C7\u5668"},input_selector_helper:{zh:"\u7528\u4E8E\u8F93\u5165\u6846\u7FFB\u8BD1\u3002",en:"Used for input box translation.",zh_TW:"\u7528\u65BC\u8F38\u5165\u6846\u7FFB\u8B6F\u3002"},trigger_trans_shortcut:{zh:"\u89E6\u53D1\u7FFB\u8BD1\u5FEB\u6377\u952E",en:"Trigger Translation Shortcut Keys",zh_TW:"\u89F8\u767C\u7FFB\u8B6F\u5FEB\u6377\u9375"},trigger_trans_shortcut_help:{zh:"\u9ED8\u8BA4\u4E3A\u5355\u51FB\u201CAltLeft+KeyI\u201D",en:"Default is \"AltLeft+KeyI\"",zh_TW:"\u9810\u8A2D\u70BA\u6309\u4E0B\u300CAltLeft+KeyI\u300D"},shortcut_press_count:{zh:"\u5FEB\u6377\u952E\u8FDE\u51FB\u6B21\u6570",en:"Shortcut Press Number",zh_TW:"\u5FEB\u6377\u9375\u9023\u64CA\u6B21\u6578"},combo_timeout:{zh:"\u8FDE\u51FB\u8D85\u65F6\u65F6\u95F4 (10-1000ms)",en:"Combo Timeout (10-1000ms)",zh_TW:"\u9023\u64CA\u903E\u6642 (10-1000ms)"},input_trans_start_sign:{zh:"\u7FFB\u8BD1\u8D77\u59CB\u6807\u8BC6",en:"Translation Start Sign",zh_TW:"\u7FFB\u8B6F\u8D77\u59CB\u6A19\u8A18"},input_trans_start_sign_help:{zh:"\u6807\u8BC6\u540E\u9762\u53EF\u4EE5\u52A0\u76EE\u6807\u8BED\u8A00\u4EE3\u7801\uFF0C\u5982\uFF1A \u201C/en \u4F60\u597D\u201D\u3001\u201C/zh hello\u201D",en:"The target language code can be added after the sign, such as: \"/en \u4F60\u597D\", \"/zh hello\"",zh_TW:"\u6A19\u8A18\u5F8C\u53EF\u52A0\u4E0A\u76EE\u6A19\u8A9E\u8A00\u4EE3\u78BC\uFF0C\u4F8B\u5982\uFF1A\u300C/en \u4F60\u597D\u300D\u3001\u300C/zh hello\u300D"},detect_lang_remote:{zh:"\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B",en:"Remote language detection",zh_TW:"\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C"},detect_lang_remote_help:{zh:"\u542F\u7528\u540E\u68C0\u6D4B\u51C6\u786E\u5EA6\u589E\u52A0\uFF0C\u4F46\u4F1A\u964D\u4F4E\u7FFB\u8BD1\u901F\u5EA6\uFF0C\u8BF7\u914C\u60C5\u5F00\u542F",en:"After enabling, the detection accuracy will increase, but it will reduce the translation speed. Please enable it as appropriate.",zh_TW:"\u555F\u7528\u5F8C\u53EF\u63D0\u5347\u5075\u6E2C\u6E96\u78BA\u5EA6\uFF0C\u4F46\u6703\u964D\u4F4E\u7FFB\u8B6F\u901F\u5EA6\uFF0C\u8ACB\u8996\u9700\u8981\u958B\u555F\u3002"},detect_lang_service:{zh:"\u8BED\u8A00\u68C0\u6D4B\u670D\u52A1",en:"Language detect service",zh_TW:"\u8A9E\u8A00\u6AA2\u6E2C\u670D\u52D9"},disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},enable:{zh:"\u542F\u7528",en:"Enable",zh_TW:"\u555F\u7528"},selection_translate:{zh:"\u5212\u8BCD\u7FFB\u8BD1",en:"Selection Translate",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F"},toggle_selection_translate:{zh:"\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"Use Selection Translate",zh_TW:"\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},trigger_tranbox_shortcut:{zh:"\u663E\u793A\u7FFB\u8BD1\u6846/\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57\u5FEB\u6377\u952E",en:"Open Translate Popup/Translate Selected Shortcut",zh_TW:"\u986F\u793A\u7FFB\u8B6F\u6846\uFF0F\u7FFB\u8B6F\u9078\u4E2D\u6587\u5B57\u5FEB\u6377\u9375"},tranbtn_offset_x:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Button Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbtn_offset_y:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Button Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},tranbox_offset_x:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Box Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbox_offset_y:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Box Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},translated_text:{zh:"\u8BD1\u6587",en:"Translated Text",zh_TW:"\u8B6F\u6587"},original_text:{zh:"\u539F\u6587",en:"Original Text",zh_TW:"\u539F\u6587"},favorite_words:{zh:"\u6536\u85CF\u8BCD\u6C47",en:"Favorite Words",zh_TW:"\u6536\u85CF\u8A5E\u5F59"},touch_setting:{zh:"\u89E6\u5C4F\u8BBE\u7F6E",en:"Touch Setting",zh_TW:"\u89F8\u63A7\u8A2D\u5B9A"},touch_translate_shortcut:{zh:"\u89E6\u5C4F\u7FFB\u8BD1\u5FEB\u6377\u65B9\u5F0F (\u652F\u6301\u591A\u9009)",en:"Touch Translate Shortcut (multiple supported)",zh_TW:"\u89F8\u63A7\u7FFB\u8B6F\u6377\u5F91 (\u652F\u63F4\u591A\u9078)"},touch_tap_0:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},touch_tap_2:{zh:"\u53CC\u6307\u8F7B\u89E6",en:"Two finger tap",zh_TW:"\u96D9\u6307\u8F15\u89F8"},touch_tap_3:{zh:"\u4E09\u6307\u8F7B\u89E6",en:"Three finger tap",zh_TW:"\u4E09\u6307\u8F15\u89F8"},touch_tap_4:{zh:"\u56DB\u6307\u8F7B\u89E6",en:"Four finger tap",zh_TW:"\u56DB\u6307\u8F15\u89F8"},touch_tap_5:{zh:"\u5355\u6307\u53CC\u51FB",en:"Double-click",zh_TW:"\u55AE\u6307\u96D9\u64CA"},touch_tap_6:{zh:"\u5355\u6307\u4E09\u51FB",en:"Triple-click",zh_TW:"\u55AE\u6307\u4E09\u64CA"},touch_tap_7:{zh:"\u53CC\u6307\u53CC\u51FB",en:"Two-finger double-click",zh_TW:"\u96D9\u6307\u96D9\u64CA"},translate_blacklist:{zh:"\u7981\u7528\u7FFB\u8BD1\u540D\u5355",en:"Translate Blacklist",zh_TW:"\u505C\u7528\u7FFB\u8B6F\u540D\u55AE"},disabled_orilist:{zh:"\u7981\u7528Origin\u540D\u5355",en:"Disabled Origin List",zh_TW:"\u505C\u7528 Origin \u540D\u55AE"},disabled_csplist:{zh:"\u7981\u7528CSP\u540D\u5355",en:"Disabled CSP List",zh_TW:"\u505C\u7528 CSP \u540D\u55AE"},disabled_csplist_helper:{zh:"3\u3001\u901A\u8FC7\u8C03\u6574CSP\u7B56\u7565\uFF0C\u4F7F\u5F97\u67D0\u4E9B\u9875\u9762\u80FD\u591F\u6CE8\u5165JS/CSS/Media\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6653\u76F8\u5173\u98CE\u9669\u3002",en:"3. By adjusting the CSP policy, some pages can inject JS/CSS/Media. Please use it with caution unless you are aware of the related risks.",zh_TW:"3. \u900F\u904E\u8ABF\u6574 CSP \u653F\u7B56\uFF0C\u4F7F\u90E8\u5206\u9801\u9762\u53EF\u6CE8\u5165 JS/CSS/Media\u3002\u8ACB\u8B39\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6089\u76F8\u95DC\u98A8\u96AA\u3002"},skip_langs:{zh:"\u4E0D\u7FFB\u8BD1\u7684\u8BED\u8A00",en:"Disable Languages",zh_TW:"\u4E0D\u7FFB\u8B6F\u7684\u8A9E\u8A00"},skip_langs_helper:{zh:"\u6B64\u529F\u80FD\u4F9D\u8D56\u51C6\u786E\u7684\u8BED\u8A00\u68C0\u6D4B\uFF0C\u5EFA\u8BAE\u542F\u7528\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B\u3002",en:"This feature relies on accurate language detection. It is recommended to enable remote language detection.",zh_TW:"\u6B64\u529F\u80FD\u4EF0\u8CF4\u6E96\u78BA\u7684\u8A9E\u8A00\u5075\u6E2C\uFF0C\u5EFA\u8B70\u555F\u7528\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C\u3002"},context_menus:{zh:"\u53F3\u952E\u83DC\u5355",en:"Context Menus",zh_TW:"\u53F3\u9375\u9078\u55AE"},hide_context_menus:{zh:"\u9690\u85CF\u53F3\u952E\u83DC\u5355",en:"Hide Context Menus",zh_TW:"\u96B1\u85CF\u53F3\u9375\u9078\u55AE"},simple_context_menus:{zh:"\u7B80\u5355\u53F3\u952E\u83DC\u5355",en:"Simple_context_menus Context Menus",zh_TW:"\u7C21\u6613\u53F3\u9375\u9078\u55AE"},secondary_context_menus:{zh:"\u4E8C\u7EA7\u53F3\u952E\u83DC\u5355",en:"Secondary Context Menus",zh_TW:"\u6B21\u7D1A\u53F3\u9375\u9078\u55AE"},mulkeys_help:{zh:"\u652F\u6301\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\uFF0C\u8F6E\u8BE2\u8C03\u7528\u3002",en:"Supports polling calls separated by newlines or English commas \",\".",zh_TW:"\u652F\u63F4\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\uFF0C\u8F2A\u8A62\u547C\u53EB\u3002"},translation_element_tag:{zh:"\u8BD1\u6587\u5143\u7D20\u6807\u7B7E",en:"Translation Element Tag",zh_TW:"\u8B6F\u6587\u5143\u7D20\u6A19\u7C64"},show_only_translations:{zh:"\u4EC5\u663E\u793A\u8BD1\u6587",en:"Show Only Translations",zh_TW:"\u50C5\u986F\u793A\u8B6F\u6587"},show_only_translations_help:{zh:"\u975E\u5B8C\u7F8E\u5B9E\u73B0\uFF0C\u67D0\u4E9B\u9875\u9762\u53EF\u80FD\u6709\u6837\u5F0F\u7B49\u95EE\u9898\u3002",en:"It is not a perfect implementation and some pages may have style issues.",zh_TW:"\u6B64\u70BA\u975E\u5B8C\u7F8E\u5BE6\u4F5C\uFF0C\u90E8\u5206\u9801\u9762\u53EF\u80FD\u51FA\u73FE\u6A23\u5F0F\u7B49\u554F\u984C\u3002"},translate_page_title:{zh:"\u662F\u5426\u7FFB\u8BD1\u9875\u9762\u6807\u9898",en:"Translate Page Title",zh_TW:"\u662F\u5426\u7FFB\u8B6F\u9801\u9762\u6A19\u984C"},more:{zh:"\u66F4\u591A",en:"More",zh_TW:"\u66F4\u591A"},less:{zh:"\u66F4\u5C11",en:"Less",zh_TW:"\u66F4\u5C11"},fixer_selector:{zh:"\u7F51\u9875\u4FEE\u590D\u9009\u62E9\u5668",en:"Fixer Selector",zh_TW:"\u7DB2\u9801\u4FEE\u5FA9\u9078\u64C7\u5668"},reg_niutrans:{zh:"\u83B7\u53D6\u5C0F\u725B\u7FFB\u8BD1\u5BC6\u94A5\u3010\u7B80\u7EA6\u7FFB\u8BD1\u4E13\u5C5E\u65B0\u7528\u6237\u6CE8\u518C\u8D60\u9001300\u4E07\u5B57\u7B26\u3011",en:"Get NiuTrans APIKey [KISS Translator Exclusive New User Registration Free 3 Million Characters]",zh_TW:"\u53D6\u5F97\u5C0F\u725B\u7FFB\u8B6F\u91D1\u9470\u3010\u7C21\u7D04\u7FFB\u8B6F\u5C08\u5C6C\u65B0\u7528\u6236\u8A3B\u518A\u8D08\u9001 300 \u842C\u5B57\u5143\u3011"},trigger_mode:{zh:"\u89E6\u53D1\u65B9\u5F0F",en:"Trigger Mode",zh_TW:"\u89F8\u767C\u65B9\u5F0F"},trigger_click:{zh:"\u70B9\u51FB\u89E6\u53D1",en:"Click Trigger",zh_TW:"\u9EDE\u64CA\u89F8\u767C"},trigger_hover:{zh:"\u9F20\u6807\u60AC\u505C\u89E6\u53D1",en:"Hover Trigger",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u89F8\u767C"},trigger_select:{zh:"\u9009\u4E2D\u89E6\u53D1",en:"Select Trigger",zh_TW:"\u9078\u53D6\u89F8\u767C"},extend_styles:{zh:"\u9644\u52A0\u6837\u5F0F",en:"Extend Styles",zh_TW:"\u9644\u52A0\u6A23\u5F0F"},custom_option:{zh:"\u81EA\u5B9A\u4E49\u9009\u9879",en:"Custom Option",zh_TW:"\u81EA\u8A02\u9078\u9805"},translate_selected_text:{zh:"\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57",en:"Translate Selected Text",zh_TW:"\u7FFB\u8B6F\u9078\u53D6\u6587\u5B57"},toggle_style:{zh:"\u5207\u6362\u6837\u5F0F",en:"Toggle Style",zh_TW:"\u5207\u63DB\u6A23\u5F0F"},open_menu:{zh:"\u6253\u5F00\u5F39\u7A97\u83DC\u5355",en:"Open Popup Menu",zh_TW:"\u958B\u555F\u5F48\u7A97\u9078\u55AE"},open_setting:{zh:"\u6253\u5F00\u8BBE\u7F6E",en:"Open Setting",zh_TW:"\u958B\u555F\u8A2D\u5B9A"},follow_selection:{zh:"\u7FFB\u8BD1\u6846\u8DDF\u968F\u9009\u4E2D\u6587\u672C",en:"Transbox Follow Selection",zh_TW:"\u7FFB\u8B6F\u6846\u8DDF\u96A8\u9078\u53D6\u6587\u5B57"},tranbox_auto_height:{zh:"\u7FFB\u8BD1\u6846\u81EA\u9002\u5E94\u9AD8\u5EA6",en:"Translation box adaptive height",zh_TW:"\u7FFB\u8B6F\u6846\u81EA\u9069\u61C9\u9AD8\u5EA6"},translate_start_hook:{zh:"\u7FFB\u8BD1\u5F00\u59CB\u94A9\u5B50\u51FD\u6570",en:"Translate Start Hook",zh_TW:"\u7FFB\u8B6F\u958B\u59CB Hook"},translate_start_hook_helper:{zh:"\u7FFB\u8BD1\u524D\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}",en:"Run before translation, input parameters are: {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}",zh_TW:"\u7FFB\u8B6F\u524D\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}"},translate_end_hook:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u94A9\u5B50\u51FD\u6570",en:"Translate End Hook",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210 Hook"},translate_end_hook_helper:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})",en:"Run when translation is complete, input parameters are: ({hostNode, parentNode, nodes, wrapperNode, innerNode})",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})"},translate_remove_hook:{zh:"\u7FFB\u8BD1\u79FB\u9664\u94A9\u5B50\u51FD\u6570",en:"Translate Removed Hook",zh_TW:"\u7FFB\u8B6F\u79FB\u9664 Hook"},translate_remove_hook_helper:{zh:"\u7FFB\u8BD1\u79FB\u9664\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A \u7FFB\u8BD1\u8282\u70B9\u3002",en:"Run when translation is removed, the input parameters are: translation node.",zh_TW:"\u79FB\u9664\u7FFB\u8B6F\u6642\u57F7\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A\u7FFB\u8B6F\u7BC0\u9EDE\u3002"},english_dict:{zh:"\u82F1\u6587\u8BCD\u5178",en:"English Dictionary",zh_TW:"\u82F1\u6587\u5B57\u5178"},english_suggest:{zh:"\u82F1\u6587\u5EFA\u8BAE",en:"English Suggest",zh_TW:"\u82F1\u6587\u5EFA\u8B70"},api_name:{zh:"\u63A5\u53E3\u540D\u79F0",en:"API Name",zh_TW:"\u4ECB\u9762\u540D\u7A31"},is_disabled:{zh:"\u662F\u5426\u7981\u7528",en:"Is Disabled",zh_TW:"\u662F\u5426\u505C\u7528"},translate_selected:{zh:"\u662F\u5426\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"If translate selected",zh_TW:"\u662F\u5426\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},use_batch_fetch:{zh:"\u662F\u5426\u805A\u5408\u53D1\u9001\u7FFB\u8BD1\u8BF7\u6C42",en:"Whether to aggregate and send translation requests",zh_TW:"\u662F\u5426\u805A\u5408\u767C\u9001\u7FFB\u8B6F\u8ACB\u6C42"},batch_interval:{zh:"\u805A\u5408\u8BF7\u6C42\u7B49\u5F85\u65F6\u95F4(100-10000)",en:"Aggregation request waiting time (100-10000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u7B49\u5F85\u6642\u9593(100-10000)"},batch_size:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6BB5\u843D\u6570(1-100)",en:"Maximum number of paragraphs in an aggregation request (1-100)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6BB5\u843D\u6578(1-100)"},batch_length:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6587\u672C\u957F\u5EA6(1000-100000)",en:"Maximum text length for aggregation requests (1000-100000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6587\u5B57\u9577\u5EA6(1000-100000)"},use_context:{zh:"\u662F\u5426\u542F\u7528\u667A\u80FD\u4E0A\u4E0B\u6587",en:"Whether to enable AI context",zh_TW:"\u662F\u5426\u555F\u7528\u667A\u6167\u4E0A\u4E0B\u6587"},context_size:{zh:"\u4E0A\u4E0B\u6587\u4F1A\u8BDD\u6570\u91CF(1-20)",en:"Number of context sessions(1-20)",zh_TW:"\u4E0A\u4E0B\u6587\u6703\u8A71\u6578\u91CF(1-20)"},auto_scan_page:{zh:"\u81EA\u52A8\u626B\u63CF\u9875\u9762",en:"Auto scan page",zh_TW:"\u81EA\u52D5\u6383\u63CF\u9801\u9762"},has_rich_text:{zh:"\u542F\u7528\u5BCC\u6587\u672C\u7FFB\u8BD1",en:"Enable rich text translation",zh_TW:"\u555F\u7528\u5BCC\u6587\u672C\u7FFB\u8B6F"},has_shadowroot:{zh:"\u626B\u63CFShadowroot",en:"Scan Shadowroot",zh_TW:"\u6383\u63CFShadowroot"},mousehover_translate:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover Translation",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},use_mousehover_translation:{zh:"\u542F\u7528\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Enable mouseover translation",zh_TW:"\u555F\u7528\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},selected_translation_alert:{zh:"\u5212\u8BCD\u7FFB\u8BD1\u7684\u5F00\u542F\u548C\u5173\u95ED\u8BF7\u5230\u201C\u89C4\u5219\u8BBE\u7F6E\u201D\u91CC\u9762\u8BBE\u7F6E\u3002",en:"To turn selected translation on or off, please go to \"Rule Settings\".",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F\u7684\u958B\u555F\u548C\u95DC\u9589\u8ACB\u5230\u300C\u898F\u5247\u8A2D\u5B9A\u300D\u88E1\u9762\u8A2D\u5B9A\u3002"},mousehover_key_help:{zh:"\u5F53\u5FEB\u6377\u952E\u7F6E\u7A7A\u65F6\u8868\u793A\u9F20\u6807\u60AC\u505C\u76F4\u63A5\u7FFB\u8BD1",en:"When the shortcut key is empty, it means that the mouse hovers to translate directly",zh_TW:"\u7576\u5FEB\u6377\u9375\u7F6E\u7A7A\u6642\u8868\u793A\u6ED1\u9F20\u61F8\u505C\u76F4\u63A5\u7FFB\u8B6F"},autoscan_alt:{zh:"\u81EA\u52A8\u626B\u63CF",en:"Auto Scan",zh_TW:"\u81EA\u52D5\u6383\u63CF"},shadowroot_alt:{zh:"ShadowRoot",en:"ShadowRoot",zh_TW:"ShadowRoot"},richtext_alt:{zh:"\u4FDD\u7559\u5BCC\u6587\u672C",en:"Rich Text",zh_TW:"\u4FDD\u7559\u5BCC\u6587\u672C"},transonly_alt:{zh:"\u9690\u85CF\u539F\u6587",en:"Hide Original",zh_TW:"\u96B1\u85CF\u539F\u6587"},confirm_title:{zh:"\u786E\u8BA4",en:"Confirm",zh_TW:"\u78BA\u8A8D"},confirm_message:{zh:"\u786E\u5B9A\u64CD\u4F5C\u5417\uFF1F",en:"Are you sure you want to proceed?",zh_TW:"\u78BA\u5B9A\u64CD\u4F5C\u55CE\uFF1F"},confirm_action:{zh:"\u786E\u5B9A",en:"Confirm",zh_TW:"\u78BA\u5B9A"},cancel_action:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},pls_press_shortcut:{zh:"\u8BF7\u6309\u4E0B\u5FEB\u6377\u952E\u7EC4\u5408",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},load_setting_err:{zh:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},translation_style:{zh:"\u7FFB\u8BD1\u98CE\u683C",en:"Translation style",zh_TW:"\u7FFB\u8B6F\u98A8\u683C"},placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},tag_name:{zh:"\u5360\u4F4D\u6807\u7B7E\u540D",en:"Placeholder tag name",zh_TW:"\u4F54\u4F4D\u6A19\u540D"},system_prompt_helper:{zh:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9ED8\u8BA4Prompt\u7684\u60C5\u51B5\u4E0B\uFF0C\u8BF7\u52FF\u968F\u610F\u4FEE\u6539\uFF0C\u5426\u5219\u53EF\u80FD\u65E0\u6CD5\u5DE5\u4F5C\u3002",en:"Do not modify the default prompt without fully understanding it, otherwise it may not work.",zh_TW:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9810\u8A2DPrompt\u7684\u60C5\u6CC1\u4E0B\uFF0C\u8ACB\u52FF\u96A8\u610F\u4FEE\u6539\uFF0C\u5426\u5247\u53EF\u80FD\u7121\u6CD5\u904B\u4F5C\u3002"},if_pre_init:{zh:"\u662F\u5426\u9884\u521D\u59CB\u5316",en:"Whether to pre-initialize",zh_TW:"\u662F\u5426\u9810\u521D\u59CB\u5316"},export_old:{zh:"\u5BFC\u51FA\u65E7\u7248",en:"Export old version",zh_TW:"\u532F\u51FA\u820A\u7248"},favorite_words_helper:{zh:"\u5BFC\u5165\u8BCD\u6C47\u8BF7\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u4E2A\u5355\u8BCD\u3002",en:"To import vocabulary, please use a txt file with one word per line.",zh_TW:"\u532F\u5165\u8A5E\u5F59\u8ACB\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u500B\u55AE\u5B57\u3002"},btn_tip_click_away:{zh:"\u5931\u7126\u9690\u85CF/\u663E\u793A",en:"Loss of focus hide/show",zh_TW:"\u5931\u7126\u96B1\u85CF/\u986F\u793A"},btn_tip_follow_selection:{zh:"\u8DDF\u968F/\u56FA\u5B9A\u6A21\u5F0F",en:"Follow/Fixed Mode",zh_TW:"\u8DDF\u96A8/\u56FA\u5B9A\u6A21\u5F0F"},btn_tip_simple_style:{zh:"\u8FF7\u4F60/\u5E38\u89C4\u6A21\u5F0F",en:"Mini/Regular Mode",zh_TW:"\u8FF7\u4F60/\u5E38\u898F\u6A21\u5F0F"},api_placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},api_placetag:{zh:"\u5360\u4F4D\u6807\u7B7E",en:"Placeholder tags",zh_TW:"\u4F54\u4F4D\u6A19"},detected_lang:{zh:"\u8BED\u8A00\u68C0\u6D4B",en:"Language detection",zh_TW:"\u8A9E\u8A00\u5075\u6E2C"},detected_result:{zh:"\u68C0\u6D4B\u7ED3\u679C",en:"Detect result",zh_TW:"\u6AA2\u6E2C\u7D50\u679C"},subtitle_translate:{zh:"\u5B57\u5E55\u7FFB\u8BD1",en:"Subtitle translate",zh_TW:"\u5B57\u5E55\u7FFB\u8B6F"},toggle_subtitle_translate:{zh:"\u542F\u7528\u5B57\u5E55\u7FFB\u8BD1",en:"Enable subtitle translation",zh_TW:"\u555F\u7528\u5B57\u5E55\u7FFB\u8B6F"},is_bilingual_view:{zh:"\u53CC\u8BED\u663E\u793A",en:"Enable bilingual display",zh_TW:"\u96D9\u8A9E\u986F\u793A"},is_skip_ad:{zh:"\u662F\u5426\u5FEB\u8FDB\u5E7F\u544A",en:"Should I fast forward to the ad?",zh_TW:"\u662F\u5426\u5FEB\u8F49\u5EE3\u544A"},background_styles:{zh:"\u80CC\u666F\u6837\u5F0F",en:"DBackground Style",zh_TW:"\u80CC\u666F\u6A23\u5F0F"},origin_styles:{zh:"\u539F\u6587\u6837\u5F0F",en:"Original style",zh_TW:"\u539F\u6587\u6A23\u5F0F"},translation_styles:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Translation style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},ai_segmentation:{zh:"AI\u667A\u80FD\u65AD\u53E5",en:"AI intelligent punctuation",zh_TW:"AI\u667A\u6167\u65B7\u53E5"},ai_chunk_length:{zh:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)",en:"AI processing chunk length(200-20000)",zh_TW:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)"},subtitle_helper_1:{zh:"1\u3001\u76EE\u524D\u4EC5\u652F\u6301Youtube\u684C\u9762\u7F51\u7AD9\u3002",en:"1. Currently only supports Youtube desktop website.",zh_TW:"1.\u76EE\u524D\u50C5\u652F\u63F4Youtube\u684C\u9762\u7DB2\u7AD9\uFF0C\u4E14\u50C5\u652F\u63F4\u700F\u89BD\u5668\u64F4\u5145\u529F\u80FD\u3002"},subtitle_helper_2:{zh:"2\u3001\u63D2\u4EF6\u5185\u7F6E\u57FA\u7840\u7684\u5B57\u5E55\u5408\u5E76\u3001\u65AD\u53E5\u7B97\u6CD5\uFF0C\u53EF\u6EE1\u8DB3\u5927\u90E8\u5206\u60C5\u51B5\u3002",en:"2. The plug-in has built-in basic subtitle merging and sentence segmentation algorithms, which can meet most situations.",zh_TW:"2.\u63D2\u4EF6\u5167\u5EFA\u57FA\u790E\u7684\u5B57\u5E55\u5408\u4F75\u3001\u65B7\u53E5\u6F14\u7B97\u6CD5\uFF0C\u53EF\u6EFF\u8DB3\u5927\u90E8\u5206\u60C5\u6CC1\u3002"},subtitle_helper_3:{zh:"3\u3001\u4EA6\u53EF\u4EE5\u542F\u7528AI\u667A\u80FD\u65AD\u53E5\uFF0C\u4F46\u9700\u8003\u8651\u5207\u5272\u957F\u5EA6\u53CAAI\u63A5\u53E3\u80FD\u529B\uFF0C\u53EF\u80FD\u5904\u7406\u65F6\u95F4\u4F1A\u5F88\u957F\uFF0C\u751A\u81F3\u5904\u7406\u5931\u8D25\uFF0C\u5BFC\u81F4\u65E0\u6CD5\u770B\u5230\u5B57\u5E55\u3002",en:"3. You can also enable AI intelligent segmentation, but you need to consider the segmentation length and AI interface capabilities. The processing time may be very long or even fail, resulting in the inability to see subtitles.",zh_TW:"3.\u4EA6\u53EF\u555F\u7528AI\u667A\u80FD\u65B7\u53E5\uFF0C\u4F46\u9700\u8003\u616E\u5207\u5272\u9577\u5EA6\u53CAAI\u4ECB\u9762\u80FD\u529B\uFF0C\u53EF\u80FD\u8655\u7406\u6642\u9593\u6703\u5F88\u9577\uFF0C\u751A\u81F3\u8655\u7406\u5931\u6557\uFF0C\u5C0E\u81F4\u7121\u6CD5\u770B\u5230\u5B57\u5E55\u3002"},default_styles_example:{zh:"\u9ED8\u8BA4\u6837\u5F0F\u53C2\u8003\uFF1A",en:"Default styles reference:",zh_TW:"\u8A8D\u6A23\u5F0F\u53C3\u8003\uFF1A"},subtitle_load_succeed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01",en:"Bilingual subtitles loaded successfully!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01"},subtitle_load_failed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01",en:"Failed to load bilingual subtitles!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01"},try_get_subtitle_data:{zh:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019...",en:"Trying to get subtitle data, please wait...",zh_TW:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019..."},subtitle_data_processing:{zh:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D...",en:"Subtitle data processing...",zh_TW:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D..."},starting_to_process_subtitle:{zh:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E...",en:"Starting to process subtitle data...",zh_TW:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E..."},subtitle_data_is_ready:{zh:"\u5B57\u5E55\u6570\u636E\u5DF2\u51C6\u5907\u5C31\u7EEA\uFF0C\u8BF7\u70B9\u51FBKT\u6309\u94AE\u52A0\u8F7D",en:"The subtitle data is ready, please click the KT button to load it",zh_TW:"\u5B57\u5E55\u8CC7\u6599\u5DF2\u6E96\u5099\u5C31\u7DD2\uFF0C\u8ACB\u9EDE\u64CAKT\u6309\u9215\u52A0\u8F09"},log_level:{zh:"\u65E5\u5FD7\u7EA7\u522B",en:"Log Level",zh_TW:"\u65E5\u8A8C\u7B49\u7D1A"},goto_custom_api_example:{zh:"\u70B9\u51FB\u67E5\u770B\u3010\u81EA\u5B9A\u4E49\u63A5\u53E3\u793A\u4F8B\u3011",en:"Click to view [Custom Interface Example]",zh_TW:"\u9EDE\u9078\u67E5\u770B\u3010\u81EA\u8A02\u4ECB\u9762\u7BC4\u4F8B\u3011"},split_paragraph:{zh:"\u5207\u5206\u957F\u6BB5\u843D",en:"Split long paragraph",zh_TW:"\u5207\u5206\u9577\u6BB5\u843D"},split_length:{zh:"\u5207\u5206\u957F\u5EA6 (0-10000)",en:"Segmentation length(0-10000)",zh_TW:"\u5207\u5206\u9577\u5EA6(0-10000)"},highlight_words:{zh:"\u9AD8\u4EAE\u6536\u85CF\u8BCD\u6C47",en:"Highlight favorite words",zh_TW:"\u9AD8\u4EAE\u6536\u85CF\u8A5E\u5F59"},split_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},split_textlength:{zh:"\u6309\u7167\u957F\u5EA6\u5207\u5206",en:"Split by length",zh_TW:"\u4F9D\u9577\u5EA6\u5207\u5206"},split_punctuation:{zh:"\u6309\u7167\u53E5\u5B50\u5207\u5206",en:"Split by sentence",zh_TW:"\u6309\u7167\u53E5\u5B50\u5207\u5206"},highlight_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},highlight_beforetrans:{zh:"\u7FFB\u8BD1\u524D\u9AD8\u4EAE",en:"Highlight before translation",zh_TW:"\u7FFB\u8B6F\u524D\u9AD8\u4EAE"},highlight_aftertrans:{zh:"\u7FFB\u8BD1\u540E\u9AD8\u4EAE",en:"Highlight after translation",zh_TW:"\u7FFB\u8B6F\u5F8C\u9AD8\u4EAE"},pagescroll_root_margin:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u63D0\u524D\u89E6\u53D1 (0-10000px)",en:"Early triggering of scroll loading (0-10000px)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u63D0\u524D\u89F8\u767C (0-10000px)"}};const newI18n=lang=>key=>{var _I18N$key;return((_I18N$key=I18N[key])===null||_I18N$key===void 0?void 0:_I18N$key[lang])||"";}; ;// CONCATENATED MODULE: ./src/config/storage.js const KV_RULES_KEY="kiss-rules_v".concat(APP_VERSION[0],".json");const storage_KV_WORDS_KEY="kiss-words.json";const storage_KV_RULES_SHARE_KEY="kiss-rules-share_v".concat(APP_VERSION[0],".json");const storage_KV_SETTING_KEY="kiss-setting_v".concat(APP_VERSION[0],".json");const KV_SALT_SYNC="KISS-Translator-SYNC";const storage_KV_SALT_SHARE="KISS-Translator-SHARE";const STOKEY_MSAUTH="".concat(APP_NAME,"_msauth");const storage_STOKEY_BDAUTH="".concat(APP_NAME,"_bdauth");const storage_STOKEY_SETTING_OLD="".concat(APP_NAME,"_setting");const storage_STOKEY_RULES_OLD="".concat(APP_NAME,"_rules");const storage_STOKEY_SETTING="".concat(APP_NAME,"_setting_v").concat(APP_VERSION[0]);const storage_STOKEY_RULES="".concat(APP_NAME,"_rules_v").concat(APP_VERSION[0]);const storage_STOKEY_WORDS="".concat(APP_NAME,"_words");const storage_STOKEY_SYNC="".concat(APP_NAME,"_sync");const storage_STOKEY_FAB="".concat(APP_NAME,"_fab");const STOKEY_TRANBOX="".concat(APP_NAME,"_tranbox");const storage_STOKEY_RULESCACHE_PREFIX="".concat(APP_NAME,"_rulescache_");const CACHE_NAME="".concat(APP_NAME,"_cache");const DEFAULT_CACHE_TIMEOUT=3600*24*7;// 缓存超时时间(7天) ;// CONCATENATED MODULE: ./src/config/url.js @@ -29981,7 +29985,7 @@ return putHttpCache({input,init,data});}; * @param {*} init * @returns */const fetchGM=async function(input){let{method="GET",headers,body,timeout}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return new Promise((resolve,reject)=>{GM.xmlHttpRequest({method,url:input,headers,data:body,// withCredentials: true, -timeout,onload:_ref=>{let{response,responseHeaders,status,statusText}=_ref;const headers={};responseHeaders.split("\n").forEach(line=>{const[name,value]=line.split(":").map(item=>item.trim());if(name&&value){headers[name]=value;}});resolve({body:response,headers,status,statusText});},onerror:reject});});};/** +timeout,onload:_ref=>{let{response,responseHeaders,status,statusText}=_ref;const headers={};responseHeaders.split("\n").forEach(line=>{const[name,value]=line.split(":").map(item=>item.trim());if(name&&value){headers[name]=value;}});resolve({body:response,headers,status,statusText});},onerror:reject,onabort:()=>{reject(new Error("GM request onabort."));},ontimeout:()=>{reject(new Error("GM request timeout."));}});});};/** * 发起请求 * @param {*} input * @param {*} init @@ -30012,7 +30016,7 @@ return fnPolyfill({fn:fetchHandle,input,init,opts});}; const MSG_GM_xmlHttpRequest="xmlHttpRequest";const MSG_GM_setValue="setValue";const MSG_GM_getValue="getValue";const MSG_GM_deleteValue="deleteValue";const MSG_GM_info="info";/** * 注入页面的脚本,请求并接受GM接口信息 * @param {*} param0 - */const injectScript=ping=>{window.APP_INFO={name:"KISS Translator",version:"2.0.4",eventName:ping};};/** + */const injectScript=ping=>{window.APP_INFO={name:"KISS Translator",version:"2.0.5",eventName:ping};};/** * 适配GM脚本 */const adaptScript=ping=>{const promiseGM=function(action,args){let timeout=arguments.length>2&&arguments[2]!==undefined?arguments[2]:5000;return new Promise((resolve,reject)=>{const pong=genEventName();const handleEvent=e=>{window.removeEventListener(pong,handleEvent);const{data,error}=e.detail;if(error){reject(new Error(error));}else{resolve(data);}};window.addEventListener(pong,handleEvent);window.dispatchEvent(new CustomEvent(ping,{detail:{action,args,pong}}));setTimeout(()=>{window.removeEventListener(pong,handleEvent);reject(new Error("timeout"));},timeout);});};window.KISS_GM={fetch:(input,init)=>promiseGM(MSG_GM_xmlHttpRequest,{input,init}),setValue:(key,val)=>promiseGM(MSG_GM_setValue,{key,val}),getValue:key=>promiseGM(MSG_GM_getValue,{key}),deleteValue:key=>promiseGM(MSG_GM_deleteValue,{key}),getInfo:async()=>{if(!window.GM_info){window.GM_info=await promiseGM(MSG_GM_info);}return window.GM_info;}};};/** * 监听并回应页面对GM接口的请求 @@ -30562,22 +30566,14 @@ const interpreter=new (sval_default())({// ECMA Version of the code ecmaVer:"latest",// Code source type // "script" or "module" sourceType:"script",// Whether the code runs in a sandbox -sandBox:true});/* harmony default export */ const libs_interpreter = (interpreter); +sandBox:true}); ;// CONCATENATED MODULE: ./src/apis/history.js const historyMap=new Map();const MsgHistory=function(){let maxSize=arguments.length>0&&arguments[0]!==undefined?arguments[0]:DEFAULT_CONTEXT_SIZE;const messages=[];const add=function(){for(var _len=arguments.length,msgs=new Array(_len),_key=0;_key<_len;_key++){msgs[_key]=arguments[_key];}messages.push(...msgs.filter(Boolean));const extra=messages.length-maxSize;if(extra>0){messages.splice(0,extra);}};const getAll=()=>{return[...messages];};const clear=()=>{messages.length=0;};return{add,getAll,clear};};const getMsgHistory=(apiSlug,maxSize)=>{if(historyMap.has(apiSlug)){return historyMap.get(apiSlug);}const msgHistory=MsgHistory(maxSize);historyMap.set(apiSlug,msgHistory);return msgHistory;}; ;// CONCATENATED MODULE: ./src/subtitle/vtt.js function millisecondsStringToNumber(msString){const cleanString=msString.trim();const milliseconds=parseInt(cleanString,10);if(isNaN(milliseconds)){return 0;}return milliseconds;}function parseBilingualVtt(vttText){const cleanText=vttText.replace(/^\uFEFF/,"").trim();const cues=cleanText.split(/\n\n+/);const result=[];for(const cue of cues){if(!cue.includes("-->"))continue;const lines=cue.split("\n");const timestampLineIndex=lines.findIndex(line=>line.includes("-->"));if(timestampLineIndex===-1)continue;const[startTimeString,endTimeString]=lines[timestampLineIndex].split(" --> ");const textLines=lines.slice(timestampLineIndex+1);if(startTimeString&&endTimeString&&textLines.length>0){const originalText=textLines[0].trim();const translatedText=(textLines[1]||"").trim();result.push({start:millisecondsStringToNumber(startTimeString),end:millisecondsStringToNumber(endTimeString),text:originalText,translation:translatedText});}}return result;} ;// CONCATENATED MODULE: ./src/apis/trans.js const keyMap=new Map();const urlMap=new Map();// 轮询key/url -const keyPick=function(apiSlug){var _cacheMap$get;let key=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";let cacheMap=arguments.length>2?arguments[2]:undefined;const keys=key.split(/\n|,/).map(item=>item.trim()).filter(Boolean);if(keys.length===0){return"";}const preIndex=(_cacheMap$get=cacheMap.get(apiSlug))!==null&&_cacheMap$get!==void 0?_cacheMap$get:-1;const curIndex=(preIndex+1)%keys.length;cacheMap.set(apiSlug,curIndex);return keys[curIndex];};const genSystemPrompt=_ref=>{let{systemPrompt,from,to}=_ref;return systemPrompt.replaceAll(INPUT_PLACE_FROM,from).replaceAll(INPUT_PLACE_TO,to);};const genUserPrompt=_ref2=>{let{// userPrompt, -tone,glossary={},// from, -to,texts,docInfo}=_ref2;const prompt=JSON.stringify({targetLanguage:to,title:docInfo.title,description:docInfo.description,segments:texts.map((text,i)=>({id:i,text})),glossary,tone});// if (userPrompt.includes(INPUT_PLACE_TEXT)) { -// return userPrompt -// .replaceAll(INPUT_PLACE_FROM, from) -// .replaceAll(INPUT_PLACE_TO, to) -// .replaceAll(INPUT_PLACE_TEXT, prompt); -// } -return prompt;};const parseAIRes=raw=>{if(!raw){return[];}try{const jsonString=extractJson(raw);if(!jsonString)return[];const data=JSON.parse(jsonString);if(Array.isArray(data.translations)){// todo: 考虑序号id可能会打乱 +const keyPick=function(apiSlug){var _cacheMap$get;let key=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";let cacheMap=arguments.length>2?arguments[2]:undefined;const keys=key.split(/\n|,/).map(item=>item.trim()).filter(Boolean);if(keys.length===0){return"";}const preIndex=(_cacheMap$get=cacheMap.get(apiSlug))!==null&&_cacheMap$get!==void 0?_cacheMap$get:-1;const curIndex=(preIndex+1)%keys.length;cacheMap.set(apiSlug,curIndex);return keys[curIndex];};const genSystemPrompt=_ref=>{let{systemPrompt,from,to}=_ref;return systemPrompt.replaceAll(INPUT_PLACE_FROM,from).replaceAll(INPUT_PLACE_TO,to);};const genUserPrompt=_ref2=>{let{nobatchUserPrompt,useBatchFetch,tone,glossary={},from,to,texts,docInfo}=_ref2;if(useBatchFetch){return JSON.stringify({targetLanguage:to,title:docInfo.title,description:docInfo.description,segments:texts.map((text,i)=>({id:i,text})),glossary,tone});}return nobatchUserPrompt.replaceAll(INPUT_PLACE_FROM,from).replaceAll(INPUT_PLACE_TO,to).replaceAll(INPUT_PLACE_TEXT,texts[0]);};const parseAIRes=function(raw){let useBatchFetch=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(!raw){return[];}if(!useBatchFetch){return[[raw]];}try{const jsonString=extractJson(raw);if(!jsonString)return[];const data=JSON.parse(jsonString);if(Array.isArray(data.translations)){// todo: 考虑序号id可能会打乱 return data.translations.map(item=>{var _item$text,_item$sourceLanguage;return[(_item$text=item===null||item===void 0?void 0:item.text)!==null&&_item$text!==void 0?_item$text:"",(_item$sourceLanguage=item===null||item===void 0?void 0:item.sourceLanguage)!==null&&_item$sourceLanguage!==void 0?_item$sourceLanguage:""];});}}catch(err){log_kissLog("parseAIRes",err);}return[];};const parseSTRes=raw=>{if(!raw){return[];}try{// const jsonString = extractJson(raw); // const data = JSON.parse(jsonString); const data=parseBilingualVtt(raw);if(Array.isArray(data)){return data;}}catch(err){log_kissLog("parseAIRes: subtitle",err);}return[];};const genGoogle=_ref3=>{let{texts,from,to,url,key}=_ref3;const params=query_string.stringify({client:"gtx",dt:"t",dj:1,ie:"UTF-8",sl:from,tl:to,q:texts.join(" ")});url="".concat(url,"?").concat(params);const headers={"Content-type":"application/json"};if(key){headers.Authorization="Bearer ".concat(key);}return{url,headers,method:"GET"};};const genGoogle2=_ref4=>{let{texts,from,to,url,key}=_ref4;const body=[[texts,from,to],"wt_lib"];const headers={"Content-Type":"application/json+protobuf","X-Goog-API-Key":key};return{url,body,headers};};const genMicrosoft=_ref5=>{let{texts,from,to,token}=_ref5;const params=query_string.stringify({from,to,"api-version":"3.0"});const url="https://api-edge.cognitive.microsofttranslator.com/translate?".concat(params);const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(token)};const body=texts.map(text=>({Text:text}));return{url,body,headers};};const genAzureAI=_ref6=>{let{texts,from,to,url,key,region}=_ref6;const params=query_string.stringify({from,to});url=url.endsWith("&")?"".concat(url).concat(params):"".concat(url,"&").concat(params);const headers={"Content-type":"application/json","Ocp-Apim-Subscription-Key":key,"Ocp-Apim-Subscription-Region":region};const body=texts.map(text=>({Text:text}));return{url,body,headers};};const genDeepl=_ref7=>{let{texts,from,to,url,key}=_ref7;const body={text:texts,target_lang:to,source_lang:from// split_sentences: "0", @@ -30593,20 +30589,30 @@ contents:[{role:"model",parts:[{text:systemPrompt}]},...hisMsgs,userMsg],generat },// thinkingConfig: { // thinkingBudget: 0, // }, -safetySettings:[{category:"HARM_CATEGORY_HARASSMENT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_HATE_SPEECH",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_SEXUALLY_EXPLICIT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_DANGEROUS_CONTENT",threshold:"BLOCK_NONE"}]};const headers={"Content-type":"application/json"};return{url,body,headers,userMsg};};const genGemini2=_ref14=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref14;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genClaude=_ref15=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref15;const userMsg={role:"user",content:userPrompt};const body={model,system:systemPrompt,messages:[...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json","anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true","x-api-key":key};return{url,body,headers,userMsg};};const genOpenRouter=_ref16=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref16;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genOllama=_ref17=>{let{think,url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref17;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens,think,stream:false};const headers={"Content-type":"application/json"};if(key){headers.Authorization="Bearer ".concat(key);}return{url,body,headers,userMsg};};const genCloudflareAI=_ref18=>{let{texts,from,to,url,key}=_ref18;const body={text:texts.join(" "),source_lang:from,target_lang:to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genCustom=_ref19=>{let{texts,from,to,url,key}=_ref19;const body={texts,from,to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genReqFuncs={[OPT_TRANS_GOOGLE]:genGoogle,[OPT_TRANS_GOOGLE_2]:genGoogle2,[OPT_TRANS_MICROSOFT]:genMicrosoft,[OPT_TRANS_AZUREAI]:genAzureAI,[OPT_TRANS_DEEPL]:genDeepl,[OPT_TRANS_DEEPLFREE]:genDeeplFree,[OPT_TRANS_DEEPLX]:genDeeplX,[OPT_TRANS_NIUTRANS]:genNiuTrans,[OPT_TRANS_BAIDU]:genBaidu,[OPT_TRANS_TENCENT]:genTencent,[OPT_TRANS_VOLCENGINE]:genVolcengine,[OPT_TRANS_OPENAI]:genOpenAI,[OPT_TRANS_GEMINI]:genGemini,[OPT_TRANS_GEMINI_2]:genGemini2,[OPT_TRANS_CLAUDE]:genClaude,[OPT_TRANS_CLOUDFLAREAI]:genCloudflareAI,[OPT_TRANS_OLLAMA]:genOllama,[OPT_TRANS_OPENROUTER]:genOpenRouter,[OPT_TRANS_CUSTOMIZE]:genCustom};const genInit=_ref20=>{let{url="",body=null,headers={},userMsg=null,method="POST"}=_ref20;if(!url){throw new Error("genInit: url is empty");}const init={method,headers};if(method!=="GET"&&method!=="HEAD"&&body){var _body$params;let payload=JSON.stringify(body);const id=body===null||body===void 0?void 0:(_body$params=body.params)===null||_body$params===void 0?void 0:_body$params.id;if(id){payload=payload.replace('method":"',(id+3)%13===0||(id+5)%29===0?'method" : "':'method": "');}Object.assign(init,{body:payload});}return[url,init,userMsg];};/** +safetySettings:[{category:"HARM_CATEGORY_HARASSMENT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_HATE_SPEECH",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_SEXUALLY_EXPLICIT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_DANGEROUS_CONTENT",threshold:"BLOCK_NONE"}]};const headers={"Content-type":"application/json"};return{url,body,headers,userMsg};};const genGemini2=_ref14=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref14;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genClaude=_ref15=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref15;const userMsg={role:"user",content:userPrompt};const body={model,system:systemPrompt,messages:[...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json","anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true","x-api-key":key};return{url,body,headers,userMsg};};const genOpenRouter=_ref16=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref16;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genOllama=_ref17=>{let{// think, +url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref17;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens,// think, +stream:false};const headers={"Content-type":"application/json"};if(key){headers.Authorization="Bearer ".concat(key);}return{url,body,headers,userMsg};};const genCloudflareAI=_ref18=>{let{texts,from,to,url,key}=_ref18;const body={text:texts.join(" "),source_lang:from,target_lang:to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genCustom=_ref19=>{let{texts,from,to,url,key}=_ref19;const body={texts,from,to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genReqFuncs={[OPT_TRANS_GOOGLE]:genGoogle,[OPT_TRANS_GOOGLE_2]:genGoogle2,[OPT_TRANS_MICROSOFT]:genMicrosoft,[OPT_TRANS_AZUREAI]:genAzureAI,[OPT_TRANS_DEEPL]:genDeepl,[OPT_TRANS_DEEPLFREE]:genDeeplFree,[OPT_TRANS_DEEPLX]:genDeeplX,[OPT_TRANS_NIUTRANS]:genNiuTrans,[OPT_TRANS_BAIDU]:genBaidu,[OPT_TRANS_TENCENT]:genTencent,[OPT_TRANS_VOLCENGINE]:genVolcengine,[OPT_TRANS_OPENAI]:genOpenAI,[OPT_TRANS_GEMINI]:genGemini,[OPT_TRANS_GEMINI_2]:genGemini2,[OPT_TRANS_CLAUDE]:genClaude,[OPT_TRANS_CLOUDFLAREAI]:genCloudflareAI,[OPT_TRANS_OLLAMA]:genOllama,[OPT_TRANS_OPENROUTER]:genOpenRouter,[OPT_TRANS_CUSTOMIZE]:genCustom};const genInit=_ref20=>{let{url="",body=null,headers={},userMsg=null,method="POST"}=_ref20;if(!url){throw new Error("genInit: url is empty");}const init={method,headers};if(method!=="GET"&&method!=="HEAD"&&body){var _body$params;let payload=JSON.stringify(body);const id=body===null||body===void 0?void 0:(_body$params=body.params)===null||_body$params===void 0?void 0:_body$params.id;if(id){payload=payload.replace('method":"',(id+3)%13===0||(id+5)%29===0?'method" : "':'method": "');}Object.assign(init,{body:payload});}return[url,init,userMsg];};/** * 构造翻译接口请求参数 * @param {*} * @returns - */const genTransReq=async _ref21=>{let{reqHook,...args}=_ref21;const{apiType,apiSlug,key,systemPrompt,userPrompt,from,to,texts,docInfo,glossary,customHeader,customBody,events}=args;if(API_SPE_TYPES.mulkeys.has(apiType)){args.key=keyPick(apiSlug,key,keyMap);}if(apiType===OPT_TRANS_DEEPLX){args.url=keyPick(apiSlug,args.url,urlMap);}if(API_SPE_TYPES.ai.has(apiType)){args.systemPrompt=genSystemPrompt({systemPrompt,from,to});args.userPrompt=!!events?JSON.stringify(events):genUserPrompt({userPrompt,from,to,texts,docInfo,glossary});}const{url="",body=null,headers={},userMsg=null,method="POST"}=genReqFuncs[apiType](args);// 合并用户自定义headers和body + */const genTransReq=async _ref21=>{let{reqHook,...args}=_ref21;const{apiType,apiSlug,key,systemPrompt,// userPrompt, +nobatchPrompt=defaultNobatchPrompt,nobatchUserPrompt=defaultNobatchUserPrompt,useBatchFetch,from,to,texts,docInfo,glossary,customHeader,customBody,events}=args;if(API_SPE_TYPES.mulkeys.has(apiType)){args.key=keyPick(apiSlug,key,keyMap);}if(apiType===OPT_TRANS_DEEPLX){args.url=keyPick(apiSlug,args.url,urlMap);}if(API_SPE_TYPES.ai.has(apiType)){args.systemPrompt=genSystemPrompt({systemPrompt:useBatchFetch?systemPrompt:nobatchPrompt,from,to});args.userPrompt=!!events?JSON.stringify(events):genUserPrompt({nobatchUserPrompt,useBatchFetch,from,to,texts,docInfo,glossary});}const{url="",body=null,headers={},userMsg=null,method="POST"}=genReqFuncs[apiType](args);// 合并用户自定义headers和body if(customHeader!==null&&customHeader!==void 0&&customHeader.trim()){Object.assign(headers,parseJsonObj(customHeader));}if(customBody!==null&&customBody!==void 0&&customBody.trim()){Object.assign(body,parseJsonObj(customBody));}// 执行 request hook -if(reqHook!==null&&reqHook!==void 0&&reqHook.trim()&&!events){try{libs_interpreter.run("exports.reqHook = ".concat(reqHook));const hookResult=await libs_interpreter.exports.reqHook({...args,defaultSystemPrompt: defaultSystemPrompt,defaultSubtitlePrompt: defaultSubtitlePrompt},{url,body,headers,userMsg,method});if(hookResult&&hookResult.url){return genInit(hookResult);}}catch(err){log_kissLog("run req hook",err);}}return genInit({url,body,headers,userMsg,method});};/** +if(reqHook!==null&&reqHook!==void 0&&reqHook.trim()&&!events){try{interpreter.run("exports.reqHook = ".concat(reqHook));const hookResult=await interpreter.exports.reqHook({...args,defaultSystemPrompt: defaultSystemPrompt,defaultSubtitlePrompt: defaultSubtitlePrompt},{url,body,headers,userMsg,method});if(hookResult&&hookResult.url){return genInit(hookResult);}}catch(err){log_kissLog("run req hook",err);}}return genInit({url,body,headers,userMsg,method});};/** * 解析翻译接口返回数据 * @param {*} res * @param {*} param3 * @returns - */const parseTransRes=async(res,_ref22)=>{var _res$sentences,_res$,_res$translations,_res$result,_res$result$texts,_res$result2,_res$auto_translation,_res$choices,_res$choices$,_res$choices$0$messag,_res$choices2,_res$choices2$,_res$choices2$$messag,_res$candidates,_res$candidates$,_res$candidates$0$con,_res$candidates2,_res$candidates2$,_res$candidates2$$con,_res$candidates2$$con2,_res$candidates2$$con3,_res$content,_res$content$0$text,_res$content2,_res$content2$,_res$result3,_res$choices3,_res$choices3$,_modelMsg2,_ref23,_res$translations2;let{texts,from,to,fromLang,toLang,langMap,resHook,thinkIgnore,history,userMsg,apiType}=_ref22;// 执行 response hook -if(resHook!==null&&resHook!==void 0&&resHook.trim()){try{libs_interpreter.run("exports.resHook = ".concat(resHook));const hookResult=await libs_interpreter.exports.resHook({apiType,userMsg,res,texts,from,to,fromLang,toLang,langMap,extractJson: extractJson,parseAIRes});if(hookResult&&Array.isArray(hookResult.translations)){if(history&&userMsg&&hookResult.modelMsg){history.add(userMsg,hookResult.modelMsg);}return hookResult.translations;}}catch(err){log_kissLog("run res hook",err);}}let modelMsg="";// todo: 根据结果抛出实际异常信息 -switch(apiType){case OPT_TRANS_GOOGLE:return[[res===null||res===void 0?void 0:(_res$sentences=res.sentences)===null||_res$sentences===void 0?void 0:_res$sentences.map(item=>item.trans).join(" "),res===null||res===void 0?void 0:res.src]];case OPT_TRANS_GOOGLE_2:return res===null||res===void 0?void 0:(_res$=res[0])===null||_res$===void 0?void 0:_res$.map((_,i)=>{var _res$2,_res$3;return[res===null||res===void 0?void 0:(_res$2=res[0])===null||_res$2===void 0?void 0:_res$2[i],res===null||res===void 0?void 0:(_res$3=res[1])===null||_res$3===void 0?void 0:_res$3[i]];});case OPT_TRANS_MICROSOFT:case OPT_TRANS_AZUREAI:return res===null||res===void 0?void 0:res.map(item=>{var _item$detectedLanguag;return[item.translations.map(item=>item.text).join(" "),(_item$detectedLanguag=item.detectedLanguage)===null||_item$detectedLanguag===void 0?void 0:_item$detectedLanguag.language];});case OPT_TRANS_DEEPL:return res===null||res===void 0?void 0:(_res$translations=res.translations)===null||_res$translations===void 0?void 0:_res$translations.map(item=>[item.text,item.detected_source_language]);case OPT_TRANS_DEEPLFREE:return[[res===null||res===void 0?void 0:(_res$result=res.result)===null||_res$result===void 0?void 0:(_res$result$texts=_res$result.texts)===null||_res$result$texts===void 0?void 0:_res$result$texts.map(item=>item.text).join(" "),res===null||res===void 0?void 0:(_res$result2=res.result)===null||_res$result2===void 0?void 0:_res$result2.lang]];case OPT_TRANS_DEEPLX:return[[res===null||res===void 0?void 0:res.data,res===null||res===void 0?void 0:res.source_lang]];case OPT_TRANS_NIUTRANS:const json=JSON.parse(res);if(json.error_msg){throw new Error(json.error_msg);}return[[json.tgt_text,json.from]];case OPT_TRANS_BAIDU:if(res.type===1){return[[Object.keys(JSON.parse(res.result).content[0].mean[0].cont)[0],res.from]];}else if(res.type===2){return[[res.data.map(item=>item.dst).join(" "),res.from]];}break;case OPT_TRANS_TENCENT:return res===null||res===void 0?void 0:(_res$auto_translation=res.auto_translation)===null||_res$auto_translation===void 0?void 0:_res$auto_translation.map(text=>[text,res===null||res===void 0?void 0:res.src_lang]);case OPT_TRANS_VOLCENGINE:return[[res===null||res===void 0?void 0:res.translation,res===null||res===void 0?void 0:res.detected_language]];case OPT_TRANS_OPENAI:case OPT_TRANS_GEMINI_2:case OPT_TRANS_OPENROUTER:modelMsg=res===null||res===void 0?void 0:(_res$choices=res.choices)===null||_res$choices===void 0?void 0:(_res$choices$=_res$choices[0])===null||_res$choices$===void 0?void 0:_res$choices$.message;if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_res$choices$0$messag=res===null||res===void 0?void 0:(_res$choices2=res.choices)===null||_res$choices2===void 0?void 0:(_res$choices2$=_res$choices2[0])===null||_res$choices2$===void 0?void 0:(_res$choices2$$messag=_res$choices2$.message)===null||_res$choices2$$messag===void 0?void 0:_res$choices2$$messag.content)!==null&&_res$choices$0$messag!==void 0?_res$choices$0$messag:"");case OPT_TRANS_GEMINI:modelMsg=res===null||res===void 0?void 0:(_res$candidates=res.candidates)===null||_res$candidates===void 0?void 0:(_res$candidates$=_res$candidates[0])===null||_res$candidates$===void 0?void 0:_res$candidates$.content;if(history&&userMsg&&modelMsg){history.add(userMsg,modelMsg);}return parseAIRes((_res$candidates$0$con=res===null||res===void 0?void 0:(_res$candidates2=res.candidates)===null||_res$candidates2===void 0?void 0:(_res$candidates2$=_res$candidates2[0])===null||_res$candidates2$===void 0?void 0:(_res$candidates2$$con=_res$candidates2$.content)===null||_res$candidates2$$con===void 0?void 0:(_res$candidates2$$con2=_res$candidates2$$con.parts)===null||_res$candidates2$$con2===void 0?void 0:(_res$candidates2$$con3=_res$candidates2$$con2[0])===null||_res$candidates2$$con3===void 0?void 0:_res$candidates2$$con3.text)!==null&&_res$candidates$0$con!==void 0?_res$candidates$0$con:"");case OPT_TRANS_CLAUDE:modelMsg={role:res===null||res===void 0?void 0:res.role,content:res===null||res===void 0?void 0:(_res$content=res.content)===null||_res$content===void 0?void 0:_res$content.text};if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_res$content$0$text=res===null||res===void 0?void 0:(_res$content2=res.content)===null||_res$content2===void 0?void 0:(_res$content2$=_res$content2[0])===null||_res$content2$===void 0?void 0:_res$content2$.text)!==null&&_res$content$0$text!==void 0?_res$content$0$text:"");case OPT_TRANS_CLOUDFLAREAI:return[[res===null||res===void 0?void 0:(_res$result3=res.result)===null||_res$result3===void 0?void 0:_res$result3.translated_text]];case OPT_TRANS_OLLAMA:modelMsg=res===null||res===void 0?void 0:(_res$choices3=res.choices)===null||_res$choices3===void 0?void 0:(_res$choices3$=_res$choices3[0])===null||_res$choices3$===void 0?void 0:_res$choices3$.message;const deepModels=thinkIgnore.split(",").filter(model=>model===null||model===void 0?void 0:model.trim());if(deepModels.some(model=>{var _res$model;return res===null||res===void 0?void 0:(_res$model=res.model)===null||_res$model===void 0?void 0:_res$model.startsWith(model);})){var _modelMsg;(_modelMsg=modelMsg)===null||_modelMsg===void 0?void 0:_modelMsg.content.replace(/[\s\S]*<\/think>/i,"");}if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_modelMsg2=modelMsg)===null||_modelMsg2===void 0?void 0:_modelMsg2.content);case OPT_TRANS_CUSTOMIZE:return(_ref23=(_res$translations2=res===null||res===void 0?void 0:res.translations)!==null&&_res$translations2!==void 0?_res$translations2:res)===null||_ref23===void 0?void 0:_ref23.map(item=>[item.text,item.src]);default:}throw new Error("parse translate result: apiType not matched",apiType);};/** + */const parseTransRes=async(res,_ref22)=>{var _res$sentences,_res$,_res$translations,_res$result,_res$result$texts,_res$result2,_res$auto_translation,_res$choices,_res$choices$,_modelMsg,_res$candidates,_res$candidates$,_modelMsg$parts$0$tex,_modelMsg2,_modelMsg2$parts,_modelMsg2$parts$,_res$content,_res$content$0$text,_res$content2,_res$content2$,_res$result3,_res$choices2,_res$choices2$,_modelMsg3,_ref23,_res$translations2;let{texts,from,to,fromLang,toLang,langMap,resHook,// thinkIgnore, +history,userMsg,apiType,useBatchFetch}=_ref22;// 执行 response hook +if(resHook!==null&&resHook!==void 0&&resHook.trim()){try{interpreter.run("exports.resHook = ".concat(resHook));const hookResult=await interpreter.exports.resHook({apiType,userMsg,res,texts,from,to,fromLang,toLang,langMap,extractJson: extractJson,parseAIRes});if(hookResult&&Array.isArray(hookResult.translations)){if(history&&userMsg&&hookResult.modelMsg){history.add(userMsg,hookResult.modelMsg);}return hookResult.translations;}}catch(err){log_kissLog("run res hook",err);}}let modelMsg="";// todo: 根据结果抛出实际异常信息 +switch(apiType){case OPT_TRANS_GOOGLE:return[[res===null||res===void 0?void 0:(_res$sentences=res.sentences)===null||_res$sentences===void 0?void 0:_res$sentences.map(item=>item.trans).join(" "),res===null||res===void 0?void 0:res.src]];case OPT_TRANS_GOOGLE_2:return res===null||res===void 0?void 0:(_res$=res[0])===null||_res$===void 0?void 0:_res$.map((_,i)=>{var _res$2,_res$3;return[res===null||res===void 0?void 0:(_res$2=res[0])===null||_res$2===void 0?void 0:_res$2[i],res===null||res===void 0?void 0:(_res$3=res[1])===null||_res$3===void 0?void 0:_res$3[i]];});case OPT_TRANS_MICROSOFT:case OPT_TRANS_AZUREAI:return res===null||res===void 0?void 0:res.map(item=>{var _item$detectedLanguag;return[item.translations.map(item=>item.text).join(" "),(_item$detectedLanguag=item.detectedLanguage)===null||_item$detectedLanguag===void 0?void 0:_item$detectedLanguag.language];});case OPT_TRANS_DEEPL:return res===null||res===void 0?void 0:(_res$translations=res.translations)===null||_res$translations===void 0?void 0:_res$translations.map(item=>[item.text,item.detected_source_language]);case OPT_TRANS_DEEPLFREE:return[[res===null||res===void 0?void 0:(_res$result=res.result)===null||_res$result===void 0?void 0:(_res$result$texts=_res$result.texts)===null||_res$result$texts===void 0?void 0:_res$result$texts.map(item=>item.text).join(" "),res===null||res===void 0?void 0:(_res$result2=res.result)===null||_res$result2===void 0?void 0:_res$result2.lang]];case OPT_TRANS_DEEPLX:return[[res===null||res===void 0?void 0:res.data,res===null||res===void 0?void 0:res.source_lang]];case OPT_TRANS_NIUTRANS:const json=JSON.parse(res);if(json.error_msg){throw new Error(json.error_msg);}return[[json.tgt_text,json.from]];case OPT_TRANS_BAIDU:if(res.type===1){return[[Object.keys(JSON.parse(res.result).content[0].mean[0].cont)[0],res.from]];}else if(res.type===2){return[[res.data.map(item=>item.dst).join(" "),res.from]];}break;case OPT_TRANS_TENCENT:return res===null||res===void 0?void 0:(_res$auto_translation=res.auto_translation)===null||_res$auto_translation===void 0?void 0:_res$auto_translation.map(text=>[text,res===null||res===void 0?void 0:res.src_lang]);case OPT_TRANS_VOLCENGINE:return[[res===null||res===void 0?void 0:res.translation,res===null||res===void 0?void 0:res.detected_language]];case OPT_TRANS_OPENAI:case OPT_TRANS_GEMINI_2:case OPT_TRANS_OPENROUTER:modelMsg=res===null||res===void 0?void 0:(_res$choices=res.choices)===null||_res$choices===void 0?void 0:(_res$choices$=_res$choices[0])===null||_res$choices$===void 0?void 0:_res$choices$.message;if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_modelMsg=modelMsg)===null||_modelMsg===void 0?void 0:_modelMsg.content,useBatchFetch);case OPT_TRANS_GEMINI:modelMsg=res===null||res===void 0?void 0:(_res$candidates=res.candidates)===null||_res$candidates===void 0?void 0:(_res$candidates$=_res$candidates[0])===null||_res$candidates$===void 0?void 0:_res$candidates$.content;if(history&&userMsg&&modelMsg){history.add(userMsg,modelMsg);}return parseAIRes((_modelMsg$parts$0$tex=(_modelMsg2=modelMsg)===null||_modelMsg2===void 0?void 0:(_modelMsg2$parts=_modelMsg2.parts)===null||_modelMsg2$parts===void 0?void 0:(_modelMsg2$parts$=_modelMsg2$parts[0])===null||_modelMsg2$parts$===void 0?void 0:_modelMsg2$parts$.text)!==null&&_modelMsg$parts$0$tex!==void 0?_modelMsg$parts$0$tex:"",useBatchFetch);case OPT_TRANS_CLAUDE:modelMsg={role:res===null||res===void 0?void 0:res.role,content:res===null||res===void 0?void 0:(_res$content=res.content)===null||_res$content===void 0?void 0:_res$content.text};if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_res$content$0$text=res===null||res===void 0?void 0:(_res$content2=res.content)===null||_res$content2===void 0?void 0:(_res$content2$=_res$content2[0])===null||_res$content2$===void 0?void 0:_res$content2$.text)!==null&&_res$content$0$text!==void 0?_res$content$0$text:"",useBatchFetch);case OPT_TRANS_CLOUDFLAREAI:return[[res===null||res===void 0?void 0:(_res$result3=res.result)===null||_res$result3===void 0?void 0:_res$result3.translated_text]];case OPT_TRANS_OLLAMA:modelMsg=res===null||res===void 0?void 0:(_res$choices2=res.choices)===null||_res$choices2===void 0?void 0:(_res$choices2$=_res$choices2[0])===null||_res$choices2$===void 0?void 0:_res$choices2$.message;// const deepModels = thinkIgnore +// .split(",") +// .filter((model) => model?.trim()); +// if (deepModels.some((model) => res?.model?.startsWith(model))) { +// modelMsg?.content.replace(/[\s\S]*<\/think>/i, ""); +// } +if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_modelMsg3=modelMsg)===null||_modelMsg3===void 0?void 0:_modelMsg3.content,useBatchFetch);case OPT_TRANS_CUSTOMIZE:return(_ref23=(_res$translations2=res===null||res===void 0?void 0:res.translations)!==null&&_res$translations2!==void 0?_res$translations2:res)===null||_ref23===void 0?void 0:_ref23.map(item=>[item.text,item.src]);default:}throw new Error("parse translate result: apiType not matched",apiType);};/** * 发送翻译请求并解析 * @param {*} param0 * @returns @@ -30618,7 +30624,7 @@ switch(apiType){case OPT_TRANS_GOOGLE:return[[res===null||res===void 0?void 0:(_ * 字幕翻译 * @param {*} param0 * @returns - */const handleSubtitle=async _ref24=>{var _res$choices$0$messag2,_res$choices4,_res$choices4$,_res$choices4$$messag,_res$candidates$0$con2,_res$candidates3,_res$candidates3$,_res$candidates3$$con,_res$candidates3$$con2,_res$candidates3$$con3,_res$content$0$text2,_res$content3,_res$content3$;let{events,from,to,apiSetting}=_ref24;const{apiType,fetchInterval,fetchLimit,httpTimeout}=apiSetting;const[input,init]=await genTransReq({...apiSetting,events,from,to,systemPrompt:apiSetting.subtitlePrompt});const res=await fetch_fetchData(input,init,{useCache:false,usePool:true,fetchInterval,fetchLimit,httpTimeout});if(!res){log_kissLog("subtitle got empty response");return[];}switch(apiType){case OPT_TRANS_OPENAI:case OPT_TRANS_GEMINI_2:case OPT_TRANS_OPENROUTER:case OPT_TRANS_OLLAMA:return parseSTRes((_res$choices$0$messag2=res===null||res===void 0?void 0:(_res$choices4=res.choices)===null||_res$choices4===void 0?void 0:(_res$choices4$=_res$choices4[0])===null||_res$choices4$===void 0?void 0:(_res$choices4$$messag=_res$choices4$.message)===null||_res$choices4$$messag===void 0?void 0:_res$choices4$$messag.content)!==null&&_res$choices$0$messag2!==void 0?_res$choices$0$messag2:"");case OPT_TRANS_GEMINI:return parseSTRes((_res$candidates$0$con2=res===null||res===void 0?void 0:(_res$candidates3=res.candidates)===null||_res$candidates3===void 0?void 0:(_res$candidates3$=_res$candidates3[0])===null||_res$candidates3$===void 0?void 0:(_res$candidates3$$con=_res$candidates3$.content)===null||_res$candidates3$$con===void 0?void 0:(_res$candidates3$$con2=_res$candidates3$$con.parts)===null||_res$candidates3$$con2===void 0?void 0:(_res$candidates3$$con3=_res$candidates3$$con2[0])===null||_res$candidates3$$con3===void 0?void 0:_res$candidates3$$con3.text)!==null&&_res$candidates$0$con2!==void 0?_res$candidates$0$con2:"");case OPT_TRANS_CLAUDE:return parseSTRes((_res$content$0$text2=res===null||res===void 0?void 0:(_res$content3=res.content)===null||_res$content3===void 0?void 0:(_res$content3$=_res$content3[0])===null||_res$content3$===void 0?void 0:_res$content3$.text)!==null&&_res$content$0$text2!==void 0?_res$content$0$text2:"");case OPT_TRANS_CUSTOMIZE:return res;default:}return[];}; + */const handleSubtitle=async _ref24=>{var _res$choices$0$messag,_res$choices3,_res$choices3$,_res$choices3$$messag,_res$candidates$0$con,_res$candidates2,_res$candidates2$,_res$candidates2$$con,_res$candidates2$$con2,_res$candidates2$$con3,_res$content$0$text2,_res$content3,_res$content3$;let{events,from,to,apiSetting}=_ref24;const{apiType,fetchInterval,fetchLimit,httpTimeout}=apiSetting;const[input,init]=await genTransReq({...apiSetting,events,from,to,systemPrompt:apiSetting.subtitlePrompt});const res=await fetch_fetchData(input,init,{useCache:false,usePool:true,fetchInterval,fetchLimit,httpTimeout});if(!res){log_kissLog("subtitle got empty response");return[];}switch(apiType){case OPT_TRANS_OPENAI:case OPT_TRANS_GEMINI_2:case OPT_TRANS_OPENROUTER:case OPT_TRANS_OLLAMA:return parseSTRes((_res$choices$0$messag=res===null||res===void 0?void 0:(_res$choices3=res.choices)===null||_res$choices3===void 0?void 0:(_res$choices3$=_res$choices3[0])===null||_res$choices3$===void 0?void 0:(_res$choices3$$messag=_res$choices3$.message)===null||_res$choices3$$messag===void 0?void 0:_res$choices3$$messag.content)!==null&&_res$choices$0$messag!==void 0?_res$choices$0$messag:"");case OPT_TRANS_GEMINI:return parseSTRes((_res$candidates$0$con=res===null||res===void 0?void 0:(_res$candidates2=res.candidates)===null||_res$candidates2===void 0?void 0:(_res$candidates2$=_res$candidates2[0])===null||_res$candidates2$===void 0?void 0:(_res$candidates2$$con=_res$candidates2$.content)===null||_res$candidates2$$con===void 0?void 0:(_res$candidates2$$con2=_res$candidates2$$con.parts)===null||_res$candidates2$$con2===void 0?void 0:(_res$candidates2$$con3=_res$candidates2$$con2[0])===null||_res$candidates2$$con3===void 0?void 0:_res$candidates2$$con3.text)!==null&&_res$candidates$0$con!==void 0?_res$candidates$0$con:"");case OPT_TRANS_CLAUDE:return parseSTRes((_res$content$0$text2=res===null||res===void 0?void 0:(_res$content3=res.content)===null||_res$content3===void 0?void 0:(_res$content3$=_res$content3[0])===null||_res$content3$===void 0?void 0:_res$content3$.text)!==null&&_res$content$0$text2!==void 0?_res$content$0$text2:"");case OPT_TRANS_CUSTOMIZE:return res;default:}return[];}; ;// CONCATENATED MODULE: ./src/libs/batchQueue.js /** * 批处理队列 @@ -30700,11 +30706,11 @@ keyfrom:"webdict"});const init={headers:{accept:"application/json, text/plain, * * 统一翻译接口 * @param {*} param0 * @returns - */const apiTranslate=async _ref2=>{let{text,fromLang="auto",toLang,apiSetting=DEFAULT_API_SETTING,docInfo={},glossary={},useCache=true,usePool=true}=_ref2;if(!text){return["",false];}const{apiType,apiSlug,useBatchFetch}=apiSetting;const langMap=OPT_LANGS_TO_SPEC[apiType]||OPT_LANGS_SPEC_DEFAULT;const from=langMap.get(fromLang);const to=langMap.get(toLang);if(!to){log_kissLog("target lang: ".concat(toLang," not support"));return["",false];}// todo: 优化缓存失效因素 -const[v1,v2]="2.0.4".split(".");const cacheOpts={apiSlug,text,fromLang,toLang,version:[v1,v2].join(".")};const cacheInput="".concat(URL_CACHE_TRAN,"?").concat(query_string.stringify(cacheOpts));// 查询缓存数据 -if(useCache){const cache=await getHttpCachePolyfill(cacheInput);if(cache!==null&&cache!==void 0&&cache.trText){return[cache.trText,cache.isSame];}}// 请求接口数据 -let tranlation=[];if(apiType===OPT_TRANS_BUILTINAI){tranlation=await apiBuiltinAITranslate({text,from,to,apiSetting});}else if(useBatchFetch&&API_SPE_TYPES.batch.has(apiType)){const{apiSlug,batchInterval,batchSize,batchLength}=apiSetting;const key="".concat(apiSlug,"_").concat(fromLang,"_").concat(toLang);const queue=getBatchQueue(key,handleTranslate,{batchInterval,batchSize,batchLength});tranlation=await queue.addTask(text,{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}else{[tranlation]=await handleTranslate([text],{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}let trText="";let srLang="";if(Array.isArray(tranlation)){[trText,srLang=""]=tranlation;}else if(typeof tranlation==="string"){trText=tranlation;}if(!trText){throw new Error("tanslate api got empty trtext");}const isSame=fromLang==="auto"&&srLang===to;// 插入缓存 -if(useCache){putHttpCachePolyfill(cacheInput,null,{trText,isSame,srLang});}return[trText,isSame];};// 字幕处理/翻译 + */const apiTranslate=async _ref2=>{let{text,fromLang="auto",toLang,apiSetting=DEFAULT_API_SETTING,docInfo={},glossary={},useCache=true,usePool=true}=_ref2;if(!text){throw new Error("The text cannot be empty.");}const{apiType,apiSlug,useBatchFetch}=apiSetting;const langMap=OPT_LANGS_TO_SPEC[apiType]||OPT_LANGS_SPEC_DEFAULT;const from=langMap.get(fromLang);const to=langMap.get(toLang);if(!to){throw new Error("The target lang: ".concat(toLang," not support"));}// todo: 优化缓存失效因素 +const[v1,v2]="2.0.5".split(".");const cacheOpts={apiSlug,text,fromLang,toLang,version:[v1,v2].join(".")};const cacheInput="".concat(URL_CACHE_TRAN,"?").concat(query_string.stringify(cacheOpts));// 查询缓存数据 +if(useCache){const cache=await getHttpCachePolyfill(cacheInput);if(cache!==null&&cache!==void 0&&cache.trText){return cache;}}// 请求接口数据 +let tranlation=[];if(apiType===OPT_TRANS_BUILTINAI){tranlation=await apiBuiltinAITranslate({text,from,to,apiSetting});}else if(useBatchFetch&&API_SPE_TYPES.batch.has(apiType)){const{apiSlug,batchInterval,batchSize,batchLength}=apiSetting;const key="".concat(apiSlug,"_").concat(fromLang,"_").concat(toLang);const queue=getBatchQueue(key,handleTranslate,{batchInterval,batchSize,batchLength});tranlation=await queue.addTask(text,{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}else{[tranlation]=await handleTranslate([text],{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}let trText="";let srLang="";let srCode="";if(Array.isArray(tranlation)){[trText,srLang=""]=tranlation;if(srLang){srCode=OPT_LANGS_TO_CODE[apiType].get(srLang)||"";}}else if(typeof tranlation==="string"){trText=tranlation;}if(!trText){throw new Error("tanslate api got empty trtext");}const isSame=fromLang==="auto"&&srLang===to;// 插入缓存 +if(useCache){putHttpCachePolyfill(cacheInput,null,{trText,isSame,srLang,srCode});}return{trText,srLang,srCode,isSame};};// 字幕处理/翻译 const apiSubtitle=async _ref3=>{let{videoId,chunkSign,fromLang="auto",toLang,events=[],apiSetting}=_ref3;const cacheOpts={apiSlug:apiSetting.apiSlug,videoId,chunkSign,fromLang,toLang};const cacheInput="".concat(URL_CACHE_SUBTITLE,"?").concat(query_string.stringify(cacheOpts));const cache=await getHttpCachePolyfill(cacheInput);if(cache){return cache;}const subtitles=await handleSubtitle({events,from:fromLang,to:toLang,apiSetting});if(subtitles!==null&&subtitles!==void 0&&subtitles.length){putHttpCachePolyfill(cacheInput,null,subtitles);return subtitles;}return[];}; ;// CONCATENATED MODULE: ./src/libs/subRules.js /** @@ -33541,7 +33547,7 @@ var n = {}; return t.length === e && "." !== t && ".." !== t; }; }, - te = "object" === ("undefined" == typeof process ? "undefined" : Nt(process)) && process ? "object" === Nt(({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.4","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"})) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.4","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.4","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}).__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; + te = "object" === ("undefined" == typeof process ? "undefined" : Nt(process)) && process ? "object" === Nt(({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.5","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"})) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.5","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.5","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}).__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; It.sep = "win32" === te ? "\\" : "/"; var ee = Symbol("globstar **"); It.GLOBSTAR = ee; @@ -35345,7 +35351,8 @@ return;}let{updateAt=0,syncAt=0}=syncMeta[key]||{};if(syncAt===0){updateAt=0;// * @param {*} rules * @param {string} href * @returns - */const matchRule=async(href,_ref)=>{let{injectRules,subrulesList}=_ref;const rules=await getRulesWithDefault();if(injectRules){try{const selectedSub=subrulesList.find(item=>item.selected);if(selectedSub!==null&&selectedSub!==void 0&&selectedSub.url){const subRules=await loadOrFetchSubRules(selectedSub.url);rules.splice(-1,0,...subRules);}}catch(err){log_kissLog("load injectRules",err);}}const rule=rules.find(r=>r.pattern.split(",").some(p=>isMatch(href,p.trim())));const globalRule={...GLOBLA_RULE,...(rules.find(r=>r.pattern===GLOBAL_KEY)||{})};if(!rule){return globalRule;}["selector","keepSelector","rootsSelector","ignoreSelector","terms","aiTerms","termsStyle","highlightStyle","selectStyle","parentStyle","grandStyle","injectJs","injectCss",// "fixerSelector", + */const matchRule=async(href,_ref)=>{let{injectRules,subrulesList}=_ref;const rules=await getRulesWithDefault();if(injectRules){try{const selectedSub=subrulesList.find(item=>item.selected);if(selectedSub!==null&&selectedSub!==void 0&&selectedSub.url){const subRules=await loadOrFetchSubRules(selectedSub.url);rules.splice(-1,0,...subRules);}}catch(err){log_kissLog("load injectRules",err);}}const rule=rules.find(r=>r.pattern.split(",").some(p=>isMatch(href,p.trim())));const globalRule={...GLOBLA_RULE,...(rules.find(r=>r.pattern===GLOBAL_KEY)||{})};if(!rule){return globalRule;}["selector","keepSelector","rootsSelector","ignoreSelector","terms","aiTerms","termsStyle","highlightStyle","selectStyle","parentStyle","grandStyle","injectJs",// "injectCss", +// "fixerSelector", "transStartHook","transEndHook"// "transRemoveHook", ].forEach(key=>{var _rule$key;if(!((_rule$key=rule[key])!==null&&_rule$key!==void 0&&_rule$key.trim())){rule[key]=globalRule[key];}});["apiSlug","fromLang","toLang","transOpen","transOnly",// "transTiming", "autoScan","hasRichText","hasShadowroot","transTag","transTitle",// "detectRemote", @@ -35357,13 +35364,15 @@ if(!rule.textStyle||rule.textStyle===GLOBAL_KEY){rule.textStyle=globalRule.textS * 检查过滤rules * @param {*} rules * @returns - */const checkRules=rules=>{if(type(rules)==="string"){rules=JSON.parse(rules);}if(type(rules)!=="array"){throw new Error("data error");}const fromLangs=OPT_LANGS_FROM.map(item=>item[0]);const toLangs=OPT_LANGS_TO.map(item=>item[0]);const patternSet=new Set();rules=rules.filter(rule=>type(rule)==="object").filter(_ref2=>{let{pattern}=_ref2;if(type(pattern)!=="string"||patternSet.has(pattern.trim())){return false;}patternSet.add(pattern.trim());return true;}).map(_ref3=>{let{pattern,selector,keepSelector,rootsSelector,ignoreSelector,terms,aiTerms,termsStyle,highlightStyle,selectStyle,parentStyle,grandStyle,injectJs,injectCss,apiSlug,fromLang,toLang,textStyle,transOpen,bgColor,textDiyStyle,transOnly,autoScan,hasRichText,hasShadowroot,// transTiming, + */const checkRules=rules=>{if(type(rules)==="string"){rules=JSON.parse(rules);}if(type(rules)!=="array"){throw new Error("data error");}const fromLangs=OPT_LANGS_FROM.map(item=>item[0]);const toLangs=OPT_LANGS_TO.map(item=>item[0]);const patternSet=new Set();rules=rules.filter(rule=>type(rule)==="object").filter(_ref2=>{let{pattern}=_ref2;if(type(pattern)!=="string"||patternSet.has(pattern.trim())){return false;}patternSet.add(pattern.trim());return true;}).map(_ref3=>{let{pattern,selector,keepSelector,rootsSelector,ignoreSelector,terms,aiTerms,termsStyle,highlightStyle,selectStyle,parentStyle,grandStyle,injectJs,// injectCss, +apiSlug,fromLang,toLang,textStyle,transOpen,bgColor,textDiyStyle,transOnly,autoScan,hasRichText,hasShadowroot,// transTiming, transTag,transTitle,// detectRemote, // skipLangs, // fixerSelector, // fixerFunc, transStartHook,transEndHook,// transRemoveHook, -splitParagraph,splitLength,highlightWords}=_ref3;return{pattern:pattern.trim(),selector:type(selector)==="string"?selector:"",keepSelector:type(keepSelector)==="string"?keepSelector:"",rootsSelector:type(rootsSelector)==="string"?rootsSelector:"",ignoreSelector:type(ignoreSelector)==="string"?ignoreSelector:"",terms:type(terms)==="string"?terms:"",aiTerms:type(aiTerms)==="string"?aiTerms:"",termsStyle:type(termsStyle)==="string"?termsStyle:"",highlightStyle:type(highlightStyle)==="string"?highlightStyle:"",selectStyle:type(selectStyle)==="string"?selectStyle:"",parentStyle:type(parentStyle)==="string"?parentStyle:"",grandStyle:type(grandStyle)==="string"?grandStyle:"",injectJs:type(injectJs)==="string"?injectJs:"",injectCss:type(injectCss)==="string"?injectCss:"",bgColor:type(bgColor)==="string"?bgColor:"",textDiyStyle:type(textDiyStyle)==="string"?textDiyStyle:"",apiSlug:type(apiSlug)==="string"&&apiSlug.trim()!==""?apiSlug.trim():GLOBAL_KEY,fromLang:matchValue([GLOBAL_KEY,...fromLangs],fromLang),toLang:matchValue([GLOBAL_KEY,...toLangs],toLang),textStyle:matchValue([GLOBAL_KEY,...OPT_STYLE_ALL],textStyle),transOpen:matchValue([GLOBAL_KEY,"true","false"],transOpen),transOnly:matchValue([GLOBAL_KEY,"true","false"],transOnly),autoScan:matchValue([GLOBAL_KEY,"true","false"],autoScan),hasRichText:matchValue([GLOBAL_KEY,"true","false"],hasRichText),hasShadowroot:matchValue([GLOBAL_KEY,"true","false"],hasShadowroot),// transTiming: matchValue([GLOBAL_KEY, ...OPT_TIMING_ALL], transTiming), +splitParagraph,splitLength,highlightWords}=_ref3;return{pattern:pattern.trim(),selector:type(selector)==="string"?selector:"",keepSelector:type(keepSelector)==="string"?keepSelector:"",rootsSelector:type(rootsSelector)==="string"?rootsSelector:"",ignoreSelector:type(ignoreSelector)==="string"?ignoreSelector:"",terms:type(terms)==="string"?terms:"",aiTerms:type(aiTerms)==="string"?aiTerms:"",termsStyle:type(termsStyle)==="string"?termsStyle:"",highlightStyle:type(highlightStyle)==="string"?highlightStyle:"",selectStyle:type(selectStyle)==="string"?selectStyle:"",parentStyle:type(parentStyle)==="string"?parentStyle:"",grandStyle:type(grandStyle)==="string"?grandStyle:"",injectJs:type(injectJs)==="string"?injectJs:"",// injectCss: type(injectCss) === "string" ? injectCss : "", +bgColor:type(bgColor)==="string"?bgColor:"",textDiyStyle:type(textDiyStyle)==="string"?textDiyStyle:"",apiSlug:type(apiSlug)==="string"&&apiSlug.trim()!==""?apiSlug.trim():GLOBAL_KEY,fromLang:matchValue([GLOBAL_KEY,...fromLangs],fromLang),toLang:matchValue([GLOBAL_KEY,...toLangs],toLang),textStyle:matchValue([GLOBAL_KEY,...OPT_STYLE_ALL],textStyle),transOpen:matchValue([GLOBAL_KEY,"true","false"],transOpen),transOnly:matchValue([GLOBAL_KEY,"true","false"],transOnly),autoScan:matchValue([GLOBAL_KEY,"true","false"],autoScan),hasRichText:matchValue([GLOBAL_KEY,"true","false"],hasRichText),hasShadowroot:matchValue([GLOBAL_KEY,"true","false"],hasShadowroot),// transTiming: matchValue([GLOBAL_KEY, ...OPT_TIMING_ALL], transTiming), transTag:matchValue([GLOBAL_KEY,"span","font"],transTag),transTitle:matchValue([GLOBAL_KEY,"true","false"],transTitle),// detectRemote: matchValue([GLOBAL_KEY, "true", "false"], detectRemote), // skipLangs: type(skipLangs) === "array" ? skipLangs : [], // fixerSelector: type(fixerSelector) === "string" ? fixerSelector : "", @@ -35385,13 +35394,12 @@ splitParagraph:matchValue([GLOBAL_KEY,...OPT_SPLIT_PARAGRAPH_ALL],splitParagraph /** * @class BilingualSubtitleManager * @description 负责在视频上显示和翻译字幕的核心逻辑 - */var _videoEl=/*#__PURE__*/_classPrivateFieldKey("videoEl");var _formattedSubtitles=/*#__PURE__*/_classPrivateFieldKey("formattedSubtitles");var _translationService=/*#__PURE__*/_classPrivateFieldKey("translationService");var _captionWindowEl=/*#__PURE__*/_classPrivateFieldKey("captionWindowEl");var _paperEl=/*#__PURE__*/_classPrivateFieldKey("paperEl");var _currentSubtitleIndex=/*#__PURE__*/_classPrivateFieldKey("currentSubtitleIndex");var _preTranslateSeconds=/*#__PURE__*/_classPrivateFieldKey("preTranslateSeconds");var _setting=/*#__PURE__*/_classPrivateFieldKey("setting");var _isAdPlaying=/*#__PURE__*/_classPrivateFieldKey("isAdPlaying");var _createCaptionWindow=/*#__PURE__*/_classPrivateFieldKey("createCaptionWindow");var _enableDragging=/*#__PURE__*/_classPrivateFieldKey("enableDragging");var _attachEventListeners=/*#__PURE__*/_classPrivateFieldKey("attachEventListeners");var _removeEventListeners=/*#__PURE__*/_classPrivateFieldKey("removeEventListeners");var _findSubtitleIndexForTime=/*#__PURE__*/_classPrivateFieldKey("findSubtitleIndexForTime");var _updateCaptionDisplay=/*#__PURE__*/_classPrivateFieldKey("updateCaptionDisplay");var _triggerTranslations=/*#__PURE__*/_classPrivateFieldKey("triggerTranslations");var _translateAndStore=/*#__PURE__*/_classPrivateFieldKey("translateAndStore");class BilingualSubtitleManager{/** + */var _videoEl=/*#__PURE__*/_classPrivateFieldKey("videoEl");var _formattedSubtitles=/*#__PURE__*/_classPrivateFieldKey("formattedSubtitles");var _captionWindowEl=/*#__PURE__*/_classPrivateFieldKey("captionWindowEl");var _paperEl=/*#__PURE__*/_classPrivateFieldKey("paperEl");var _currentSubtitleIndex=/*#__PURE__*/_classPrivateFieldKey("currentSubtitleIndex");var _preTranslateSeconds=/*#__PURE__*/_classPrivateFieldKey("preTranslateSeconds");var _setting=/*#__PURE__*/_classPrivateFieldKey("setting");var _isAdPlaying=/*#__PURE__*/_classPrivateFieldKey("isAdPlaying");var _createCaptionWindow=/*#__PURE__*/_classPrivateFieldKey("createCaptionWindow");var _enableDragging=/*#__PURE__*/_classPrivateFieldKey("enableDragging");var _attachEventListeners=/*#__PURE__*/_classPrivateFieldKey("attachEventListeners");var _removeEventListeners=/*#__PURE__*/_classPrivateFieldKey("removeEventListeners");var _findSubtitleIndexForTime=/*#__PURE__*/_classPrivateFieldKey("findSubtitleIndexForTime");var _updateCaptionDisplay=/*#__PURE__*/_classPrivateFieldKey("updateCaptionDisplay");var _triggerTranslations=/*#__PURE__*/_classPrivateFieldKey("triggerTranslations");var _translateAndStore=/*#__PURE__*/_classPrivateFieldKey("translateAndStore");class BilingualSubtitleManager{/** * @param {object} options * @param {HTMLVideoElement} options.videoEl - 页面上的 video 元素。 * @param {Array} options.formattedSubtitles - 已格式化好的字幕数组。 - * @param {(text: string, toLang: string) => Promise} options.translationService - 外部翻译函数。 * @param {object} options.setting - 配置对象,如目标翻译语言。 - */constructor(_ref){let{videoEl,formattedSubtitles,translationService,setting}=_ref;/** + */constructor(_ref){let{videoEl,formattedSubtitles,setting}=_ref;/** * 执行单个字幕的翻译并更新其状态。 * @param {object} subtitle - 需要翻译的字幕对象。 */Object.defineProperty(this,_translateAndStore,{value:_translateAndStore2});/** @@ -35412,7 +35420,7 @@ splitParagraph:matchValue([GLOBAL_KEY,...OPT_SPLIT_PARAGRAPH_ALL],splitParagraph * 为指定的元素启用垂直拖动功能。 */Object.defineProperty(this,_enableDragging,{value:_enableDragging2});/** * 创建并配置用于显示字幕的 DOM 元素。 - */Object.defineProperty(this,_createCaptionWindow,{value:_createCaptionWindow2});Object.defineProperty(this,_videoEl,{writable:true,value:void 0});Object.defineProperty(this,_formattedSubtitles,{writable:true,value:[]});Object.defineProperty(this,_translationService,{writable:true,value:void 0});Object.defineProperty(this,_captionWindowEl,{writable:true,value:null});Object.defineProperty(this,_paperEl,{writable:true,value:null});Object.defineProperty(this,_currentSubtitleIndex,{writable:true,value:-1});Object.defineProperty(this,_preTranslateSeconds,{writable:true,value:100});Object.defineProperty(this,_setting,{writable:true,value:{}});Object.defineProperty(this,_isAdPlaying,{writable:true,value:false});_classPrivateFieldBase(this,_setting)[_setting]=setting;_classPrivateFieldBase(this,_videoEl)[_videoEl]=videoEl;_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles]=formattedSubtitles;_classPrivateFieldBase(this,_translationService)[_translationService]=translationService;this.onTimeUpdate=this.onTimeUpdate.bind(this);this.onSeek=this.onSeek.bind(this);}/** + */Object.defineProperty(this,_createCaptionWindow,{value:_createCaptionWindow2});Object.defineProperty(this,_videoEl,{writable:true,value:void 0});Object.defineProperty(this,_formattedSubtitles,{writable:true,value:[]});Object.defineProperty(this,_captionWindowEl,{writable:true,value:null});Object.defineProperty(this,_paperEl,{writable:true,value:null});Object.defineProperty(this,_currentSubtitleIndex,{writable:true,value:-1});Object.defineProperty(this,_preTranslateSeconds,{writable:true,value:100});Object.defineProperty(this,_setting,{writable:true,value:{}});Object.defineProperty(this,_isAdPlaying,{writable:true,value:false});_classPrivateFieldBase(this,_setting)[_setting]=setting;_classPrivateFieldBase(this,_videoEl)[_videoEl]=videoEl;_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles]=formattedSubtitles;this.onTimeUpdate=this.onTimeUpdate.bind(this);this.onSeek=this.onSeek.bind(this);}/** * 启动字幕显示和翻译。 */start(){if(_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].length===0){logger.warn("Bilingual Subtitles: No subtitles to display.");return;}logger.info("Bilingual Subtitle Manager: Starting...");_classPrivateFieldBase(this,_createCaptionWindow)[_createCaptionWindow]();_classPrivateFieldBase(this,_attachEventListeners)[_attachEventListeners]();this.onTimeUpdate();}/** * 销毁实例,清理资源。 @@ -35425,7 +35433,7 @@ splitParagraph:matchValue([GLOBAL_KEY,...OPT_SPLIT_PARAGRAPH_ALL],splitParagraph */onSeek(){_classPrivateFieldBase(this,_currentSubtitleIndex)[_currentSubtitleIndex]=-1;this.onTimeUpdate();}/** * 追加新的字幕 * @param {Array} newSubtitlesChunk - 新的、要追加的字幕数据块。 - */appendSubtitles(newSubtitlesChunk){if(!newSubtitlesChunk||newSubtitlesChunk.length===0){return;}logger.info("Bilingual Subtitle Manager: Appending ".concat(newSubtitlesChunk.length," new subtitles..."));_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].push(...newSubtitlesChunk);_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].sort((a,b)=>a.start-b.start);_classPrivateFieldBase(this,_currentSubtitleIndex)[_currentSubtitleIndex]=-1;this.onTimeUpdate();}}function _createCaptionWindow2(){var _classPrivateFieldLoo4;const container=document.createElement("div");container.className="kiss-caption-container notranslate";Object.assign(container.style,{position:"absolute",width:"100%",height:"100%",left:"0",top:"0",pointerEvents:"none"});const paper=document.createElement("div");paper.className="kiss-caption-paper";Object.assign(paper.style,{position:"absolute",width:"80%",left:"50%",bottom:"10%",transform:"translateX(-50%)",textAlign:"center",containerType:"inline-size",zIndex:"2147483647",pointerEvents:"auto",display:"none"});_classPrivateFieldBase(this,_paperEl)[_paperEl]=paper;_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]=document.createElement("div");_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].className="kiss-caption-window";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.cssText=_classPrivateFieldBase(this,_setting)[_setting].windowStyle;_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.pointerEvents="auto";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.cursor="grab";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.opacity="1";_classPrivateFieldBase(this,_paperEl)[_paperEl].appendChild(_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]);container.appendChild(_classPrivateFieldBase(this,_paperEl)[_paperEl]);const videoContainer=(_classPrivateFieldLoo4=_classPrivateFieldBase(this,_videoEl)[_videoEl].parentElement)===null||_classPrivateFieldLoo4===void 0?void 0:_classPrivateFieldLoo4.parentElement;if(!videoContainer){logger.warn("could not find videoContainer");return;}videoContainer.style.position="relative";videoContainer.appendChild(container);_classPrivateFieldBase(this,_enableDragging)[_enableDragging](_classPrivateFieldBase(this,_paperEl)[_paperEl],container,_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]);}function _enableDragging2(dragElement,boundaryContainer,handleElement){let isDragging=false;let startY;let initialBottom;let dragElementHeight;const onMouseDown=e=>{e.stopPropagation();e.preventDefault();if(e.button!==0)return;isDragging=true;handleElement.style.cursor="grabbing";startY=e.clientY;initialBottom=boundaryContainer.getBoundingClientRect().bottom-dragElement.getBoundingClientRect().bottom;dragElementHeight=dragElement.offsetHeight;document.addEventListener("mousemove",onMouseMove,{capture:true});document.addEventListener("mouseup",onMouseUp,{capture:true});};const onMouseMove=e=>{if(!isDragging)return;e.preventDefault();e.stopPropagation();const deltaY=e.clientY-startY;let newBottom=initialBottom-deltaY;const containerHeight=boundaryContainer.clientHeight;newBottom=Math.max(0,newBottom);newBottom=Math.min(containerHeight-dragElementHeight,newBottom);if(dragElementHeight>containerHeight){newBottom=Math.max(0,newBottom);}dragElement.style.bottom="".concat(newBottom,"px");};const onMouseUp=e=>{if(!isDragging)return;e.preventDefault();e.stopPropagation();isDragging=false;handleElement.style.cursor="grab";document.removeEventListener("mousemove",onMouseMove,{capture:true});document.removeEventListener("mouseup",onMouseUp,{capture:true});const finalBottomPx=dragElement.style.bottom;setTimeout(()=>{dragElement.style.bottom=finalBottomPx;},50);};handleElement.addEventListener("mousedown",onMouseDown);}function _attachEventListeners2(){_classPrivateFieldBase(this,_videoEl)[_videoEl].addEventListener("timeupdate",this.onTimeUpdate);_classPrivateFieldBase(this,_videoEl)[_videoEl].addEventListener("seeked",this.onSeek);}function _removeEventListeners2(){_classPrivateFieldBase(this,_videoEl)[_videoEl].removeEventListener("timeupdate",this.onTimeUpdate);_classPrivateFieldBase(this,_videoEl)[_videoEl].removeEventListener("seeked",this.onSeek);}function _findSubtitleIndexForTime2(currentTimeMs){return _classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].findIndex(sub=>currentTimeMs>=sub.start&¤tTimeMs<=sub.end);}function _updateCaptionDisplay2(subtitle){if(!_classPrivateFieldBase(this,_paperEl)[_paperEl]||!_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl])return;if(_classPrivateFieldBase(this,_isAdPlaying)[_isAdPlaying]){_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="none";return;}if(subtitle){const p1=document.createElement("p");p1.style.cssText=_classPrivateFieldBase(this,_setting)[_setting].originStyle;p1.textContent=truncateWords(subtitle.text);const p2=document.createElement("p");p2.style.cssText=_classPrivateFieldBase(this,_setting)[_setting].translationStyle;p2.textContent=truncateWords(subtitle.translation)||"...";if(_classPrivateFieldBase(this,_setting)[_setting].isBilingual){_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].replaceChildren(p1,p2);}else{_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].replaceChildren(p2);}_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="block";}else{_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="none";}}function _triggerTranslations2(currentTimeMs){const lookAheadMs=_classPrivateFieldBase(this,_preTranslateSeconds)[_preTranslateSeconds]*1000;for(const sub of _classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles]){const isCurrent=sub.start<=currentTimeMs&&sub.end>=currentTimeMs;const isUpcoming=sub.start>currentTimeMs&&sub.start<=currentTimeMs+lookAheadMs;const needsTranslation=!sub.translation&&!sub.isTranslating;if((isCurrent||isUpcoming)&&needsTranslation){_classPrivateFieldBase(this,_translateAndStore)[_translateAndStore](sub);}}}async function _translateAndStore2(subtitle){subtitle.isTranslating=true;try{const{fromLang,toLang,apiSetting}=_classPrivateFieldBase(this,_setting)[_setting];const[translatedText]=await _classPrivateFieldBase(this,_translationService)[_translationService]({text:subtitle.text,fromLang,toLang,apiSetting});subtitle.translation=translatedText;}catch(error){logger.info("Translation failed for:",subtitle.text,error);subtitle.translation="[Translation failed]";}finally{subtitle.isTranslating=false;const currentSubtitleIndexNow=_classPrivateFieldBase(this,_findSubtitleIndexForTime)[_findSubtitleIndexForTime](_classPrivateFieldBase(this,_videoEl)[_videoEl].currentTime*1000);if(_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles][currentSubtitleIndexNow]===subtitle){_classPrivateFieldBase(this,_updateCaptionDisplay)[_updateCaptionDisplay](subtitle);}}} + */appendSubtitles(newSubtitlesChunk){if(!newSubtitlesChunk||newSubtitlesChunk.length===0){return;}logger.info("Bilingual Subtitle Manager: Appending ".concat(newSubtitlesChunk.length," new subtitles..."));_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].push(...newSubtitlesChunk);_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].sort((a,b)=>a.start-b.start);_classPrivateFieldBase(this,_currentSubtitleIndex)[_currentSubtitleIndex]=-1;this.onTimeUpdate();}}function _createCaptionWindow2(){var _classPrivateFieldLoo4;const container=document.createElement("div");container.className="kiss-caption-container notranslate";Object.assign(container.style,{position:"absolute",width:"100%",height:"100%",left:"0",top:"0",pointerEvents:"none"});const paper=document.createElement("div");paper.className="kiss-caption-paper";Object.assign(paper.style,{position:"absolute",width:"80%",left:"50%",bottom:"10%",transform:"translateX(-50%)",textAlign:"center",containerType:"inline-size",zIndex:"2147483647",pointerEvents:"auto",display:"none"});_classPrivateFieldBase(this,_paperEl)[_paperEl]=paper;_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]=document.createElement("div");_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].className="kiss-caption-window";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.cssText=_classPrivateFieldBase(this,_setting)[_setting].windowStyle;_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.pointerEvents="auto";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.cursor="grab";_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].style.opacity="1";_classPrivateFieldBase(this,_paperEl)[_paperEl].appendChild(_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]);container.appendChild(_classPrivateFieldBase(this,_paperEl)[_paperEl]);const videoContainer=(_classPrivateFieldLoo4=_classPrivateFieldBase(this,_videoEl)[_videoEl].parentElement)===null||_classPrivateFieldLoo4===void 0?void 0:_classPrivateFieldLoo4.parentElement;if(!videoContainer){logger.warn("could not find videoContainer");return;}videoContainer.style.position="relative";videoContainer.appendChild(container);_classPrivateFieldBase(this,_enableDragging)[_enableDragging](_classPrivateFieldBase(this,_paperEl)[_paperEl],container,_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl]);}function _enableDragging2(dragElement,boundaryContainer,handleElement){let isDragging=false;let startY;let initialBottom;let dragElementHeight;const onDragStart=e=>{if(e.type==="mousedown"&&e.button!==0)return;e.preventDefault();isDragging=true;handleElement.style.cursor="grabbing";startY=e.type==="touchstart"?e.touches[0].clientY:e.clientY;initialBottom=boundaryContainer.getBoundingClientRect().bottom-dragElement.getBoundingClientRect().bottom;dragElementHeight=dragElement.offsetHeight;document.addEventListener("mousemove",onDragMove,{capture:true});document.addEventListener("touchmove",onDragMove,{capture:true,passive:false});document.addEventListener("mouseup",onDragEnd,{capture:true});document.addEventListener("touchend",onDragEnd,{capture:true});};const onDragMove=e=>{if(!isDragging)return;e.preventDefault();const currentY=e.type==="touchmove"?e.touches[0].clientY:e.clientY;const deltaY=currentY-startY;let newBottom=initialBottom-deltaY;const containerHeight=boundaryContainer.clientHeight;newBottom=Math.max(0,newBottom);newBottom=Math.min(containerHeight-dragElementHeight,newBottom);if(dragElementHeight>containerHeight){newBottom=Math.max(0,newBottom);}dragElement.style.bottom="".concat(newBottom,"px");};const onDragEnd=e=>{if(!isDragging)return;e.preventDefault();isDragging=false;handleElement.style.cursor="grab";document.removeEventListener("mousemove",onDragMove,{capture:true});document.removeEventListener("touchmove",onDragMove,{capture:true});document.removeEventListener("mouseup",onDragEnd,{capture:true});document.removeEventListener("touchend",onDragEnd,{capture:true});const finalBottomPx=dragElement.style.bottom;setTimeout(()=>{dragElement.style.bottom=finalBottomPx;},50);};handleElement.addEventListener("mousedown",onDragStart);handleElement.addEventListener("touchstart",onDragStart,{passive:false});}function _attachEventListeners2(){_classPrivateFieldBase(this,_videoEl)[_videoEl].addEventListener("timeupdate",this.onTimeUpdate);_classPrivateFieldBase(this,_videoEl)[_videoEl].addEventListener("seeked",this.onSeek);}function _removeEventListeners2(){_classPrivateFieldBase(this,_videoEl)[_videoEl].removeEventListener("timeupdate",this.onTimeUpdate);_classPrivateFieldBase(this,_videoEl)[_videoEl].removeEventListener("seeked",this.onSeek);}function _findSubtitleIndexForTime2(currentTimeMs){return _classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles].findIndex(sub=>currentTimeMs>=sub.start&¤tTimeMs<=sub.end);}function _updateCaptionDisplay2(subtitle){if(!_classPrivateFieldBase(this,_paperEl)[_paperEl]||!_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl])return;if(_classPrivateFieldBase(this,_isAdPlaying)[_isAdPlaying]){_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="none";return;}if(subtitle){const p1=document.createElement("p");p1.style.cssText=_classPrivateFieldBase(this,_setting)[_setting].originStyle;p1.textContent=truncateWords(subtitle.text);const p2=document.createElement("p");p2.style.cssText=_classPrivateFieldBase(this,_setting)[_setting].translationStyle;p2.textContent=truncateWords(subtitle.translation)||"...";if(_classPrivateFieldBase(this,_setting)[_setting].isBilingual){_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].replaceChildren(p1,p2);}else{_classPrivateFieldBase(this,_captionWindowEl)[_captionWindowEl].replaceChildren(p2);}_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="block";}else{_classPrivateFieldBase(this,_paperEl)[_paperEl].style.display="none";}}function _triggerTranslations2(currentTimeMs){const lookAheadMs=_classPrivateFieldBase(this,_preTranslateSeconds)[_preTranslateSeconds]*1000;for(const sub of _classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles]){const isCurrent=sub.start<=currentTimeMs&&sub.end>=currentTimeMs;const isUpcoming=sub.start>currentTimeMs&&sub.start<=currentTimeMs+lookAheadMs;const needsTranslation=!sub.translation&&!sub.isTranslating;if((isCurrent||isUpcoming)&&needsTranslation){_classPrivateFieldBase(this,_translateAndStore)[_translateAndStore](sub);}}}async function _translateAndStore2(subtitle){subtitle.isTranslating=true;try{const{fromLang,toLang,apiSetting}=_classPrivateFieldBase(this,_setting)[_setting];const{trText}=await apiTranslate({text:subtitle.text,fromLang,toLang,apiSetting});subtitle.translation=trText;}catch(error){logger.info("Translation failed for:",subtitle.text,error);subtitle.translation="[Translation failed]";}finally{subtitle.isTranslating=false;const currentSubtitleIndexNow=_classPrivateFieldBase(this,_findSubtitleIndexForTime)[_findSubtitleIndexForTime](_classPrivateFieldBase(this,_videoEl)[_videoEl].currentTime*1000);if(_classPrivateFieldBase(this,_formattedSubtitles)[_formattedSubtitles][currentSubtitleIndexNow]===subtitle){_classPrivateFieldBase(this,_updateCaptionDisplay)[_updateCaptionDisplay](subtitle);}}} ;// CONCATENATED MODULE: ./src/libs/svg.js const loadingSvg="\n \n \n \n \n \n \n \n \n \n\n";function createSVGElement(tag,attributes){const svgNS="http://www.w3.org/2000/svg";const el=document.createElementNS(svgNS,tag);for(const key in attributes){el.setAttribute(key,attributes[key]);}return el;}/** * 创建loding动画 @@ -35437,8 +35445,8 @@ const loadingSvg="0&&arguments[0]!==undefined?arguments[0]:{};const svg=createSVGElement("svg",{xmlns:"http://www.w3.org/2000/svg",width,height,viewBox,version:"1.1"});const primaryColor="#209CEE";const secondaryColor="#E9F5FD";const path1Fill=isSelected?primaryColor:secondaryColor;const path2Fill=isSelected?secondaryColor:primaryColor;const path1=createSVGElement("path",{d:"M0 0 C10.56 0 21.12 0 32 0 C32 10.56 32 21.12 32 32 C21.44 32 10.88 32 0 32 C0 21.44 0 10.88 0 0 Z ",fill:path1Fill,transform:"translate(0,0)"});const path2=createSVGElement("path",{d:"M0 0 C0.66 0 1.32 0 2 0 C2 2.97 2 5.94 2 9 C2.969375 8.2575 3.93875 7.515 4.9375 6.75 C5.48277344 6.33234375 6.02804688 5.9146875 6.58984375 5.484375 C8.39053593 3.83283924 8.39053593 3.83283924 9 0 C13.95 0 18.9 0 24 0 C24 0.99 24 1.98 24 3 C22.68 3 21.36 3 20 3 C20 9.27 20 15.54 20 22 C19.01 22 18.02 22 17 22 C17 15.73 17 9.46 17 3 C15.35 3 13.7 3 12 3 C11.731875 3.598125 11.46375 4.19625 11.1875 4.8125 C10.01506533 6.97224808 8.80630718 8.35790256 7 10 C8.01790655 12.27071461 8.77442829 13.80784632 10.6875 15.4375 C11.120625 15.953125 11.55375 16.46875 12 17 C11.6875 19.6875 11.6875 19.6875 11 22 C10.34 22 9.68 22 9 22 C8.773125 21.236875 8.54625 20.47375 8.3125 19.6875 C6.73268318 16.45263699 5.16717283 15.58358642 2 14 C2 16.64 2 19.28 2 22 C1.34 22 0.68 22 0 22 C0 14.74 0 7.48 0 0 Z ",fill:path2Fill,transform:"translate(4,5)"});svg.appendChild(path1);svg.appendChild(path2);return svg;} ;// CONCATENATED MODULE: ./src/subtitle/YouTubeCaptionProvider.js const VIDEO_SELECT="#container video";const CONTORLS_SELECT=".ytp-right-controls";const YT_CAPTION_SELECT="#ytp-caption-window-container";const YT_AD_SELECT=".video-ads";var YouTubeCaptionProvider_setting=/*#__PURE__*/_classPrivateFieldKey("setting");var _videoId=/*#__PURE__*/_classPrivateFieldKey("videoId");var _subtitles=/*#__PURE__*/_classPrivateFieldKey("subtitles");var _managerInstance=/*#__PURE__*/_classPrivateFieldKey("managerInstance");var _toggleButton=/*#__PURE__*/_classPrivateFieldKey("toggleButton");var _enabled=/*#__PURE__*/_classPrivateFieldKey("enabled");var _ytControls=/*#__PURE__*/_classPrivateFieldKey("ytControls");var _isBusy=/*#__PURE__*/_classPrivateFieldKey("isBusy");var _fromLang=/*#__PURE__*/_classPrivateFieldKey("fromLang");var _notificationEl=/*#__PURE__*/_classPrivateFieldKey("notificationEl");var _notificationTimeout=/*#__PURE__*/_classPrivateFieldKey("notificationTimeout");var _i18n=/*#__PURE__*/_classPrivateFieldKey("i18n");var YouTubeCaptionProvider_videoEl=/*#__PURE__*/_classPrivateFieldKey("videoEl");var _moAds=/*#__PURE__*/_classPrivateFieldKey("moAds");var _waitForElement=/*#__PURE__*/_classPrivateFieldKey("waitForElement");var _doubleClick=/*#__PURE__*/_classPrivateFieldKey("doubleClick");var _injectToggleButton=/*#__PURE__*/_classPrivateFieldKey("injectToggleButton");var _isSameLang=/*#__PURE__*/_classPrivateFieldKey("isSameLang");var _findCaptionTrack=/*#__PURE__*/_classPrivateFieldKey("findCaptionTrack");var _getCaptionTracks=/*#__PURE__*/_classPrivateFieldKey("getCaptionTracks");var _getSubtitleEvents=/*#__PURE__*/_classPrivateFieldKey("getSubtitleEvents");var _getVideoId=/*#__PURE__*/_classPrivateFieldKey("getVideoId");var _aiSegment=/*#__PURE__*/_classPrivateFieldKey("aiSegment");var _handleInterceptedRequest=/*#__PURE__*/_classPrivateFieldKey("handleInterceptedRequest");var _onCaptionsReady=/*#__PURE__*/_classPrivateFieldKey("onCaptionsReady");var _startManager=/*#__PURE__*/_classPrivateFieldKey("startManager");var _destroyManager=/*#__PURE__*/_classPrivateFieldKey("destroyManager");var _formatSubtitles=/*#__PURE__*/_classPrivateFieldKey("formatSubtitles");var _isQualityPoor=/*#__PURE__*/_classPrivateFieldKey("isQualityPoor");var _processSubtitles=/*#__PURE__*/_classPrivateFieldKey("processSubtitles");var _flatEvents=/*#__PURE__*/_classPrivateFieldKey("flatEvents");var _splitEventsIntoChunks=/*#__PURE__*/_classPrivateFieldKey("splitEventsIntoChunks");var _processRemainingChunksAsync=/*#__PURE__*/_classPrivateFieldKey("processRemainingChunksAsync");var _createNotificationElement=/*#__PURE__*/_classPrivateFieldKey("createNotificationElement");var _showNotification=/*#__PURE__*/_classPrivateFieldKey("showNotification");class YouTubeCaptionProvider{constructor(){let setting=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};Object.defineProperty(this,_showNotification,{value:_showNotification2});Object.defineProperty(this,_createNotificationElement,{value:_createNotificationElement2});Object.defineProperty(this,_processRemainingChunksAsync,{value:_processRemainingChunksAsync2});Object.defineProperty(this,_splitEventsIntoChunks,{value:_splitEventsIntoChunks2});Object.defineProperty(this,_flatEvents,{value:_flatEvents2});Object.defineProperty(this,_processSubtitles,{value:_processSubtitles2});Object.defineProperty(this,_isQualityPoor,{value:_isQualityPoor2});Object.defineProperty(this,_formatSubtitles,{value:_formatSubtitles2});Object.defineProperty(this,_destroyManager,{value:_destroyManager2});Object.defineProperty(this,_startManager,{value:_startManager2});Object.defineProperty(this,_onCaptionsReady,{value:_onCaptionsReady2});Object.defineProperty(this,_handleInterceptedRequest,{value:_handleInterceptedRequest2});Object.defineProperty(this,_aiSegment,{value:_aiSegment2});Object.defineProperty(this,_getVideoId,{value:_getVideoId2});Object.defineProperty(this,_getSubtitleEvents,{value:_getSubtitleEvents2});Object.defineProperty(this,_getCaptionTracks,{value:_getCaptionTracks2});// todo: 优化逻辑 -Object.defineProperty(this,_findCaptionTrack,{value:_findCaptionTrack2});Object.defineProperty(this,_isSameLang,{value:_isSameLang2});Object.defineProperty(this,_injectToggleButton,{value:_injectToggleButton2});Object.defineProperty(this,_doubleClick,{value:_doubleClick2});Object.defineProperty(this,_waitForElement,{value:_waitForElement2});Object.defineProperty(this,_moAds,{value:_moAds2});Object.defineProperty(this,YouTubeCaptionProvider_videoEl,{get:_get_videoEl,set:void 0});Object.defineProperty(this,YouTubeCaptionProvider_setting,{writable:true,value:{}});Object.defineProperty(this,_videoId,{writable:true,value:""});Object.defineProperty(this,_subtitles,{writable:true,value:[]});Object.defineProperty(this,_managerInstance,{writable:true,value:null});Object.defineProperty(this,_toggleButton,{writable:true,value:null});Object.defineProperty(this,_enabled,{writable:true,value:false});Object.defineProperty(this,_ytControls,{writable:true,value:null});Object.defineProperty(this,_isBusy,{writable:true,value:false});Object.defineProperty(this,_fromLang,{writable:true,value:"auto"});Object.defineProperty(this,_notificationEl,{writable:true,value:null});Object.defineProperty(this,_notificationTimeout,{writable:true,value:null});Object.defineProperty(this,_i18n,{writable:true,value:()=>""});_classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting]=setting;_classPrivateFieldBase(this,_i18n)[_i18n]=newI18n(setting.uiLang||"zh");}initialize(){window.addEventListener("message",event=>{var _event$data;if(((_event$data=event.data)===null||_event$data===void 0?void 0:_event$data.type)===MSG_XHR_DATA_YOUTUBE){const{url,response}=event.data;if(url&&response){_classPrivateFieldBase(this,_handleInterceptedRequest)[_handleInterceptedRequest](url,response);}}});window.addEventListener("yt-navigate-finish",()=>{setTimeout(()=>{if(_classPrivateFieldBase(this,_toggleButton)[_toggleButton]){_classPrivateFieldBase(this,_toggleButton)[_toggleButton].style.opacity="0.5";}_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();_classPrivateFieldBase(this,_doubleClick)[_doubleClick]();},1000);});_classPrivateFieldBase(this,_waitForElement)[_waitForElement](CONTORLS_SELECT,ytControls=>_classPrivateFieldBase(this,_injectToggleButton)[_injectToggleButton](ytControls));_classPrivateFieldBase(this,_waitForElement)[_waitForElement](YT_AD_SELECT,adContainer=>{_classPrivateFieldBase(this,_moAds)[_moAds](adContainer);});}}function _get_videoEl(){return document.querySelector(VIDEO_SELECT);}function _moAds2(adContainer){const adLayoutSelector=".ytp-ad-player-overlay-layout";const skipBtnSelector=".ytp-skip-ad-button, .ytp-ad-skip-button, .ytp-ad-skip-button-modern";const observer=new MutationObserver(mutations=>{for(const mutation of mutations){if(mutation.type==="childList"){const videoEl=_classPrivateFieldBase(this,YouTubeCaptionProvider_videoEl)[YouTubeCaptionProvider_videoEl];mutation.addedNodes.forEach(node=>{if(node.nodeType!==Node.ELEMENT_NODE)return;if(node.matches(adLayoutSelector)){logger.debug("Youtube Provider: AD start playing!",node);// todo: 顺带把广告快速跳过 -if(videoEl){videoEl.playbackRate=16;videoEl.currentTime=videoEl.duration;}if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){_classPrivateFieldBase(this,_managerInstance)[_managerInstance].setIsAdPlaying(true);}}else if(node.matches(skipBtnSelector)){logger.debug("Youtube Provider: AD skip button!",node);node.click();}const skipBtn=node===null||node===void 0?void 0:node.querySelector(skipBtnSelector);if(skipBtn){logger.debug("Youtube Provider: AD skip button!!",skipBtn);skipBtn.click();}});mutation.removedNodes.forEach(node=>{if(node.nodeType!==Node.ELEMENT_NODE)return;if(node.matches(adLayoutSelector)){logger.debug("Youtube Provider: Ad ends!");if(videoEl){videoEl.playbackRate=1;}if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){_classPrivateFieldBase(this,_managerInstance)[_managerInstance].setIsAdPlaying(false);}}});}}});observer.observe(adContainer,{childList:true,subtree:true});}function _waitForElement2(selector,callback){const element=document.querySelector(selector);if(element){callback(element);return;}const observer=new MutationObserver((mutations,obs)=>{const targetNode=document.querySelector(selector);if(targetNode){obs.disconnect();callback(targetNode);}});observer.observe(document.body,{childList:true,subtree:true});}async function _doubleClick2(){var _classPrivateFieldLoo;const button=(_classPrivateFieldLoo=_classPrivateFieldBase(this,_ytControls)[_ytControls])===null||_classPrivateFieldLoo===void 0?void 0:_classPrivateFieldLoo.querySelector("button.ytp-subtitles-button");if(button){await sleep(randomBetween(50,100));button.click();await sleep(randomBetween(500,1000));button.click();}}function _injectToggleButton2(ytControls){var _classPrivateFieldLoo4;_classPrivateFieldBase(this,_ytControls)[_ytControls]=ytControls;const kissControls=document.createElement("div");kissControls.className="kiss-bilingual-subtitle-controls";Object.assign(kissControls.style,{height:"100%"});const toggleButton=document.createElement("button");toggleButton.className="ytp-button notranslate kiss-bilingual-subtitle-button";toggleButton.title=APP_NAME;Object.assign(toggleButton.style,{color:"white",opacity:"0.5"});toggleButton.appendChild(createLogoSVG());kissControls.appendChild(toggleButton);toggleButton.onclick=()=>{if(_classPrivateFieldBase(this,_isBusy)[_isBusy]){logger.info("Youtube Provider: It's budy now...");_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_data_processing"));}if(!_classPrivateFieldBase(this,_enabled)[_enabled]){var _classPrivateFieldLoo2;logger.info("Youtube Provider: Feature toggled ON.");_classPrivateFieldBase(this,_enabled)[_enabled]=true;(_classPrivateFieldLoo2=_classPrivateFieldBase(this,_toggleButton)[_toggleButton])===null||_classPrivateFieldLoo2===void 0?void 0:_classPrivateFieldLoo2.replaceChildren(createLogoSVG({isSelected:true}));_classPrivateFieldBase(this,_startManager)[_startManager]();}else{var _classPrivateFieldLoo3;logger.info("Youtube Provider: Feature toggled OFF.");_classPrivateFieldBase(this,_enabled)[_enabled]=false;(_classPrivateFieldLoo3=_classPrivateFieldBase(this,_toggleButton)[_toggleButton])===null||_classPrivateFieldLoo3===void 0?void 0:_classPrivateFieldLoo3.replaceChildren(createLogoSVG());_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();}};_classPrivateFieldBase(this,_toggleButton)[_toggleButton]=toggleButton;(_classPrivateFieldLoo4=_classPrivateFieldBase(this,_ytControls)[_ytControls])===null||_classPrivateFieldLoo4===void 0?void 0:_classPrivateFieldLoo4.prepend(kissControls);}function _isSameLang2(lang1,lang2){return lang1.slice(0,2)===lang2.slice(0,2);}function _findCaptionTrack2(captionTracks){if(!(captionTracks!==null&&captionTracks!==void 0&&captionTracks.length)){return null;}let captionTrack=null;const asrTrack=captionTracks.find(item=>item.kind==="asr");if(asrTrack){captionTrack=captionTracks.find(item=>item.kind!=="asr"&&_classPrivateFieldBase(this,_isSameLang)[_isSameLang](item.languageCode,asrTrack.languageCode));if(!captionTrack){captionTrack=asrTrack;}}if(!captionTrack){captionTrack=captionTracks.pop();}return captionTrack;}async function _getCaptionTracks2(videoId){try{var _data$captions,_data$captions$player;const url="https://www.youtube.com/watch?v=".concat(videoId);const html=await fetch(url).then(r=>r.text());const match=html.match(/ytInitialPlayerResponse\s*=\s*(\{.*?\});/s);if(!match)return[];const data=JSON.parse(match[1]);return(_data$captions=data.captions)===null||_data$captions===void 0?void 0:(_data$captions$player=_data$captions.playerCaptionsTracklistRenderer)===null||_data$captions$player===void 0?void 0:_data$captions$player.captionTracks;}catch(err){logger.info("Youtube Provider: get captionTracks",err);}}async function _getSubtitleEvents2(capUrl,potUrl,responseText){if(!potUrl.searchParams.get("tlang")&&potUrl.searchParams.get("kind")===capUrl.searchParams.get("kind")&&_classPrivateFieldBase(this,_isSameLang)[_isSameLang](potUrl.searchParams.get("lang"),capUrl.searchParams.get("lang"))){try{const json=JSON.parse(responseText);return json===null||json===void 0?void 0:json.events;}catch(err){logger.info("Youtube Provider: parse responseText",err);return null;}}try{potUrl.searchParams.delete("tlang");potUrl.searchParams.set("lang",capUrl.searchParams.get("lang"));potUrl.searchParams.set("fmt","json3");if(capUrl.searchParams.get("kind")){potUrl.searchParams.set("kind",capUrl.searchParams.get("kind"));}else{potUrl.searchParams.delete("kind");}const res=await fetch(potUrl.href);if(res!==null&&res!==void 0&&res.ok){const json=await res.json();return json===null||json===void 0?void 0:json.events;}logger.info("Youtube Provider: Failed to fetch subtitles: ".concat(res.status));return null;}catch(error){logger.info("Youtube Provider: fetching subtitles error",error);return null;}}function _getVideoId2(){const docUrl=new URL(document.location.href);return docUrl.searchParams.get("v");}async function _aiSegment2(_ref){let{videoId,fromLang,toLang,chunkEvents,segApiSetting}=_ref;try{const events=chunkEvents.filter(item=>item.text);const chunkSign="".concat(events[0].start," --> ").concat(events[events.length-1].end);logger.debug("Youtube Provider: aiSegment events",{videoId,chunkSign,fromLang,toLang,events});const subtitles=await apiSubtitle({videoId,chunkSign,fromLang,toLang,events,apiSetting:segApiSetting});logger.debug("Youtube Provider: aiSegment subtitles",subtitles);if(Array.isArray(subtitles)){return subtitles;}}catch(err){logger.info("Youtube Provider: ai segmentation",err);}return[];}async function _handleInterceptedRequest2(url,responseText){if(_classPrivateFieldBase(this,_isBusy)[_isBusy]){logger.info("Youtube Provider is busy...");return;}_classPrivateFieldBase(this,_isBusy)[_isBusy]=true;try{const videoId=_classPrivateFieldBase(this,_getVideoId)[_getVideoId]();if(!videoId){logger.info("Youtube Provider: videoId not found.");return;}if(videoId===_classPrivateFieldBase(this,_videoId)[_videoId]){logger.info("Youtube Provider: videoId already processed.");return;}const potUrl=new URL(url);if(videoId!==potUrl.searchParams.get("v")){logger.info("Youtube Provider: skip other timedtext.");return;}const{segApiSetting,toLang}=_classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting];const captionTracks=await _classPrivateFieldBase(this,_getCaptionTracks)[_getCaptionTracks](videoId);const captionTrack=_classPrivateFieldBase(this,_findCaptionTrack)[_findCaptionTrack](captionTracks);if(!captionTrack){logger.info("Youtube Provider: CaptionTrack not found.");return;}const capUrl=new URL(captionTrack.baseUrl);const events=await _classPrivateFieldBase(this,_getSubtitleEvents)[_getSubtitleEvents](capUrl,potUrl,responseText);if(!(events!==null&&events!==void 0&&events.length)){logger.info("Youtube Provider: SubtitleEvents not got.");return;}const lang=potUrl.searchParams.get("lang");const fromLang=OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang)||OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang.slice(0,2))||"auto";logger.debug("Youtube Provider: fromLang: ".concat(fromLang,", toLang: ").concat(toLang));if(_classPrivateFieldBase(this,_isSameLang)[_isSameLang](fromLang,toLang)){logger.info("Youtube Provider: skip same lang",fromLang,toLang);return;}_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("starting_to_process_subtitle"));const flatEvents=_classPrivateFieldBase(this,_flatEvents)[_flatEvents](events);if(!flatEvents.length)return;if(potUrl.searchParams.get("kind")==="asr"&&segApiSetting){logger.info("Youtube Provider: Starting AI ...");const eventChunks=_classPrivateFieldBase(this,_splitEventsIntoChunks)[_splitEventsIntoChunks](flatEvents,segApiSetting.chunkLength);const subtitlesFallback=()=>_classPrivateFieldBase(this,_formatSubtitles)[_formatSubtitles](flatEvents,fromLang);if(eventChunks.length===0){_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:subtitlesFallback(),fromLang,isInitialLoad:true});return;}const firstChunkEvents=eventChunks[0];const firstBatchSubtitles=await _classPrivateFieldBase(this,_aiSegment)[_aiSegment]({videoId,chunkEvents:firstChunkEvents,fromLang,toLang,segApiSetting});if(!(firstBatchSubtitles!==null&&firstBatchSubtitles!==void 0&&firstBatchSubtitles.length)){_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:subtitlesFallback(),fromLang,isInitialLoad:true});return;}_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:firstBatchSubtitles,fromLang,isInitialLoad:true});if(eventChunks.length>1){const remainingChunks=eventChunks.slice(1);_classPrivateFieldBase(this,_processRemainingChunksAsync)[_processRemainingChunksAsync]({chunks:remainingChunks,videoId,fromLang,toLang,segApiSetting});}}else{const subtitles=_classPrivateFieldBase(this,_formatSubtitles)[_formatSubtitles](flatEvents,fromLang);if(!(subtitles!==null&&subtitles!==void 0&&subtitles.length)){logger.info("Youtube Provider: No subtitles after format.");return;}_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles,fromLang,isInitialLoad:true});}}catch(error){logger.warn("Youtube Provider: unknow error",error);_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_load_failed"));}finally{_classPrivateFieldBase(this,_isBusy)[_isBusy]=false;}}function _onCaptionsReady2(_ref2){let{videoId,subtitles,fromLang}=_ref2;_classPrivateFieldBase(this,_subtitles)[_subtitles]=subtitles;_classPrivateFieldBase(this,_videoId)[_videoId]=videoId;_classPrivateFieldBase(this,_fromLang)[_fromLang]=fromLang;if(_classPrivateFieldBase(this,_toggleButton)[_toggleButton]){_classPrivateFieldBase(this,_toggleButton)[_toggleButton].style.opacity=subtitles.length?"1":"0.5";}_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();if(_classPrivateFieldBase(this,_enabled)[_enabled]){_classPrivateFieldBase(this,_startManager)[_startManager]();}else{_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_data_is_ready"));}}function _startManager2(){var _classPrivateFieldLoo5;if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){return;}const videoId=_classPrivateFieldBase(this,_getVideoId)[_getVideoId]();if(!((_classPrivateFieldLoo5=_classPrivateFieldBase(this,_subtitles)[_subtitles])!==null&&_classPrivateFieldLoo5!==void 0&&_classPrivateFieldLoo5.length)||_classPrivateFieldBase(this,_videoId)[_videoId]!==videoId){logger.info("Youtube Provider: No subtitles");_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("try_get_subtitle_data"));_classPrivateFieldBase(this,_doubleClick)[_doubleClick]();return;}const videoEl=_classPrivateFieldBase(this,YouTubeCaptionProvider_videoEl)[YouTubeCaptionProvider_videoEl];if(!videoEl){logger.warn("Youtube Provider: No video element found");return;}logger.info("Youtube Provider: Starting manager...");_classPrivateFieldBase(this,_managerInstance)[_managerInstance]=new BilingualSubtitleManager({videoEl,formattedSubtitles:_classPrivateFieldBase(this,_subtitles)[_subtitles],translationService:apiTranslate,setting:{..._classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting],fromLang:_classPrivateFieldBase(this,_fromLang)[_fromLang]}});_classPrivateFieldBase(this,_managerInstance)[_managerInstance].start();_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_load_succeed"));const ytCaption=document.querySelector(YT_CAPTION_SELECT);ytCaption&&(ytCaption.style.display="none");}function _destroyManager2(){if(!_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){return;}logger.info("Youtube Provider: Destroying manager...");_classPrivateFieldBase(this,_managerInstance)[_managerInstance].destroy();_classPrivateFieldBase(this,_managerInstance)[_managerInstance]=null;const ytCaption=document.querySelector(YT_CAPTION_SELECT);ytCaption&&(ytCaption.style.display="block");}function _formatSubtitles2(flatEvents,lang){if(!(flatEvents!==null&&flatEvents!==void 0&&flatEvents.length))return[];const noSpaceLanguages=["zh",// 中文 +Object.defineProperty(this,_findCaptionTrack,{value:_findCaptionTrack2});Object.defineProperty(this,_isSameLang,{value:_isSameLang2});Object.defineProperty(this,_injectToggleButton,{value:_injectToggleButton2});Object.defineProperty(this,_doubleClick,{value:_doubleClick2});Object.defineProperty(this,_waitForElement,{value:_waitForElement2});Object.defineProperty(this,_moAds,{value:_moAds2});Object.defineProperty(this,YouTubeCaptionProvider_videoEl,{get:_get_videoEl,set:void 0});Object.defineProperty(this,YouTubeCaptionProvider_setting,{writable:true,value:{}});Object.defineProperty(this,_videoId,{writable:true,value:""});Object.defineProperty(this,_subtitles,{writable:true,value:[]});Object.defineProperty(this,_managerInstance,{writable:true,value:null});Object.defineProperty(this,_toggleButton,{writable:true,value:null});Object.defineProperty(this,_enabled,{writable:true,value:false});Object.defineProperty(this,_ytControls,{writable:true,value:null});Object.defineProperty(this,_isBusy,{writable:true,value:false});Object.defineProperty(this,_fromLang,{writable:true,value:"auto"});Object.defineProperty(this,_notificationEl,{writable:true,value:null});Object.defineProperty(this,_notificationTimeout,{writable:true,value:null});Object.defineProperty(this,_i18n,{writable:true,value:()=>""});_classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting]=setting;_classPrivateFieldBase(this,_i18n)[_i18n]=newI18n(setting.uiLang||"zh");}initialize(){window.addEventListener("message",event=>{var _event$data;if(((_event$data=event.data)===null||_event$data===void 0?void 0:_event$data.type)===MSG_XHR_DATA_YOUTUBE){const{url,response}=event.data;if(url&&response){_classPrivateFieldBase(this,_handleInterceptedRequest)[_handleInterceptedRequest](url,response);}}});window.addEventListener("yt-navigate-finish",()=>{setTimeout(()=>{if(_classPrivateFieldBase(this,_toggleButton)[_toggleButton]){_classPrivateFieldBase(this,_toggleButton)[_toggleButton].style.opacity="0.5";}_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();_classPrivateFieldBase(this,_doubleClick)[_doubleClick]();},1000);});_classPrivateFieldBase(this,_waitForElement)[_waitForElement](CONTORLS_SELECT,ytControls=>_classPrivateFieldBase(this,_injectToggleButton)[_injectToggleButton](ytControls));_classPrivateFieldBase(this,_waitForElement)[_waitForElement](YT_AD_SELECT,adContainer=>{_classPrivateFieldBase(this,_moAds)[_moAds](adContainer);});}}function _get_videoEl(){return document.querySelector(VIDEO_SELECT);}function _moAds2(adContainer){const{skipAd=false}=_classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting];const adLayoutSelector=".ytp-ad-player-overlay-layout";const skipBtnSelector=".ytp-skip-ad-button, .ytp-ad-skip-button, .ytp-ad-skip-button-modern";const observer=new MutationObserver(mutations=>{for(const mutation of mutations){if(mutation.type==="childList"){const videoEl=_classPrivateFieldBase(this,YouTubeCaptionProvider_videoEl)[YouTubeCaptionProvider_videoEl];mutation.addedNodes.forEach(node=>{if(node.nodeType!==Node.ELEMENT_NODE)return;if(node.matches(adLayoutSelector)){logger.debug("Youtube Provider: AD start playing!",node);// todo: 顺带把广告快速跳过 +if(videoEl&&skipAd){videoEl.playbackRate=16;videoEl.currentTime=videoEl.duration;}if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){_classPrivateFieldBase(this,_managerInstance)[_managerInstance].setIsAdPlaying(true);}}else if(node.matches(skipBtnSelector)&&skipAd){logger.debug("Youtube Provider: AD skip button!",node);node.click();}if(skipAd){const skipBtn=node===null||node===void 0?void 0:node.querySelector(skipBtnSelector);if(skipBtn){logger.debug("Youtube Provider: AD skip button!!",skipBtn);skipBtn.click();}}});mutation.removedNodes.forEach(node=>{if(node.nodeType!==Node.ELEMENT_NODE)return;if(node.matches(adLayoutSelector)){logger.debug("Youtube Provider: Ad ends!");if(videoEl&&skipAd){videoEl.playbackRate=1;}if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){_classPrivateFieldBase(this,_managerInstance)[_managerInstance].setIsAdPlaying(false);}}});}}});observer.observe(adContainer,{childList:true,subtree:true});}function _waitForElement2(selector,callback){const element=document.querySelector(selector);if(element){callback(element);return;}const observer=new MutationObserver((mutations,obs)=>{const targetNode=document.querySelector(selector);if(targetNode){obs.disconnect();callback(targetNode);}});observer.observe(document.body,{childList:true,subtree:true});}async function _doubleClick2(){var _classPrivateFieldLoo;const button=(_classPrivateFieldLoo=_classPrivateFieldBase(this,_ytControls)[_ytControls])===null||_classPrivateFieldLoo===void 0?void 0:_classPrivateFieldLoo.querySelector("button.ytp-subtitles-button");if(button){await sleep(randomBetween(50,100));button.click();await sleep(randomBetween(500,1000));button.click();}}function _injectToggleButton2(ytControls){var _classPrivateFieldLoo4;_classPrivateFieldBase(this,_ytControls)[_ytControls]=ytControls;const kissControls=document.createElement("div");kissControls.className="notranslate kiss-subtitle-controls";Object.assign(kissControls.style,{height:"100%"});const toggleButton=document.createElement("button");toggleButton.className="ytp-button kiss-subtitle-button";toggleButton.title=APP_NAME;Object.assign(toggleButton.style,{color:"white",opacity:"0.5"});toggleButton.appendChild(createLogoSVG());kissControls.appendChild(toggleButton);toggleButton.onclick=()=>{if(_classPrivateFieldBase(this,_isBusy)[_isBusy]){logger.info("Youtube Provider: It's budy now...");_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_data_processing"));}if(!_classPrivateFieldBase(this,_enabled)[_enabled]){var _classPrivateFieldLoo2;logger.info("Youtube Provider: Feature toggled ON.");_classPrivateFieldBase(this,_enabled)[_enabled]=true;(_classPrivateFieldLoo2=_classPrivateFieldBase(this,_toggleButton)[_toggleButton])===null||_classPrivateFieldLoo2===void 0?void 0:_classPrivateFieldLoo2.replaceChildren(createLogoSVG({isSelected:true}));_classPrivateFieldBase(this,_startManager)[_startManager]();}else{var _classPrivateFieldLoo3;logger.info("Youtube Provider: Feature toggled OFF.");_classPrivateFieldBase(this,_enabled)[_enabled]=false;(_classPrivateFieldLoo3=_classPrivateFieldBase(this,_toggleButton)[_toggleButton])===null||_classPrivateFieldLoo3===void 0?void 0:_classPrivateFieldLoo3.replaceChildren(createLogoSVG());_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();}};_classPrivateFieldBase(this,_toggleButton)[_toggleButton]=toggleButton;(_classPrivateFieldLoo4=_classPrivateFieldBase(this,_ytControls)[_ytControls])===null||_classPrivateFieldLoo4===void 0?void 0:_classPrivateFieldLoo4.prepend(kissControls);}function _isSameLang2(lang1,lang2){return lang1.slice(0,2)===lang2.slice(0,2);}function _findCaptionTrack2(captionTracks){if(!(captionTracks!==null&&captionTracks!==void 0&&captionTracks.length)){return null;}let captionTrack=null;const asrTrack=captionTracks.find(item=>item.kind==="asr");if(asrTrack){captionTrack=captionTracks.find(item=>item.kind!=="asr"&&_classPrivateFieldBase(this,_isSameLang)[_isSameLang](item.languageCode,asrTrack.languageCode));if(!captionTrack){captionTrack=asrTrack;}}if(!captionTrack){captionTrack=captionTracks.pop();}return captionTrack;}async function _getCaptionTracks2(videoId){try{var _data$captions,_data$captions$player;const url="https://www.youtube.com/watch?v=".concat(videoId);const html=await fetch(url).then(r=>r.text());const match=html.match(/ytInitialPlayerResponse\s*=\s*(\{.*?\});/s);if(!match)return[];const data=JSON.parse(match[1]);return(_data$captions=data.captions)===null||_data$captions===void 0?void 0:(_data$captions$player=_data$captions.playerCaptionsTracklistRenderer)===null||_data$captions$player===void 0?void 0:_data$captions$player.captionTracks;}catch(err){logger.info("Youtube Provider: get captionTracks",err);}}async function _getSubtitleEvents2(capUrl,potUrl,responseText){if(!potUrl.searchParams.get("tlang")&&potUrl.searchParams.get("kind")===capUrl.searchParams.get("kind")&&_classPrivateFieldBase(this,_isSameLang)[_isSameLang](potUrl.searchParams.get("lang"),capUrl.searchParams.get("lang"))){try{const json=JSON.parse(responseText);return json===null||json===void 0?void 0:json.events;}catch(err){logger.info("Youtube Provider: parse responseText",err);return null;}}try{potUrl.searchParams.delete("tlang");potUrl.searchParams.set("lang",capUrl.searchParams.get("lang"));potUrl.searchParams.set("fmt","json3");if(capUrl.searchParams.get("kind")){potUrl.searchParams.set("kind",capUrl.searchParams.get("kind"));}else{potUrl.searchParams.delete("kind");}const res=await fetch(potUrl.href);if(res!==null&&res!==void 0&&res.ok){const json=await res.json();return json===null||json===void 0?void 0:json.events;}logger.info("Youtube Provider: Failed to fetch subtitles: ".concat(res.status));return null;}catch(error){logger.info("Youtube Provider: fetching subtitles error",error);return null;}}function _getVideoId2(){const docUrl=new URL(document.location.href);return docUrl.searchParams.get("v");}async function _aiSegment2(_ref){let{videoId,fromLang,toLang,chunkEvents,segApiSetting}=_ref;try{const events=chunkEvents.filter(item=>item.text);const chunkSign="".concat(events[0].start," --> ").concat(events[events.length-1].end);logger.debug("Youtube Provider: aiSegment events",{videoId,chunkSign,fromLang,toLang,events});const subtitles=await apiSubtitle({videoId,chunkSign,fromLang,toLang,events,apiSetting:segApiSetting});logger.debug("Youtube Provider: aiSegment subtitles",subtitles);if(Array.isArray(subtitles)){return subtitles;}}catch(err){logger.info("Youtube Provider: ai segmentation",err);}return[];}async function _handleInterceptedRequest2(url,responseText){if(_classPrivateFieldBase(this,_isBusy)[_isBusy]){logger.info("Youtube Provider is busy...");return;}_classPrivateFieldBase(this,_isBusy)[_isBusy]=true;try{const videoId=_classPrivateFieldBase(this,_getVideoId)[_getVideoId]();if(!videoId){logger.info("Youtube Provider: videoId not found.");return;}if(videoId===_classPrivateFieldBase(this,_videoId)[_videoId]){logger.info("Youtube Provider: videoId already processed.");return;}const potUrl=new URL(url);if(videoId!==potUrl.searchParams.get("v")){logger.info("Youtube Provider: skip other timedtext.");return;}const{segApiSetting,toLang}=_classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting];const captionTracks=await _classPrivateFieldBase(this,_getCaptionTracks)[_getCaptionTracks](videoId);const captionTrack=_classPrivateFieldBase(this,_findCaptionTrack)[_findCaptionTrack](captionTracks);if(!captionTrack){logger.info("Youtube Provider: CaptionTrack not found.");return;}const capUrl=new URL(captionTrack.baseUrl);const events=await _classPrivateFieldBase(this,_getSubtitleEvents)[_getSubtitleEvents](capUrl,potUrl,responseText);if(!(events!==null&&events!==void 0&&events.length)){logger.info("Youtube Provider: SubtitleEvents not got.");return;}const lang=potUrl.searchParams.get("lang");const fromLang=OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang)||OPT_LANGS_TO_CODE[OPT_TRANS_MICROSOFT].get(lang.slice(0,2))||"auto";logger.debug("Youtube Provider: fromLang: ".concat(fromLang,", toLang: ").concat(toLang));if(_classPrivateFieldBase(this,_isSameLang)[_isSameLang](fromLang,toLang)){logger.info("Youtube Provider: skip same lang",fromLang,toLang);return;}_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("starting_to_process_subtitle"));const flatEvents=_classPrivateFieldBase(this,_flatEvents)[_flatEvents](events);if(!flatEvents.length)return;if(potUrl.searchParams.get("kind")==="asr"&&segApiSetting){logger.info("Youtube Provider: Starting AI ...");const eventChunks=_classPrivateFieldBase(this,_splitEventsIntoChunks)[_splitEventsIntoChunks](flatEvents,segApiSetting.chunkLength);const subtitlesFallback=()=>_classPrivateFieldBase(this,_formatSubtitles)[_formatSubtitles](flatEvents,fromLang);if(eventChunks.length===0){_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:subtitlesFallback(),fromLang,isInitialLoad:true});return;}const firstChunkEvents=eventChunks[0];const firstBatchSubtitles=await _classPrivateFieldBase(this,_aiSegment)[_aiSegment]({videoId,chunkEvents:firstChunkEvents,fromLang,toLang,segApiSetting});if(!(firstBatchSubtitles!==null&&firstBatchSubtitles!==void 0&&firstBatchSubtitles.length)){_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:subtitlesFallback(),fromLang,isInitialLoad:true});return;}_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles:firstBatchSubtitles,fromLang,isInitialLoad:true});if(eventChunks.length>1){const remainingChunks=eventChunks.slice(1);_classPrivateFieldBase(this,_processRemainingChunksAsync)[_processRemainingChunksAsync]({chunks:remainingChunks,videoId,fromLang,toLang,segApiSetting});}}else{const subtitles=_classPrivateFieldBase(this,_formatSubtitles)[_formatSubtitles](flatEvents,fromLang);if(!(subtitles!==null&&subtitles!==void 0&&subtitles.length)){logger.info("Youtube Provider: No subtitles after format.");return;}_classPrivateFieldBase(this,_onCaptionsReady)[_onCaptionsReady]({videoId,subtitles,fromLang,isInitialLoad:true});}}catch(error){logger.warn("Youtube Provider: unknow error",error);_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_load_failed"));}finally{_classPrivateFieldBase(this,_isBusy)[_isBusy]=false;}}function _onCaptionsReady2(_ref2){let{videoId,subtitles,fromLang}=_ref2;_classPrivateFieldBase(this,_subtitles)[_subtitles]=subtitles;_classPrivateFieldBase(this,_videoId)[_videoId]=videoId;_classPrivateFieldBase(this,_fromLang)[_fromLang]=fromLang;if(_classPrivateFieldBase(this,_toggleButton)[_toggleButton]){_classPrivateFieldBase(this,_toggleButton)[_toggleButton].style.opacity=subtitles.length?"1":"0.5";}_classPrivateFieldBase(this,_destroyManager)[_destroyManager]();if(_classPrivateFieldBase(this,_enabled)[_enabled]){_classPrivateFieldBase(this,_startManager)[_startManager]();}else{_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_data_is_ready"));}}function _startManager2(){var _classPrivateFieldLoo5;if(_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){return;}const videoId=_classPrivateFieldBase(this,_getVideoId)[_getVideoId]();if(!((_classPrivateFieldLoo5=_classPrivateFieldBase(this,_subtitles)[_subtitles])!==null&&_classPrivateFieldLoo5!==void 0&&_classPrivateFieldLoo5.length)||_classPrivateFieldBase(this,_videoId)[_videoId]!==videoId){logger.info("Youtube Provider: No subtitles");_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("try_get_subtitle_data"));_classPrivateFieldBase(this,_doubleClick)[_doubleClick]();return;}const videoEl=_classPrivateFieldBase(this,YouTubeCaptionProvider_videoEl)[YouTubeCaptionProvider_videoEl];if(!videoEl){logger.warn("Youtube Provider: No video element found");return;}logger.info("Youtube Provider: Starting manager...");_classPrivateFieldBase(this,_managerInstance)[_managerInstance]=new BilingualSubtitleManager({videoEl,formattedSubtitles:_classPrivateFieldBase(this,_subtitles)[_subtitles],setting:{..._classPrivateFieldBase(this,YouTubeCaptionProvider_setting)[YouTubeCaptionProvider_setting],fromLang:_classPrivateFieldBase(this,_fromLang)[_fromLang]}});_classPrivateFieldBase(this,_managerInstance)[_managerInstance].start();_classPrivateFieldBase(this,_showNotification)[_showNotification](_classPrivateFieldBase(this,_i18n)[_i18n]("subtitle_load_succeed"));const ytCaption=document.querySelector(YT_CAPTION_SELECT);ytCaption&&(ytCaption.style.display="none");}function _destroyManager2(){if(!_classPrivateFieldBase(this,_managerInstance)[_managerInstance]){return;}logger.info("Youtube Provider: Destroying manager...");_classPrivateFieldBase(this,_managerInstance)[_managerInstance].destroy();_classPrivateFieldBase(this,_managerInstance)[_managerInstance]=null;const ytCaption=document.querySelector(YT_CAPTION_SELECT);ytCaption&&(ytCaption.style.display="block");}function _formatSubtitles2(flatEvents,lang){if(!(flatEvents!==null&&flatEvents!==void 0&&flatEvents.length))return[];const noSpaceLanguages=["zh",// 中文 "ja",// 日文 "ko",// 韩文(现代用空格,但结构上仍可连写) "th",// 泰文 @@ -35450,25 +35458,18 @@ if(videoEl){videoEl.playbackRate=16;videoEl.currentTime=videoEl.duration;}if(_cl const trustedTypesHelper=(()=>{const POLICY_NAME="kiss-translator-policy";let policy=null;if(globalThis.trustedTypes&&globalThis.trustedTypes.createPolicy){try{policy=globalThis.trustedTypes.createPolicy(POLICY_NAME,{createHTML:string=>string,createScript:string=>string,createScriptURL:string=>string});}catch(err){if(err.message.includes("already exists")){policy=globalThis.trustedTypes.policies.get(POLICY_NAME);}else{logger.info("cont create Trusted Types",err);}}}return{createHTML:htmlString=>{return policy?policy.createHTML(htmlString):htmlString;},createScript:scriptString=>{return policy?policy.createScript(scriptString):scriptString;},createScriptURL:urlString=>{return policy?policy.createScriptURL(urlString):urlString;},isEnabled:()=>policy!==null};})(); ;// CONCATENATED MODULE: ./src/libs/injector.js // Function to inject inline JavaScript code -const injectInlineJs=function(code){let id=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"kiss-translator-inline-js";if(document.getElementById(id)){return;}const el=document.createElement("script");el.type="text/javascript";el.id=id;el.textContent=trustedTypesHelper.createScript(code);(document.head||document.documentElement).appendChild(el);};// Function to inject external JavaScript file +const injectInlineJs=function(code){let id=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"kiss-translator-inline-js";if(document.getElementById(id)){return;}const el=document.createElement("script");el.type="text/javascript";el.id=id;el.textContent=trustedTypesHelper.createScript(code);(document.head||document.documentElement).appendChild(el);};const injectInlineJsBg=function(code){let id=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"kiss-translator-inline-js";if(document.getElementById(id)){return;}const el=document.createElement("script");el.type="text/javascript";el.id=id;el.textContent=code;(document.head||document.documentElement).appendChild(el);};// Function to inject external JavaScript file const injectExternalJs=function(src){let id=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"kiss-translator-external-js";if(document.getElementById(id)){return;}const el=document.createElement("script");el.type="text/javascript";el.id=id;el.src=trustedTypesHelper.createScriptURL(src);(document.head||document.documentElement).appendChild(el);};// Function to inject internal CSS code const injectInternalCss=styles=>{var _document$head;const el=document.createElement("style");el.setAttribute("data-source","kiss-inject injectInternalCss");el.textContent=styles;(_document$head=document.head)===null||_document$head===void 0?void 0:_document$head.appendChild(el);};// Function to inject external CSS file const injectExternalCss=href=>{var _document$head2;const el=document.createElement("link");el.setAttribute("data-source","kiss-inject injectExternalCss");el.setAttribute("rel","stylesheet");el.setAttribute("type","text/css");el.setAttribute("href",href);(_document$head2=document.head)===null||_document$head2===void 0?void 0:_document$head2.appendChild(el);}; -;// CONCATENATED MODULE: ./src/subtitle/XMLHttpRequestInjector.js -const XMLHttpRequestInjector=()=>{const originalOpen=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}const url=args[1];if(typeof url==="string"&&url.includes("timedtext")){this.addEventListener("load",function(){window.postMessage({type:"KISS_XHR_DATA_YOUTUBE",url:this.responseURL,response:this.responseText},window.location.origin);});}return originalOpen.apply(this,args);};}; +;// CONCATENATED MODULE: ./src/injectors/shadowroot.js +const shadowRootInjector=()=>{try{const orig=Element.prototype.attachShadow;Element.prototype.attachShadow=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}const root=orig.apply(this,args);window.postMessage({type:"KISS_SHADOW_ROOT_CREATED"},"*");return root;};}catch(err){console.log("shadowRootInjector",err);}}; +;// CONCATENATED MODULE: ./src/injectors/xmlhttp.js +const XMLHttpRequestInjector=()=>{try{const originalOpen=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}const url=args[1];if(typeof url==="string"&&url.includes("timedtext")){this.addEventListener("load",function(){window.postMessage({type:"KISS_XHR_DATA_YOUTUBE",url:this.responseURL,response:this.responseText},window.location.origin);});}return originalOpen.apply(this,args);};}catch(err){console.log("XMLHttpRequestInjector",err);}}; +;// CONCATENATED MODULE: ./src/injectors/index.js +const INJECTOR={subtitle:"injector-subtitle.js",shadowroot:"injector-shadowroot.js"};const injectorMap={[INJECTOR.subtitle]:XMLHttpRequestInjector,[INJECTOR.shadowroot]:shadowRootInjector};function injectJs(name){let id=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"kiss-translator-inject-js";const injector=injectorMap[name];if(!injector)return;if(isExt){const src=browser.runtime.getURL(name);injectExternalJs(src,id);}else{injectInlineJs("(".concat(injector,")()"),id);}} ;// CONCATENATED MODULE: ./src/subtitle/subtitle.js -const providers=[{pattern:"https://www.youtube.com",start:YouTubeInitializer}];function runSubtitle(_ref){let{href,setting,isUserscript}=_ref;try{const subtitleSetting=setting.subtitleSetting||DEFAULT_SUBTITLE_SETTING;if(!subtitleSetting.enabled){return;}const provider=providers.find(item=>isMatch(href,item.pattern));if(provider){const id="kiss-translator-xmlHttp-injector";if(isUserscript){injectInlineJs("(".concat(XMLHttpRequestInjector,")()"),id);}else{const src=browser.runtime.getURL("injector.js");injectExternalJs(src,id);}const apiSetting=setting.transApis.find(api=>api.apiSlug===subtitleSetting.apiSlug)||DEFAULT_API_SETTING;const segApiSetting=setting.transApis.find(api=>api.apiSlug===subtitleSetting.segSlug);provider.start({...subtitleSetting,apiSetting,segApiSetting,uiLang:setting.uiLang});}}catch(err){logger.error("start subtitle provider",err);}} -;// CONCATENATED MODULE: ./src/libs/shadowRootMonitor.js -/** - * @class ShadowRootMonitor - * @description 通过覆写 Element.prototype.attachShadow 来监控页面上所有新创建的 Shadow DOM - */class ShadowRootMonitor{/** - * @param {function(ShadowRoot): void} callback - 当一个新的 shadowRoot 被创建时调用的回调函数。 - */constructor(callback){if(typeof callback!=="function"){throw new Error("Callback must be a function.");}this.callback=callback;this.isMonitoring=false;this.originalAttachShadow=Element.prototype.attachShadow;}/** - * 开始监控 shadowRoot 的创建。 - */start(){if(this.isMonitoring){return;}const monitorInstance=this;Element.prototype.attachShadow=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}const shadowRoot=monitorInstance.originalAttachShadow.apply(this,args);if(shadowRoot){try{monitorInstance.callback(shadowRoot);}catch(error){log_kissLog("Error in ShadowRootMonitor callback",error);}}return shadowRoot;};this.isMonitoring=true;}/** - * 停止监控,并恢复原始的 attachShadow 方法。 - */stop(){if(!this.isMonitoring){return;}Element.prototype.attachShadow=this.originalAttachShadow;this.isMonitoring=false;}} +const providers=[{pattern:"https://www.youtube.com",start:YouTubeInitializer}];function runSubtitle(_ref){let{href,setting}=_ref;try{const subtitleSetting=setting.subtitleSetting||DEFAULT_SUBTITLE_SETTING;if(!subtitleSetting.enabled){return;}const provider=providers.find(item=>isMatch(href,item.pattern));if(provider){const id="kiss-translator-inject-subtitle-js";injectJs(INJECTOR.subtitle,id);const apiSetting=setting.transApis.find(api=>api.apiSlug===subtitleSetting.apiSlug)||DEFAULT_API_SETTING;const segApiSetting=setting.transApis.find(api=>api.apiSlug===subtitleSetting.segSlug);provider.start({...subtitleSetting,apiSetting,segApiSetting,uiLang:setting.uiLang});}}catch(err){logger.error("start subtitle provider",err);}} ;// CONCATENATED MODULE: ./node_modules/.pnpm/@babel+runtime@7.24.4/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js function _taggedTemplateLiteral(strings, raw) { if (!raw) { @@ -36535,8 +36536,8 @@ if(!deLang){try{var _browser$i18n,_res$languages,_res$languages$;const res=await var _class;/** * @class Translator * @description 翻译核心逻辑封装 - */var translator_setting=/*#__PURE__*/_classPrivateFieldKey("setting");var _rule=/*#__PURE__*/_classPrivateFieldKey("rule");var _isInitialized=/*#__PURE__*/_classPrivateFieldKey("isInitialized");var _isJsInjected=/*#__PURE__*/_classPrivateFieldKey("isJsInjected");var _mouseHoverEnabled=/*#__PURE__*/_classPrivateFieldKey("mouseHoverEnabled");var translator_enabled=/*#__PURE__*/_classPrivateFieldKey("enabled");var _runId=/*#__PURE__*/_classPrivateFieldKey("runId");var _termValues=/*#__PURE__*/_classPrivateFieldKey("termValues");var _combinedTermsRegex=/*#__PURE__*/_classPrivateFieldKey("combinedTermsRegex");var _combinedSkipsRegex=/*#__PURE__*/_classPrivateFieldKey("combinedSkipsRegex");var _placeholderRegex=/*#__PURE__*/_classPrivateFieldKey("placeholderRegex");var _translationTagName=/*#__PURE__*/_classPrivateFieldKey("translationTagName");var _eventName=/*#__PURE__*/_classPrivateFieldKey("eventName");var _docInfo=/*#__PURE__*/_classPrivateFieldKey("docInfo");var _glossary=/*#__PURE__*/_classPrivateFieldKey("glossary");var _textClass=/*#__PURE__*/_classPrivateFieldKey("textClass");var _textSheet=/*#__PURE__*/_classPrivateFieldKey("textSheet");var _apisMap=/*#__PURE__*/_classPrivateFieldKey("apisMap");var _favWords=/*#__PURE__*/_classPrivateFieldKey("favWords");var _observedNodes=/*#__PURE__*/_classPrivateFieldKey("observedNodes");var _translationNodes=/*#__PURE__*/_classPrivateFieldKey("translationNodes");var _viewNodes=/*#__PURE__*/_classPrivateFieldKey("viewNodes");var _processedNodes=/*#__PURE__*/_classPrivateFieldKey("processedNodes");var _rootNodes=/*#__PURE__*/_classPrivateFieldKey("rootNodes");var _skipMoNodes=/*#__PURE__*/_classPrivateFieldKey("skipMoNodes");var _removeKeydownHandler=/*#__PURE__*/_classPrivateFieldKey("removeKeydownHandler");var _hoveredNode=/*#__PURE__*/_classPrivateFieldKey("hoveredNode");var _boundMouseMoveHandler=/*#__PURE__*/_classPrivateFieldKey("boundMouseMoveHandler");var _boundKeyDownHandler=/*#__PURE__*/_classPrivateFieldKey("boundKeyDownHandler");var _io=/*#__PURE__*/_classPrivateFieldKey("io");var _mo=/*#__PURE__*/_classPrivateFieldKey("mo");var _dmm=/*#__PURE__*/_classPrivateFieldKey("dmm");var _srm=/*#__PURE__*/_classPrivateFieldKey("srm");var _rescanQueue=/*#__PURE__*/_classPrivateFieldKey("rescanQueue");var _isQueueProcessing=/*#__PURE__*/_classPrivateFieldKey("isQueueProcessing");var _ignoreSelector=/*#__PURE__*/_classPrivateFieldKey("ignoreSelector");var _apiSetting=/*#__PURE__*/_classPrivateFieldKey("apiSetting");var _placeholder=/*#__PURE__*/_classPrivateFieldKey("placeholder");var _run=/*#__PURE__*/_classPrivateFieldKey("run");var _init=/*#__PURE__*/_classPrivateFieldKey("init");var _createPlaceholderRegex=/*#__PURE__*/_classPrivateFieldKey("createPlaceholderRegex");var _createTextStyles=/*#__PURE__*/_classPrivateFieldKey("createTextStyles");var _injectSheet=/*#__PURE__*/_classPrivateFieldKey("injectSheet");var _parseTerms=/*#__PURE__*/_classPrivateFieldKey("parseTerms");var _parseAITerms=/*#__PURE__*/_classPrivateFieldKey("parseAITerms");var _getDocDescription=/*#__PURE__*/_classPrivateFieldKey("getDocDescription");var _createIntersectionObserver=/*#__PURE__*/_classPrivateFieldKey("createIntersectionObserver");var _createMutationObserver=/*#__PURE__*/_classPrivateFieldKey("createMutationObserver");var _createDebounceMouseMover=/*#__PURE__*/_classPrivateFieldKey("createDebounceMouseMover");var _createShadowRootMonitor=/*#__PURE__*/_classPrivateFieldKey("createShadowRootMonitor");var _handleMouseMove=/*#__PURE__*/_classPrivateFieldKey("handleMouseMove");var _handleKeyDown=/*#__PURE__*/_classPrivateFieldKey("handleKeyDown");var _toggleTargetNode=/*#__PURE__*/_classPrivateFieldKey("toggleTargetNode");var _findAllShadowRoots=/*#__PURE__*/_classPrivateFieldKey("findAllShadowRoots");var _findChangeContainer=/*#__PURE__*/_classPrivateFieldKey("findChangeContainer");var _queueForRescan=/*#__PURE__*/_classPrivateFieldKey("queueForRescan");var _rescanContainer=/*#__PURE__*/_classPrivateFieldKey("rescanContainer");var _reIO=/*#__PURE__*/_classPrivateFieldKey("reIO");var _reIOViewNodes=/*#__PURE__*/_classPrivateFieldKey("reIOViewNodes");var _startObserveShadowRoot=/*#__PURE__*/_classPrivateFieldKey("startObserveShadowRoot");var _startObserveRoot=/*#__PURE__*/_classPrivateFieldKey("startObserveRoot");var _startObserveNode=/*#__PURE__*/_classPrivateFieldKey("startObserveNode");var _queryNode=/*#__PURE__*/_classPrivateFieldKey("queryNode");var _scanNode=/*#__PURE__*/_classPrivateFieldKey("scanNode");var _processNode=/*#__PURE__*/_classPrivateFieldKey("processNode");var _highlightTextNode=/*#__PURE__*/_classPrivateFieldKey("highlightTextNode");var _highlightWordsDeeply=/*#__PURE__*/_classPrivateFieldKey("highlightWordsDeeply");var _splitTextNodesBySentence=/*#__PURE__*/_classPrivateFieldKey("splitTextNodesBySentence");var _removeHighlights=/*#__PURE__*/_classPrivateFieldKey("removeHighlights");var _removeBrTags=/*#__PURE__*/_classPrivateFieldKey("removeBrTags");var _shouldBreak=/*#__PURE__*/_classPrivateFieldKey("shouldBreak");var _isInvalidText=/*#__PURE__*/_classPrivateFieldKey("isInvalidText");var _translateNodeGroup=/*#__PURE__*/_classPrivateFieldKey("translateNodeGroup");var _serializeForTranslation=/*#__PURE__*/_classPrivateFieldKey("serializeForTranslation");var _restoreFromTranslation=/*#__PURE__*/_classPrivateFieldKey("restoreFromTranslation");var _translateFetch=/*#__PURE__*/_classPrivateFieldKey("translateFetch");var _findTranslationWrappers=/*#__PURE__*/_classPrivateFieldKey("findTranslationWrappers");var _cleanupAllNodes=/*#__PURE__*/_classPrivateFieldKey("cleanupAllNodes");var _cleanupAllTranslations=/*#__PURE__*/_classPrivateFieldKey("cleanupAllTranslations");var _cleanupDirectTranslations=/*#__PURE__*/_classPrivateFieldKey("cleanupDirectTranslations");var _removeTranslationElement=/*#__PURE__*/_classPrivateFieldKey("removeTranslationElement");var _restoreOriginal=/*#__PURE__*/_classPrivateFieldKey("restoreOriginal");var _removeNodes=/*#__PURE__*/_classPrivateFieldKey("removeNodes");var _toggleTranslationOnly=/*#__PURE__*/_classPrivateFieldKey("toggleTranslationOnly");var _updateStyle=/*#__PURE__*/_classPrivateFieldKey("updateStyle");var _refreshNode=/*#__PURE__*/_classPrivateFieldKey("refreshNode");var _performSyncNode=/*#__PURE__*/_classPrivateFieldKey("performSyncNode");var _resetOptions=/*#__PURE__*/_classPrivateFieldKey("resetOptions");var _enableMouseHover=/*#__PURE__*/_classPrivateFieldKey("enableMouseHover");var _disableMouseHover=/*#__PURE__*/_classPrivateFieldKey("disableMouseHover");var _initInjector=/*#__PURE__*/_classPrivateFieldKey("initInjector");var _removeInjector=/*#__PURE__*/_classPrivateFieldKey("removeInjector");var _translateTitle=/*#__PURE__*/_classPrivateFieldKey("translateTitle");class translator_Translator{// 默认规则 -static isElementOrFragment(el){return el instanceof Element||el instanceof DocumentFragment;}// 判断是否块级元素 + */var translator_setting=/*#__PURE__*/_classPrivateFieldKey("setting");var _rule=/*#__PURE__*/_classPrivateFieldKey("rule");var _isInitialized=/*#__PURE__*/_classPrivateFieldKey("isInitialized");var _isJsInjected=/*#__PURE__*/_classPrivateFieldKey("isJsInjected");var _isShadowRootJsInjected=/*#__PURE__*/_classPrivateFieldKey("isShadowRootJsInjected");var _mouseHoverEnabled=/*#__PURE__*/_classPrivateFieldKey("mouseHoverEnabled");var translator_enabled=/*#__PURE__*/_classPrivateFieldKey("enabled");var _runId=/*#__PURE__*/_classPrivateFieldKey("runId");var _termValues=/*#__PURE__*/_classPrivateFieldKey("termValues");var _combinedTermsRegex=/*#__PURE__*/_classPrivateFieldKey("combinedTermsRegex");var _combinedSkipsRegex=/*#__PURE__*/_classPrivateFieldKey("combinedSkipsRegex");var _placeholderRegex=/*#__PURE__*/_classPrivateFieldKey("placeholderRegex");var _translationTagName=/*#__PURE__*/_classPrivateFieldKey("translationTagName");var _eventName=/*#__PURE__*/_classPrivateFieldKey("eventName");var _docInfo=/*#__PURE__*/_classPrivateFieldKey("docInfo");var _glossary=/*#__PURE__*/_classPrivateFieldKey("glossary");var _textClass=/*#__PURE__*/_classPrivateFieldKey("textClass");var _textSheet=/*#__PURE__*/_classPrivateFieldKey("textSheet");var _apisMap=/*#__PURE__*/_classPrivateFieldKey("apisMap");var _favWords=/*#__PURE__*/_classPrivateFieldKey("favWords");var _observedNodes=/*#__PURE__*/_classPrivateFieldKey("observedNodes");var _translationNodes=/*#__PURE__*/_classPrivateFieldKey("translationNodes");var _viewNodes=/*#__PURE__*/_classPrivateFieldKey("viewNodes");var _processedNodes=/*#__PURE__*/_classPrivateFieldKey("processedNodes");var _rootNodes=/*#__PURE__*/_classPrivateFieldKey("rootNodes");var _skipMoNodes=/*#__PURE__*/_classPrivateFieldKey("skipMoNodes");var _removeKeydownHandler=/*#__PURE__*/_classPrivateFieldKey("removeKeydownHandler");var _hoveredNode=/*#__PURE__*/_classPrivateFieldKey("hoveredNode");var _boundMouseMoveHandler=/*#__PURE__*/_classPrivateFieldKey("boundMouseMoveHandler");var _boundKeyDownHandler=/*#__PURE__*/_classPrivateFieldKey("boundKeyDownHandler");var _windowMessageHandler=/*#__PURE__*/_classPrivateFieldKey("windowMessageHandler");var _debouncedFindShadowRoot=/*#__PURE__*/_classPrivateFieldKey("debouncedFindShadowRoot");var _io=/*#__PURE__*/_classPrivateFieldKey("io");var _mo=/*#__PURE__*/_classPrivateFieldKey("mo");var _dmm=/*#__PURE__*/_classPrivateFieldKey("dmm");var _rescanQueue=/*#__PURE__*/_classPrivateFieldKey("rescanQueue");var _isQueueProcessing=/*#__PURE__*/_classPrivateFieldKey("isQueueProcessing");var _ignoreSelector=/*#__PURE__*/_classPrivateFieldKey("ignoreSelector");var _apiSetting=/*#__PURE__*/_classPrivateFieldKey("apiSetting");var _placeholder=/*#__PURE__*/_classPrivateFieldKey("placeholder");var _run=/*#__PURE__*/_classPrivateFieldKey("run");var _init=/*#__PURE__*/_classPrivateFieldKey("init");var _handleWindowMessage=/*#__PURE__*/_classPrivateFieldKey("handleWindowMessage");var _attachShadowRootListener=/*#__PURE__*/_classPrivateFieldKey("attachShadowRootListener");var _removeShadowRootListener=/*#__PURE__*/_classPrivateFieldKey("removeShadowRootListener");var _findAndObserveShadowRoot=/*#__PURE__*/_classPrivateFieldKey("findAndObserveShadowRoot");var _createPlaceholderRegex=/*#__PURE__*/_classPrivateFieldKey("createPlaceholderRegex");var _createTextStyles=/*#__PURE__*/_classPrivateFieldKey("createTextStyles");var _injectSheet=/*#__PURE__*/_classPrivateFieldKey("injectSheet");var _parseTerms=/*#__PURE__*/_classPrivateFieldKey("parseTerms");var _parseAITerms=/*#__PURE__*/_classPrivateFieldKey("parseAITerms");var _getDocDescription=/*#__PURE__*/_classPrivateFieldKey("getDocDescription");var _createIntersectionObserver=/*#__PURE__*/_classPrivateFieldKey("createIntersectionObserver");var _createMutationObserver=/*#__PURE__*/_classPrivateFieldKey("createMutationObserver");var _createDebounceMouseMover=/*#__PURE__*/_classPrivateFieldKey("createDebounceMouseMover");var _handleMouseMove=/*#__PURE__*/_classPrivateFieldKey("handleMouseMove");var _handleKeyDown=/*#__PURE__*/_classPrivateFieldKey("handleKeyDown");var _toggleTargetNode=/*#__PURE__*/_classPrivateFieldKey("toggleTargetNode");var _findAllShadowRoots=/*#__PURE__*/_classPrivateFieldKey("findAllShadowRoots");var _findChangeContainer=/*#__PURE__*/_classPrivateFieldKey("findChangeContainer");var _queueForRescan=/*#__PURE__*/_classPrivateFieldKey("queueForRescan");var _rescanContainer=/*#__PURE__*/_classPrivateFieldKey("rescanContainer");var _reIO=/*#__PURE__*/_classPrivateFieldKey("reIO");var _reIOViewNodes=/*#__PURE__*/_classPrivateFieldKey("reIOViewNodes");var _startObserveShadowRoot=/*#__PURE__*/_classPrivateFieldKey("startObserveShadowRoot");var _startObserveRoot=/*#__PURE__*/_classPrivateFieldKey("startObserveRoot");var _startObserveNode=/*#__PURE__*/_classPrivateFieldKey("startObserveNode");var _queryNode=/*#__PURE__*/_classPrivateFieldKey("queryNode");var _scanNode=/*#__PURE__*/_classPrivateFieldKey("scanNode");var _processNode=/*#__PURE__*/_classPrivateFieldKey("processNode");var _highlightTextNode=/*#__PURE__*/_classPrivateFieldKey("highlightTextNode");var _highlightWordsDeeply=/*#__PURE__*/_classPrivateFieldKey("highlightWordsDeeply");var _splitTextNodesBySentence=/*#__PURE__*/_classPrivateFieldKey("splitTextNodesBySentence");var _removeHighlights=/*#__PURE__*/_classPrivateFieldKey("removeHighlights");var _removeBrTags=/*#__PURE__*/_classPrivateFieldKey("removeBrTags");var _shouldBreak=/*#__PURE__*/_classPrivateFieldKey("shouldBreak");var _isInvalidText=/*#__PURE__*/_classPrivateFieldKey("isInvalidText");var _translateNodeGroup=/*#__PURE__*/_classPrivateFieldKey("translateNodeGroup");var _serializeForTranslation=/*#__PURE__*/_classPrivateFieldKey("serializeForTranslation");var _restoreFromTranslation=/*#__PURE__*/_classPrivateFieldKey("restoreFromTranslation");var _translateFetch=/*#__PURE__*/_classPrivateFieldKey("translateFetch");var _findTranslationWrappers=/*#__PURE__*/_classPrivateFieldKey("findTranslationWrappers");var _cleanupAllNodes=/*#__PURE__*/_classPrivateFieldKey("cleanupAllNodes");var _cleanupAllTranslations=/*#__PURE__*/_classPrivateFieldKey("cleanupAllTranslations");var _cleanupDirectTranslations=/*#__PURE__*/_classPrivateFieldKey("cleanupDirectTranslations");var _removeTranslationElement=/*#__PURE__*/_classPrivateFieldKey("removeTranslationElement");var _restoreOriginal=/*#__PURE__*/_classPrivateFieldKey("restoreOriginal");var _removeNodes=/*#__PURE__*/_classPrivateFieldKey("removeNodes");var _toggleTranslationOnly=/*#__PURE__*/_classPrivateFieldKey("toggleTranslationOnly");var _updateStyle=/*#__PURE__*/_classPrivateFieldKey("updateStyle");var _refreshNode=/*#__PURE__*/_classPrivateFieldKey("refreshNode");var _performSyncNode=/*#__PURE__*/_classPrivateFieldKey("performSyncNode");var _resetOptions=/*#__PURE__*/_classPrivateFieldKey("resetOptions");var _enableMouseHover=/*#__PURE__*/_classPrivateFieldKey("enableMouseHover");var _disableMouseHover=/*#__PURE__*/_classPrivateFieldKey("disableMouseHover");var _initInjector=/*#__PURE__*/_classPrivateFieldKey("initInjector");var _removeInjector=/*#__PURE__*/_classPrivateFieldKey("removeInjector");var _translateTitle=/*#__PURE__*/_classPrivateFieldKey("translateTitle");class translator_Translator{// 默认规则 +static isElement(el){return el instanceof Element;}static isElementOrFragment(el){return el instanceof Element||el instanceof DocumentFragment;}// 判断是否块级元素 static isBlockNode(el){var _el$attributes,_el$attributes$displa,_el$attributes$displa2;if(!translator_Translator.isElementOrFragment(el))return false;if(translator_Translator.TAGS.INLINE.has(el.nodeName))return false;if(translator_Translator.TAGS.BLOCK.has(el.nodeName))return true;if((_el$attributes=el.attributes)!==null&&_el$attributes!==void 0&&(_el$attributes$displa=_el$attributes.display)!==null&&_el$attributes$displa!==void 0&&(_el$attributes$displa2=_el$attributes$displa.value)!==null&&_el$attributes$displa2!==void 0&&_el$attributes$displa2.includes("inline"))return false;if(translator_Translator.displayCache.has(el)){return translator_Translator.displayCache.get(el);}const isBlock=!window.getComputedStyle(el).display.startsWith("inline");translator_Translator.displayCache.set(el,isBlock);return isBlock;}// 判断是否包含块级子元素 static hasBlockNode(el){if(!translator_Translator.isElementOrFragment(el))return false;for(const child of el.childNodes){if(translator_Translator.isBlockNode(child)){return true;}}return false;}// 判断是否直接包含非空文本节点 static hasTextNode(el){if(!translator_Translator.isElementOrFragment(el))return false;for(const child of el.childNodes){if(child.nodeType===Node.TEXT_NODE&&/\S/.test(child.nodeValue)){return true;}}return false;}// 特殊字符转义 @@ -36584,15 +36585,15 @@ Object.defineProperty(this,_findChangeContainer,{value:_findChangeContainer2});/ Object.defineProperty(this,_findAllShadowRoots,{value:_findAllShadowRoots2});// 切换节点翻译状态 Object.defineProperty(this,_toggleTargetNode,{value:_toggleTargetNode2});// 快捷键按下时的处理器 Object.defineProperty(this,_handleKeyDown,{value:_handleKeyDown2});// 跟踪鼠标下的可翻译节点 -Object.defineProperty(this,_handleMouseMove,{value:_handleMouseMove2});// 创建shadowroot的回调 -Object.defineProperty(this,_createShadowRootMonitor,{value:_createShadowRootMonitor2});// 节流的鼠标悬停事件 +Object.defineProperty(this,_handleMouseMove,{value:_handleMouseMove2});// 节流的鼠标悬停事件 Object.defineProperty(this,_createDebounceMouseMover,{value:_createDebounceMouseMover2});// 监控页面动态变化 Object.defineProperty(this,_createMutationObserver,{value:_createMutationObserver2});// 监控翻译单元的可见性 Object.defineProperty(this,_createIntersectionObserver,{value:_createIntersectionObserver2});// todo: 利用AI总结 Object.defineProperty(this,_getDocDescription,{value:_getDocDescription2});Object.defineProperty(this,_parseAITerms,{value:_parseAITerms2});// 解析专业术语字符串 Object.defineProperty(this,_parseTerms,{value:_parseTerms2});// 注入样式 Object.defineProperty(this,_injectSheet,{value:_injectSheet2});// 创建样式 -Object.defineProperty(this,_createTextStyles,{value:_createTextStyles2});Object.defineProperty(this,_createPlaceholderRegex,{value:_createPlaceholderRegex2});// 初始化 +Object.defineProperty(this,_createTextStyles,{value:_createTextStyles2});Object.defineProperty(this,_createPlaceholderRegex,{value:_createPlaceholderRegex2});// 查找现有的所有shadowroot +Object.defineProperty(this,_findAndObserveShadowRoot,{value:_findAndObserveShadowRoot2});Object.defineProperty(this,_removeShadowRootListener,{value:_removeShadowRootListener2});Object.defineProperty(this,_attachShadowRootListener,{value:_attachShadowRootListener2});Object.defineProperty(this,_handleWindowMessage,{value:_handleWindowMessage2});// 初始化 Object.defineProperty(this,_init,{value:_init2});// 启动 Object.defineProperty(this,_run,{value:_run2});// 占位符 Object.defineProperty(this,_placeholder,{get:_get_placeholder,set:void 0});// 接口参数 @@ -36603,6 +36604,7 @@ Object.defineProperty(this,_ignoreSelector,{get:_get_ignoreSelector,set:void 0}) Object.defineProperty(this,_rule,{writable:true,value:void 0});// 规则 Object.defineProperty(this,_isInitialized,{writable:true,value:false});// 初始化状态 Object.defineProperty(this,_isJsInjected,{writable:true,value:false});// 注入用户JS +Object.defineProperty(this,_isShadowRootJsInjected,{writable:true,value:false});// Object.defineProperty(this,_mouseHoverEnabled,{writable:true,value:false});// 鼠标悬停翻译 Object.defineProperty(this,translator_enabled,{writable:true,value:false});// 全局默认状态 Object.defineProperty(this,_runId,{writable:true,value:0});// 用于中止过期的异步请求 @@ -36628,13 +36630,11 @@ Object.defineProperty(this,_removeKeydownHandler,{writable:true,value:void 0});/ Object.defineProperty(this,_hoveredNode,{writable:true,value:null});// 存储当前悬停的可翻译节点 Object.defineProperty(this,_boundMouseMoveHandler,{writable:true,value:void 0});// 鼠标事件 Object.defineProperty(this,_boundKeyDownHandler,{writable:true,value:void 0});// 键盘事件 -Object.defineProperty(this,_io,{writable:true,value:void 0});// IntersectionObserver +Object.defineProperty(this,_windowMessageHandler,{writable:true,value:null});Object.defineProperty(this,_debouncedFindShadowRoot,{writable:true,value:null});Object.defineProperty(this,_io,{writable:true,value:void 0});// IntersectionObserver Object.defineProperty(this,_mo,{writable:true,value:void 0});// MutationObserver Object.defineProperty(this,_dmm,{writable:true,value:void 0});// DebounceMouseMover -Object.defineProperty(this,_srm,{writable:true,value:void 0});// ShadowRootMonitor Object.defineProperty(this,_rescanQueue,{writable:true,value:new Set()});// “脏容器”队列 -Object.defineProperty(this,_isQueueProcessing,{writable:true,value:false});_classPrivateFieldBase(this,translator_setting)[translator_setting]={...translator_Translator.DEFAULT_OPTIONS,...setting};_classPrivateFieldBase(this,_rule)[_rule]={...translator_Translator.DEFAULT_RULE,...rule};_classPrivateFieldBase(this,_favWords)[_favWords]=favWords;_classPrivateFieldBase(this,_apisMap)[_apisMap]=new Map(_classPrivateFieldBase(this,translator_setting)[translator_setting].transApis.map(api=>[api.apiSlug,api]));_classPrivateFieldBase(this,_eventName)[_eventName]=utils_genEventName();_classPrivateFieldBase(this,_docInfo)[_docInfo]={title:document.title,description:_classPrivateFieldBase(this,_getDocDescription)[_getDocDescription]()};_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex]=new RegExp(translator_Translator.BUILTIN_SKIP_PATTERNS.map(r=>"(".concat(r.source,")")).join("|"));_classPrivateFieldBase(this,_placeholderRegex)[_placeholderRegex]=_classPrivateFieldBase(this,_createPlaceholderRegex)[_createPlaceholderRegex]();_classPrivateFieldBase(this,_parseTerms)[_parseTerms](_classPrivateFieldBase(this,_rule)[_rule].terms);_classPrivateFieldBase(this,_parseAITerms)[_parseAITerms](_classPrivateFieldBase(this,_rule)[_rule].aiTerms);_classPrivateFieldBase(this,_createTextStyles)[_createTextStyles]();_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]=_classPrivateFieldBase(this,_handleMouseMove)[_handleMouseMove].bind(this);_classPrivateFieldBase(this,_boundKeyDownHandler)[_boundKeyDownHandler]=_classPrivateFieldBase(this,_handleKeyDown)[_handleKeyDown].bind(this);_classPrivateFieldBase(this,_io)[_io]=_classPrivateFieldBase(this,_createIntersectionObserver)[_createIntersectionObserver]();_classPrivateFieldBase(this,_mo)[_mo]=_classPrivateFieldBase(this,_createMutationObserver)[_createMutationObserver]();_classPrivateFieldBase(this,_dmm)[_dmm]=_classPrivateFieldBase(this,_createDebounceMouseMover)[_createDebounceMouseMover]();_classPrivateFieldBase(this,_srm)[_srm]=_classPrivateFieldBase(this,_createShadowRootMonitor)[_createShadowRootMonitor]();// 监控shadowroot -if(_classPrivateFieldBase(this,_rule)[_rule].hasShadowroot==="true"){_classPrivateFieldBase(this,_srm)[_srm].start();}// 鼠标悬停翻译 +Object.defineProperty(this,_isQueueProcessing,{writable:true,value:false});_classPrivateFieldBase(this,translator_setting)[translator_setting]={...translator_Translator.DEFAULT_OPTIONS,...setting};_classPrivateFieldBase(this,_rule)[_rule]={...translator_Translator.DEFAULT_RULE,...rule};_classPrivateFieldBase(this,_favWords)[_favWords]=favWords;_classPrivateFieldBase(this,_apisMap)[_apisMap]=new Map(_classPrivateFieldBase(this,translator_setting)[translator_setting].transApis.map(api=>[api.apiSlug,api]));_classPrivateFieldBase(this,_eventName)[_eventName]=utils_genEventName();_classPrivateFieldBase(this,_docInfo)[_docInfo]={title:document.title,description:_classPrivateFieldBase(this,_getDocDescription)[_getDocDescription]()};_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex]=new RegExp(translator_Translator.BUILTIN_SKIP_PATTERNS.map(r=>"(".concat(r.source,")")).join("|"));_classPrivateFieldBase(this,_placeholderRegex)[_placeholderRegex]=_classPrivateFieldBase(this,_createPlaceholderRegex)[_createPlaceholderRegex]();_classPrivateFieldBase(this,_parseTerms)[_parseTerms](_classPrivateFieldBase(this,_rule)[_rule].terms);_classPrivateFieldBase(this,_parseAITerms)[_parseAITerms](_classPrivateFieldBase(this,_rule)[_rule].aiTerms);_classPrivateFieldBase(this,_createTextStyles)[_createTextStyles]();_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]=_classPrivateFieldBase(this,_handleMouseMove)[_handleMouseMove].bind(this);_classPrivateFieldBase(this,_boundKeyDownHandler)[_boundKeyDownHandler]=_classPrivateFieldBase(this,_handleKeyDown)[_handleKeyDown].bind(this);_classPrivateFieldBase(this,_io)[_io]=_classPrivateFieldBase(this,_createIntersectionObserver)[_createIntersectionObserver]();_classPrivateFieldBase(this,_mo)[_mo]=_classPrivateFieldBase(this,_createMutationObserver)[_createMutationObserver]();_classPrivateFieldBase(this,_dmm)[_dmm]=_classPrivateFieldBase(this,_createDebounceMouseMover)[_createDebounceMouseMover]();_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]=_classPrivateFieldBase(this,_handleWindowMessage)[_handleWindowMessage].bind(this);_classPrivateFieldBase(this,_debouncedFindShadowRoot)[_debouncedFindShadowRoot]=debounce(_classPrivateFieldBase(this,_findAndObserveShadowRoot)[_findAndObserveShadowRoot].bind(this),300);// 鼠标悬停翻译 if(_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting.useMouseHover){_classPrivateFieldBase(this,_enableMouseHover)[_enableMouseHover]();}if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>_classPrivateFieldBase(this,_run)[_run]());}else{_classPrivateFieldBase(this,_run)[_run]();}}// 切换鼠标悬停翻译 toggleMouseHover(){_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled]?_classPrivateFieldBase(this,_disableMouseHover)[_disableMouseHover]():_classPrivateFieldBase(this,_enableMouseHover)[_enableMouseHover]();}// 开启翻译 enable(){if(_classPrivateFieldBase(this,translator_enabled)[translator_enabled])return;_classPrivateFieldBase(this,translator_enabled)[translator_enabled]=true;_classPrivateFieldBase(this,_rule)[_rule].transOpen="true";_classPrivateFieldBase(this,_runId)[_runId]++;if(_classPrivateFieldBase(this,_isInitialized)[_isInitialized]){if(_classPrivateFieldBase(this,translator_setting)[translator_setting].transAllnow){this.rescan();}else{_classPrivateFieldBase(this,_reIOViewNodes)[_reIOViewNodes]();}}else{_classPrivateFieldBase(this,_init)[_init]();}if(_classPrivateFieldBase(this,_rule)[_rule].transTitle==="true"){_classPrivateFieldBase(this,_translateTitle)[_translateTitle]();}}// 关闭翻译 @@ -36646,22 +36646,22 @@ toggle(){_classPrivateFieldBase(this,translator_enabled)[translator_enabled]?thi toggleStyle(){const textStyle=_classPrivateFieldBase(this,_rule)[_rule].textStyle===OPT_STYLE_FUZZY?OPT_STYLE_NONE:OPT_STYLE_FUZZY;this.updateRule({textStyle});}// 切换划词翻译 toggleTransbox(){_classPrivateFieldBase(this,translator_setting)[translator_setting].tranboxSetting.transOpen=!_classPrivateFieldBase(this,translator_setting)[translator_setting].tranboxSetting.transOpen;}// 切换输入框翻译 toggleInputTranslate(){_classPrivateFieldBase(this,translator_setting)[translator_setting].inputRule.transOpen=!_classPrivateFieldBase(this,translator_setting)[translator_setting].inputRule.transOpen;}// 停止运行 -stop(){this.disable();_classPrivateFieldBase(this,_resetOptions)[_resetOptions]();_classPrivateFieldBase(this,_srm)[_srm].stop();_classPrivateFieldBase(this,_disableMouseHover)[_disableMouseHover]();_classPrivateFieldBase(this,_removeInjector)[_removeInjector]();_classPrivateFieldBase(this,_isInitialized)[_isInitialized]=false;}// 更新规则 -updateRule(newRule){let hasChanged=false;let needsRescan=false;for(const key in newRule){if(Object.prototype.hasOwnProperty.call(_classPrivateFieldBase(this,_rule)[_rule],key)&&_classPrivateFieldBase(this,_rule)[_rule][key]!==newRule[key]){_classPrivateFieldBase(this,_rule)[_rule][key]=newRule[key];if(key==="autoScan"||key==="hasShadowroot"){needsRescan=true;}else{hasChanged=true;}}}if(needsRescan||_classPrivateFieldBase(this,translator_enabled)[translator_enabled]&&_classPrivateFieldBase(this,translator_setting)[translator_setting].transAllnow){this.rescan();return;}if(hasChanged){_classPrivateFieldBase(this,_reIOViewNodes)[_reIOViewNodes]();}}get setting(){return{..._classPrivateFieldBase(this,translator_setting)[translator_setting]};}get rule(){return{..._classPrivateFieldBase(this,_rule)[_rule]};}get docInfo(){return{..._classPrivateFieldBase(this,_docInfo)[_docInfo]};}get eventName(){return _classPrivateFieldBase(this,_eventName)[_eventName];}}_class=translator_Translator;function _get_ignoreSelector(){return"".concat(_class.BUILTIN_IGNORE_SELECTOR,", ").concat(_classPrivateFieldBase(this,_rule)[_rule].ignoreSelector);}function _get_apiSetting(){// return ( +stop(){this.disable();_classPrivateFieldBase(this,_resetOptions)[_resetOptions]();_classPrivateFieldBase(this,_disableMouseHover)[_disableMouseHover]();_classPrivateFieldBase(this,_removeInjector)[_removeInjector]();_classPrivateFieldBase(this,_isInitialized)[_isInitialized]=false;}// 更新规则 +updateRule(newRule){let hasChanged=false;let needsRescan=false;for(const key in newRule){if(Object.prototype.hasOwnProperty.call(_classPrivateFieldBase(this,_rule)[_rule],key)&&_classPrivateFieldBase(this,_rule)[_rule][key]!==newRule[key]){_classPrivateFieldBase(this,_rule)[_rule][key]=newRule[key];if(key==="autoScan"||key==="hasShadowroot"){needsRescan=true;}else{hasChanged=true;}}}if(needsRescan||_classPrivateFieldBase(this,translator_enabled)[translator_enabled]&&_classPrivateFieldBase(this,translator_setting)[translator_setting].transAllnow){this.rescan();return;}if(hasChanged){_classPrivateFieldBase(this,_reIOViewNodes)[_reIOViewNodes]();}}get setting(){return{..._classPrivateFieldBase(this,translator_setting)[translator_setting]};}get rule(){return{..._classPrivateFieldBase(this,_rule)[_rule]};}get docInfo(){return{..._classPrivateFieldBase(this,_docInfo)[_docInfo]};}get eventName(){return _classPrivateFieldBase(this,_eventName)[_eventName];}}_class=translator_Translator;function _get_ignoreSelector(){if(_classPrivateFieldBase(this,_rule)[_rule].autoScan==="false"){return"".concat(_class.KISS_IGNORE_SELECTOR,", ").concat(_classPrivateFieldBase(this,_rule)[_rule].ignoreSelector);}return"".concat(_class.BUILTIN_IGNORE_SELECTOR,", ").concat(_classPrivateFieldBase(this,_rule)[_rule].ignoreSelector);}function _get_apiSetting(){// return ( // this.#setting.transApis.find( // (api) => api.apiSlug === this.#rule.apiSlug // ) || DEFAULT_API_SETTING // ); return _classPrivateFieldBase(this,_apisMap)[_apisMap].get(_classPrivateFieldBase(this,_rule)[_rule].apiSlug)||DEFAULT_API_SETTING;}function _get_placeholder(){const[startDelimiter,endDelimiter]=_classPrivateFieldBase(this,_apiSetting)[_apiSetting].placeholder.split(" ");return{startDelimiter,endDelimiter,tagName:_classPrivateFieldBase(this,_apiSetting)[_apiSetting].placetag};}function _run2(){if(_classPrivateFieldBase(this,_rule)[_rule].transOpen==="true"){this.enable();}else if(_classPrivateFieldBase(this,translator_setting)[translator_setting].preInit){_classPrivateFieldBase(this,_init)[_init]();}}function _init2(){_classPrivateFieldBase(this,_isInitialized)[_isInitialized]=true;// 注入JS/CSS _classPrivateFieldBase(this,_initInjector)[_initInjector]();// 查找根节点并扫描 -document.querySelectorAll(_classPrivateFieldBase(this,_rule)[_rule].rootsSelector||"body").forEach(root=>{_classPrivateFieldBase(this,_startObserveRoot)[_startObserveRoot](root);});// 查找现有的所有shadowroot -if(_classPrivateFieldBase(this,_rule)[_rule].hasShadowroot==="true"){try{_classPrivateFieldBase(this,_findAllShadowRoots)[_findAllShadowRoots]().forEach(shadowRoot=>{_classPrivateFieldBase(this,_startObserveShadowRoot)[_startObserveShadowRoot](shadowRoot);});}catch(err){log_kissLog("findAllShadowRoots",err);}}}function _createPlaceholderRegex2(){const escapedStart=_class.escapeRegex(_classPrivateFieldBase(this,_placeholder)[_placeholder].startDelimiter);const escapedEnd=_class.escapeRegex(_classPrivateFieldBase(this,_placeholder)[_placeholder].endDelimiter);const patternString="(".concat(escapedStart,"\\d+").concat(escapedEnd,"|<\\/?\\w+\\d+>)");const flags="g";return new RegExp(patternString,flags);}function _createTextStyles2(){const[textClass,textStyles]=genTextClass({..._classPrivateFieldBase(this,_rule)[_rule]});const textSheet=new CSSStyleSheet();textSheet.replaceSync(textStyles);_classPrivateFieldBase(this,_textClass)[_textClass]=textClass;_classPrivateFieldBase(this,_textSheet)[_textSheet]=textSheet;}function _injectSheet2(shadowRoot){if(!shadowRoot.adoptedStyleSheets.includes(_classPrivateFieldBase(this,_textSheet)[_textSheet])){shadowRoot.adoptedStyleSheets=[...shadowRoot.adoptedStyleSheets,_classPrivateFieldBase(this,_textSheet)[_textSheet]];}}function _parseTerms2(termsString){_classPrivateFieldBase(this,_termValues)[_termValues]=[];_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex]=null;if(!termsString||typeof termsString!=="string")return;const termPatterns=[];const lines=termsString.split(/\n|;/);// 按换行或分号分割 -for(const line of lines){const trimmedLine=line.trim();if(!trimmedLine)continue;let lastCommaIndex=trimmedLine.lastIndexOf(",");if(lastCommaIndex===-1){lastCommaIndex=trimmedLine.length;}const key=trimmedLine.substring(0,lastCommaIndex).trim();const value=trimmedLine.substring(lastCommaIndex+1).trim();if(key){try{new RegExp(key);termPatterns.push("(".concat(key,")"));_classPrivateFieldBase(this,_termValues)[_termValues].push(value);}catch(err){log_kissLog("Invalid RegExp for term: \"".concat(key,"\""),err);}}}if(termPatterns.length>0){_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex]=new RegExp(termPatterns.join("|"),"g");}}function _parseAITerms2(termsString){if(!termsString||typeof termsString!=="string")return;try{_classPrivateFieldBase(this,_glossary)[_glossary]=Object.fromEntries(termsString.split(/\n|;/).map(line=>{const[k="",v=""]=line.split(",").map(s=>s.trim());return[k,v];}).filter(_ref2=>{let[k]=_ref2;return k;}));}catch(err){log_kissLog("parse aiterms",err);}}function _getDocDescription2(){try{const meta=document.querySelector('meta[name="description"]');const description=(meta===null||meta===void 0?void 0:meta.getAttribute("content"))||"";return truncateWords(description);}catch(err){log_kissLog("get description",err);}return"";}function _createIntersectionObserver2(){const pending=new Set();const flush=debounce(()=>{pending.forEach(node=>_classPrivateFieldBase(this,_performSyncNode)[_performSyncNode](node));pending.clear();},_classPrivateFieldBase(this,translator_setting)[translator_setting].transInterval);return new IntersectionObserver(entries=>{entries.forEach(entry=>{if(entry.isIntersecting){_classPrivateFieldBase(this,_viewNodes)[_viewNodes].add(entry.target);pending.add(entry.target);flush();}else{_classPrivateFieldBase(this,_viewNodes)[_viewNodes].delete(entry.target);}});},{threshold:0.01});}function _createMutationObserver2(){return new MutationObserver(mutations=>{for(const mutation of mutations){var _mutation$nextSibling;if(_classPrivateFieldBase(this,_skipMoNodes)[_skipMoNodes].has(mutation.target)||((_mutation$nextSibling=mutation.nextSibling)===null||_mutation$nextSibling===void 0?void 0:_mutation$nextSibling.tagName)===_classPrivateFieldBase(this,_translationTagName)[_translationTagName]){continue;}if(mutation.type==="characterData"){if(mutation.oldValue!==mutation.target.nodeValue&&!_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex].test(mutation.target.nodeValue)){_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](mutation.target.parentElement);}}else if(mutation.type==="childList"){let nodes=new Set();let hasText=false;mutation.addedNodes.forEach(node=>{if(_classPrivateFieldBase(this,_skipMoNodes)[_skipMoNodes].has(node)||node.nodeName===_classPrivateFieldBase(this,_translationTagName)[_translationTagName]){return;}if(node.nodeType===Node.TEXT_NODE){hasText=true;}else if(_class.isElementOrFragment(node)){nodes.add(node);}});if(hasText){_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](mutation.target);}else{nodes.forEach(node=>_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](node));}}}});}function _createDebounceMouseMover2(){return debounce(targetNode=>{const startNode=targetNode;let foundNode=null;while(targetNode&&targetNode!==document.body){if(_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(targetNode)){foundNode=targetNode;break;}targetNode=targetNode.parentElement;}_classPrivateFieldBase(this,_hoveredNode)[_hoveredNode]=foundNode||startNode;const{mouseHoverKey}=_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting;if(mouseHoverKey.length===0&&!_classPrivateFieldBase(this,_isInitialized)[_isInitialized]){_classPrivateFieldBase(this,_init)[_init]();}if(mouseHoverKey.length===0&&foundNode){_classPrivateFieldBase(this,_processNode)[_processNode](foundNode);}},100);}function _createShadowRootMonitor2(){return new ShadowRootMonitor(shadowRoot=>{_classPrivateFieldBase(this,_startObserveShadowRoot)[_startObserveShadowRoot](shadowRoot);});}function _handleMouseMove2(event){let targetNode=event.composedPath()[0];_classPrivateFieldBase(this,_dmm)[_dmm](targetNode);}function _handleKeyDown2(){if(!_classPrivateFieldBase(this,_isInitialized)[_isInitialized]){_classPrivateFieldBase(this,_init)[_init]();}let targetNode=_classPrivateFieldBase(this,_hoveredNode)[_hoveredNode];if(!targetNode||!_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(targetNode))return;_classPrivateFieldBase(this,_toggleTargetNode)[_toggleTargetNode](targetNode);}function _toggleTargetNode2(targetNode){if(_classPrivateFieldBase(this,_processedNodes)[_processedNodes].has(targetNode)){_classPrivateFieldBase(this,_cleanupDirectTranslations)[_cleanupDirectTranslations](targetNode);}else{_classPrivateFieldBase(this,_processNode)[_processNode](targetNode);}}function _findAllShadowRoots2(){let root=arguments.length>0&&arguments[0]!==undefined?arguments[0]:document.body;let results=arguments.length>1&&arguments[1]!==undefined?arguments[1]:new Set();// const start = performance.now(); +document.querySelectorAll(_classPrivateFieldBase(this,_rule)[_rule].rootsSelector||"body").forEach(root=>{_classPrivateFieldBase(this,_startObserveRoot)[_startObserveRoot](root);});if(_classPrivateFieldBase(this,_rule)[_rule].hasShadowroot==="true"){_classPrivateFieldBase(this,_attachShadowRootListener)[_attachShadowRootListener]();_classPrivateFieldBase(this,_findAndObserveShadowRoot)[_findAndObserveShadowRoot]();}}function _handleWindowMessage2(event){var _event$data;if(((_event$data=event.data)===null||_event$data===void 0?void 0:_event$data.type)==="KISS_SHADOW_ROOT_CREATED"){_classPrivateFieldBase(this,_debouncedFindShadowRoot)[_debouncedFindShadowRoot]();}}function _attachShadowRootListener2(){if(!_classPrivateFieldBase(this,_isShadowRootJsInjected)[_isShadowRootJsInjected]){const id="kiss-translator-inject-shadowroot-js";injectJs(INJECTOR.shadowroot,id);_classPrivateFieldBase(this,_isShadowRootJsInjected)[_isShadowRootJsInjected]=true;}window.addEventListener("message",_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]);}function _removeShadowRootListener2(){window.removeEventListener("message",_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]);}function _findAndObserveShadowRoot2(){try{_classPrivateFieldBase(this,_findAllShadowRoots)[_findAllShadowRoots]().forEach(shadowRoot=>{_classPrivateFieldBase(this,_startObserveShadowRoot)[_startObserveShadowRoot](shadowRoot);});}catch(err){log_kissLog("findAllShadowRoots",err);}}function _createPlaceholderRegex2(){const escapedStart=_class.escapeRegex(_classPrivateFieldBase(this,_placeholder)[_placeholder].startDelimiter);const escapedEnd=_class.escapeRegex(_classPrivateFieldBase(this,_placeholder)[_placeholder].endDelimiter);const patternString="(".concat(escapedStart,"\\d+").concat(escapedEnd,"|<\\/?\\w+\\d+>)");const flags="g";return new RegExp(patternString,flags);}function _createTextStyles2(){const[textClass,textStyles]=genTextClass({..._classPrivateFieldBase(this,_rule)[_rule]});const textSheet=new CSSStyleSheet();textSheet.replaceSync(textStyles);_classPrivateFieldBase(this,_textClass)[_textClass]=textClass;_classPrivateFieldBase(this,_textSheet)[_textSheet]=textSheet;}function _injectSheet2(shadowRoot){if(!shadowRoot.adoptedStyleSheets.includes(_classPrivateFieldBase(this,_textSheet)[_textSheet])){shadowRoot.adoptedStyleSheets=[...shadowRoot.adoptedStyleSheets,_classPrivateFieldBase(this,_textSheet)[_textSheet]];}}function _parseTerms2(termsString){_classPrivateFieldBase(this,_termValues)[_termValues]=[];_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex]=null;if(!termsString||typeof termsString!=="string")return;const termPatterns=[];const lines=termsString.split(/\n|;/);// 按换行或分号分割 +for(const line of lines){const trimmedLine=line.trim();if(!trimmedLine)continue;let lastCommaIndex=trimmedLine.lastIndexOf(",");if(lastCommaIndex===-1){lastCommaIndex=trimmedLine.length;}const key=trimmedLine.substring(0,lastCommaIndex).trim();const value=trimmedLine.substring(lastCommaIndex+1).trim();if(key){try{new RegExp(key);termPatterns.push("(".concat(key,")"));_classPrivateFieldBase(this,_termValues)[_termValues].push(value);}catch(err){log_kissLog("Invalid RegExp for term: \"".concat(key,"\""),err);}}}if(termPatterns.length>0){_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex]=new RegExp(termPatterns.join("|"),"g");}}function _parseAITerms2(termsString){if(!termsString||typeof termsString!=="string")return;try{_classPrivateFieldBase(this,_glossary)[_glossary]=Object.fromEntries(termsString.split(/\n|;/).map(line=>{const[k="",v=""]=line.split(",").map(s=>s.trim());return[k,v];}).filter(_ref2=>{let[k]=_ref2;return k;}));}catch(err){log_kissLog("parse aiterms",err);}}function _getDocDescription2(){try{const meta=document.querySelector('meta[name="description"]');const description=(meta===null||meta===void 0?void 0:meta.getAttribute("content"))||"";return truncateWords(description);}catch(err){log_kissLog("get description",err);}return"";}function _createIntersectionObserver2(){const{transInterval,rootMargin=500}=_classPrivateFieldBase(this,translator_setting)[translator_setting];const pending=new Set();const flush=debounce(()=>{pending.forEach(node=>_classPrivateFieldBase(this,_performSyncNode)[_performSyncNode](node));pending.clear();},transInterval);return new IntersectionObserver(entries=>{entries.forEach(entry=>{if(entry.isIntersecting){_classPrivateFieldBase(this,_viewNodes)[_viewNodes].add(entry.target);pending.add(entry.target);flush();}else{_classPrivateFieldBase(this,_viewNodes)[_viewNodes].delete(entry.target);}});},{threshold:0.01,rootMargin:"".concat(rootMargin,"px 0px ").concat(rootMargin,"px 0px")});}function _createMutationObserver2(){return new MutationObserver(mutations=>{for(const mutation of mutations){var _mutation$nextSibling;if(_classPrivateFieldBase(this,_skipMoNodes)[_skipMoNodes].has(mutation.target)||((_mutation$nextSibling=mutation.nextSibling)===null||_mutation$nextSibling===void 0?void 0:_mutation$nextSibling.tagName)===_classPrivateFieldBase(this,_translationTagName)[_translationTagName]){continue;}if(mutation.type==="characterData"){if(mutation.oldValue!==mutation.target.nodeValue&&!_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex].test(mutation.target.nodeValue)){_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](mutation.target.parentElement);}}else if(mutation.type==="childList"){let nodes=new Set();let hasText=false;mutation.addedNodes.forEach(node=>{if(_classPrivateFieldBase(this,_skipMoNodes)[_skipMoNodes].has(node)||node.nodeName===_classPrivateFieldBase(this,_translationTagName)[_translationTagName]){return;}if(node.nodeType===Node.TEXT_NODE){hasText=true;}else if(_class.isElementOrFragment(node)){nodes.add(node);}});if(hasText){_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](mutation.target);}else{nodes.forEach(node=>_classPrivateFieldBase(this,_queueForRescan)[_queueForRescan](node));}}}});}function _createDebounceMouseMover2(){return debounce(targetNode=>{const startNode=targetNode;let foundNode=null;while(targetNode&&targetNode!==document.body){if(_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(targetNode)){foundNode=targetNode;break;}targetNode=targetNode.parentElement;}_classPrivateFieldBase(this,_hoveredNode)[_hoveredNode]=foundNode||startNode;const{mouseHoverKey}=_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting;if(mouseHoverKey.length===0&&!_classPrivateFieldBase(this,_isInitialized)[_isInitialized]){_classPrivateFieldBase(this,_init)[_init]();}if(mouseHoverKey.length===0&&foundNode){_classPrivateFieldBase(this,_processNode)[_processNode](foundNode);}},100);}function _handleMouseMove2(event){let targetNode=event.composedPath()[0];_classPrivateFieldBase(this,_dmm)[_dmm](targetNode);}function _handleKeyDown2(){if(!_classPrivateFieldBase(this,_isInitialized)[_isInitialized]){_classPrivateFieldBase(this,_init)[_init]();}let targetNode=_classPrivateFieldBase(this,_hoveredNode)[_hoveredNode];if(!targetNode||!_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(targetNode))return;_classPrivateFieldBase(this,_toggleTargetNode)[_toggleTargetNode](targetNode);}function _toggleTargetNode2(targetNode){if(_classPrivateFieldBase(this,_processedNodes)[_processedNodes].has(targetNode)){_classPrivateFieldBase(this,_cleanupDirectTranslations)[_cleanupDirectTranslations](targetNode);}else{_classPrivateFieldBase(this,_processNode)[_processNode](targetNode);}}function _findAllShadowRoots2(){let root=arguments.length>0&&arguments[0]!==undefined?arguments[0]:document.body;let results=arguments.length>1&&arguments[1]!==undefined?arguments[1]:new Set();// const start = performance.now(); try{const walker=document.createTreeWalker(root,NodeFilter.SHOW_ELEMENT);while(walker.nextNode()){const node=walker.currentNode;if(node.shadowRoot){results.add(node.shadowRoot);_classPrivateFieldBase(this,_findAllShadowRoots)[_findAllShadowRoots](node.shadowRoot,results);}}}catch(err){log_kissLog("无法访问某个 shadowRoot",err);}// const end = performance.now(); // const duration = end - start; // console.log(`findAllShadowRoots 耗时:${duration} 毫秒`); return results;}function _findChangeContainer2(startNode){var _startNode$closest;if(!_class.isElementOrFragment(startNode)||(_startNode$closest=startNode.closest)!==null&&_startNode$closest!==void 0&&_startNode$closest.call(startNode,_classPrivateFieldBase(this,_ignoreSelector)[_ignoreSelector])){return null;}let current=startNode;while(current&¤t!==document.body){if(_class.isBlockNode(current)||_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(current)){// 确保找到的容器在我们监控的根节点内 -for(const root of _classPrivateFieldBase(this,_rootNodes)[_rootNodes]){if(root.contains(current)){return current;}}}current=current.parentElement;}return null;}function _queueForRescan2(target){_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].add(target);if(!_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]){_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]=true;scheduleIdle(()=>{_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].forEach(t=>_classPrivateFieldBase(this,_rescanContainer)[_rescanContainer](t));_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].clear();_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]=false;},100);}}function _rescanContainer2(changedNode){const container=_classPrivateFieldBase(this,_findChangeContainer)[_findChangeContainer](changedNode);if(!container)return;_classPrivateFieldBase(this,_cleanupAllTranslations)[_cleanupAllTranslations](container);_classPrivateFieldBase(this,_scanNode)[_scanNode](container);}function _reIO2(node){_classPrivateFieldBase(this,_io)[_io].unobserve(node);_classPrivateFieldBase(this,_io)[_io].observe(node);}function _reIOViewNodes2(){_classPrivateFieldBase(this,_viewNodes)[_viewNodes].forEach(n=>_classPrivateFieldBase(this,_reIO)[_reIO](n));}function _startObserveShadowRoot2(shadowRoot){if(shadowRoot.host.matches("#".concat(APP_CONSTS.fabID,", #").concat(APP_CONSTS.boxID))){return;}_classPrivateFieldBase(this,_startObserveRoot)[_startObserveRoot](shadowRoot);_classPrivateFieldBase(this,_injectSheet)[_injectSheet](shadowRoot);}function _startObserveRoot2(root){if(_classPrivateFieldBase(this,_rootNodes)[_rootNodes].has(root))return;_classPrivateFieldBase(this,_rootNodes)[_rootNodes].add(root);_classPrivateFieldBase(this,_mo)[_mo].observe(root,{childList:true,subtree:true,characterData:true,characterDataOldValue:true});_classPrivateFieldBase(this,_scanNode)[_scanNode](root);}function _startObserveNode2(node){if(_classPrivateFieldBase(this,_rule)[_rule].highlightWords===OPT_HIGHLIGHT_WORDS_BEFORETRANS){_classPrivateFieldBase(this,_highlightWordsDeeply)[_highlightWordsDeeply](node);}if(!_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(node)&&_classPrivateFieldBase(this,translator_enabled)[translator_enabled]&&_classPrivateFieldBase(this,translator_setting)[translator_setting].transAllnow){_classPrivateFieldBase(this,_observedNodes)[_observedNodes].add(node);_classPrivateFieldBase(this,_processNode)[_processNode](node);return;}// 未监控 +for(const root of _classPrivateFieldBase(this,_rootNodes)[_rootNodes]){if(root.contains(current)){return current;}}}current=current.parentElement;}return null;}function _queueForRescan2(target){_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].add(target);if(!_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]){_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]=true;scheduleIdle(()=>{_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].forEach(t=>_classPrivateFieldBase(this,_rescanContainer)[_rescanContainer](t));_classPrivateFieldBase(this,_rescanQueue)[_rescanQueue].clear();_classPrivateFieldBase(this,_isQueueProcessing)[_isQueueProcessing]=false;},100);}}function _rescanContainer2(changedNode){const container=_classPrivateFieldBase(this,_findChangeContainer)[_findChangeContainer](changedNode);if(!container)return;_classPrivateFieldBase(this,_cleanupAllTranslations)[_cleanupAllTranslations](container);_classPrivateFieldBase(this,_scanNode)[_scanNode](container);}function _reIO2(node){_classPrivateFieldBase(this,_io)[_io].unobserve(node);_classPrivateFieldBase(this,_io)[_io].observe(node);}function _reIOViewNodes2(){_classPrivateFieldBase(this,_viewNodes)[_viewNodes].forEach(n=>_classPrivateFieldBase(this,_reIO)[_reIO](n));}function _startObserveShadowRoot2(shadowRoot){if(shadowRoot.host.matches("#".concat(APP_CONSTS.fabID,", #").concat(APP_CONSTS.boxID))){return;}_classPrivateFieldBase(this,_startObserveRoot)[_startObserveRoot](shadowRoot);_classPrivateFieldBase(this,_injectSheet)[_injectSheet](shadowRoot);}function _startObserveRoot2(root){if(_classPrivateFieldBase(this,_rootNodes)[_rootNodes].has(root))return;_classPrivateFieldBase(this,_rootNodes)[_rootNodes].add(root);_classPrivateFieldBase(this,_mo)[_mo].observe(root,{childList:true,subtree:true,characterData:true,characterDataOldValue:true});_classPrivateFieldBase(this,_scanNode)[_scanNode](root);}function _startObserveNode2(node){// todo: DocumentFragment 无法被 this.#io.observe +if(!_class.isElement(node))return;if(_classPrivateFieldBase(this,_rule)[_rule].highlightWords===OPT_HIGHLIGHT_WORDS_BEFORETRANS){_classPrivateFieldBase(this,_highlightWordsDeeply)[_highlightWordsDeeply](node);}if(!_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(node)&&_classPrivateFieldBase(this,translator_enabled)[translator_enabled]&&_classPrivateFieldBase(this,translator_setting)[translator_setting].transAllnow){_classPrivateFieldBase(this,_observedNodes)[_observedNodes].add(node);_classPrivateFieldBase(this,_processNode)[_processNode](node);return;}// 未监控 if(!_classPrivateFieldBase(this,_observedNodes)[_observedNodes].has(node)){_classPrivateFieldBase(this,_observedNodes)[_observedNodes].add(node);_classPrivateFieldBase(this,_io)[_io].observe(node);return;}// 已监控,但未处理状态,且在可视范围 if(!_classPrivateFieldBase(this,_processedNodes)[_processedNodes].has(node)&&_classPrivateFieldBase(this,_viewNodes)[_viewNodes].has(node)){_classPrivateFieldBase(this,_reIO)[_reIO](node);}}function _queryNode2(rootNode){var _rootNode$matches;// root 也可能是目标节点 if((_rootNode$matches=rootNode.matches)!==null&&_rootNode$matches!==void 0&&_rootNode$matches.call(rootNode,_classPrivateFieldBase(this,_rule)[_rule].selector)){_classPrivateFieldBase(this,_startObserveNode)[_startObserveNode](rootNode);}rootNode.querySelectorAll(_classPrivateFieldBase(this,_rule)[_rule].selector).forEach(node=>{var _node$closest;if(!((_node$closest=node.closest)!==null&&_node$closest!==void 0&&_node$closest.call(node,_classPrivateFieldBase(this,_ignoreSelector)[_ignoreSelector]))){_classPrivateFieldBase(this,_startObserveNode)[_startObserveNode](node);}});}function _scanNode2(rootNode){var _rootNode$matches2;if(!_class.isElementOrFragment(rootNode)||// rootNode.matches?.(this.#rule.keepSelector) || @@ -36676,27 +36676,28 @@ const newTextNode=document.createTextNode(fragment);_classPrivateFieldBase(this, if(trimmedText.length<_classPrivateFieldBase(this,translator_setting)[translator_setting].minLength||trimmedText.length>_classPrivateFieldBase(this,translator_setting)[translator_setting].maxLength){return true;}// 单个非字母数字字符。 if(trimmedText.length===1&&!trimmedText.match(/[a-zA-Z]/)){return true;}// 只是一个数字 if(!isNaN(parseFloat(trimmedText))&&isFinite(trimmedText)){return true;}// 正则匹配 -if(_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex].test(trimmedText)){return true;}return false;}async function _translateNodeGroup2(nodes,hostNode,deLang){const{transTag,textStyle,transStartHook,transEndHook,transOnly,termsStyle,selectStyle,parentStyle,grandStyle,// detectRemote, +if(_classPrivateFieldBase(this,_combinedSkipsRegex)[_combinedSkipsRegex].test(trimmedText)){return true;}return false;}async function _translateNodeGroup2(nodes,hostNode,deLang){const{transTag,textStyle,transEndHook,transOnly,termsStyle,selectStyle,parentStyle,grandStyle,// detectRemote, // toLang, // skipLangs = [], highlightWords}=_classPrivateFieldBase(this,_rule)[_rule];const{newlineLength// langDetector, -}=_classPrivateFieldBase(this,translator_setting)[translator_setting];const parentNode=hostNode.parentElement;const hideOrigin=transOnly==="true";// 翻译开始钩子函数 -if(transStartHook!==null&&transStartHook!==void 0&&transStartHook.trim()){try{libs_interpreter.run("exports.transStartHook = ".concat(transStartHook));libs_interpreter.exports.transStartHook({hostNode,parentNode,nodes});}catch(err){log_kissLog("transStartHook",err);}}try{const[processedString,placeholderMap]=_classPrivateFieldBase(this,_serializeForTranslation)[_serializeForTranslation](nodes,termsStyle);// console.log("processedString", processedString); -if(_classPrivateFieldBase(this,_isInvalidText)[_isInvalidText](processedString))return;const wrapper=document.createElement(_classPrivateFieldBase(this,_translationTagName)[_translationTagName]);wrapper.className=_class.KISS_CLASS.warpper;if(processedString.length>newlineLength){const br=document.createElement("br");br.hidden=hideOrigin;wrapper.appendChild(br);}const inner=document.createElement(transTag);inner.className="".concat(_class.KISS_CLASS.inner," ").concat(_classPrivateFieldBase(this,_textClass)[_textClass][textStyle]);inner.appendChild(createLoadingSVG());wrapper.appendChild(inner);nodes[nodes.length-1].after(wrapper);const currentRunId=_classPrivateFieldBase(this,_runId)[_runId];const[translatedText,isSameLang]=await _classPrivateFieldBase(this,_translateFetch)[_translateFetch](processedString,deLang);if(_classPrivateFieldBase(this,_runId)[_runId]!==currentRunId){throw new Error("Request terminated");}if(!translatedText||isSameLang){wrapper.remove();return;}const htmlString=_classPrivateFieldBase(this,_restoreFromTranslation)[_restoreFromTranslation](translatedText,placeholderMap);const trustedHTML=trustedTypesHelper.createHTML(htmlString);// const parser = new DOMParser(); +}=_classPrivateFieldBase(this,translator_setting)[translator_setting];const parentNode=hostNode.parentElement;const hideOrigin=transOnly==="true";try{const[processedString,placeholderMap]=_classPrivateFieldBase(this,_serializeForTranslation)[_serializeForTranslation](nodes,termsStyle);// console.log("processedString", processedString); +if(_classPrivateFieldBase(this,_isInvalidText)[_isInvalidText](processedString))return;const wrapper=document.createElement(_classPrivateFieldBase(this,_translationTagName)[_translationTagName]);wrapper.className=_class.KISS_CLASS.warpper;if(processedString.length>newlineLength){const br=document.createElement("br");br.hidden=hideOrigin;wrapper.appendChild(br);}const inner=document.createElement(transTag);inner.className="".concat(_class.KISS_CLASS.inner," ").concat(_classPrivateFieldBase(this,_textClass)[_textClass][textStyle]);inner.appendChild(createLoadingSVG());wrapper.appendChild(inner);nodes[nodes.length-1].after(wrapper);const currentRunId=_classPrivateFieldBase(this,_runId)[_runId];const{trText:translatedText,isSame:isSameLang}=await _classPrivateFieldBase(this,_translateFetch)[_translateFetch](processedString,deLang);if(_classPrivateFieldBase(this,_runId)[_runId]!==currentRunId){throw new Error("Request terminated");}if(!translatedText||isSameLang){wrapper.remove();return;}const htmlString=_classPrivateFieldBase(this,_restoreFromTranslation)[_restoreFromTranslation](translatedText,placeholderMap);const trustedHTML=trustedTypesHelper.createHTML(htmlString);// const parser = new DOMParser(); // const doc = parser.parseFromString(trustedHTML, "text/html"); // const innerElement = doc.body.firstChild; // inner.replaceChildren(innerElement); inner.innerHTML=trustedHTML;_classPrivateFieldBase(this,_translationNodes)[_translationNodes].set(wrapper,{nodes,isHide:hideOrigin});if(hideOrigin){_classPrivateFieldBase(this,_removeNodes)[_removeNodes](nodes);}// 附加样式 if(selectStyle&&hostNode.style){hostNode.style.cssText+=selectStyle;}if(parentStyle&&parentNode&&parentNode.style){parentNode.style.cssText+=parentStyle;}if(grandStyle&&parentNode&&parentNode.parentElement){parentNode.parentElement.style.cssText+=grandStyle;}// 高亮词汇 if(highlightWords===OPT_HIGHLIGHT_WORDS_AFTERTRANS){nodes.forEach(node=>_classPrivateFieldBase(this,_highlightWordsDeeply)[_highlightWordsDeeply](node));}// 翻译完成钩子函数 -if(transEndHook!==null&&transEndHook!==void 0&&transEndHook.trim()){try{libs_interpreter.run("exports.transEndHook = ".concat(transEndHook));libs_interpreter.exports.transEndHook({hostNode,parentNode,nodes,wrapperNode:wrapper,innerNode:inner});}catch(err){log_kissLog("transEndHook",err);}}}catch(err){// inner.textContent = `[失败]...`; +if(transEndHook!==null&&transEndHook!==void 0&&transEndHook.trim()){try{interpreter.run("exports.transEndHook = ".concat(transEndHook));interpreter.exports.transEndHook({hostNode,parentNode,nodes,wrapperNode:wrapper,innerNode:inner});}catch(err){log_kissLog("transEndHook",err);}}}catch(err){// inner.textContent = `[失败]...`; // todo: 失败重试按钮 log_kissLog("translate group error: ",err.message);_classPrivateFieldBase(this,_cleanupDirectTranslations)[_cleanupDirectTranslations](hostNode);}}function _serializeForTranslation2(nodes,termsStyle){var _this=this;let replaceCounter=0;// {{n}} let wrapCounter=0;// const placeholderMap=new Map();const{startDelimiter,endDelimiter}=_classPrivateFieldBase(this,_placeholder)[_placeholder];const pushReplace=html=>{replaceCounter++;const placeholder="".concat(startDelimiter).concat(replaceCounter).concat(endDelimiter);placeholderMap.set(placeholder,html);return placeholder;};const traverse=node=>{if(node.nodeType!==Node.ELEMENT_NODE&&node.nodeType!==Node.TEXT_NODE){return"";}// 文本节点 if(node.nodeType===Node.TEXT_NODE){let text=node.textContent;// 专业术语替换 if(_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex]){_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex].lastIndex=0;text=text.replace(_classPrivateFieldBase(this,_combinedTermsRegex)[_combinedTermsRegex],function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}const groups=args.slice(1,-2);const matchedIndex=groups.findIndex(group=>group!==undefined);const fullMatch=args[0];const termValue=_classPrivateFieldBase(_this,_termValues)[_termValues][matchedIndex];return pushReplace("").concat(termValue||fullMatch,""));});}return text;}// 元素节点 -if(node.nodeType===Node.ELEMENT_NODE){if(_classPrivateFieldBase(this,_rule)[_rule].hasRichText==="true"&&_class.TAGS.REPLACE.has(node.tagName)||node.matches(_classPrivateFieldBase(this,_rule)[_rule].keepSelector)||node.matches(_classPrivateFieldBase(this,_ignoreSelector)[_ignoreSelector])||!node.textContent.trim()){if(node.tagName==="IMG"||node.tagName==="SVG"){node.style.width="".concat(node.offsetWidth,"px");node.style.height="".concat(node.offsetHeight,"px");}return pushReplace(node.outerHTML);}let innerContent="";node.childNodes.forEach(child=>{innerContent+=traverse(child);});if(_classPrivateFieldBase(this,_rule)[_rule].hasRichText==="true"&&_class.TAGS.WARP.has(node.tagName)){wrapCounter++;const startPlaceholder="<".concat(_classPrivateFieldBase(this,_placeholder)[_placeholder].tagName).concat(wrapCounter,">");const endPlaceholder="");placeholderMap.set(startPlaceholder,buildOpeningTag(node));placeholderMap.set(endPlaceholder,""));return"".concat(startPlaceholder).concat(innerContent).concat(endPlaceholder);}return innerContent;}return"";};function buildOpeningTag(node){const escapeAttr=str=>str.replace(/"/g,""");let tag="<".concat(node.tagName.toLowerCase());for(const attr of node.attributes){tag+=" ".concat(attr.name,"=\"").concat(escapeAttr(attr.value),"\"");}tag+=">";return tag;}const processedString=nodes.map(traverse).join("").trim();return[processedString,placeholderMap];}function _restoreFromTranslation2(translatedText,placeholderMap){if(!placeholderMap.size){return translatedText;}if(!translatedText)return"";return translatedText.replace(_classPrivateFieldBase(this,_placeholderRegex)[_placeholderRegex],match=>placeholderMap.get(match)||match);}function _translateFetch2(text){let deLang=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";const{fromLang,toLang}=_classPrivateFieldBase(this,_rule)[_rule];return apiTranslate({text,fromLang:deLang||fromLang,toLang,apiSetting:_classPrivateFieldBase(this,_apiSetting)[_apiSetting],docInfo:_classPrivateFieldBase(this,_docInfo)[_docInfo],glossary:_classPrivateFieldBase(this,_glossary)[_glossary]});}function _findTranslationWrappers2(parentNode){return parentNode.querySelectorAll(":scope > ".concat(APP_LCNAME));}function _cleanupAllNodes2(){_classPrivateFieldBase(this,_rootNodes)[_rootNodes].forEach(root=>_classPrivateFieldBase(this,_cleanupAllTranslations)[_cleanupAllTranslations](root));}function _cleanupAllTranslations2(root){root.querySelectorAll(APP_LCNAME).forEach(el=>_classPrivateFieldBase(this,_removeTranslationElement)[_removeTranslationElement](el));}function _cleanupDirectTranslations2(node){_classPrivateFieldBase(this,_findTranslationWrappers)[_findTranslationWrappers](node).forEach(el=>{_classPrivateFieldBase(this,_removeTranslationElement)[_removeTranslationElement](el);});}function _removeTranslationElement2(el){const parentElement=el.parentElement;_classPrivateFieldBase(this,_processedNodes)[_processedNodes].delete(parentElement);// 如果是仅显示译文模式,先恢复原文 +if(node.nodeType===Node.ELEMENT_NODE){if(_classPrivateFieldBase(this,_rule)[_rule].hasRichText==="true"&&_class.TAGS.REPLACE.has(node.tagName)||node.matches(_classPrivateFieldBase(this,_rule)[_rule].keepSelector)||// node.matches(this.#ignoreSelector) || +!node.textContent.trim()){if(node.tagName==="IMG"||node.tagName==="SVG"){node.style.width="".concat(node.offsetWidth,"px");node.style.height="".concat(node.offsetHeight,"px");}return pushReplace(node.outerHTML);}let innerContent="";node.childNodes.forEach(child=>{innerContent+=traverse(child);});if(_classPrivateFieldBase(this,_rule)[_rule].hasRichText==="true"&&_class.TAGS.WARP.has(node.tagName)){wrapCounter++;const startPlaceholder="<".concat(_classPrivateFieldBase(this,_placeholder)[_placeholder].tagName).concat(wrapCounter,">");const endPlaceholder="");placeholderMap.set(startPlaceholder,buildOpeningTag(node));placeholderMap.set(endPlaceholder,""));return"".concat(startPlaceholder).concat(innerContent).concat(endPlaceholder);}return innerContent;}return"";};function buildOpeningTag(node){const escapeAttr=str=>str.replace(/"/g,""");let tag="<".concat(node.tagName.toLowerCase());for(const attr of node.attributes){tag+=" ".concat(attr.name,"=\"").concat(escapeAttr(attr.value),"\"");}tag+=">";return tag;}const processedString=nodes.map(traverse).join("").trim();return[processedString,placeholderMap];}function _restoreFromTranslation2(translatedText,placeholderMap){if(!placeholderMap.size){return translatedText;}if(!translatedText)return"";return translatedText.replace(_classPrivateFieldBase(this,_placeholderRegex)[_placeholderRegex],match=>placeholderMap.get(match)||match);}function _translateFetch2(text){let deLang=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";const{toLang,transStartHook}=_classPrivateFieldBase(this,_rule)[_rule];const fromLang=deLang||_classPrivateFieldBase(this,_rule)[_rule].fromLang;const apiSetting={..._classPrivateFieldBase(this,_apiSetting)[_apiSetting]};const docInfo={..._classPrivateFieldBase(this,_docInfo)[_docInfo]};const glossary={..._classPrivateFieldBase(this,_glossary)[_glossary]};const apisMap=_classPrivateFieldBase(this,_apisMap)[_apisMap];const args={text,fromLang,toLang,apiSetting,docInfo,glossary};// 翻译开始钩子函数 +if(transStartHook!==null&&transStartHook!==void 0&&transStartHook.trim()){try{interpreter.run("exports.transStartHook = ".concat(transStartHook));const hookResult=interpreter.exports.transStartHook({...args,apisMap});if(hookResult){Object.assign(args,...hookResult);}}catch(err){log_kissLog("transStartHook",err);}}return apiTranslate(args);}function _findTranslationWrappers2(parentNode){return parentNode.querySelectorAll(":scope > ".concat(APP_LCNAME));}function _cleanupAllNodes2(){_classPrivateFieldBase(this,_rootNodes)[_rootNodes].forEach(root=>_classPrivateFieldBase(this,_cleanupAllTranslations)[_cleanupAllTranslations](root));}function _cleanupAllTranslations2(root){root.querySelectorAll(APP_LCNAME).forEach(el=>_classPrivateFieldBase(this,_removeTranslationElement)[_removeTranslationElement](el));}function _cleanupDirectTranslations2(node){_classPrivateFieldBase(this,_findTranslationWrappers)[_findTranslationWrappers](node).forEach(el=>{_classPrivateFieldBase(this,_removeTranslationElement)[_removeTranslationElement](el);});}function _removeTranslationElement2(el){const parentElement=el.parentElement;_classPrivateFieldBase(this,_processedNodes)[_processedNodes].delete(parentElement);// 如果是仅显示译文模式,先恢复原文 const{nodes,isHide}=_classPrivateFieldBase(this,_translationNodes)[_translationNodes].get(el)||{};if(isHide){_classPrivateFieldBase(this,_restoreOriginal)[_restoreOriginal](el,nodes);}_classPrivateFieldBase(this,_translationNodes)[_translationNodes].delete(el);el.remove();// todo: 可能不应深度清除 if(_classPrivateFieldBase(this,_rule)[_rule].highlightWords===OPT_HIGHLIGHT_WORDS_AFTERTRANS){_classPrivateFieldBase(this,_removeHighlights)[_removeHighlights](parentElement);}_classPrivateFieldBase(this,_removeBrTags)[_removeBrTags](parentElement);}function _restoreOriginal2(el,nodes){if(nodes){const frag=document.createDocumentFragment();nodes.forEach(n=>frag.appendChild(n));const parent=el.parentElement;parent===null||parent===void 0?void 0:parent.insertBefore(frag,el);}}function _removeNodes2(nodes){if(nodes){const frag=document.createDocumentFragment();nodes.forEach(n=>frag.appendChild(n));}}function _toggleTranslationOnly2(node,transOnly){_classPrivateFieldBase(this,_findTranslationWrappers)[_findTranslationWrappers](node).forEach(el=>{const br=el.querySelector(":scope > br");const{nodes}=_classPrivateFieldBase(this,_translationNodes)[_translationNodes].get(el)||{};if(transOnly==="true"){// 双语变为仅译文 if(br)br.hidden=true;_classPrivateFieldBase(this,_removeNodes)[_removeNodes](nodes);_classPrivateFieldBase(this,_translationNodes)[_translationNodes].set(el,{nodes,isHide:true});}else{// 仅译文变为双语 @@ -36704,8 +36705,17 @@ if(br)br.hidden=false;_classPrivateFieldBase(this,_restoreOriginal)[_restoreOrig if(needsRefresh){Object.assign(appliedRule,{apiSlug,fromLang,toLang,hasRichText,textStyle,transOnly});_classPrivateFieldBase(this,_refreshNode)[_refreshNode](node);// 会自动应用新样式 return;}// 样式规则过时 if(appliedRule.textStyle!==textStyle){const oldStyle=appliedRule.textStyle;appliedRule.textStyle=textStyle;_classPrivateFieldBase(this,_updateStyle)[_updateStyle](node,oldStyle,textStyle);}// 切换原文显示 -if(appliedRule.transOnly!==transOnly){appliedRule.transOnly=transOnly;_classPrivateFieldBase(this,_toggleTranslationOnly)[_toggleTranslationOnly](node,transOnly);}}function _resetOptions2(){_classPrivateFieldBase(this,_io)[_io].disconnect();_classPrivateFieldBase(this,_mo)[_mo].disconnect();_classPrivateFieldBase(this,_viewNodes)[_viewNodes].clear();_classPrivateFieldBase(this,_rootNodes)[_rootNodes].clear();_classPrivateFieldBase(this,_observedNodes)[_observedNodes]=new WeakSet();_classPrivateFieldBase(this,_translationNodes)[_translationNodes]=new WeakMap();_classPrivateFieldBase(this,_processedNodes)[_processedNodes]=new WeakMap();}function _enableMouseHover2(){if(_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled])return;_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled]=true;_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting.useMouseHover=true;document.addEventListener("mousemove",_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]);const{mouseHoverKey}=_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting;if(mouseHoverKey.length===0){// mouseHoverKey = DEFAULT_MOUSEHOVER_KEY; -return;}_classPrivateFieldBase(this,_removeKeydownHandler)[_removeKeydownHandler]=shortcutRegister(mouseHoverKey,_classPrivateFieldBase(this,_boundKeyDownHandler)[_boundKeyDownHandler]);}function _disableMouseHover2(){var _classPrivateFieldLoo,_classPrivateFieldLoo2;if(!_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled])return;_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled]=false;_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting.useMouseHover=false;document.removeEventListener("mousemove",_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]);(_classPrivateFieldLoo=(_classPrivateFieldLoo2=_classPrivateFieldBase(this,_removeKeydownHandler))[_removeKeydownHandler])===null||_classPrivateFieldLoo===void 0?void 0:_classPrivateFieldLoo.call(_classPrivateFieldLoo2);}function _initInjector2(){if(_classPrivateFieldBase(this,_isJsInjected)[_isJsInjected]){return;}_classPrivateFieldBase(this,_isJsInjected)[_isJsInjected]=true;try{const{injectJs,injectCss}=_classPrivateFieldBase(this,_rule)[_rule];if(isExt){injectJs&&sendBgMsg(MSG_INJECT_JS,injectJs);injectCss&&sendBgMsg(MSG_INJECT_CSS,injectCss);}else{injectJs&&injectInlineJs(injectJs,"kiss-translator-userinit-injector");injectCss&&injectInternalCss(injectCss);}}catch(err){log_kissLog("inject js",err);}}function _removeInjector2(){var _document$querySelect;(_document$querySelect=document.querySelectorAll("[data-source^=\"kiss-inject\"]"))===null||_document$querySelect===void 0?void 0:_document$querySelect.forEach(el=>el.remove());}async function _translateTitle2(){const title=document.title;_classPrivateFieldBase(this,_docInfo)[_docInfo].title=title;if(!title)return;try{const deLang=await tryDetectLang(title);const[translatedTitle]=await _classPrivateFieldBase(this,_translateFetch)[_translateFetch](title,deLang);document.title=translatedTitle||title;}catch(err){log_kissLog("tanslate title",err);}}translator_Translator.displayCache=new WeakMap();translator_Translator.TAGS={BREAK_LINE:new Set(["BR","WBR"]),BLOCK:new Set(["ADDRESS","ARTICLE","ASIDE","BLOCKQUOTE","CANVAS","DD","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","H1","H2","H3","H4","H5","H6","HEADER","HR","LI","MAIN","NAV","NOSCRIPT","OL","P","PRE","SECTION","TABLE","TFOOT","UL","VIDEO"]),INLINE:new Set([// "A", +if(appliedRule.transOnly!==transOnly){appliedRule.transOnly=transOnly;_classPrivateFieldBase(this,_toggleTranslationOnly)[_toggleTranslationOnly](node,transOnly);}}function _resetOptions2(){_classPrivateFieldBase(this,_removeShadowRootListener)[_removeShadowRootListener]();_classPrivateFieldBase(this,_io)[_io].disconnect();_classPrivateFieldBase(this,_mo)[_mo].disconnect();_classPrivateFieldBase(this,_viewNodes)[_viewNodes].clear();_classPrivateFieldBase(this,_rootNodes)[_rootNodes].clear();_classPrivateFieldBase(this,_observedNodes)[_observedNodes]=new WeakSet();_classPrivateFieldBase(this,_translationNodes)[_translationNodes]=new WeakMap();_classPrivateFieldBase(this,_processedNodes)[_processedNodes]=new WeakMap();}function _enableMouseHover2(){if(_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled])return;_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled]=true;_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting.useMouseHover=true;document.addEventListener("mousemove",_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]);const{mouseHoverKey}=_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting;if(mouseHoverKey.length===0){// mouseHoverKey = DEFAULT_MOUSEHOVER_KEY; +return;}_classPrivateFieldBase(this,_removeKeydownHandler)[_removeKeydownHandler]=shortcutRegister(mouseHoverKey,_classPrivateFieldBase(this,_boundKeyDownHandler)[_boundKeyDownHandler]);}function _disableMouseHover2(){var _classPrivateFieldLoo,_classPrivateFieldLoo2;if(!_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled])return;_classPrivateFieldBase(this,_mouseHoverEnabled)[_mouseHoverEnabled]=false;_classPrivateFieldBase(this,translator_setting)[translator_setting].mouseHoverSetting.useMouseHover=false;document.removeEventListener("mousemove",_classPrivateFieldBase(this,_boundMouseMoveHandler)[_boundMouseMoveHandler]);(_classPrivateFieldLoo=(_classPrivateFieldLoo2=_classPrivateFieldBase(this,_removeKeydownHandler))[_removeKeydownHandler])===null||_classPrivateFieldLoo===void 0?void 0:_classPrivateFieldLoo.call(_classPrivateFieldLoo2);}function _initInjector2(){if(_classPrivateFieldBase(this,_isJsInjected)[_isJsInjected]){return;}_classPrivateFieldBase(this,_isJsInjected)[_isJsInjected]=true;try{// const { injectJs, injectCss } = this.#rule; +// if (isExt) { +// injectJs && sendBgMsg(MSG_INJECT_JS, injectJs); +// injectCss && sendBgMsg(MSG_INJECT_CSS, injectCss); +// } else { +// injectJs && +// injectInlineJs(injectJs, "kiss-translator-userinit-injector"); +// injectCss && injectInternalCss(injectCss); +// } +const{injectJs,toLang}=_classPrivateFieldBase(this,_rule)[_rule];if(injectJs!==null&&injectJs!==void 0&&injectJs.trim()){const apiSetting={..._classPrivateFieldBase(this,_apiSetting)[_apiSetting]};const docInfo={..._classPrivateFieldBase(this,_docInfo)[_docInfo]};const glossary={..._classPrivateFieldBase(this,_glossary)[_glossary]};const apisMap=_classPrivateFieldBase(this,_apisMap)[_apisMap];const apiDectect=tryDetectLang;interpreter.import({KT:{apiTranslate: apiTranslate,apiDectect,apiSetting,apisMap,toLang,docInfo,glossary}});interpreter.run(injectJs);}}catch(err){log_kissLog("inject js",err);}}function _removeInjector2(){var _document$querySelect;(_document$querySelect=document.querySelectorAll("[data-source^=\"kiss-inject\"]"))===null||_document$querySelect===void 0?void 0:_document$querySelect.forEach(el=>el.remove());}async function _translateTitle2(){const title=document.title;_classPrivateFieldBase(this,_docInfo)[_docInfo].title=title;if(!title)return;try{const deLang=await tryDetectLang(title);const{trText}=await _classPrivateFieldBase(this,_translateFetch)[_translateFetch](title,deLang);document.title=trText||title;}catch(err){log_kissLog("tanslate title",err);}}translator_Translator.displayCache=new WeakMap();translator_Translator.TAGS={BREAK_LINE:new Set(["BR","WBR"]),BLOCK:new Set(["ADDRESS","ARTICLE","ASIDE","BLOCKQUOTE","CANVAS","DD","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","H1","H2","H3","H4","H5","H6","HEADER","HR","LI","MAIN","NAV","NOSCRIPT","OL","P","PRE","SECTION","TABLE","TFOOT","UL","VIDEO"]),INLINE:new Set([// "A", "ABBR","ACRONYM","B","BDO","BIG","BR","BUTTON","CITE","CODE","DFN","DEL","FONT","EM","I","IMG","INPUT","INS","KBD","LABEL","MAP","MARK","OBJECT","OUTPUT","Q","SAMP","SCRIPT","SELECT","SMALL",// "SPAN", "STRONG","SUB","SUP","TEXTAREA","TIME","TT","U","VAR"]),REPLACE:new Set(["ABBR","CODE","DFN","IMG","KBD","OUTPUT","SAMP","SUB","SUP","SVG","TIME","VAR"]),WARP:new Set(["A","B","BDO","BDI","BIG","CITE","DEL","EM","FONT","I","INS","MARK","Q","S","SMALL","SPAN","STRONG","U"])};// 译文相关class translator_Translator.KISS_CLASS={warpper:"".concat(APP_LCNAME,"-wrapper notranslate"),inner:"".concat(APP_LCNAME,"-inner"),term:"".concat(APP_LCNAME,"-term"),br:"".concat(APP_LCNAME,"-br"),highlight:"".concat(APP_LCNAME,"-highlight")};// 内置跳过翻译文本 @@ -36727,9 +36737,9 @@ translator_Translator.BUILTIN_SKIP_PATTERNS=[// 1. URL (覆盖 http, https, ftp, /^\d{1,2}:\d{2}(:\d{2})?$/,// 14. 包含常见扩展名的文件名 (例如: document.pdf, image.jpeg) /^[^\s\\/:]+?\.[a-zA-Z0-9]{2,5}$/ // todo: 数字和特殊字符组成的字符串 ];translator_Translator.DEFAULT_OPTIONS=setting_DEFAULT_SETTING;// 默认配置 -translator_Translator.DEFAULT_RULE=GLOBLA_RULE;translator_Translator.BUILTIN_IGNORE_SELECTOR="address, area, audio, br, canvas, \n data, datalist, embed, head, iframe, input, noscript, map, \n object, option, param, picture, progress, \n select, script, style, track, textarea, template, \n video, wbr, .notranslate, [contenteditable], [translate='no'], \n ".concat(APP_LCNAME,", #").concat(APP_CONSTS.fabID,", #").concat(APP_CONSTS.boxID,", \n .").concat(APP_CONSTS.fabID,"_warpper, .").concat(APP_CONSTS.boxID,"_warpper"); +translator_Translator.DEFAULT_RULE=GLOBLA_RULE;translator_Translator.KISS_IGNORE_SELECTOR="".concat(APP_LCNAME,", .kiss-caption-container, .kiss-subtitle-controls\n #").concat(APP_CONSTS.fabID,", .").concat(APP_CONSTS.fabID,"_warpper,\n #").concat(APP_CONSTS.boxID,", .").concat(APP_CONSTS.boxID,"_warpper,\n #").concat(APP_CONSTS.popupID,", .").concat(APP_CONSTS.popupID,"_warpper");translator_Translator.BUILTIN_IGNORE_SELECTOR="address, area, audio, br, canvas, \n data, datalist, embed, head, iframe, input, noscript, map, \n object, option, param, picture, progress, \n select, script, style, track, textarea, template, \n video, wbr, .notranslate, [contenteditable], [translate='no'], \n ".concat(_class.KISS_IGNORE_SELECTOR); ;// CONCATENATED MODULE: ./src/libs/inputTranslate.js -function isInputNode(node){return node.nodeName==="INPUT"||node.nodeName==="TEXTAREA";}function isEditAbleNode(node){return node.hasAttribute("contenteditable");}function replaceContentEditableText(node,newText){node.focus();const selection=window.getSelection();if(!selection)return;const range=document.createRange();range.selectNodeContents(node);selection.removeAllRanges();selection.addRange(range);range.deleteContents();const textNode=document.createTextNode(newText);range.insertNode(textNode);selection.collapseToEnd();}function getNodeText(node){if(isInputNode(node)){return node.value;}return node.innerText||node.textContent||"";}function addLoading(node,loadingId){const rect=node.getBoundingClientRect();const div=document.createElement("div");div.id=loadingId;div.appendChild(createLoadingSVG());div.style.cssText="\n position: fixed;\n left: ".concat(rect.left,"px;\n top: ").concat(rect.top,"px;\n width: ").concat(rect.width,"px;\n height: ").concat(rect.height,"px;\n line-height: ").concat(rect.height,"px;\n text-align: center;\n z-index: 2147483647;\n pointer-events: none; /* \u5141\u8BB8\u70B9\u51FB\u7A7F\u900F */\n ");document.body.appendChild(div);}function removeLoading(loadingId){const div=document.getElementById(loadingId);if(div)div.remove();}/** +function isInputNode(node){return node.nodeName==="INPUT"||node.nodeName==="TEXTAREA";}function isEditAbleNode(node){return node.hasAttribute("contenteditable");}async function replaceContentEditableText(node,newText){try{logger.debug("try replace editable 1: pasteEvent");node.focus();const selection=window.getSelection();if(!selection)throw new Error("window.getSelection() is not available.");const targetNode=node.querySelector("p")||node;const range=document.createRange();range.selectNodeContents(targetNode);selection.removeAllRanges();selection.addRange(range);const dataTransfer=new DataTransfer();dataTransfer.setData("text/plain",newText);const pasteEvent=new ClipboardEvent("paste",{clipboardData:dataTransfer,bubbles:true,cancelable:true});node.dispatchEvent(pasteEvent);await sleep(50);if(node.innerText.trim()===newText){return true;}throw new Error("Strategy 1 failed to replace text correctly.");}catch(error){logger.debug("Strategy 1 Failed:",error.message);}try{logger.debug("try replace editable 2: execCommand");node.focus();const selection=window.getSelection();if(!selection)throw new Error("window.getSelection() is not available.");const targetNode=node.querySelector("p")||node;const range=document.createRange();range.selectNodeContents(targetNode);selection.removeAllRanges();selection.addRange(range);document.execCommand("insertText",false,newText);await sleep(50);if(node.innerText.trim()===newText){return true;}throw new Error("Strategy 2 failed to replace text correctly.");}catch(error){logger.debug("Strategy 2 Failed:",error.message);}try{logger.debug("try replace editable 3: textContent");node.focus();const targetNode=node.querySelector("p")||node;const textSpan=targetNode.querySelector('span[data-lexical-text="true"]');if(textSpan){textSpan.textContent=newText;}else{targetNode.textContent=newText;}node.dispatchEvent(new Event("input",{bubbles:true,cancelable:true}));await sleep(50);if(node.innerText.trim()===newText){return true;}throw new Error("Strategy 3 failed to replace text correctly.");}catch(error){logger.debug("Strategy 3 Failed:",error.message);}return false;}function getNodeText(node){if(isInputNode(node)){return node.value;}return node.innerText||node.textContent||"";}function addLoading(node,loadingId){const rect=node.getBoundingClientRect();const div=document.createElement("div");div.id=loadingId;div.appendChild(createLoadingSVG());div.style.cssText="\n position: fixed;\n left: ".concat(rect.left,"px;\n top: ").concat(rect.top,"px;\n width: ").concat(rect.width,"px;\n height: ").concat(rect.height,"px;\n line-height: ").concat(rect.height,"px;\n text-align: center;\n z-index: 2147483647;\n pointer-events: none; /* \u5141\u8BB8\u70B9\u51FB\u7A7F\u900F */\n ");document.body.appendChild(div);}function removeLoading(loadingId){const div=document.getElementById(loadingId);if(div)div.remove();}/** * 输入框翻译 */var _config=/*#__PURE__*/_classPrivateFieldKey("config");var _unregisterShortcut=/*#__PURE__*/_classPrivateFieldKey("unregisterShortcut");var _isEnabled=/*#__PURE__*/_classPrivateFieldKey("isEnabled");var _triggerShortcut=/*#__PURE__*/_classPrivateFieldKey("triggerShortcut");var _handleTranslate=/*#__PURE__*/_classPrivateFieldKey("handleTranslate");class InputTranslator{// 用于缓存快捷键 constructor(){let{inputRule=DEFAULT_INPUT_RULE,transApis=[]}=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};/** @@ -36737,13 +36747,14 @@ constructor(){let{inputRule=DEFAULT_INPUT_RULE,transApis=[]}=arguments.length>0& * @private */Object.defineProperty(this,_handleTranslate,{value:_handleTranslate2});Object.defineProperty(this,_config,{writable:true,value:void 0});Object.defineProperty(this,_unregisterShortcut,{writable:true,value:null});Object.defineProperty(this,_isEnabled,{writable:true,value:false});Object.defineProperty(this,_triggerShortcut,{writable:true,value:void 0});_classPrivateFieldBase(this,_config)[_config]={inputRule,transApis};const{triggerShortcut:initialTriggerShortcut}=_classPrivateFieldBase(this,_config)[_config].inputRule;if(initialTriggerShortcut&&initialTriggerShortcut.length>0){_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut]=initialTriggerShortcut;}else{_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut]=DEFAULT_INPUT_SHORTCUT;}if(_classPrivateFieldBase(this,_config)[_config].inputRule.transOpen){this.enable();}}/** * 启用输入翻译功能 - */enable(){if(_classPrivateFieldBase(this,_isEnabled)[_isEnabled]||!_classPrivateFieldBase(this,_config)[_config].inputRule.transOpen){return;}const{triggerCount,triggerTime}=_classPrivateFieldBase(this,_config)[_config].inputRule;_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]=stepShortcutRegister(_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut],_classPrivateFieldBase(this,_handleTranslate)[_handleTranslate].bind(this),triggerCount,triggerTime);_classPrivateFieldBase(this,_isEnabled)[_isEnabled]=true;log_kissLog("Input Translator enabled.");}/** + */enable(){if(_classPrivateFieldBase(this,_isEnabled)[_isEnabled]||!_classPrivateFieldBase(this,_config)[_config].inputRule.transOpen){return;}const{triggerCount,triggerTime}=_classPrivateFieldBase(this,_config)[_config].inputRule;_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]=stepShortcutRegister(_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut],_classPrivateFieldBase(this,_handleTranslate)[_handleTranslate].bind(this),triggerCount,triggerTime);_classPrivateFieldBase(this,_isEnabled)[_isEnabled]=true;logger.info("Input Translator enabled.");}/** * 禁用输入翻译功能 - */disable(){if(!_classPrivateFieldBase(this,_isEnabled)[_isEnabled]){return;}if(_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]){_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]();_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]=null;}_classPrivateFieldBase(this,_isEnabled)[_isEnabled]=false;log_kissLog("Input Translator disabled.");}/** + */disable(){if(!_classPrivateFieldBase(this,_isEnabled)[_isEnabled]){return;}if(_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]){_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]();_classPrivateFieldBase(this,_unregisterShortcut)[_unregisterShortcut]=null;}_classPrivateFieldBase(this,_isEnabled)[_isEnabled]=false;logger.info("Input Translator disabled.");}/** * 切换启用/禁用状态 */toggle(){if(_classPrivateFieldBase(this,_isEnabled)[_isEnabled]){this.disable();}else{this.enable();}}/** * 更新配置 - */updateConfig(_ref){let{inputRule,transApis}=_ref;const wasEnabled=_classPrivateFieldBase(this,_isEnabled)[_isEnabled];if(wasEnabled){this.disable();}if(inputRule){_classPrivateFieldBase(this,_config)[_config].inputRule=inputRule;}if(transApis){_classPrivateFieldBase(this,_config)[_config].transApis=transApis;}const{triggerShortcut:initialTriggerShortcut}=_classPrivateFieldBase(this,_config)[_config].inputRule;_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut]=initialTriggerShortcut&&initialTriggerShortcut.length>0?initialTriggerShortcut:DEFAULT_INPUT_SHORTCUT;if(wasEnabled){this.enable();}}}async function _handleTranslate2(){let node=document.activeElement;if(!node)return;while(node.shadowRoot&&node.shadowRoot.activeElement){node=node.shadowRoot.activeElement;}if(!isInputNode(node)&&!isEditAbleNode(node)){return;}const{apiSlug,transSign,triggerCount}=_classPrivateFieldBase(this,_config)[_config].inputRule;let{fromLang,toLang}=_classPrivateFieldBase(this,_config)[_config].inputRule;let initText=getNodeText(node);if(_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut].length===1&&_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut][0].length===1){initText=removeEndchar(initText,_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut][0],triggerCount);}if(!initText.trim())return;let text=initText;if(transSign){const res=matchInputStr(text,transSign);if(res){let lang=res[1];if(lang==="zh"||lang==="cn")lang="zh-CN";else if(lang==="tw"||lang==="hk")lang="zh-TW";if(lang&&OPT_LANGS_LIST.includes(lang)){toLang=lang;}text=res[2];}}const apiSetting=_classPrivateFieldBase(this,_config)[_config].transApis.find(api=>api.apiSlug===apiSlug)||DEFAULT_API_SETTING;const loadingId="kiss-loading-"+utils_genEventName();try{addLoading(node,loadingId);const[trText,isSame]=await apiTranslate({text,fromLang,toLang,apiSetting});if(!trText||isSame)return;if(isInputNode(node)){node.value=trText;node.dispatchEvent(new Event("input",{bubbles:true,cancelable:true}));}else{replaceContentEditableText(node,trText);}}catch(err){log_kissLog("Translate input error:",err);}finally{removeLoading(loadingId);}} + */updateConfig(_ref){let{inputRule,transApis}=_ref;const wasEnabled=_classPrivateFieldBase(this,_isEnabled)[_isEnabled];if(wasEnabled){this.disable();}if(inputRule){_classPrivateFieldBase(this,_config)[_config].inputRule=inputRule;}if(transApis){_classPrivateFieldBase(this,_config)[_config].transApis=transApis;}const{triggerShortcut:initialTriggerShortcut}=_classPrivateFieldBase(this,_config)[_config].inputRule;_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut]=initialTriggerShortcut&&initialTriggerShortcut.length>0?initialTriggerShortcut:DEFAULT_INPUT_SHORTCUT;if(wasEnabled){this.enable();}}}async function _handleTranslate2(){let node=document.activeElement;if(!node)return;while(node.shadowRoot&&node.shadowRoot.activeElement){node=node.shadowRoot.activeElement;}if(!isInputNode(node)&&!isEditAbleNode(node)){return;}const{apiSlug,transSign,triggerCount}=_classPrivateFieldBase(this,_config)[_config].inputRule;let{fromLang,toLang}=_classPrivateFieldBase(this,_config)[_config].inputRule;let initText=getNodeText(node);if(_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut].length===1&&_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut][0].length===1){initText=removeEndchar(initText,_classPrivateFieldBase(this,_triggerShortcut)[_triggerShortcut][0],triggerCount);}if(!initText.trim())return;let text=initText;if(transSign){const res=matchInputStr(text,transSign);if(res){let lang=res[1];if(lang==="zh"||lang==="cn")lang="zh-CN";else if(lang==="tw"||lang==="hk")lang="zh-TW";if(lang&&OPT_LANGS_LIST.includes(lang)){toLang=lang;}text=res[2];}}const apiSetting=_classPrivateFieldBase(this,_config)[_config].transApis.find(api=>api.apiSlug===apiSlug)||DEFAULT_API_SETTING;const loadingId="kiss-loading-"+utils_genEventName();try{addLoading(node,loadingId);const{trText,isSame}=await apiTranslate({text,fromLang,toLang,apiSetting});const newText=(trText===null||trText===void 0?void 0:trText.trim())||"";if(!newText||isSame)return;if(isInputNode(node)){node.value=newText;node.dispatchEvent(new Event("input",{bubbles:true,cancelable:true}));}else{const success=await replaceContentEditableText(node,newText);if(!success){// todo: 提示可以黏贴 +logger.info("Replace editable text failed");}}}catch(err){logger.info("Translate input error:",err);}finally{removeLoading(loadingId);}} // EXTERNAL MODULE: ./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js var react = __webpack_require__(7948); // EXTERNAL MODULE: ./node_modules/.pnpm/react-dom@18.2.0_react@18.2.0/node_modules/react-dom/client.js @@ -39319,7 +39330,7 @@ Divider.muiSkipListHighlight = true; false ? 0 : void 0; /* harmony default export */ const Divider_Divider = (Divider); ;// CONCATENATED MODULE: ./src/hooks/Loading.js -function Loading(){return/*#__PURE__*/(0,jsx_runtime.jsxs)("center",{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://github.com/fishjar/kiss-translator",children:"KISS Translator v".concat("2.0.4")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{})]});} +function Loading(){return/*#__PURE__*/(0,jsx_runtime.jsxs)("center",{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://github.com/fishjar/kiss-translator",children:"KISS Translator v".concat("2.0.5")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{})]});} ;// CONCATENATED MODULE: ./src/hooks/Setting.js const SettingContext=/*#__PURE__*/(0,react.createContext)({setting:setting_DEFAULT_SETTING,updateSetting:()=>{},reloadSetting:()=>{}});function SettingProvider(_ref){let{children}=_ref;const{data:setting,isLoading,update,reload}=useStorage(storage_STOKEY_SETTING,setting_DEFAULT_SETTING,storage_KV_SETTING_KEY);(0,react.useEffect)(()=>{if(typeof(setting===null||setting===void 0?void 0:setting.darkMode)==="boolean"){update(currentSetting=>({...currentSetting,darkMode:currentSetting.darkMode?"dark":"light"}));}},[setting===null||setting===void 0?void 0:setting.darkMode,update]);(0,react.useEffect)(()=>{(async()=>{try{logger.setLevel(setting===null||setting===void 0?void 0:setting.logLevel);if(isExt){await sendBgMsg(MSG_SET_LOGLEVEL,setting===null||setting===void 0?void 0:setting.logLevel);}}catch(error){logger.error("Failed to fetch log level, using default.",error);}})();},[setting]);const updateSetting=(0,react.useCallback)(objOrFn=>{update(objOrFn);debounceSyncMeta(storage_KV_SETTING_KEY);},[update]);const updateChild=(0,react.useCallback)(key=>async obj=>{updateSetting(prev=>({...prev,[key]:{...((prev===null||prev===void 0?void 0:prev[key])||{}),...obj}}));},[updateSetting]);const value=(0,react.useMemo)(()=>({setting,updateSetting,updateChild,reloadSetting:reload}),[setting,updateSetting,updateChild,reload]);if(isLoading){return/*#__PURE__*/(0,jsx_runtime.jsx)(Loading,{});}if(!setting){/*#__PURE__*/(0,jsx_runtime.jsx)("center",{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Alert_Alert,{severity:"error",sx:{maxWidth:600,margin:"60px auto"},children:[/*#__PURE__*/(0,jsx_runtime.jsx)("p",{children:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002"}),/*#__PURE__*/(0,jsx_runtime.jsx)("p",{children:"Data loading error, please refresh the page or uninstall and reinstall."})]})});}return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingContext.Provider,{value:value,children:children});}/** * 设置 hook @@ -46856,7 +46867,7 @@ var LibraryAddCheck = __webpack_require__(1064); ;// CONCATENATED MODULE: ./src/views/Selection/CopyBtn.js function CopyBtn(_ref){let{text}=_ref;const[copied,setCopied]=(0,react.useState)(false);const handleClick=async e=>{e.stopPropagation();await navigator.clipboard.writeText(text);setCopied(true);const timer=setTimeout(()=>{clearTimeout(timer);setCopied(false);},500);};return/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",sx:{opacity:0.5,"&:hover":{opacity:1}},onClick:handleClick,children:copied?/*#__PURE__*/(0,jsx_runtime.jsx)(LibraryAddCheck/* default */.Z,{fontSize:"inherit"}):/*#__PURE__*/(0,jsx_runtime.jsx)(ContentCopy/* default */.Z,{fontSize:"inherit"})});} ;// CONCATENATED MODULE: ./src/views/Selection/TranCont.js -function TranCont(_ref){let{text,fromLang,toLang,apiSlug,transApis,simpleStyle=false}=_ref;const i18n=useI18n();const[trText,setTrText]=(0,react.useState)("");const[loading,setLoading]=(0,react.useState)(false);const[error,setError]=(0,react.useState)("");const apiSetting=(0,react.useMemo)(()=>transApis.find(api=>api.apiSlug===apiSlug),[transApis,apiSlug]);(0,react.useEffect)(()=>{if(!(text!==null&&text!==void 0&&text.trim())||!apiSetting){return;}(async()=>{try{setLoading(true);setTrText("");setError("");const[trText]=await apiTranslate({text,fromLang,toLang,apiSetting});setTrText(trText);}catch(err){setError(err.message);}finally{setLoading(false);}})();},[text,fromLang,toLang,apiSetting]);if(simpleStyle){return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:error?/*#__PURE__*/(0,jsx_runtime.jsx)(Alert_Alert,{severity:"error",children:error}):loading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{style:{whiteSpace:"pre-line"},children:trText})});}return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"".concat(i18n("translated_text")," - ").concat(apiSetting.apiName)// disabled +function TranCont(_ref){let{text,fromLang,toLang,apiSlug,transApis,simpleStyle=false}=_ref;const i18n=useI18n();const[trText,setTrText]=(0,react.useState)("");const[loading,setLoading]=(0,react.useState)(false);const[error,setError]=(0,react.useState)("");const apiSetting=(0,react.useMemo)(()=>transApis.find(api=>api.apiSlug===apiSlug),[transApis,apiSlug]);(0,react.useEffect)(()=>{if(!(text!==null&&text!==void 0&&text.trim())||!apiSetting){return;}(async()=>{try{setLoading(true);setTrText("");setError("");const{trText}=await apiTranslate({text,fromLang,toLang,apiSetting});setTrText(trText);}catch(err){setError(err.message);}finally{setLoading(false);}})();},[text,fromLang,toLang,apiSetting]);if(simpleStyle){return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:error?/*#__PURE__*/(0,jsx_runtime.jsx)(Alert_Alert,{severity:"error",children:error}):loading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{style:{whiteSpace:"pre-line"},children:trText})});}return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"".concat(i18n("translated_text")," - ").concat(apiSetting.apiName)// disabled ,fullWidth:true,multiline:true,value:trText,helperText:error,InputProps:{startAdornment:loading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):null,endAdornment:/*#__PURE__*/(0,jsx_runtime.jsx)(Stack_Stack,{direction:"row",sx:{position:"absolute",right:0,top:0},children:/*#__PURE__*/(0,jsx_runtime.jsx)(CopyBtn,{text:trText})})}})});} // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+icons-material@5.15.15_@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@1_1e29dcefa4691dc57f2acd9f73947cfd/node_modules/@mui/icons-material/Favorite.js var Favorite = __webpack_require__(6510); @@ -46892,7 +46903,7 @@ function SugBaidu(_ref){let{text}=_ref;const{loading,error,data}=useAsyncNow(api function TranForm(_ref){let{text,setText,apiSlugs:initApiSlugs,fromLang:initFromLang,toLang:initToLang,toLang2:initToLang2,transApis,simpleStyle=false,langDetector:initLangDetector="-",enDict:initEnDict="-",enSug:initEnSug="-",isPlaygound=false}=_ref;const i18n=useI18n();const[editMode,setEditMode]=(0,react.useState)(false);const[editText,setEditText]=(0,react.useState)(text);const[apiSlugs,setApiSlugs]=(0,react.useState)(initApiSlugs);const[fromLang,setFromLang]=(0,react.useState)(initFromLang);const[toLang,setToLang]=(0,react.useState)(initToLang);const[toLang2,setToLang2]=(0,react.useState)(initToLang2);const[langDetector,setLangDetector]=(0,react.useState)(initLangDetector);const[enDict,setEnDict]=(0,react.useState)(initEnDict);const[enSug,setEnSug]=(0,react.useState)(initEnSug);const[deLang,setDeLang]=(0,react.useState)("");const[deLoading,setDeLoading]=(0,react.useState)(false);(0,react.useEffect)(()=>{if(!editMode){setEditText(text);}},[text,editMode]);(0,react.useEffect)(()=>{if(!text.trim()){setDeLang("");return;}(async()=>{try{setDeLoading(true);const deLang=await tryDetectLang(text,langDetector);if(deLang){setDeLang(deLang);}}catch(err){log_kissLog("tranbox: detect lang",err);}finally{setDeLoading(false);}})();},[text,langDetector,setDeLang,setDeLoading]);// todo: 语言变化后,realToLang引发二次翻译请求 const realToLang=(0,react.useMemo)(()=>{if(fromLang==="auto"&&toLang!==toLang2&&toLang2!=="-"&&deLang===toLang){return toLang2;}return toLang;},[fromLang,toLang,toLang2,deLang]);const optApis=(0,react.useMemo)(()=>transApis.filter(api=>!api.isDisabled).map(api=>({key:api.apiSlug,name:api.apiName||api.apiSlug})),[transApis]);const isWord=(0,react.useMemo)(()=>isValidWord(text),[text]);const xs=(0,react.useMemo)(()=>isPlaygound?3:4,[isPlaygound]);return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:simpleStyle?1:2,children:[!simpleStyle&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,SelectProps:{multiple:true,MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",value:apiSlugs,name:"apiSlugs",label:i18n("translate_service_multiple"),onChange:e=>{setApiSlugs(e.target.value);},children:optApis.map(_ref2=>{let{key,name}=_ref2;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:key,children:name},key);})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"fromLang",value:fromLang,label:i18n("from_lang"),onChange:e=>{setFromLang(e.target.value);},children:OPT_LANGS_FROM.map(_ref3=>{let[lang,name]=_ref3;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"toLang",value:toLang,label:i18n("to_lang"),onChange:e=>{setToLang(e.target.value);},children:OPT_LANGS_TO.map(_ref4=>{let[lang,name]=_ref4;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})})}),isPlaygound&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"toLang2",value:toLang2,label:i18n("to_lang2"),onChange:e=>{setToLang2(e.target.value);},children:OPT_LANGS_TO.map(_ref5=>{let[lang,name]=_ref5;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"enDict",value:enDict,label:i18n("english_dict"),onChange:e=>{setEnDict(e.target.value);},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"-",children:i18n("disable")}),OPT_DICT_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:item},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"enSug",value:enSug,label:i18n("english_suggest"),onChange:e=>{setEnSug(e.target.value);},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"-",children:i18n("disable")}),OPT_SUG_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:item},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,SelectProps:{MenuProps:{disablePortal:!isPlaygound}},fullWidth:true,size:"small",name:"langDetector",value:langDetector,label:i18n("detected_lang"),onChange:e=>{setLangDetector(e.target.value);},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"-",children:i18n("disable")}),OPT_LANGDETECTOR_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:item},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:xs,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{fullWidth:true,size:"small",name:"deLang",value:deLang&&OPT_LANGS_MAP.get(deLang),label:i18n("detected_result"),disabled:true,InputProps:{startAdornment:deLoading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):null}})})]})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("original_text"),fullWidth:true,multiline:true,minRows:isPlaygound?2:1,maxRows:10,value:editText,onChange:e=>{setEditText(e.target.value);},onFocus:()=>{setEditMode(true);},onBlur:()=>{setEditMode(false);setText(editText.trim());},InputProps:{endAdornment:/*#__PURE__*/(0,jsx_runtime.jsx)(Stack_Stack,{direction:"row",sx:{position:"absolute",right:0,top:0},children:editMode?/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",onClick:e=>{e.stopPropagation();setEditMode(false);setText(editText.trim());},children:/*#__PURE__*/(0,jsx_runtime.jsx)(Done/* default */.Z,{fontSize:"inherit"})}):/*#__PURE__*/(0,jsx_runtime.jsx)(CopyBtn,{text:text})})}})})]}),apiSlugs.map(slug=>/*#__PURE__*/(0,jsx_runtime.jsx)(TranCont,{text:text,fromLang:fromLang,toLang:realToLang,simpleStyle:simpleStyle,apiSlug:slug,transApis:transApis},slug)),isWord&&OPT_DICT_MAP.has(enDict)&&/*#__PURE__*/(0,jsx_runtime.jsx)(DictCont,{text:text,enDict:enDict}),isWord&&OPT_SUG_MAP.has(enSug)&&/*#__PURE__*/(0,jsx_runtime.jsx)(SugCont,{text:text,enSug:enSug})]});} ;// CONCATENATED MODULE: ./src/views/Selection/TranBox.js -function Header(_ref){let{setShowBox,simpleStyle,setSimpleStyle,hideClickAway,setHideClickAway,followSelection,setFollowSelection,mouseHover}=_ref;const i18n=useI18n();if(!isMobile&&simpleStyle&&!mouseHover){return;}return/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{onMouseUp:e=>e.stopPropagation(),onTouchEnd:e=>e.stopPropagation(),children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"space-between",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(DragIndicator/* default */.Z,{fontSize:"small"}),/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{variant:"body2",sx:{userSelect:"none",WebkitUserSelect:"none",fontWeight:"bold"},children:"".concat("KISS Translator"," v").concat("2.0.4")})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_click_away"),onClick:()=>{setHideClickAway(pre=>!pre);},children:hideClickAway?/*#__PURE__*/(0,jsx_runtime.jsx)(LockOpen/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(Lock/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_follow_selection"),onClick:()=>{setFollowSelection(pre=>!pre);},children:followSelection?/*#__PURE__*/(0,jsx_runtime.jsx)(PushPinOutlined/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(PushPin/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_simple_style"),onClick:()=>{setSimpleStyle(pre=>!pre);},children:simpleStyle?/*#__PURE__*/(0,jsx_runtime.jsx)(UnfoldMore/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(UnfoldLess/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",onClick:()=>{setShowBox(false);},children:/*#__PURE__*/(0,jsx_runtime.jsx)(icons_material_Close/* default */.Z,{fontSize:"small"})})]})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{})]});}function TranBox(_ref2){let{showBox,text,setText,setShowBox,tranboxSetting:{enDict,enSug,apiSlugs,fromLang,toLang,toLang2,autoHeight},transApis,boxSize,setBoxSize,boxPosition,setBoxPosition,simpleStyle,setSimpleStyle,hideClickAway,setHideClickAway,followSelection,setFollowSelection,extStyles="",langDetector}=_ref2;const[mouseHover,setMouseHover]=(0,react.useState)(false);// todo: 这里的 SettingProvider 不应和 background 的共用 +function Header(_ref){let{setShowBox,simpleStyle,setSimpleStyle,hideClickAway,setHideClickAway,followSelection,setFollowSelection,mouseHover}=_ref;const i18n=useI18n();if(!isMobile&&simpleStyle&&!mouseHover){return;}return/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{onMouseUp:e=>e.stopPropagation(),onTouchEnd:e=>e.stopPropagation(),children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"space-between",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(DragIndicator/* default */.Z,{fontSize:"small"}),/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{variant:"body2",sx:{userSelect:"none",WebkitUserSelect:"none",fontWeight:"bold"},children:"".concat("KISS Translator"," v").concat("2.0.5")})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_click_away"),onClick:()=>{setHideClickAway(pre=>!pre);},children:hideClickAway?/*#__PURE__*/(0,jsx_runtime.jsx)(LockOpen/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(Lock/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_follow_selection"),onClick:()=>{setFollowSelection(pre=>!pre);},children:followSelection?/*#__PURE__*/(0,jsx_runtime.jsx)(PushPinOutlined/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(PushPin/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",title:i18n("btn_tip_simple_style"),onClick:()=>{setSimpleStyle(pre=>!pre);},children:simpleStyle?/*#__PURE__*/(0,jsx_runtime.jsx)(UnfoldMore/* default */.Z,{fontSize:"small"}):/*#__PURE__*/(0,jsx_runtime.jsx)(UnfoldLess/* default */.Z,{fontSize:"small"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",onClick:()=>{setShowBox(false);},children:/*#__PURE__*/(0,jsx_runtime.jsx)(icons_material_Close/* default */.Z,{fontSize:"small"})})]})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{})]});}function TranBox(_ref2){let{showBox,text,setText,setShowBox,tranboxSetting:{enDict,enSug,apiSlugs,fromLang,toLang,toLang2,autoHeight},transApis,boxSize,setBoxSize,boxPosition,setBoxPosition,simpleStyle,setSimpleStyle,hideClickAway,setHideClickAway,followSelection,setFollowSelection,extStyles="",langDetector}=_ref2;const[mouseHover,setMouseHover]=(0,react.useState)(false);// todo: 这里的 SettingProvider 不应和 background 的共用 return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Theme,{styles:extStyles,children:showBox&&/*#__PURE__*/(0,jsx_runtime.jsx)(DraggableResizable,{position:boxPosition,size:boxSize,setSize:setBoxSize,setPosition:setBoxPosition,autoHeight:autoHeight,header:/*#__PURE__*/(0,jsx_runtime.jsx)(Header,{setShowBox:setShowBox,simpleStyle:simpleStyle,setSimpleStyle:setSimpleStyle,hideClickAway:hideClickAway,setHideClickAway:setHideClickAway,followSelection:followSelection,setFollowSelection:setFollowSelection,mouseHover:mouseHover}),onClick:e=>e.stopPropagation(),onMouseEnter:()=>setMouseHover(true),onMouseLeave:()=>setMouseHover(false),children:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{sx:{p:simpleStyle?1:2},children:/*#__PURE__*/(0,jsx_runtime.jsx)(TranForm,{text:text,setText:setText,apiSlugs:apiSlugs,fromLang:fromLang,toLang:toLang,toLang2:toLang2,transApis:transApis,simpleStyle:simpleStyle,langDetector:langDetector,enDict:enDict,enSug:enSug})})})})});} ;// CONCATENATED MODULE: ./src/views/Selection/index.js function Slection(_ref){let{contextMenuType,tranboxSetting,transApis,uiLang,langDetector}=_ref;const{hideTranBtn=false,simpleStyle:initSimpleStyle=false,hideClickAway:initHideClickAway=false,followSelection:initFollowMouse=false,tranboxShortcut=DEFAULT_TRANBOX_SHORTCUT,triggerMode=OPT_TRANBOX_TRIGGER_CLICK,// extStyles, @@ -46921,7 +46932,7 @@ var BrightnessAuto = __webpack_require__(5538); ;// CONCATENATED MODULE: ./src/views/Options/DarkModeButton.js function DarkModeButton(){const{darkMode,toggleDarkMode}=useDarkMode();return/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{sx:{ml:1},onClick:toggleDarkMode,color:"inherit",children:darkMode==="dark"?/*#__PURE__*/(0,jsx_runtime.jsx)(DarkMode/* default */.Z,{}):darkMode==="light"?/*#__PURE__*/(0,jsx_runtime.jsx)(LightMode/* default */.Z,{}):/*#__PURE__*/(0,jsx_runtime.jsx)(BrightnessAuto/* default */.Z,{})});} ;// CONCATENATED MODULE: ./src/views/Popup/Header.js -function Header_Header(_ref){let{onClose}=_ref;const handleHomepage=()=>{window.open("https://github.com/fishjar/kiss-translator","_blank");};return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"space-between",alignItems:"center",spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"flex-start",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{onClick:handleHomepage,children:/*#__PURE__*/(0,jsx_runtime.jsx)(Home/* default */.Z,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{component:"div",sx:{userSelect:"none",WebkitUserSelect:"none",fontWeight:"bold"},children:"".concat("KISS Translator"," v").concat("2.0.4")})]}),onClose?/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{onClick:()=>{onClose();},children:/*#__PURE__*/(0,jsx_runtime.jsx)(icons_material_Close/* default */.Z,{})}):/*#__PURE__*/(0,jsx_runtime.jsx)(DarkModeButton,{})]});} +function Header_Header(_ref){let{onClose}=_ref;const handleHomepage=()=>{window.open("https://github.com/fishjar/kiss-translator","_blank");};return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"space-between",alignItems:"center",spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",justifyContent:"flex-start",alignItems:"center",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{onClick:handleHomepage,children:/*#__PURE__*/(0,jsx_runtime.jsx)(Home/* default */.Z,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{component:"div",sx:{userSelect:"none",WebkitUserSelect:"none",fontWeight:"bold"},children:"".concat("KISS Translator"," v").concat("2.0.5")})]}),onClose?/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{onClick:()=>{onClose();},children:/*#__PURE__*/(0,jsx_runtime.jsx)(icons_material_Close/* default */.Z,{})}):/*#__PURE__*/(0,jsx_runtime.jsx)(DarkModeButton,{})]});} ;// CONCATENATED MODULE: ./src/hooks/WindowSize.js function useWindowSize(){const[windowSize,setWindowSize]=(0,react.useState)({w:window.innerWidth,h:window.innerHeight});const debounceWindowResize=useDebouncedCallback(()=>{setWindowSize({w:window.innerWidth,h:window.innerHeight});},200);(0,react.useEffect)(()=>{debounceWindowResize();window.addEventListener("resize",debounceWindowResize);return()=>{window.removeEventListener("resize",debounceWindowResize);};},[debounceWindowResize]);return windowSize;}/* harmony default export */ const WindowSize = (useWindowSize); ;// CONCATENATED MODULE: ./node_modules/.pnpm/@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@18.2.79_react@18.2.0__@emotio_d9048b84de05bb23a91868a7ef37c0cc/node_modules/@mui/material/FormControlLabel/formControlLabelClasses.js @@ -48071,20 +48082,20 @@ const Fab = /*#__PURE__*/react.forwardRef(function Fab(inProps, ref) { // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+icons-material@5.15.15_@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@1_1e29dcefa4691dc57f2acd9f73947cfd/node_modules/@mui/icons-material/Translate.js var Translate = __webpack_require__(2761); ;// CONCATENATED MODULE: ./src/views/Action/ContentFab.js -function ContentFab(_ref){let{translator,fabConfig:{x:fabX,y:fabY,fabClickAction=0}={},processActions}=_ref;const fabWidth=40;const windowSize=WindowSize();const[moved,setMoved]=(0,react.useState)(false);const handleStart=(0,react.useCallback)(()=>{setMoved(false);},[]);const handleMove=(0,react.useCallback)(()=>{setMoved(true);},[]);const handleClick=(0,react.useCallback)(()=>{if(!moved){if(fabClickAction===1){translator.toggle();sendIframeMsg(MSG_TRANS_TOGGLE);}else{processActions({action:MSG_POPUP_TOGGLE});}}},[moved,translator,fabClickAction,processActions]);const fabProps=(0,react.useMemo)(()=>({windowSize,width:fabWidth,height:fabWidth,left:fabX!==null&&fabX!==void 0?fabX:-fabWidth,top:fabY!==null&&fabY!==void 0?fabY:windowSize.h/2}),[windowSize,fabWidth,fabX,fabY]);return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Theme,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Draggable,{snapEdge:true,...fabProps,onStart:handleStart,onMove:handleMove,handler:/*#__PURE__*/(0,jsx_runtime.jsx)(Fab_Fab,{size:"small",color:"primary",onClick:handleClick,children:/*#__PURE__*/(0,jsx_runtime.jsx)(Translate/* default */.Z,{sx:{width:24,height:24}})})},"fab")})});} +function ContentFab(_ref){let{fabConfig:{x:fabX,y:fabY,fabClickAction=0}={},processActions}=_ref;const fabWidth=40;const windowSize=WindowSize();const[moved,setMoved]=(0,react.useState)(false);const handleStart=(0,react.useCallback)(()=>{setMoved(false);},[]);const handleMove=(0,react.useCallback)(()=>{setMoved(true);},[]);const handleClick=(0,react.useCallback)(()=>{if(!moved){if(fabClickAction===1){processActions({action:MSG_TRANS_TOGGLE});}else{processActions({action:MSG_POPUP_TOGGLE});}}},[moved,fabClickAction,processActions]);const fabProps=(0,react.useMemo)(()=>({windowSize,width:fabWidth,height:fabWidth,left:fabX!==null&&fabX!==void 0?fabX:-fabWidth,top:fabY!==null&&fabY!==void 0?fabY:windowSize.h/2}),[windowSize,fabWidth,fabX,fabY]);return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Theme,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Draggable,{snapEdge:true,...fabProps,onStart:handleStart,onMove:handleMove,handler:/*#__PURE__*/(0,jsx_runtime.jsx)(Fab_Fab,{size:"small",color:"primary",onClick:handleClick,children:/*#__PURE__*/(0,jsx_runtime.jsx)(Translate/* default */.Z,{sx:{width:24,height:24}})})},"fab")})});} ;// CONCATENATED MODULE: ./src/libs/fabManager.js -class FabManager extends ShadowDomManager{constructor(_ref){let{translator,processActions,fabConfig}=_ref;super({id:APP_CONSTS.fabID,className:"notranslate",reactComponent:ContentFab,props:{translator,processActions,fabConfig}});if(!(fabConfig!==null&&fabConfig!==void 0&&fabConfig.isHide)){this.show();}}} +class FabManager extends ShadowDomManager{constructor(_ref){let{processActions,fabConfig}=_ref;super({id:APP_CONSTS.fabID,className:"notranslate",reactComponent:ContentFab,props:{processActions,fabConfig}});if(!(fabConfig!==null&&fabConfig!==void 0&&fabConfig.isHide)){this.show();}}} ;// CONCATENATED MODULE: ./src/libs/translatorManager.js -var _clearShortcuts=/*#__PURE__*/_classPrivateFieldKey("clearShortcuts");var _menuCommandIds=/*#__PURE__*/_classPrivateFieldKey("menuCommandIds");var _clearTouchListeners=/*#__PURE__*/_classPrivateFieldKey("clearTouchListeners");var _isActive=/*#__PURE__*/_classPrivateFieldKey("isActive");var _isUserscript=/*#__PURE__*/_classPrivateFieldKey("isUserscript");var _isIframe=/*#__PURE__*/_classPrivateFieldKey("isIframe");var _windowMessageHandler=/*#__PURE__*/_classPrivateFieldKey("windowMessageHandler");var _browserMessageHandler=/*#__PURE__*/_classPrivateFieldKey("browserMessageHandler");var _setupMessageListeners=/*#__PURE__*/_classPrivateFieldKey("setupMessageListeners");var _setupTouchOperations=/*#__PURE__*/_classPrivateFieldKey("setupTouchOperations");var _handleWindowMessage=/*#__PURE__*/_classPrivateFieldKey("handleWindowMessage");var _handleBrowserMessage=/*#__PURE__*/_classPrivateFieldKey("handleBrowserMessage");var _registerShortcuts=/*#__PURE__*/_classPrivateFieldKey("registerShortcuts");var _registerMenus=/*#__PURE__*/_classPrivateFieldKey("registerMenus");var _processActions=/*#__PURE__*/_classPrivateFieldKey("processActions");class TranslatorManager{constructor(_ref){let{setting,rule,fabConfig,favWords,isIframe,isUserscript}=_ref;Object.defineProperty(this,_processActions,{value:_processActions2});Object.defineProperty(this,_registerMenus,{value:_registerMenus2});Object.defineProperty(this,_registerShortcuts,{value:_registerShortcuts2});Object.defineProperty(this,_handleBrowserMessage,{value:_handleBrowserMessage2});Object.defineProperty(this,_handleWindowMessage,{value:_handleWindowMessage2});Object.defineProperty(this,_setupTouchOperations,{value:_setupTouchOperations2});Object.defineProperty(this,_setupMessageListeners,{value:_setupMessageListeners2});Object.defineProperty(this,_clearShortcuts,{writable:true,value:[]});Object.defineProperty(this,_menuCommandIds,{writable:true,value:[]});Object.defineProperty(this,_clearTouchListeners,{writable:true,value:[]});Object.defineProperty(this,_isActive,{writable:true,value:false});Object.defineProperty(this,_isUserscript,{writable:true,value:void 0});Object.defineProperty(this,_isIframe,{writable:true,value:void 0});Object.defineProperty(this,_windowMessageHandler,{writable:true,value:null});Object.defineProperty(this,_browserMessageHandler,{writable:true,value:null});_classPrivateFieldBase(this,_isIframe)[_isIframe]=isIframe;_classPrivateFieldBase(this,_isUserscript)[_isUserscript]=isUserscript;this._translator=new translator_Translator({rule,setting,favWords,isUserscript,isIframe});if(!isIframe){this._transboxManager=new TransboxManager(setting);this._inputTranslator=new InputTranslator(setting);this._popupManager=new PopupManager({translator:this._translator,processActions:_classPrivateFieldBase(this,_processActions)[_processActions].bind(this)});this._fabManager=new FabManager({translator:this._translator,processActions:_classPrivateFieldBase(this,_processActions)[_processActions].bind(this),fabConfig});}_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]=_classPrivateFieldBase(this,_handleWindowMessage)[_handleWindowMessage].bind(this);_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]=_classPrivateFieldBase(this,_handleBrowserMessage)[_handleBrowserMessage].bind(this);}start(){if(_classPrivateFieldBase(this,_isActive)[_isActive]){logger.info("TranslatorManager is already started.");return;}_classPrivateFieldBase(this,_setupMessageListeners)[_setupMessageListeners]();_classPrivateFieldBase(this,_setupTouchOperations)[_setupTouchOperations]();if(!_classPrivateFieldBase(this,_isIframe)[_isIframe]&&_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){_classPrivateFieldBase(this,_registerShortcuts)[_registerShortcuts]();_classPrivateFieldBase(this,_registerMenus)[_registerMenus]();}_classPrivateFieldBase(this,_isActive)[_isActive]=true;logger.info("TranslatorManager started.");}stop(){var _this$_popupManager,_this$_fabManager,_this$_transboxManage,_this$_inputTranslato;if(!_classPrivateFieldBase(this,_isActive)[_isActive]){logger.info("TranslatorManager is not running.");return;}// 移除消息监听器 -if(_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){window.removeEventListener("message",_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]);}else if(browser.runtime.onMessage.hasListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler])){browser.runtime.onMessage.removeListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]);}// 已注册的快捷键 +var _clearShortcuts=/*#__PURE__*/_classPrivateFieldKey("clearShortcuts");var _menuCommandIds=/*#__PURE__*/_classPrivateFieldKey("menuCommandIds");var _clearTouchListeners=/*#__PURE__*/_classPrivateFieldKey("clearTouchListeners");var _isActive=/*#__PURE__*/_classPrivateFieldKey("isActive");var _isUserscript=/*#__PURE__*/_classPrivateFieldKey("isUserscript");var _isIframe=/*#__PURE__*/_classPrivateFieldKey("isIframe");var translatorManager_windowMessageHandler=/*#__PURE__*/_classPrivateFieldKey("windowMessageHandler");var _browserMessageHandler=/*#__PURE__*/_classPrivateFieldKey("browserMessageHandler");var _setupMessageListeners=/*#__PURE__*/_classPrivateFieldKey("setupMessageListeners");var _setupTouchOperations=/*#__PURE__*/_classPrivateFieldKey("setupTouchOperations");var translatorManager_handleWindowMessage=/*#__PURE__*/_classPrivateFieldKey("handleWindowMessage");var _handleBrowserMessage=/*#__PURE__*/_classPrivateFieldKey("handleBrowserMessage");var _registerShortcuts=/*#__PURE__*/_classPrivateFieldKey("registerShortcuts");var _registerMenus=/*#__PURE__*/_classPrivateFieldKey("registerMenus");var _processActions=/*#__PURE__*/_classPrivateFieldKey("processActions");class TranslatorManager{constructor(_ref){let{setting,rule,fabConfig,favWords,isIframe,isUserscript}=_ref;Object.defineProperty(this,_processActions,{value:_processActions2});Object.defineProperty(this,_registerMenus,{value:_registerMenus2});Object.defineProperty(this,_registerShortcuts,{value:_registerShortcuts2});Object.defineProperty(this,_handleBrowserMessage,{value:_handleBrowserMessage2});Object.defineProperty(this,translatorManager_handleWindowMessage,{value:translatorManager_handleWindowMessage2});Object.defineProperty(this,_setupTouchOperations,{value:_setupTouchOperations2});Object.defineProperty(this,_setupMessageListeners,{value:_setupMessageListeners2});Object.defineProperty(this,_clearShortcuts,{writable:true,value:[]});Object.defineProperty(this,_menuCommandIds,{writable:true,value:[]});Object.defineProperty(this,_clearTouchListeners,{writable:true,value:[]});Object.defineProperty(this,_isActive,{writable:true,value:false});Object.defineProperty(this,_isUserscript,{writable:true,value:void 0});Object.defineProperty(this,_isIframe,{writable:true,value:void 0});Object.defineProperty(this,translatorManager_windowMessageHandler,{writable:true,value:null});Object.defineProperty(this,_browserMessageHandler,{writable:true,value:null});_classPrivateFieldBase(this,_isIframe)[_isIframe]=isIframe;_classPrivateFieldBase(this,_isUserscript)[_isUserscript]=isUserscript;this._translator=new translator_Translator({rule,setting,favWords,isUserscript,isIframe});this._transboxManager=new TransboxManager(setting);if(!isIframe){this._inputTranslator=new InputTranslator(setting);this._popupManager=new PopupManager({translator:this._translator,processActions:_classPrivateFieldBase(this,_processActions)[_processActions].bind(this)});this._fabManager=new FabManager({processActions:_classPrivateFieldBase(this,_processActions)[_processActions].bind(this),fabConfig});}_classPrivateFieldBase(this,translatorManager_windowMessageHandler)[translatorManager_windowMessageHandler]=_classPrivateFieldBase(this,translatorManager_handleWindowMessage)[translatorManager_handleWindowMessage].bind(this);_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]=_classPrivateFieldBase(this,_handleBrowserMessage)[_handleBrowserMessage].bind(this);}start(){if(_classPrivateFieldBase(this,_isActive)[_isActive]){logger.info("TranslatorManager is already started.");return;}_classPrivateFieldBase(this,_setupMessageListeners)[_setupMessageListeners]();_classPrivateFieldBase(this,_setupTouchOperations)[_setupTouchOperations]();if(!_classPrivateFieldBase(this,_isIframe)[_isIframe]&&_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){_classPrivateFieldBase(this,_registerShortcuts)[_registerShortcuts]();_classPrivateFieldBase(this,_registerMenus)[_registerMenus]();}_classPrivateFieldBase(this,_isActive)[_isActive]=true;logger.info("TranslatorManager started.");}stop(){var _this$_popupManager,_this$_fabManager,_this$_transboxManage,_this$_inputTranslato;if(!_classPrivateFieldBase(this,_isActive)[_isActive]){logger.info("TranslatorManager is not running.");return;}// 移除消息监听器 +if(_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){window.removeEventListener("message",_classPrivateFieldBase(this,translatorManager_windowMessageHandler)[translatorManager_windowMessageHandler]);}else if(browser.runtime.onMessage.hasListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler])){browser.runtime.onMessage.removeListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]);}// 已注册的快捷键 _classPrivateFieldBase(this,_clearShortcuts)[_clearShortcuts].forEach(clear=>clear());_classPrivateFieldBase(this,_clearShortcuts)[_clearShortcuts]=[];// 触屏 _classPrivateFieldBase(this,_clearTouchListeners)[_clearTouchListeners].forEach(clear=>clear());_classPrivateFieldBase(this,_clearTouchListeners)[_clearTouchListeners]=[];// 油猴菜单 if(globalThis.GM&&_classPrivateFieldBase(this,_menuCommandIds)[_menuCommandIds].length>0){_classPrivateFieldBase(this,_menuCommandIds)[_menuCommandIds].forEach(id=>globalThis.GM.unregisterMenuCommand(id));_classPrivateFieldBase(this,_menuCommandIds)[_menuCommandIds]=[];}// 子模块 -(_this$_popupManager=this._popupManager)===null||_this$_popupManager===void 0?void 0:_this$_popupManager.destroy();(_this$_fabManager=this._fabManager)===null||_this$_fabManager===void 0?void 0:_this$_fabManager.destroy();(_this$_transboxManage=this._transboxManager)===null||_this$_transboxManage===void 0?void 0:_this$_transboxManage.disable();(_this$_inputTranslato=this._inputTranslator)===null||_this$_inputTranslato===void 0?void 0:_this$_inputTranslato.disable();this._translator.stop();_classPrivateFieldBase(this,_isActive)[_isActive]=false;logger.info("TranslatorManager stopped.");}}function _setupMessageListeners2(){if(_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){window.addEventListener("message",_classPrivateFieldBase(this,_windowMessageHandler)[_windowMessageHandler]);}else{browser.runtime.onMessage.addListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]);}}function _setupTouchOperations2(){if(_classPrivateFieldBase(this,_isIframe)[_isIframe])return;const{touchModes=[2]}=this._translator.setting;if(touchModes.length===0){return;}const handleTap=()=>{_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE});};const handleListener=mode=>{let options=null;switch(mode){case 2:case 3:case 4:options={taps:1,fingers:mode};break;case 5:options={taps:2,fingers:1};break;case 6:options={taps:3,fingers:1};break;case 7:options={taps:2,fingers:2};break;default:}if(options){_classPrivateFieldBase(this,_clearTouchListeners)[_clearTouchListeners].push(touchTapListener(handleTap,options));}};touchModes.forEach(mode=>handleListener(mode));}function _handleWindowMessage2(event){_classPrivateFieldBase(this,_processActions)[_processActions](event.data);}function _handleBrowserMessage2(message,sender,sendResponse){const result=_classPrivateFieldBase(this,_processActions)[_processActions](message);const response=result||{rule:this._translator.rule,setting:this._translator.setting};sendResponse(response);return true;}function _registerShortcuts2(){const{shortcuts}=this._translator.setting;_classPrivateFieldBase(this,_clearShortcuts)[_clearShortcuts]=[shortcutRegister(shortcuts[OPT_SHORTCUT_TRANSLATE],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_STYLE],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE_STYLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_POPUP],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_POPUP_TOGGLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_SETTING],()=>window.open("https://fishjar.github.io/kiss-translator/options.html","_blank"))];}function _registerMenus2(){if(!globalThis.GM)return;const{contextMenuType,uiLang}=this._translator.setting;if(contextMenuType===0)return;const i18n=newI18n(uiLang||"zh");const GM=globalThis.GM;_classPrivateFieldBase(this,_menuCommandIds)[_menuCommandIds]=[GM.registerMenuCommand(i18n("translate_switch"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE}),"Q"),GM.registerMenuCommand(i18n("toggle_style"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE_STYLE}),"C"),GM.registerMenuCommand(i18n("open_menu"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_POPUP_TOGGLE}),"K"),GM.registerMenuCommand(i18n("open_setting"),()=>window.open("https://fishjar.github.io/kiss-translator/options.html","_blank"),"O")];}function _processActions2(){var _this$_popupManager2,_this$_transboxManage2,_this$_inputTranslato2;let{action,args}=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};if(_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){sendIframeMsg(action);}switch(action){case MSG_TRANS_TOGGLE:this._translator.toggle();break;case MSG_TRANS_TOGGLE_STYLE:this._translator.toggleStyle();break;case MSG_TRANS_GETRULE:break;case MSG_TRANS_PUTRULE:this._translator.updateRule(args);break;case MSG_OPEN_TRANBOX:document.dispatchEvent(new CustomEvent(EVENT_KISS,{detail:{action:MSG_OPEN_TRANBOX}}));break;case MSG_POPUP_TOGGLE:(_this$_popupManager2=this._popupManager)===null||_this$_popupManager2===void 0?void 0:_this$_popupManager2.toggle();break;case MSG_TRANSBOX_TOGGLE:(_this$_transboxManage2=this._transboxManager)===null||_this$_transboxManage2===void 0?void 0:_this$_transboxManage2.toggle();this._translator.toggleTransbox();break;case MSG_MOUSEHOVER_TOGGLE:this._translator.toggleMouseHover();break;case MSG_TRANSINPUT_TOGGLE:(_this$_inputTranslato2=this._inputTranslator)===null||_this$_inputTranslato2===void 0?void 0:_this$_inputTranslato2.toggle();this._translator.toggleInputTranslate();break;default:logger.info("Message action is unavailable: ".concat(action));return{error:"Message action is unavailable: ".concat(action)};}} +(_this$_popupManager=this._popupManager)===null||_this$_popupManager===void 0?void 0:_this$_popupManager.destroy();(_this$_fabManager=this._fabManager)===null||_this$_fabManager===void 0?void 0:_this$_fabManager.destroy();(_this$_transboxManage=this._transboxManager)===null||_this$_transboxManage===void 0?void 0:_this$_transboxManage.disable();(_this$_inputTranslato=this._inputTranslator)===null||_this$_inputTranslato===void 0?void 0:_this$_inputTranslato.disable();this._translator.stop();_classPrivateFieldBase(this,_isActive)[_isActive]=false;logger.info("TranslatorManager stopped.");}}function _setupMessageListeners2(){if(_classPrivateFieldBase(this,_isUserscript)[_isUserscript]){window.addEventListener("message",_classPrivateFieldBase(this,translatorManager_windowMessageHandler)[translatorManager_windowMessageHandler]);}else{browser.runtime.onMessage.addListener(_classPrivateFieldBase(this,_browserMessageHandler)[_browserMessageHandler]);if(_classPrivateFieldBase(this,_isIframe)[_isIframe]){window.addEventListener("message",_classPrivateFieldBase(this,translatorManager_windowMessageHandler)[translatorManager_windowMessageHandler]);}}}function _setupTouchOperations2(){if(_classPrivateFieldBase(this,_isIframe)[_isIframe])return;const{touchModes=[2]}=this._translator.setting;if(touchModes.length===0){return;}const handleTap=()=>{_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE});};const handleListener=mode=>{let options=null;switch(mode){case 2:case 3:case 4:options={taps:1,fingers:mode};break;case 5:options={taps:2,fingers:1};break;case 6:options={taps:3,fingers:1};break;case 7:options={taps:2,fingers:2};break;default:}if(options){_classPrivateFieldBase(this,_clearTouchListeners)[_clearTouchListeners].push(touchTapListener(handleTap,options));}};touchModes.forEach(mode=>handleListener(mode));}function translatorManager_handleWindowMessage2(event){_classPrivateFieldBase(this,_processActions)[_processActions](event.data);}function _handleBrowserMessage2(message,sender,sendResponse){const result=_classPrivateFieldBase(this,_processActions)[_processActions](message,true);const response=result||{rule:this._translator.rule,setting:this._translator.setting};sendResponse(response);return true;}function _registerShortcuts2(){const{shortcuts}=this._translator.setting;_classPrivateFieldBase(this,_clearShortcuts)[_clearShortcuts]=[shortcutRegister(shortcuts[OPT_SHORTCUT_TRANSLATE],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_STYLE],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE_STYLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_POPUP],()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_POPUP_TOGGLE})),shortcutRegister(shortcuts[OPT_SHORTCUT_SETTING],()=>window.open("https://fishjar.github.io/kiss-translator/options.html","_blank"))];}function _registerMenus2(){if(!globalThis.GM)return;const{contextMenuType,uiLang}=this._translator.setting;if(contextMenuType===0)return;const i18n=newI18n(uiLang||"zh");const GM=globalThis.GM;_classPrivateFieldBase(this,_menuCommandIds)[_menuCommandIds]=[GM.registerMenuCommand(i18n("translate_switch"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE}),"Q"),GM.registerMenuCommand(i18n("toggle_style"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_TRANS_TOGGLE_STYLE}),"C"),GM.registerMenuCommand(i18n("open_menu"),()=>_classPrivateFieldBase(this,_processActions)[_processActions]({action:MSG_POPUP_TOGGLE}),"K"),GM.registerMenuCommand(i18n("open_setting"),()=>window.open("https://fishjar.github.io/kiss-translator/options.html","_blank"),"O")];}function _processActions2(){var _this$_popupManager2,_this$_transboxManage2,_this$_inputTranslato2;let{action,args}=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};let fromExt=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(!fromExt){sendIframeMsg(action,args);}switch(action){case MSG_TRANS_TOGGLE:this._translator.toggle();break;case MSG_TRANS_TOGGLE_STYLE:this._translator.toggleStyle();break;case MSG_TRANS_GETRULE:break;case MSG_TRANS_PUTRULE:this._translator.updateRule(args);break;case MSG_OPEN_TRANBOX:document.dispatchEvent(new CustomEvent(EVENT_KISS,{detail:{action:MSG_OPEN_TRANBOX}}));break;case MSG_POPUP_TOGGLE:(_this$_popupManager2=this._popupManager)===null||_this$_popupManager2===void 0?void 0:_this$_popupManager2.toggle();break;case MSG_TRANSBOX_TOGGLE:(_this$_transboxManage2=this._transboxManager)===null||_this$_transboxManage2===void 0?void 0:_this$_transboxManage2.toggle();this._translator.toggleTransbox();break;case MSG_MOUSEHOVER_TOGGLE:this._translator.toggleMouseHover();break;case MSG_TRANSINPUT_TOGGLE:(_this$_inputTranslato2=this._inputTranslator)===null||_this$_inputTranslato2===void 0?void 0:_this$_inputTranslato2.toggle();this._translator.toggleInputTranslate();break;default:logger.info("Message action is unavailable: ".concat(action));return{error:"Message action is unavailable: ".concat(action)};}} ;// CONCATENATED MODULE: ./src/common.js /** * 油猴脚本设置页面 - */function runSettingPage(){var _GM,_GM$info,_GM$info$script,_GM$info$script$grant;if((_GM=GM)!==null&&_GM!==void 0&&(_GM$info=_GM.info)!==null&&_GM$info!==void 0&&(_GM$info$script=_GM$info.script)!==null&&_GM$info$script!==void 0&&(_GM$info$script$grant=_GM$info$script.grant)!==null&&_GM$info$script$grant!==void 0&&_GM$info$script$grant.includes("unsafeWindow")){unsafeWindow.GM=GM;unsafeWindow.APP_INFO={name:"KISS Translator",version:"2.0.4"};}else{const ping=utils_genEventName();window.addEventListener(ping,handlePing);// window.eval(`(${injectScript})("${ping}")`); // eslint-disable-line + */function runSettingPage(){var _GM,_GM$info,_GM$info$script,_GM$info$script$grant;if((_GM=GM)!==null&&_GM!==void 0&&(_GM$info=_GM.info)!==null&&_GM$info!==void 0&&(_GM$info$script=_GM$info.script)!==null&&_GM$info$script!==void 0&&(_GM$info$script$grant=_GM$info$script.grant)!==null&&_GM$info$script$grant!==void 0&&_GM$info$script$grant.includes("unsafeWindow")){unsafeWindow.GM=GM;unsafeWindow.APP_INFO={name:"KISS Translator",version:"2.0.5"};}else{const ping=utils_genEventName();window.addEventListener(ping,handlePing);// window.eval(`(${injectScript})("${ping}")`); // eslint-disable-line injectInlineJs("(".concat(injectScript,")(\"").concat(ping,"\")"),"kiss-translator-options-injector");}}/** * 显示错误信息到页面顶部 * @param {*} message diff --git a/main.js b/main.js index 44bbc9f..b14b79e 100644 --- a/main.js +++ b/main.js @@ -34806,7 +34806,7 @@ const Link = /*#__PURE__*/react.forwardRef(function Link(inProps, ref) { const useAsync=()=>{const[data,setData]=(0,react.useState)(null);const[loading,setLoading]=(0,react.useState)(false);const[error,setError]=(0,react.useState)(null);const execute=(0,react.useCallback)(async function(fn){if(!fn){return;}setLoading(true);setError(null);try{for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key];}const res=await fn(...args);setData(res);setLoading(false);return res;}catch(err){setError((err===null||err===void 0?void 0:err.message)||"An unknown error occurred");setLoading(false);// throw err; }},[]);const reset=(0,react.useCallback)(()=>{setData(null);setLoading(false);setError(null);},[]);return{data,loading,error,execute,reset};};const useAsyncNow=(fn,arg)=>{const{execute,...asyncState}=useAsync();useEffect(()=>{if(fn){execute(fn,arg);}},[execute,fn,arg]);return{...asyncState};};const useFetch=()=>{const{execute,...asyncState}=useAsync();const requester=(0,react.useCallback)(async(url,options)=>{var _response$headers$get;const response=await fetch(url,options);if(!response.ok){const errorInfo=await response.text();throw new Error("Request failed: ".concat(response.status," ").concat(response.statusText," - ").concat(errorInfo));}if(response.status===204){return null;}if((_response$headers$get=response.headers.get("Content-Type"))!==null&&_response$headers$get!==void 0&&_response$headers$get.includes("json")){return response.json();}return response.text();},[]);const get=(0,react.useCallback)(async function(url){let options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};try{const result=await execute(requester,url,{...options,method:"GET"});return result;}catch(err){return null;}},[execute,requester]);const post=(0,react.useCallback)(async function(url,body){let options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};try{const result=await execute(requester,url,{...options,method:"POST",headers:{"Content-Type":"application/json",...options.headers},body:JSON.stringify(body)});return result;}catch(err){return null;}},[execute,requester]);const put=(0,react.useCallback)(async function(url,body){let options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};try{const result=await execute(requester,url,{...options,method:"PUT",headers:{"Content-Type":"application/json",...options.headers},body:JSON.stringify(body)});return result;}catch(err){return null;}},[execute,requester]);const del=(0,react.useCallback)(async function(url){let options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};try{const result=await execute(requester,url,{...options,method:"DELETE"});return result;}catch(err){return null;}},[execute,requester]);return{...asyncState,get,post,put,del};};const useGet=url=>{const{get,...fetchState}=useFetch();(0,react.useEffect)(()=>{if(url)get(url);},[url,get]);return{...fetchState};}; ;// CONCATENATED MODULE: ./src/config/app.js -const APP_NAME="KISS Translator".trim().split(/\s+/).join("-");const APP_LCNAME=APP_NAME.toLowerCase();const APP_UPNAME=APP_NAME.toUpperCase();const APP_CONSTS={fabID:"".concat(APP_LCNAME,"-fab"),boxID:"".concat(APP_LCNAME,"-box"),popupID:"".concat(APP_LCNAME,"-popup")};const APP_VERSION="2.0.4".split(".");const THEME_LIGHT="light";const THEME_DARK="dark"; +const APP_NAME="KISS Translator".trim().split(/\s+/).join("-");const APP_LCNAME=APP_NAME.toLowerCase();const APP_UPNAME=APP_NAME.toUpperCase();const APP_CONSTS={fabID:"".concat(APP_LCNAME,"-fab"),boxID:"".concat(APP_LCNAME,"-box"),popupID:"".concat(APP_LCNAME,"-popup")};const APP_VERSION="2.0.5".split(".");const THEME_LIGHT="light";const THEME_DARK="dark"; ;// CONCATENATED MODULE: ./src/config/api.js const DEFAULT_HTTP_TIMEOUT=10000;// 调用超时时间 const DEFAULT_FETCH_LIMIT=10;// 默认最大任务数量 @@ -34823,10 +34823,10 @@ const INPUT_PLACE_KEY="{{key}}";// 占位符 const INPUT_PLACE_MODEL="{{model}}";// 占位符 // export const OPT_DICT_BAIDU = "Baidu"; const OPT_DICT_BING="Bing";const OPT_DICT_YOUDAO="Youdao";const OPT_DICT_ALL=[OPT_DICT_BING,OPT_DICT_YOUDAO];const OPT_DICT_MAP=new Set(OPT_DICT_ALL);const OPT_SUG_BAIDU="Baidu";const OPT_SUG_YOUDAO="Youdao";const OPT_SUG_ALL=[OPT_SUG_BAIDU,OPT_SUG_YOUDAO];const OPT_SUG_MAP=new Set(OPT_SUG_ALL);const OPT_TRANS_BUILTINAI="BuiltinAI";const OPT_TRANS_GOOGLE="Google";const OPT_TRANS_GOOGLE_2="Google2";const OPT_TRANS_MICROSOFT="Microsoft";const OPT_TRANS_AZUREAI="AzureAI";const OPT_TRANS_DEEPL="DeepL";const OPT_TRANS_DEEPLX="DeepLX";const OPT_TRANS_DEEPLFREE="DeepLFree";const OPT_TRANS_NIUTRANS="NiuTrans";const OPT_TRANS_BAIDU="Baidu";const OPT_TRANS_TENCENT="Tencent";const OPT_TRANS_VOLCENGINE="Volcengine";const OPT_TRANS_OPENAI="OpenAI";const OPT_TRANS_GEMINI="Gemini";const OPT_TRANS_GEMINI_2="Gemini2";const OPT_TRANS_CLAUDE="Claude";const OPT_TRANS_CLOUDFLAREAI="CloudflareAI";const OPT_TRANS_OLLAMA="Ollama";const OPT_TRANS_OPENROUTER="OpenRouter";const OPT_TRANS_CUSTOMIZE="Custom";// 内置支持的翻译引擎 -const OPT_ALL_TYPES=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_GOOGLE_2,OPT_TRANS_MICROSOFT,OPT_TRANS_AZUREAI,// OPT_TRANS_BAIDU, +const OPT_ALL_TRANS_TYPES=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_GOOGLE_2,OPT_TRANS_MICROSOFT,OPT_TRANS_AZUREAI,// OPT_TRANS_BAIDU, OPT_TRANS_TENCENT,OPT_TRANS_VOLCENGINE,OPT_TRANS_DEEPL,OPT_TRANS_DEEPLFREE,OPT_TRANS_DEEPLX,OPT_TRANS_NIUTRANS,OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_CLAUDE,OPT_TRANS_CLOUDFLAREAI,OPT_TRANS_OLLAMA,OPT_TRANS_OPENROUTER,OPT_TRANS_CUSTOMIZE];const OPT_LANGDETECTOR_ALL=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_MICROSOFT,OPT_TRANS_BAIDU,OPT_TRANS_TENCENT];const OPT_LANGDETECTOR_MAP=new Set(OPT_LANGDETECTOR_ALL);// 翻译引擎特殊集合 const API_SPE_TYPES={// 内置翻译 -builtin:new Set(OPT_ALL_TYPES),// 机器翻译 +builtin:new Set(OPT_ALL_TRANS_TYPES),// 机器翻译 machine:new Set([OPT_TRANS_MICROSOFT,OPT_TRANS_DEEPLFREE,OPT_TRANS_BAIDU,OPT_TRANS_TENCENT,OPT_TRANS_VOLCENGINE]),// AI翻译 ai:new Set([OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_CLAUDE,OPT_TRANS_OLLAMA,OPT_TRANS_OPENROUTER]),// 支持多key mulkeys:new Set([OPT_TRANS_AZUREAI,OPT_TRANS_DEEPL,OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_CLAUDE,OPT_TRANS_CLOUDFLAREAI,OPT_TRANS_OLLAMA,OPT_TRANS_OPENROUTER,OPT_TRANS_NIUTRANS,OPT_TRANS_CUSTOMIZE]),// 支持批处理 @@ -34846,7 +34846,7 @@ context:new Set([OPT_TRANS_OPENAI,OPT_TRANS_GEMINI,OPT_TRANS_GEMINI_2,OPT_TRANS_ "concise"// 简明风格 ];const BUILTIN_PLACEHOLDERS=["{ }","{{ }}","[ ]","[[ ]]"];const BUILTIN_PLACETAGS=["i","a","b","x"];const OPT_LANGS_TO=[["en","English - English"],["zh-CN","Simplified Chinese - 简体中文"],["zh-TW","Traditional Chinese - 繁體中文"],["ar","Arabic - العربية"],["bg","Bulgarian - Български"],["ca","Catalan - Català"],["hr","Croatian - Hrvatski"],["cs","Czech - Čeština"],["da","Danish - Dansk"],["nl","Dutch - Nederlands"],["fi","Finnish - Suomi"],["fr","French - Français"],["de","German - Deutsch"],["el","Greek - Ελληνικά"],["hi","Hindi - हिन्दी"],["hu","Hungarian - Magyar"],["id","Indonesian - Indonesia"],["it","Italian - Italiano"],["ja","Japanese - 日本語"],["ko","Korean - 한국어"],["ms","Malay - Melayu"],["mt","Maltese - Malti"],["nb","Norwegian - Norsk Bokmål"],["pl","Polish - Polski"],["pt","Portuguese - Português"],["ro","Romanian - Română"],["ru","Russian - Русский"],["sk","Slovak - Slovenčina"],["sl","Slovenian - Slovenščina"],["es","Spanish - Español"],["sv","Swedish - Svenska"],["ta","Tamil - தமிழ்"],["te","Telugu - తెలుగు"],["th","Thai - ไทย"],["tr","Turkish - Türkçe"],["uk","Ukrainian - Українська"],["vi","Vietnamese - Tiếng Việt"]];const OPT_LANGS_LIST=OPT_LANGS_TO.map(_ref=>{let[lang]=_ref;return lang;});const OPT_LANGS_FROM=[["auto","Auto-detect"],...OPT_LANGS_TO];const OPT_LANGS_MAP=new Map(OPT_LANGS_TO);// CODE->名称 const OPT_LANGS_SPEC_NAME=new Map(OPT_LANGS_FROM.map(_ref2=>{let[key,val]=_ref2;return[key,val.split(" - ")[0]];}));const OPT_LANGS_SPEC_DEFAULT=new Map(OPT_LANGS_FROM.map(_ref3=>{let[key]=_ref3;return[key,key];}));const OPT_LANGS_SPEC_DEFAULT_UC=new Map(OPT_LANGS_FROM.map(_ref4=>{let[key]=_ref4;return[key,key.toUpperCase()];}));const OPT_LANGS_TO_SPEC={[OPT_TRANS_BUILTINAI]:new Map([...OPT_LANGS_SPEC_DEFAULT,["zh-CN","zh"],["zh-TW","zh"]]),[OPT_TRANS_GOOGLE]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_GOOGLE_2]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_MICROSOFT]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto",""],["zh-CN","zh-Hans"],["zh-TW","zh-Hant"]]),[OPT_TRANS_AZUREAI]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto",""],["zh-CN","zh-Hans"],["zh-TW","zh-Hant"]]),[OPT_TRANS_DEEPL]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto",""],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_DEEPLFREE]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto","auto"],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_DEEPLX]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto","auto"],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_NIUTRANS]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto","auto"],["zh-CN","zh"],["zh-TW","cht"]]),[OPT_TRANS_VOLCENGINE]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto","auto"],["zh-CN","zh"],["zh-TW","zh-Hant"]]),[OPT_TRANS_BAIDU]:new Map([...OPT_LANGS_SPEC_DEFAULT,["zh-CN","zh"],["zh-TW","cht"],["ar","ara"],["bg","bul"],["ca","cat"],["hr","hrv"],["da","dan"],["fi","fin"],["fr","fra"],["hi","mai"],["ja","jp"],["ko","kor"],["ms","may"],["mt","mlt"],["nb","nor"],["ro","rom"],["ru","ru"],["sl","slo"],["es","spa"],["sv","swe"],["ta","tam"],["te","tel"],["uk","ukr"],["vi","vie"]]),[OPT_TRANS_TENCENT]:new Map([["auto","auto"],["zh-CN","zh"],["zh-TW","zh"],["en","en"],["ar","ar"],["de","de"],["ru","ru"],["fr","fr"],["fi","fil"],["ko","ko"],["ms","ms"],["pt","pt"],["ja","ja"],["th","th"],["tr","tr"],["es","es"],["it","it"],["hi","hi"],["id","id"],["vi","vi"]]),[OPT_TRANS_OPENAI]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_GEMINI]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_GEMINI_2]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_CLAUDE]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_OLLAMA]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_OPENROUTER]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_CLOUDFLAREAI]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_CUSTOMIZE]:OPT_LANGS_SPEC_DEFAULT};const specToCode=m=>new Map(Array.from(m.entries()).map(_ref5=>{let[k,v]=_ref5;if(v===""){return["auto","auto"];}if(v==="zh"||v==="ZH"){return[v,"zh-CN"];}return[v,k];}));// 名称->CODE -const OPT_LANGS_TO_CODE={};Object.entries(OPT_LANGS_TO_SPEC).forEach(_ref6=>{let[t,m]=_ref6;OPT_LANGS_TO_CODE[t]=specToCode(m);});const defaultSystemPrompt="Act as a translation API. Output a single raw JSON object only. No extra text or fences.\n\nInput:\n{\"targetLanguage\":\"\",\"title\":\"\",\"description\":\"\",\"segments\":[{\"id\":1,\"text\":\"...\"}],\"glossary\":{\"sourceTerm\":\"targetTerm\"},\"tone\":\"\"}\n\nOutput:\n{\"translations\":[{\"id\":1,\"text\":\"...\",\"sourceLanguage\":\"\"}]}\n\nRules:\n1. Use title/description for context only; do not output them.\n2. Keep id, order, and count of segments.\n3. Preserve whitespace, HTML entities, and all HTML-like tags (e.g., , ). Translate inner text only.\n4. Highest priority: Follow 'glossary'. Use value for translation; if value is \"\", keep the key.\n5. Do not translate: content in ,
, text enclosed in backticks, or placeholders like {1}, {{1}}, [1], [[1]].\n6.  Apply the specified tone to the translation.\n7.  Detect sourceLanguage for each segment.\n8.  Return empty or unchanged inputs as is.\n\nExample:\nInput: {\"targetLanguage\":\"zh-CN\",\"segments\":[{\"id\":1,\"text\":\"A React component.\"}],\"glossary\":{\"component\":\"\u7EC4\u4EF6\",\"React\":\"\"}}\nOutput: {\"translations\":[{\"id\":1,\"text\":\"\u4E00\u4E2AReact\u7EC4\u4EF6\",\"sourceLanguage\":\"en\"}]}\n\nFail-safe: On any error, return {\"translations\":[]}.";// const defaultSubtitlePrompt = `Goal: Convert raw subtitle event JSON into a clean, sentence-based JSON array.
+const OPT_LANGS_TO_CODE={};Object.entries(OPT_LANGS_TO_SPEC).forEach(_ref6=>{let[t,m]=_ref6;OPT_LANGS_TO_CODE[t]=specToCode(m);});const defaultNobatchPrompt="You are a professional, authentic machine translation engine.";const defaultNobatchUserPrompt="Translate the following source text from ".concat(INPUT_PLACE_FROM," to ").concat(INPUT_PLACE_TO,". Output translation directly without any additional text.\n\nSource Text: ").concat(INPUT_PLACE_TEXT,"\n\nTranslated Text:");const defaultSystemPrompt="Act as a translation API. Output a single raw JSON object only. No extra text or fences.\n\nInput:\n{\"targetLanguage\":\"\",\"title\":\"\",\"description\":\"\",\"segments\":[{\"id\":1,\"text\":\"...\"}],\"glossary\":{\"sourceTerm\":\"targetTerm\"},\"tone\":\"\"}\n\nOutput:\n{\"translations\":[{\"id\":1,\"text\":\"...\",\"sourceLanguage\":\"\"}]}\n\nRules:\n1.  Use title/description for context only; do not output them.\n2.  Keep id, order, and count of segments.\n3.  Preserve whitespace, HTML entities, and all HTML-like tags (e.g., , ). Translate inner text only.\n4.  Highest priority: Follow 'glossary'. Use value for translation; if value is \"\", keep the key.\n5.  Do not translate: content in , 
, text enclosed in backticks, or placeholders like {1}, {{1}}, [1], [[1]].\n6.  Apply the specified tone to the translation.\n7.  Detect sourceLanguage for each segment.\n8.  Return empty or unchanged inputs as is.\n\nExample:\nInput: {\"targetLanguage\":\"zh-CN\",\"segments\":[{\"id\":1,\"text\":\"A React component.\"}],\"glossary\":{\"component\":\"\u7EC4\u4EF6\",\"React\":\"\"}}\nOutput: {\"translations\":[{\"id\":1,\"text\":\"\u4E00\u4E2AReact\u7EC4\u4EF6\",\"sourceLanguage\":\"en\"}]}\n\nFail-safe: On any error, return {\"translations\":[]}.";// const defaultSubtitlePrompt = `Goal: Convert raw subtitle event JSON into a clean, sentence-based JSON array.
 // Output (valid JSON array, output ONLY this array):
 // [{
 //   "text": "string",        // Full sentence with correct punctuation
@@ -34865,7 +34865,7 @@ const defaultApi={apiSlug:"",// 唯一标识
 apiName:"",// 接口名称
 apiType:"",// 接口类型
 url:"",key:"",model:"",// 模型名称
-systemPrompt:defaultSystemPrompt,subtitlePrompt:defaultSubtitlePrompt,userPrompt:"",tone:BUILTIN_STONES[0],// 翻译风格
+systemPrompt:defaultSystemPrompt,subtitlePrompt:defaultSubtitlePrompt,nobatchPrompt:defaultNobatchPrompt,nobatchUserPrompt:defaultNobatchUserPrompt,userPrompt:"",tone:BUILTIN_STONES[0],// 翻译风格
 placeholder:BUILTIN_PLACEHOLDERS[0],// 占位符
 placetag:[BUILTIN_PLACETAGS[0]],// 占位标签
 // aiTerms: false, // AI智能专业术语 (todo: 备用)
@@ -34880,10 +34880,12 @@ batchLength:DEFAULT_BATCH_LENGTH,// 每次发送最大文字数量
 useBatchFetch:false,// 是否启用聚合发送请求
 useContext:false,// 是否启用智能上下文
 contextSize:DEFAULT_CONTEXT_SIZE,// 智能上下文保留会话数
-temperature:0.0,maxTokens:20480,think:false,thinkIgnore:"qwen3,deepseek-r1",isDisabled:false,// 是否不显示,
+temperature:0.0,maxTokens:20480,// think: false, // (OpenAI 兼容接口未支持,暂时移除)
+// thinkIgnore: "qwen3,deepseek-r1", // (OpenAI 兼容接口未支持,暂时移除)
+isDisabled:false,// 是否不显示,
 region:""// Azure 专用
-};const defaultApiOpts={[OPT_TRANS_BUILTINAI]:defaultApi,[OPT_TRANS_GOOGLE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single"},[OPT_TRANS_GOOGLE_2]:{...defaultApi,url:"https://translate-pa.googleapis.com/v1/translateHtml",key:"AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520",useBatchFetch:true},[OPT_TRANS_MICROSOFT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_AZUREAI]:{...defaultApi,url:"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0",useBatchFetch:true},[OPT_TRANS_BAIDU]:{...defaultApi},[OPT_TRANS_TENCENT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_VOLCENGINE]:{...defaultApi},[OPT_TRANS_DEEPL]:{...defaultApi,url:"https://api-free.deepl.com/v2/translate",useBatchFetch:true},[OPT_TRANS_DEEPLFREE]:{...defaultApi,fetchLimit:1},[OPT_TRANS_DEEPLX]:{...defaultApi,url:"http://localhost:1188/translate",fetchLimit:1},[OPT_TRANS_NIUTRANS]:{...defaultApi,url:"https://api.niutrans.com/NiuTransServer/translation",dictNo:"",memoryNo:""},[OPT_TRANS_OPENAI]:{...defaultApi,url:"https://api.openai.com/v1/chat/completions",model:"gpt-4",useBatchFetch:true,fetchLimit:1},[OPT_TRANS_GEMINI]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1/models/".concat(INPUT_PLACE_MODEL,":generateContent?key=").concat(INPUT_PLACE_KEY),model:"gemini-2.5-flash",useBatchFetch:true},[OPT_TRANS_GEMINI_2]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",model:"gemini-2.0-flash",useBatchFetch:true},[OPT_TRANS_CLAUDE]:{...defaultApi,url:"https://api.anthropic.com/v1/messages",model:"claude-3-haiku-20240307",useBatchFetch:true},[OPT_TRANS_CLOUDFLAREAI]:{...defaultApi,url:"https://api.cloudflare.com/client/v4/accounts/{{ACCOUNT_ID}}/ai/run/@cf/meta/m2m100-1.2b"},[OPT_TRANS_OLLAMA]:{...defaultApi,url:"http://localhost:11434/v1/chat/completions",model:"llama3.1",useBatchFetch:true},[OPT_TRANS_OPENROUTER]:{...defaultApi,url:"https://openrouter.ai/api/v1/chat/completions",model:"openai/gpt-4o",useBatchFetch:true},[OPT_TRANS_CUSTOMIZE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN",reqHook:defaultRequestHook,resHook:defaultResponseHook}};// 内置翻译接口列表(带参数)
-const DEFAULT_API_LIST=OPT_ALL_TYPES.map(apiType=>({...defaultApiOpts[apiType],apiSlug:apiType,apiName:apiType,apiType}));const DEFAULT_API_TYPE=OPT_TRANS_MICROSOFT;const DEFAULT_API_SETTING=DEFAULT_API_LIST[DEFAULT_API_TYPE];
+};const defaultApiOpts={[OPT_TRANS_BUILTINAI]:defaultApi,[OPT_TRANS_GOOGLE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single"},[OPT_TRANS_GOOGLE_2]:{...defaultApi,url:"https://translate-pa.googleapis.com/v1/translateHtml",key:"AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520",useBatchFetch:true},[OPT_TRANS_MICROSOFT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_AZUREAI]:{...defaultApi,url:"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0",useBatchFetch:true},[OPT_TRANS_BAIDU]:{...defaultApi},[OPT_TRANS_TENCENT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_VOLCENGINE]:{...defaultApi},[OPT_TRANS_DEEPL]:{...defaultApi,url:"https://api-free.deepl.com/v2/translate",useBatchFetch:true},[OPT_TRANS_DEEPLFREE]:{...defaultApi,fetchLimit:1},[OPT_TRANS_DEEPLX]:{...defaultApi,url:"http://localhost:1188/translate"},[OPT_TRANS_NIUTRANS]:{...defaultApi,url:"https://api.niutrans.com/NiuTransServer/translation",dictNo:"",memoryNo:""},[OPT_TRANS_OPENAI]:{...defaultApi,url:"https://api.openai.com/v1/chat/completions",model:"gpt-4",useBatchFetch:true},[OPT_TRANS_GEMINI]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1/models/".concat(INPUT_PLACE_MODEL,":generateContent?key=").concat(INPUT_PLACE_KEY),model:"gemini-2.5-flash",useBatchFetch:true},[OPT_TRANS_GEMINI_2]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",model:"gemini-2.0-flash",useBatchFetch:true},[OPT_TRANS_CLAUDE]:{...defaultApi,url:"https://api.anthropic.com/v1/messages",model:"claude-3-haiku-20240307",useBatchFetch:true},[OPT_TRANS_CLOUDFLAREAI]:{...defaultApi,url:"https://api.cloudflare.com/client/v4/accounts/{{ACCOUNT_ID}}/ai/run/@cf/meta/m2m100-1.2b"},[OPT_TRANS_OLLAMA]:{...defaultApi,url:"http://localhost:11434/v1/chat/completions",model:"llama3.1",useBatchFetch:true},[OPT_TRANS_OPENROUTER]:{...defaultApi,url:"https://openrouter.ai/api/v1/chat/completions",model:"openai/gpt-4o",useBatchFetch:true},[OPT_TRANS_CUSTOMIZE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN",reqHook:defaultRequestHook,resHook:defaultResponseHook}};// 内置翻译接口列表(带参数)
+const DEFAULT_API_LIST=OPT_ALL_TRANS_TYPES.map(apiType=>({...defaultApiOpts[apiType],apiSlug:apiType,apiName:apiType,apiType}));const DEFAULT_API_TYPE=OPT_TRANS_MICROSOFT;const DEFAULT_API_SETTING=DEFAULT_API_LIST.find(a=>a.apiType===DEFAULT_API_TYPE);
 ;// CONCATENATED MODULE: ./src/config/rules.js
 const GLOBAL_KEY="*";const REMAIN_KEY="-";const SHADOW_KEY=">>>";const DEFAULT_COLOR="#209CEE";// 默认高亮背景色/线条颜色
 const DEFAULT_TRANS_TAG="font";const DEFAULT_SELECT_STYLE="-webkit-line-clamp: unset; max-height: none; height: auto;";const OPT_STYLE_NONE="style_none";// 无
@@ -34919,7 +34921,7 @@ selectStyle:"",// 选择器节点样式
 parentStyle:"",// 选择器父节点样式
 grandStyle:"",// 选择器父节点样式
 injectJs:"",// 注入JS
-injectCss:"",// 注入CSS
+// injectCss: "", // 注入CSS (作废)
 transOnly:GLOBAL_KEY,// 是否仅显示译文
 // transTiming: GLOBAL_KEY, // 翻译时机/鼠标悬停翻译  (暂时作废)
 transTag:GLOBAL_KEY,// 译文元素标签
@@ -34959,7 +34961,7 @@ selectStyle:DEFAULT_SELECT_STYLE,// 选择器节点样式
 parentStyle:DEFAULT_SELECT_STYLE,// 选择器父节点样式
 grandStyle:DEFAULT_SELECT_STYLE,// 选择器祖节点样式
 injectJs:"",// 注入JS
-injectCss:"",// 注入CSS
+// injectCss: "", // 注入CSS(作废)
 transOnly:"false",// 是否仅显示译文
 // transTiming: OPT_TIMING_PAGESCROLL, // 翻译时机/鼠标悬停翻译 (暂时作废)
 transTag:DEFAULT_TRANS_TAG,// 译文元素标签
@@ -34984,7 +34986,7 @@ highlightWords:OPT_HIGHLIGHT_WORDS_DISABLE// 高亮词汇
 const RULES_MAP={// "www.google.com/search": {
 //   rootsSelector: `#rcnt`,
 // },
-"en.wikipedia.org":{ignoreSelector:".button, code, footer, form, mark, pre, .mwe-math-element, .mw-editsection"},"news.ycombinator.com":{selector:"p, .titleline, .commtext, .hn-item-title, .hn-comment-text, .hn-story-title",keepSelector:"code, img, svg, pre, .sitebit",ignoreSelector:"button, code, footer, form, header, mark, nav, pre, .reply",autoScan:"false"},"twitter.com, https://x.com":{selector:"[data-testid='tweetText']",keepSelector:"img, svg, a, span:has(a), div:has(a)",ignoreSelector:"button, [data-testid='videoPlayer'], [role='group']",autoScan:"false"},"www.youtube.com/live_chat":{rootsSelector:"div#items",selector:"span.yt-live-chat-text-message-renderer",autoScan:"false"},"www.youtube.com":{rootsSelector:"ytd-page-manager",ignoreSelector:"aside, button, footer, form, header, pre, mark, nav, #player, #container, .caption-window, .ytp-settings-menu"}};const BUILTIN_RULES=Object.entries(RULES_MAP).map(_ref=>{let[pattern,rule]=_ref;return{// ...DEFAULT_RULE,
+"en.wikipedia.org":{ignoreSelector:".button, code, footer, form, mark, pre, .mwe-math-element, .mw-editsection"},"news.ycombinator.com":{selector:"p, .titleline, .commtext, .hn-item-title, .hn-comment-text, .hn-story-title",keepSelector:"code, img, svg, pre, .sitebit",ignoreSelector:"button, code, footer, form, header, mark, nav, pre, .reply",autoScan:"false"},"twitter.com, https://x.com":{selector:"[data-testid='tweetText']",keepSelector:"img, svg, a, span:has(a), div:has(a)",ignoreSelector:"button, [data-testid='videoPlayer'], [role='group']",autoScan:"false"},"www.youtube.com/live_chat":{rootsSelector:"div#items",selector:"span.yt-live-chat-text-message-renderer",autoScan:"false"},"www.youtube.com":{rootsSelector:"ytd-page-manager",ignoreSelector:"aside, button, footer, form, header, pre, mark, nav, #player, #container, .caption-window, .ytp-settings-menu"},"web.telegram.org":{autoScan:"false",selector:".text-content, .embedded-text-wrapper",rootsSelector:".Transition"}};const BUILTIN_RULES=Object.entries(RULES_MAP).map(_ref=>{let[pattern,rule]=_ref;return{// ...DEFAULT_RULE,
 ...rule,pattern};});
 ;// CONCATENATED MODULE: ./src/libs/log.js
 // 定义日志级别
@@ -35061,6 +35063,7 @@ apiSlug:OPT_TRANS_MICROSOFT,segSlug:"-",// AI智能断句
 chunkLength:1000,// AI处理切割长度
 // fromLang: "en",
 toLang:"zh-CN",isBilingual:true,// 是否双语显示
+skipAd:false,// 是否快进广告
 windowStyle:SUBTITLE_WINDOW_STYLE,// 背景样式
 originStyle:SUBTITLE_ORIGIN_STYLE,// 原文样式
 translationStyle:SUBTITLE_TRANSLATION_STYLE// 译文样式
@@ -35101,10 +35104,11 @@ mouseHoverSetting:DEFAULT_MOUSE_HOVER_SETTING,// 鼠标悬停翻译
 preInit:true,// 是否预加载脚本
 transAllnow:false,// 是否立即全部翻译
 subtitleSetting:DEFAULT_SUBTITLE_SETTING,// 字幕设置
-logLevel:LogLevel.INFO.value// 日志级别
+logLevel:LogLevel.INFO.value,// 日志级别
+rootMargin:500// 提前触发翻译
 };
 ;// CONCATENATED MODULE: ./src/config/i18n.js
-const UI_LANGS=(/* unused pure expression or super */ null && ([["en","English"],["zh","简体中文"],["zh_TW","繁體中文"]]));const customApiLangs="[\"en\", \"English - English\"],\n[\"zh-CN\", \"Simplified Chinese - \u7B80\u4F53\u4E2D\u6587\"],\n[\"zh-TW\", \"Traditional Chinese - \u7E41\u9AD4\u4E2D\u6587\"],\n[\"ar\", \"Arabic - \u0627\u0644\u0639\u0631\u0628\u064A\u0629\"],\n[\"bg\", \"Bulgarian - \u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438\"],\n[\"ca\", \"Catalan - Catal\xE0\"],\n[\"hr\", \"Croatian - Hrvatski\"],\n[\"cs\", \"Czech - \u010Ce\u0161tina\"],\n[\"da\", \"Danish - Dansk\"],\n[\"nl\", \"Dutch - Nederlands\"],\n[\"fi\", \"Finnish - Suomi\"],\n[\"fr\", \"French - Fran\xE7ais\"],\n[\"de\", \"German - Deutsch\"],\n[\"el\", \"Greek - \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\"],\n[\"hi\", \"Hindi - \u0939\u093F\u0928\u094D\u0926\u0940\"],\n[\"hu\", \"Hungarian - Magyar\"],\n[\"id\", \"Indonesian - Indonesia\"],\n[\"it\", \"Italian - Italiano\"],\n[\"ja\", \"Japanese - \u65E5\u672C\u8A9E\"],\n[\"ko\", \"Korean - \uD55C\uAD6D\uC5B4\"],\n[\"ms\", \"Malay - Melayu\"],\n[\"mt\", \"Maltese - Malti\"],\n[\"nb\", \"Norwegian - Norsk Bokm\xE5l\"],\n[\"pl\", \"Polish - Polski\"],\n[\"pt\", \"Portuguese - Portugu\xEAs\"],\n[\"ro\", \"Romanian - Rom\xE2n\u0103\"],\n[\"ru\", \"Russian - \u0420\u0443\u0441\u0441\u043A\u0438\u0439\"],\n[\"sk\", \"Slovak - Sloven\u010Dina\"],\n[\"sl\", \"Slovenian - Sloven\u0161\u010Dina\"],\n[\"es\", \"Spanish - Espa\xF1ol\"],\n[\"sv\", \"Swedish - Svenska\"],\n[\"ta\", \"Tamil - \u0BA4\u0BAE\u0BBF\u0BB4\u0BCD\"],\n[\"te\", \"Telugu - \u0C24\u0C46\u0C32\u0C41\u0C17\u0C41\"],\n[\"th\", \"Thai - \u0E44\u0E17\u0E22\"],\n[\"tr\", \"Turkish - T\xFCrk\xE7e\"],\n[\"uk\", \"Ukrainian - \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430\"],\n[\"vi\", \"Vietnamese - Ti\u1EBFng Vi\u1EC7t\"],\n";const customApiHelpZH="// \u8BF7\u6C42\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n  \"url\": \"{{url}}\",\n  \"method\": \"POST\",\n  \"headers\": {\n    \"Content-type\": \"application/json\",\n    \"Authorization\": \"Bearer {{key}}\"\n  },\n  \"body\": {\n    \"text\": \"{{text}}\", // \u5F85\u7FFB\u8BD1\u6587\u5B57\n    \"from\": \"{{from}}\", // \u6587\u5B57\u7684\u8BED\u8A00\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09\n    \"to\": \"{{to}}\",     // \u76EE\u6807\u8BED\u8A00\n  },\n}\n\n\n// \u8FD4\u56DE\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n  text: \"\", // \u7FFB\u8BD1\u540E\u7684\u6587\u5B57\n  from: \"\", // \u8BC6\u522B\u7684\u6E90\u8BED\u8A00\n  to: \"\",   // \u76EE\u6807\u8BED\u8A00\uFF08\u53EF\u9009\uFF09\n}\n\n\n// Hook \u8303\u4F8B\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n  headers: {\n      \"Content-type\": \"application/json\",\n  },\n  method: \"GET\",\n  body: null,\n}]\n\n// Response Hook\n// \u5176\u4E2D\u8FD4\u56DE\u6570\u7EC4\u7B2C\u4E00\u4E2A\u503C\u8868\u793A\u8BD1\u6587\u5B57\u7B26\u4E32\uFF0C\u7B2C\u4E8C\u4E2A\u503C\u4E3A\u5E03\u5C14\u503C\uFF0C\u8868\u793A\u539F\u6587\u8BED\u8A00\u4E0E\u76EE\u6807\u8BED\u8A00\u662F\u5426\u76F8\u540C\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// \u652F\u6301\u7684\u8BED\u8A00\u4EE3\u7801\u5982\u4E0B\n".concat(customApiLangs,"\n");const customApiHelpEN="// Default request\n{\n  \"url\": \"{{url}}\",\n  \"method\": \"POST\",\n  \"headers\": {\n    \"Content-type\": \"application/json\",\n    \"Authorization\": \"Bearer {{key}}\"\n  },\n  \"body\": {\n    \"text\": \"{{text}}\", // Text to be translated\n    \"from\": \"{{from}}\", // The language of the text (may be empty)\n    \"to\": \"{{to}}\",     // Target language\n  },\n}\n\n\n// Default response\n{\n  text: \"\", // translated text\n  from: \"\", // Recognized source language\n  to: \"\",   // Target language (optional)\n}\n\n\n/// Hook Example\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n  headers: {\n      \"Content-type\": \"application/json\",\n  },\n  method: \"GET\",\n  body: null,\n}]\n\n// Response Hook\n// In the returned array, the first value is the translated string, while the second value is a boolean\n// that indicates whether the source language is the same as the target language.\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// The supported language codes are as follows\n".concat(customApiLangs,"\n");const requestHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'url', 'body', 'headers', 'method'\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n  return { url, body, headers, userMsg, method };\n}";const requestHookHelperEN="1. The first parameter contains the following fields: 'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2. The return value must be an object containing the following fields: 'url', 'body', 'headers', 'method'\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n  return { url, body, headers, userMsg, method };\n}";const responsetHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'res', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'translations'\n  \uFF08'translations' \u5E94\u4E3A\u4E00\u4E2A\u4E8C\u7EF4\u6570\u7EC4\uFF1A[[\u8BD1\u6587, \u539F\u6587\u8BED\u8A00]]\uFF09\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync ({ res, ...args }) => {\n  const translations = [[\"\u4F60\u597D\", \"en\"]];\n  const modelMsg = {}; // \u7528\u4E8EAI\u4E0A\u4E0B\u6587\n  return { translations, modelMsg };\n}";const responsetHookHelperEN="1. The first parameter contains the following fields: 'res', ...\n2. The return value must be an object containing the following fields: 'translations'\n  ('translations' should be a two-dimensional array: [[translation, source language]]).\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync ({ res, ...args }) => {\n  const translations = [[\"\u4F60\u597D\", \"en\"]];\n  const modelMsg = {}; // For AI context\n  return { translations, modelMsg };\n}";const I18N={app_name:{zh:"\u7B80\u7EA6\u7FFB\u8BD1",en:"KISS Translator",zh_TW:"\u7C21\u7D04\u7FFB\u8B6F"},translate:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},custom_api_help:{zh:customApiHelpZH,en:customApiHelpEN,zh_TW:customApiHelpZH},request_hook_helper:{zh:requestHookHelperZH,en:requestHookHelperEN,zh_TW:requestHookHelperZH},response_hook_helper:{zh:responsetHookHelperZH,en:responsetHookHelperEN,zh_TW:responsetHookHelperZH},translate_alt:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},basic_setting:{zh:"\u57FA\u672C\u8BBE\u7F6E",en:"Basic Setting",zh_TW:"\u57FA\u672C\u8A2D\u5B9A"},rules_setting:{zh:"\u89C4\u5219\u8BBE\u7F6E",en:"Rules Setting",zh_TW:"\u898F\u5247\u8A2D\u5B9A"},apis_setting:{zh:"\u63A5\u53E3\u8BBE\u7F6E",en:"Apis Setting",zh_TW:"API\u8A2D\u5B9A"},sync_setting:{zh:"\u540C\u6B65\u8BBE\u7F6E",en:"Sync Setting",zh_TW:"\u540C\u6B65\u8A2D\u5B9A"},patch_setting:{zh:"\u8865\u4E01\u8BBE\u7F6E",en:"Patch Setting",zh_TW:"\u4FEE\u88DC\u8A2D\u5B9A"},patch_setting_help:{zh:"\u9488\u5BF9\u4E00\u4E9B\u7279\u6B8A\u7F51\u7AD9\u7684\u4FEE\u6B63\u811A\u672C\uFF0C\u4EE5\u4FBF\u7FFB\u8BD1\u8F6F\u4EF6\u5F97\u5230\u66F4\u597D\u7684\u5C55\u793A\u6548\u679C\u3002",en:"Corrected scripts for some special websites so that the translation software can get better display results.",zh_TW:"\u91DD\u5C0D\u67D0\u4E9B\u7279\u6B8A\u7DB2\u7AD9\u7684\u4FEE\u6B63\u8173\u672C\uFF0C\u8B93\u7FFB\u8B6F\u8EDF\u9AD4\u6709\u66F4\u597D\u7684\u986F\u793A\u6548\u679C\u3002"},inject_webfix:{zh:"\u6CE8\u5165\u4FEE\u590D\u8865\u4E01",en:"Inject Webfix",zh_TW:"\u6CE8\u5165\u4FEE\u6B63\u88DC\u4E01"},about:{zh:"\u5173\u4E8E",en:"About",zh_TW:"\u95DC\u65BC"},about_md:{zh:"README.md",en:"README.en.md",zh_TW:"README.md"},about_md_local:{zh:"\u8BF7 [\u70B9\u51FB\u8FD9\u91CC](".concat("https://github.com/fishjar/kiss-translator",") \u67E5\u770B\u8BE6\u60C5\u3002"),en:"Please [click here](".concat("https://github.com/fishjar/kiss-translator",") for details."),zh_TW:"\u8ACB\u3010\u9EDE\u9019\u88E1\u3011\u67E5\u770B\u8A73\u7D30\u5167\u5BB9\u3002"},ui_lang:{zh:"\u754C\u9762\u8BED\u8A00",en:"Interface Language",zh_TW:"\u4ECB\u9762\u8A9E\u8A00"},fetch_limit:{zh:"\u6700\u5927\u5E76\u53D1\u8BF7\u6C42\u6570\u91CF (1-100)",en:"Maximum Number Of Concurrent Requests (1-100)",zh_TW:"\u6700\u5927\u540C\u6642\u8ACB\u6C42\u6578\u91CF (1-100)"},if_think:{zh:"\u542F\u7528\u6216\u7981\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B",en:"Enable or disable the model\u2019s thinking behavior ",zh_TW:"\u555F\u7528\u6216\u505C\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B"},think:{zh:"\u542F\u7528\u6DF1\u5EA6\u601D\u8003",en:"enable thinking",zh_TW:"\u555F\u7528\u6DF1\u5EA6\u601D\u8003"},nothink:{zh:"\u7981\u7528\u6DF1\u5EA6\u601D\u8003",en:"disable thinking",zh_TW:"\u505C\u7528\u6DF1\u5EA6\u601D\u8003"},think_ignore:{zh:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684\u8F93\u51FA,\u9017\u53F7(,)\u5206\u5272,\u5F53\u6A21\u578B\u652F\u6301\u601D\u8003\u4F46ollama\u4E0D\u652F\u6301\u65F6\u9700\u8981\u586B\u5199\u672C\u53C2\u6570",en:"Ignore the  block for the following models, comma (,) separated",zh_TW:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684  \u8F38\u51FA\uFF0C\u4EE5\u9017\u865F (,) \u5206\u9694\uFF1B\u7576\u6A21\u578B\u652F\u63F4\u601D\u8003\u4F46 ollama \u4E0D\u652F\u63F4\u6642\u9700\u8981\u586B\u5BEB\u6B64\u53C3\u6578"},fetch_interval:{zh:"\u6BCF\u6B21\u8BF7\u6C42\u95F4\u9694\u65F6\u95F4 (0-5000ms)",en:"Time Between Requests (0-5000ms)",zh_TW:"\u6BCF\u6B21\u8ACB\u6C42\u9593\u9694\u6642\u9593 (0-5000ms)"},translate_interval:{zh:"\u7FFB\u8BD1\u95F4\u9694\u65F6\u95F4 (10-2000ms)",en:"Translation Interval (10-2000ms)",zh_TW:"\u7FFB\u8B6F\u9593\u9694\u6642\u9593 (10-2000ms)"},http_timeout:{zh:"\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4 (5000-60000ms)",en:"Request Timeout Time (5000-60000ms)",zh_TW:"\u8ACB\u6C42\u903E\u6642\u6642\u9593 (5000-60000ms)"},custom_header:{zh:"\u81EA\u5B9A\u4E49Header\u53C2\u6570",en:"Custom Header Params"},custom_header_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\"",en:"Use JSON format, for example \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\""},custom_body:{zh:"\u81EA\u5B9A\u4E49Body\u53C2\u6570",en:"Custom Body Params"},custom_body_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"top_p\": 0.7",en:"Use JSON format, for example \"top_p\": 0.7"},min_translate_length:{zh:"\u6700\u5C0F\u7FFB\u8BD1\u5B57\u7B26\u6570 (1-100)",en:"Minimum number Of Translated Characters (1-100)",zh_TW:"\u6700\u5C0F\u7FFB\u8B6F\u5B57\u5143\u6578 (1-100)"},max_translate_length:{zh:"\u6700\u5927\u7FFB\u8BD1\u5B57\u7B26\u6570 (100-100000)",en:"Maximum number Of Translated Characters (100-100000)",zh_TW:"\u6700\u5927\u7FFB\u8B6F\u5B57\u5143\u6578 (100-100000)"},num_of_newline_characters:{zh:"\u6362\u884C\u5B57\u7B26\u6570 (1-1000)",en:"Number of Newline Characters (1-1000)",zh_TW:"\u63DB\u884C\u5B57\u5143\u6578 (1-1000)"},translate_service:{zh:"\u7FFB\u8BD1\u670D\u52A1",en:"Translate Service",zh_TW:"\u7FFB\u8B6F\u670D\u52D9"},translate_service_multiple:{zh:"\u7FFB\u8BD1\u670D\u52A1 (\u652F\u6301\u591A\u9009)",en:"Translation service (multiple supported)",zh_TW:"\u7FFB\u8B6F\u670D\u52D9 (\u652F\u63F4\u591A\u9078)"},translate_timing:{zh:"\u7FFB\u8BD1\u65F6\u673A",en:"Translate Timing",zh_TW:"\u7FFB\u8B6F\u6642\u6A5F"},mk_pagescroll:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u7FFB\u8BD1\uFF08\u63A8\u8350\uFF09",en:"Rolling Loading (Suggested)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u7FFB\u8B6F\uFF08\u5EFA\u8B70\uFF09"},mk_pageopen:{zh:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8BD1",en:"Translate all now",zh_TW:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8B6F"},mk_mouseover:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},mk_ctrlKey:{zh:"Control + \u9F20\u6807\u60AC\u505C",en:"Control + Mouseover",zh_TW:"Control + \u6ED1\u9F20\u61F8\u505C"},mk_shiftKey:{zh:"Shift + \u9F20\u6807\u60AC\u505C",en:"Shift + Mouseover",zh_TW:"Shift + \u6ED1\u9F20\u61F8\u505C"},mk_altKey:{zh:"Alt + \u9F20\u6807\u60AC\u505C",en:"Alt + Mouseover",zh_TW:"Alt + \u6ED1\u9F20\u61F8\u505C"},from_lang:{zh:"\u539F\u6587\u8BED\u8A00",en:"Source Language",zh_TW:"\u539F\u6587\u8A9E\u8A00"},to_lang:{zh:"\u76EE\u6807\u8BED\u8A00",en:"Target Language",zh_TW:"\u76EE\u6A19\u8A9E\u8A00"},to_lang2:{zh:"\u7B2C\u4E8C\u76EE\u6807\u8BED\u8A00",en:"Target Language 2",zh_TW:"\u7B2C\u4E8C\u76EE\u6A19\u8A9E\u8A00"},to_lang2_helper:{zh:"\u8BBE\u5B9A\u540E\uFF0C\u4E0E\u76EE\u6807\u8BED\u8A00\u4EA7\u751F\u4E92\u8BD1\u6548\u679C\uFF0C\u4F46\u4F9D\u8D56\u8FDC\u7A0B\u8BED\u8A00\u8BC6\u522B\u3002",en:"After setting, it will produce mutual translation effect with the target language, but it relies on remote language recognition.",zh_TW:"\u8A2D\u5B9A\u5F8C\u6703\u8207\u76EE\u6A19\u8A9E\u8A00\u4E92\u8B6F\uFF0C\u4F46\u4F9D\u8CF4\u9060\u7AEF\u8A9E\u8A00\u8B58\u5225\u3002"},text_style:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},text_style_alt:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},bg_color:{zh:"\u6837\u5F0F\u989C\u8272",en:"Style Color",zh_TW:"\u6A23\u5F0F\u984F\u8272"},remain_unchanged:{zh:"\u4FDD\u7559\u4E0D\u53D8",en:"Remain Unchanged",zh_TW:"\u4FDD\u7559\u4E0D\u8B8A"},google_api:{zh:"\u8C37\u6B4C\u7FFB\u8BD1\u63A5\u53E3",en:"Google Translate API",zh_TW:"Google \u7FFB\u8B6F\u4ECB\u9762"},default_selector:{zh:"\u9ED8\u8BA4\u9009\u62E9\u5668",en:"Default selector",zh_TW:"\u9810\u8A2D\u9078\u64C7\u5668"},selector_rules:{zh:"\u9009\u62E9\u5668\u89C4\u5219",en:"Selector Rules",zh_TW:"\u9078\u64C7\u5668\u898F\u5247"},save:{zh:"\u4FDD\u5B58",en:"Save",zh_TW:"\u5132\u5B58"},edit:{zh:"\u7F16\u8F91",en:"Edit",zh_TW:"\u7DE8\u8F2F"},cancel:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},delete:{zh:"\u5220\u9664",en:"Delete",zh_TW:"\u522A\u9664"},reset:{zh:"\u91CD\u7F6E",en:"Reset",zh_TW:"\u91CD\u8A2D"},add:{zh:"\u6DFB\u52A0",en:"Add",zh_TW:"\u65B0\u589E"},inject_rules:{zh:"\u6CE8\u5165\u8BA2\u9605\u89C4\u5219",en:"Inject Subscribe Rules",zh_TW:"\u6CE8\u5165\u8A02\u95B1\u898F\u5247"},personal_rules:{zh:"\u4E2A\u4EBA\u89C4\u5219",en:"Rules",zh_TW:"\u500B\u4EBA\u898F\u5247"},subscribe_rules:{zh:"\u8BA2\u9605\u89C4\u5219",en:"Subscribe",zh_TW:"\u8A02\u95B1\u898F\u5247"},overwrite_subscribe_rules:{zh:"\u8986\u5199\u8BA2\u9605\u89C4\u5219",en:"Overwrite",zh_TW:"\u8986\u5BEB\u8A02\u95B1\u898F\u5247"},subscribe_url:{zh:"\u8BA2\u9605\u5730\u5740",en:"Subscribe URL",zh_TW:"\u8A02\u95B1\u7DB2\u5740"},rules_warn_1:{zh:"1\u3001\u89C4\u5219\u751F\u6548\u7684\u4F18\u5148\u7EA7\u4F9D\u6B21\u4E3A\uFF1A\u4E2A\u4EBA\u89C4\u5219 > \u8BA2\u9605\u89C4\u5219 > \u5168\u5C40\u89C4\u5219\u3002\"\u5168\u5C40\u89C4\u5219\"\u76F8\u5F53\u4E8E\u515C\u5E95\u89C4\u5219\u3002",en:"1. The priority of rules is: personal rules > subscription rules > global rules. \"Global rules\" are like a fallback rule.",zh_TW:"1.\u898F\u5247\u751F\u6548\u7684\u512A\u5148\u9806\u5E8F\u4F9D\u5E8F\u70BA\uFF1A\u500B\u4EBA\u898F\u5247 > \u8A02\u95B1\u898F\u5247 > \u5168\u57DF\u898F\u5247\u3002 \"\u5168\u57DF\u898F\u5247\"\u76F8\u7576\u65BC\u515C\u5E95\u898F\u5247\u3002"},rules_warn_2:{zh:"2\u3001\u201C\u8BA2\u9605\u89C4\u5219\u201D\u9009\u62E9\u6CE8\u5165\u540E\u624D\u4F1A\u751F\u6548\u3002",en:"2. \"Subscription rules\" will take effect only after injection is selected.",zh_TW:"2\u3001\u300C\u8A02\u95B1\u898F\u5247\u300D\u9078\u64C7\u6CE8\u5165\u5F8C\u624D\u6703\u751F\u6548\u3002"},rules_warn_3:{zh:"3\u3001\u5173\u4E8E\u89C4\u5219\u586B\u5199\uFF1A\u8F93\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u6846\u9009\u201C*\u201D\u8868\u793A\u91C7\u7528\u5168\u5C40\u89C4\u5219\u3002",en:"3. Regarding filling in the rules: Leave the input box blank or select \"*\" in the drop-down box to use global rule.",zh_TW:"3. \u898F\u5247\u586B\u5BEB\u8AAA\u660E\uFF1A\u8F38\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u9078\u64C7\u300C*\u300D\u8868\u793A\u4F7F\u7528\u5168\u57DF\u898F\u5247\u3002"},sync_warn:{zh:"\u6D89\u53CA\u9690\u79C1\u6570\u636E\u7684\u540C\u6B65\u8BF7\u8C28\u614E\u9009\u62E9\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52A1\uFF0C\u5EFA\u8BAE\u81EA\u884C\u642D\u5EFA kiss-worker \u6216 WebDAV \u670D\u52A1\u3002",en:"When synchronizing data that involves privacy, please be cautious about choosing third-party sync services. It is recommended to set up your own sync service using kiss-worker or WebDAV.",zh_TW:"\u540C\u6B65\u6D89\u53CA\u96B1\u79C1\u8CC7\u6599\u6642\uFF0C\u8ACB\u8B39\u614E\u9078\u64C7\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52D9\uFF1B\u5EFA\u8B70\u81EA\u5EFA kiss-worker \u6216 WebDAV \u670D\u52D9\u3002"},sync_warn_2:{zh:"\u5982\u679C\u670D\u52A1\u5668\u5B58\u5728\u5176\u4ED6\u5BA2\u6237\u7AEF\u540C\u6B65\u7684\u6570\u636E\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u5C06\u76F4\u63A5\u8986\u76D6\u672C\u5730\u914D\u7F6E\uFF0C\u540E\u9762\u5219\u6839\u636E\u4FEE\u6539\u65F6\u95F4\uFF0C\u65B0\u7684\u8986\u76D6\u65E7\u7684\u3002",en:"If the server has data synchronized by other clients, the first synchronization will directly overwrite the local configuration, and later, according to the modification time, the new one will overwrite the old one.",zh_TW:"\u82E5\u4F3A\u670D\u5668\u4E0A\u5B58\u5728\u5176\u4ED6\u7528\u6236\u7AEF\u540C\u6B65\u7684\u8CC7\u6599\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u6703\u76F4\u63A5\u8986\u84CB\u672C\u6A5F\u8A2D\u5B9A\uFF1B\u4E4B\u5F8C\u5247\u4F9D\u4FEE\u6539\u6642\u9593\uFF0C\u7531\u65B0\u7684\u8986\u84CB\u820A\u7684\u3002"},about_sync_api:{zh:"\u81EA\u5EFAkiss-wroker\u6570\u636E\u540C\u6B65\u670D\u52A1",en:"Self-hosting a Kiss-worker data sync service",zh_TW:"\u81EA\u5EFA kiss-wroker \u8CC7\u6599\u540C\u6B65\u670D\u52D9"},about_api:{zh:"1\u3001\u5176\u4E2D BuiltinAI \u4E3A\u6D4F\u89C8\u5668\u5185\u7F6EAI\u7FFB\u8BD1\uFF0C\u76EE\u524D\u4EC5 Chrome 138 \u53CA\u4EE5\u4E0A\u7248\u672C\u5F97\u5230\u652F\u6301\u3002",en:"1. BuiltinAI is the browser's built-in AI translation, which is currently only supported by Chrome 138 and above.",zh_TW:"1.\u5176\u4E2D BuiltinAI \u70BA\u700F\u89BD\u5668\u5167\u5EFAAI\u7FFB\u8B6F\uFF0C\u76EE\u524D\u50C5 Chrome 138 \u4EE5\u4E0A\u7248\u672C\u652F\u63F4\u3002"},about_api_2:{zh:"2\u3001\u5927\u90E8\u5206AI\u63A5\u53E3\u90FD\u4E0EOpenAI\u517C\u5BB9\uFF0C\u56E0\u6B64\u9009\u62E9\u6DFB\u52A0OpenAI\u7C7B\u578B\u5373\u53EF\u3002",en:"2. Most AI interfaces are compatible with OpenAI, so just choose to add the OpenAI type.",zh_TW:"2.\u5927\u90E8\u5206AI\u4ECB\u9762\u90FD\u8207OpenAI\u76F8\u5BB9\uFF0C\u56E0\u6B64\u9078\u64C7\u65B0\u589EOpenAI\u985E\u578B\u5373\u53EF\u3002"},about_api_3:{zh:"3\u3001\u6682\u672A\u5217\u51FA\u7684\u63A5\u53E3\uFF0C\u7406\u8BBA\u4E0A\u90FD\u53EF\u4EE5\u901A\u8FC7\u81EA\u5B9A\u4E49\u63A5\u53E3 (Custom) \u7684\u5F62\u5F0F\u652F\u6301\u3002",en:"3. Interfaces that have not yet been launched can theoretically be supported through custom interfaces.",zh_TW:"3\u3001\u66AB\u672A\u5217\u51FA\u7684\u4ECB\u9762\uFF0C\u7406\u8AD6\u4E0A\u90FD\u53EF\u900F\u904E\u81EA\u8A02\u4ECB\u9762  (Custom)  \u7684\u5F62\u5F0F\u652F\u63F4\u3002"},about_api_proxy:{zh:"\u67E5\u770B\u81EA\u5EFA\u4E00\u4E2A\u7FFB\u8BD1\u63A5\u53E3\u4EE3\u7406",en:"Check out the self-built translation interface proxy",zh_TW:"\u67E5\u770B\u5982\u4F55\u81EA\u5EFA\u7FFB\u8B6F\u4ECB\u9762 Proxy"},setting_helper:{zh:"\u65B0\u65E7\u914D\u7F6E\u5E76\u4E0D\u517C\u5BB9\uFF0C\u5BFC\u51FA\u7684\u65E7\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u5BFC\u5165\u3002",en:"The old and new configurations are not compatible. Do not import the exported old configuration again.",zh_TW:"\u65B0\u820A\u914D\u7F6E\u4E26\u4E0D\u76F8\u5BB9\uFF0C\u532F\u51FA\u7684\u820A\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u532F\u5165\u3002"},style_none:{zh:"\u65E0",en:"None",zh_TW:"\u7121"},under_line:{zh:"\u4E0B\u5212\u76F4\u7EBF",en:"Underline",zh_TW:"\u4E0B\u5283\u76F4\u7DDA"},dot_line:{zh:"\u4E0B\u5212\u70B9\u72B6\u7EBF",en:"Dotted Underline",zh_TW:"\u4E0B\u5283\u9EDE\u72C0\u7DDA"},dash_line:{zh:"\u4E0B\u5212\u865A\u7EBF",en:"Dashed Underline",zh_TW:"\u4E0B\u5283\u865B\u7DDA"},dash_box:{zh:"\u865A\u7EBF\u6846",en:"Dashed Box"},wavy_line:{zh:"\u4E0B\u5212\u6CE2\u6D6A\u7EBF",en:"Wavy Underline",zh_TW:"\u4E0B\u5283\u6CE2\u6D6A\u7DDA"},fuzzy:{zh:"\u6A21\u7CCA",en:"Fuzzy",zh_TW:"\u6A21\u7CCA"},highlight:{zh:"\u9AD8\u4EAE",en:"Highlight",zh_TW:"\u53CD\u767D\u6A19\u793A"},blockquote:{zh:"\u5F15\u7528",en:"Blockquote",zh_TW:"\u5F15\u7528"},gradient:{zh:"\u6E10\u53D8",en:"Gradient",zh_TW:"\u6F38\u8B8A"},blink:{zh:"\u95EA\u73B0",en:"Blink",zh_TW:"\u9583\u73FE"},glow:{zh:"\u53D1\u5149",en:"Glow",zh_TW:"\u767C\u5149"},diy_style:{zh:"\u81EA\u5B9A\u4E49\u6837\u5F0F",en:"Custom Style",zh_TW:"\u81EA\u8A02\u6A23\u5F0F"},diy_style_helper:{zh:"\u9075\u5FAA\u201CCSS\u201D\u7684\u8BED\u6CD5",en:"Follow the syntax of \"CSS\"",zh_TW:"\u9075\u5FAA CSS \u8A9E\u6CD5"},setting:{zh:"\u8BBE\u7F6E",en:"Setting",zh_TW:"\u8A2D\u5B9A"},pattern:{zh:"\u5339\u914D\u7F51\u5740",en:"URL pattern",zh_TW:"\u5339\u914D\u7DB2\u5740"},pattern_helper:{zh:"1\u3001\u652F\u6301\u661F\u53F7(*)\u901A\u914D\u7B26\u30022\u3001\u591A\u4E2AURL\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\u3002",en:"1. Supports the asterisk (*) wildcard character. 2. Separate multiple URLs with newlines or English commas \",\".",zh_TW:"1. \u652F\u63F4\u661F\u865F (*) \u842C\u7528\u5B57\u5143\u30022. \u591A\u500B URL \u8ACB\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u3002"},selector_helper:{zh:"1\u3001\u9700\u8981\u7FFB\u8BD1\u7684\u76EE\u6807\u5143\u7D20\u30022\u3001\u5F00\u542F\u81EA\u52A8\u626B\u63CF\u9875\u9762\u540E\uFF0C\u672C\u8BBE\u7F6E\u65E0\u6548\u30023\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The target element to be translated. 2. This setting is invalid when automatic page scanning is enabled. 3. Follow the CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u7FFB\u8B6F\u7684\u76EE\u6A19\u5143\u7D20\u3002 2.\u958B\u555F\u81EA\u52D5\u6383\u63CF\u9801\u9762\u5F8C\uFF0C\u672C\u8A2D\u5B9A\u7121\u6548\u3002 3.\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},translate_switch:{zh:"\u5F00\u542F\u7FFB\u8BD1",en:"Translate Switch",zh_TW:"\u958B\u555F\u7FFB\u8B6F"},default_enabled:{zh:"\u9ED8\u8BA4\u5F00\u542F",en:"Enabled",zh_TW:"\u9810\u8A2D\u958B\u555F"},default_disabled:{zh:"\u9ED8\u8BA4\u5173\u95ED",en:"Disabled",zh_TW:"\u9810\u8A2D\u95DC\u9589"},selector:{zh:"\u9009\u62E9\u5668",en:"Selector",zh_TW:"\u9078\u64C7\u5668"},target_selector:{zh:"\u76EE\u6807\u5143\u7D20\u9009\u62E9\u5668",en:"Target element selector",zh_TW:"\u76EE\u6A19\u5143\u7D20\u9078\u64C7\u5668"},keep_selector:{zh:"\u4FDD\u7559\u5143\u7D20\u9009\u62E9\u5668",en:"Keep unchanged selector",zh_TW:"\u4FDD\u7559\u5143\u7D20\u9078\u64C7\u5668"},keep_selector_helper:{zh:"1\u3001\u76EE\u6807\u5143\u7D20\u4E0B\u9762\u9700\u8981\u539F\u6837\u4FDD\u7559\u7684\u5B50\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The child nodes under the target element need to remain intact. 2. Follow the CSS selector syntax.",zh_TW:"1. \u76EE\u6A19\u5143\u7D20\u4E0B\u7684\u5B50\u7BC0\u9EDE\u9700\u8981\u4FDD\u6301\u539F\u6A23\u3002 2. \u9075\u5FAA CSS \u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},root_selector:{zh:"\u6839\u8282\u70B9\u9009\u62E9\u5668",en:"Root node selector",zh_TW:"\u6839\u7BC0\u9EDE\u9078\u64C7\u5668"},root_selector_helper:{zh:"1\u3001\u7528\u4E8E\u7F29\u5C0F\u9875\u9762\u7FFB\u8BD1\u8303\u56F4\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Used to narrow the translation scope of the page. 2. Follow the CSS selector syntax.",zh_TW:"1.\u7528\u65BC\u7E2E\u5C0F\u9801\u9762\u7FFB\u8B6F\u7BC4\u570D\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},ignore_selector:{zh:"\u4E0D\u7FFB\u8BD1\u8282\u70B9\u9009\u62E9\u5668",en:"Ignore node selectors",zh_TW:"\u4E0D\u7FFB\u8B6F\u7BC0\u9EDE\u9078\u64C7\u5668"},ignore_selector_helper:{zh:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Nodes to be ignored. 2. Follow CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u7BC0\u9EDE\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},terms:{zh:"\u4E13\u4E1A\u672F\u8BED",en:"Terms",zh_TW:"\u5C08\u696D\u8853\u8A9E"},terms_helper:{zh:"1\u3001\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u65E0\u9700\u659C\u6746\uFF0C\u4E0D\u652F\u6301\u4FEE\u9970\u7B26\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. Supports regular expression matching, no slash required, and no modifiers are supported. 2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1. \u652F\u63F4\u6B63\u5247\u8868\u9054\u5F0F\u6BD4\u5C0D\uFF0C\u7121\u9700\u659C\u7DDA\uFF0C\u4E14\u4E0D\u652F\u63F4\u4FEE\u98FE\u7B26\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},ai_terms:{zh:"AI\u4E13\u4E1A\u672F\u8BED",en:"AI Terms",zh_TW:"AI\u5C08\u696D\u8853\u8A9E"},ai_terms_helper:{zh:"1\u3001AI\u667A\u80FD\u66FF\u6362\uFF0C\u4E0D\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. AI intelligent replacement does not support regular expressions.2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1.AI\u667A\u80FD\u66FF\u63DB\uFF0C\u4E0D\u652F\u63F4\u6B63\u898F\u8868\u793A\u5F0F\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},selector_style:{zh:"\u9009\u62E9\u5668\u8282\u70B9\u6837\u5F0F",en:"Selector Style",zh_TW:"\u9078\u64C7\u5668\u7BC0\u9EDE\u6A23\u5F0F"},terms_style:{zh:"\u4E13\u4E1A\u672F\u8BED\u6837\u5F0F",en:"Terms Style",zh_TW:"\u5C08\u696D\u8853\u8A9E\u6A23\u5F0F"},highlight_style:{zh:"\u8BCD\u6C47\u9AD8\u4EAE\u6837\u5F0F",en:"Fav Words highlight style",zh_TW:"\u8A5E\u5F59\u9AD8\u4EAE\u6A23\u5F0F"},selector_style_helper:{zh:"\u5F00\u542F\u7FFB\u8BD1\u65F6\u6CE8\u5165\u3002",en:"It is injected when translation is turned on.",zh_TW:"\u5728\u958B\u555F\u7FFB\u8B6F\u6642\u6CE8\u5165\u3002"},selector_parent_style:{zh:"\u9009\u62E9\u5668\u7236\u8282\u70B9\u6837\u5F0F",en:"Parent Selector Style",zh_TW:"\u9078\u64C7\u5668\u7236\u7BC0\u9EDE\u6A23\u5F0F"},selector_grand_style:{zh:"\u9009\u62E9\u5668\u7956\u8282\u70B9\u6837\u5F0F",en:"Grand Selector Style",zh_TW:"\u9078\u64C7\u5668\u7956\u7BC0\u9EDE\u6A23\u5F0F"},inject_js:{zh:"\u6CE8\u5165JS",en:"Inject JS",zh_TW:"\u6CE8\u5165 JS"},inject_js_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},inject_css:{zh:"\u6CE8\u5165CSS",en:"Inject CSS",zh_TW:"\u6CE8\u5165 CSS"},inject_css_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},fixer_function:{zh:"\u4FEE\u590D\u51FD\u6570",en:"Fixer Function",zh_TW:"\u4FEE\u5FA9\u51FD\u5F0F"},fixer_function_helper:{zh:"1\u3001br\u662F\u5C06
\u6362\u884C\u66FF\u6362\u6210

\u30022\u3001bn\u662F\u5C06\\n\u6362\u884C\u66FF\u6362\u6210

\u30023\u3001brToDiv\u548CbnToDiv\u662F\u66FF\u6362\u6210

\u3002",en:"1. br replaces
line breaks with

. 2. bn replaces \\n newline with

. 3. brToDiv and bnToDiv are replaced with

.",zh_TW:"1. br \u6703\u5C07
\u63DB\u884C\u66FF\u63DB\u70BA

\u30022. bn \u6703\u5C07 \\n \u63DB\u884C\u66FF\u63DB\u70BA

\u30023. brToDiv \u8207 bnToDiv \u6703\u66FF\u63DB\u70BA

\u3002"},import:{zh:"\u5BFC\u5165",en:"Import",zh_TW:"\u532F\u5165"},export:{zh:"\u5BFC\u51FA",en:"Export",zh_TW:"\u532F\u51FA"},export_translation:{zh:"\u5BFC\u51FA\u91CA\u4E49",en:"Export Translation",zh_TW:"\u532F\u51FA\u91CB\u7FA9"},error_cant_be_blank:{zh:"\u4E0D\u80FD\u4E3A\u7A7A",en:"Can not be blank",zh_TW:"\u4E0D\u53EF\u70BA\u7A7A"},error_duplicate_values:{zh:"\u5B58\u5728\u91CD\u590D\u7684\u503C",en:"There are duplicate values",zh_TW:"\u5B58\u5728\u91CD\u8907\u7684\u503C"},error_wrong_file_type:{zh:"\u9519\u8BEF\u7684\u6587\u4EF6\u7C7B\u578B",en:"Wrong file type",zh_TW:"\u6A94\u6848\u985E\u578B\u932F\u8AA4"},error_fetch_url:{zh:"\u8BF7\u68C0\u67E5url\u5730\u5740\u662F\u5426\u6B63\u786E\u6216\u7A0D\u540E\u518D\u8BD5\u3002",en:"Please check if the url address is correct or try again later.",zh_TW:"\u8ACB\u6AA2\u67E5 URL \u662F\u5426\u6B63\u78BA\u6216\u7A0D\u5F8C\u518D\u8A66\u3002"},deepl_api:{zh:"DeepL \u63A5\u53E3",en:"DeepL API",zh_TW:"DeepL \u4ECB\u9762"},deepl_key:{zh:"DeepL \u5BC6\u94A5",en:"DeepL Key",zh_TW:"DeepL \u91D1\u9470"},openai_api:{zh:"OpenAI \u63A5\u53E3",en:"OpenAI API",zh_TW:"OpenAI \u4ECB\u9762"},openai_key:{zh:"OpenAI \u5BC6\u94A5",en:"OpenAI Key",zh_TW:"OpenAI \u91D1\u9470"},openai_model:{zh:"OpenAI \u6A21\u578B",en:"OpenAI Model",zh_TW:"OpenAI \u6A21\u578B"},openai_prompt:{zh:"OpenAI \u63D0\u793A\u8BCD",en:"OpenAI Prompt",zh_TW:"OpenAI \u63D0\u793A\u8A5E"},if_clear_cache:{zh:"\u662F\u5426\u6E05\u9664\u7F13\u5B58\uFF08\u9ED8\u8BA4\u7F13\u5B587\u5929\uFF09",en:"Whether clear cache (Default cache is 7 days)",zh_TW:"\u662F\u5426\u6E05\u9664\u5FEB\u53D6\uFF08\u9810\u8A2D\u5FEB\u53D67\u5929\uFF09"},clear_cache_never:{zh:"\u4E0D\u6E05\u9664\u7F13\u5B58",en:"Never clear cache",zh_TW:"\u4E0D\u6E05\u9664\u5FEB\u53D6"},clear_cache_restart:{zh:"\u91CD\u542F\u6D4F\u89C8\u5668\u65F6\u6E05\u9664\u7F13\u5B58",en:"Clear cache when restarting browser",zh_TW:"\u91CD\u65B0\u555F\u52D5\u700F\u89BD\u5668\u6642\u6E05\u9664\u5FEB\u53D6"},data_sync_type:{zh:"\u6570\u636E\u540C\u6B65\u65B9\u5F0F",en:"Data Sync Type",zh_TW:"\u8CC7\u6599\u540C\u6B65\u65B9\u5F0F"},data_sync_url:{zh:"\u6570\u636E\u540C\u6B65\u63A5\u53E3",en:"Data Sync API",zh_TW:"\u8CC7\u6599\u540C\u6B65\u4ECB\u9762"},data_sync_user:{zh:"\u6570\u636E\u540C\u6B65\u8D26\u6237",en:"Data Sync User",zh_TW:"\u8CC7\u6599\u540C\u6B65\u5E33\u865F"},data_sync_key:{zh:"\u6570\u636E\u540C\u6B65\u5BC6\u94A5",en:"Data Sync Key",zh_TW:"\u8CC7\u6599\u540C\u6B65\u91D1\u9470"},sync_now:{zh:"\u7ACB\u5373\u540C\u6B65",en:"Sync Now",zh_TW:"\u7ACB\u5373\u540C\u6B65"},sync_success:{zh:"\u540C\u6B65\u6210\u529F\uFF01",en:"Sync Success",zh_TW:"\u540C\u6B65\u6210\u529F\uFF01"},sync_failed:{zh:"\u540C\u6B65\u5931\u8D25\uFF01",en:"Sync Error",zh_TW:"\u540C\u6B65\u5931\u6557\uFF01"},error_got_some_wrong:{zh:"\u62B1\u6B49\uFF0C\u51FA\u9519\u4E86\uFF01",en:"Sorry, something went wrong!",zh_TW:"\u62B1\u6B49\uFF0C\u767C\u751F\u932F\u8AA4\uFF01"},error_sync_setting:{zh:"\u60A8\u7684\u540C\u6B65\u7C7B\u578B\u5FC5\u987B\u4E3A\u201CKISS-Worker\u201D\uFF0C\u4E14\u9700\u586B\u5199\u5B8C\u6574",en:"Your sync type must be \"KISS-Worker\" and must be filled in completely",zh_TW:"\u60A8\u7684\u540C\u6B65\u578B\u614B\u5FC5\u9808\u70BA\u300CKISS-Worker\u300D\uFF0C\u4E14\u9700\u586B\u5BEB\u5B8C\u6574\u3002"},click_test:{zh:"\u70B9\u51FB\u6D4B\u8BD5",en:"Click Test",zh_TW:"\u9EDE\u64CA\u6E2C\u8A66"},test_success:{zh:"\u6D4B\u8BD5\u6210\u529F",en:"Test success",zh_TW:"\u6E2C\u8A66\u6210\u529F"},test_failed:{zh:"\u6D4B\u8BD5\u5931\u8D25",en:"Test failed",zh_TW:"\u6E2C\u8A66\u5931\u6557"},clear_all_cache_now:{zh:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u7F13\u5B58",en:"Clear all cache now",zh_TW:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u5FEB\u53D6"},clear_cache:{zh:"\u6E05\u9664\u7F13\u5B58",en:"Clear Cache",zh_TW:"\u6E05\u9664\u5FEB\u53D6"},clear_success:{zh:"\u6E05\u9664\u6210\u529F",en:"Clear success",zh_TW:"\u6E05\u9664\u6210\u529F"},clear_failed:{zh:"\u6E05\u9664\u5931\u8D25",en:"Clear failed",zh_TW:"\u6E05\u9664\u5931\u6557"},share:{zh:"\u5206\u4EAB",en:"Share",zh_TW:"\u5206\u4EAB"},clear_all:{zh:"\u6E05\u7A7A",en:"Clear All",zh_TW:"\u6E05\u7A7A"},help:{zh:"\u6C42\u52A9",en:"Help",zh_TW:"\u6C42\u52A9"},restore_default:{zh:"\u6062\u590D\u9ED8\u8BA4",en:"Restore Default",zh_TW:"\u6062\u5FA9\u9810\u8A2D"},shortcuts_setting:{zh:"\u5FEB\u6377\u952E\u8BBE\u7F6E",en:"Shortcuts Setting",zh_TW:"\u5FEB\u6377\u9375\u8A2D\u5B9A"},toggle_translate_shortcut:{zh:"\"\u5F00\u542F\u7FFB\u8BD1\"\u5FEB\u6377\u952E",en:"\"Toggle Translate\" Shortcut",zh_TW:"\u300C\u958B\u555F\u7FFB\u8B6F\u300D\u5FEB\u6377\u9375"},toggle_style_shortcut:{zh:"\"\u5207\u6362\u6837\u5F0F\"\u5FEB\u6377\u952E",en:"\"Toggle Style\" Shortcut",zh_TW:"\u300C\u5207\u63DB\u6A23\u5F0F\u300D\u5FEB\u6377\u9375"},toggle_popup_shortcut:{zh:"\"\u6253\u5F00\u5F39\u7A97\"\u5FEB\u6377\u952E",en:"\"Open Popup\" Shortcut",zh_TW:"\u300C\u958B\u555F\u5F48\u7A97\u300D\u5FEB\u6377\u9375"},open_setting_shortcut:{zh:"\"\u6253\u5F00\u8BBE\u7F6E\"\u5FEB\u6377\u952E",en:"\"Open Setting\" Shortcut",zh_TW:"\u300C\u958B\u555F\u8A2D\u5B9A\u300D\u5FEB\u6377\u9375"},hide_fab_button:{zh:"\u9690\u85CF\u60AC\u6D6E\u6309\u94AE",en:"Hide Fab Button",zh_TW:"\u96B1\u85CF\u61F8\u6D6E\u6309\u9215"},fab_click_action:{zh:"\u5355\u51FB\u60AC\u6D6E\u6309\u94AE\u52A8\u4F5C",en:"Single Click Fab Action",zh_TW:"\u55AE\u64CA\u61F8\u6D6E\u6309\u94AE\u52D5\u4F5C"},fab_click_menu:{zh:"\u5F39\u51FA\u83DC\u5355",en:"Popup Menu",zh_TW:"\u5F48\u51FA\u9078\u55AE"},fab_click_translate:{zh:"\u76F4\u63A5\u7FFB\u8BD1",en:"Translate",zh_TW:"\u76F4\u63A5\u7FFB\u8B6F"},hide_tran_button:{zh:"\u9690\u85CF\u7FFB\u8BD1\u6309\u94AE",en:"Hide Translate Button",zh_TW:"\u96B1\u85CF\u7FFB\u8B6F\u6309\u9215"},hide_click_away:{zh:"\u70B9\u51FB\u5916\u90E8\u5173\u95ED\u5F39\u7A97",en:"Click outside to close the pop-up window",zh_TW:"\u9EDE\u64CA\u5916\u90E8\u95DC\u9589\u5F48\u7A97"},use_simple_style:{zh:"\u4F7F\u7528\u7B80\u6D01\u754C\u9762",en:"Use a simple interface",zh_TW:"\u4F7F\u7528\u7C21\u6F54\u4ECB\u9762"},show:{zh:"\u663E\u793A",en:"Show",zh_TW:"\u986F\u793A"},hide:{zh:"\u9690\u85CF",en:"Hide",zh_TW:"\u96B1\u85CF"},save_rule:{zh:"\u4FDD\u5B58\u89C4\u5219",en:"Save Rule",zh_TW:"\u5132\u5B58\u898F\u5247"},global_rule:{zh:"\u5168\u5C40\u89C4\u5219",en:"Global Rule",zh_TW:"\u5168\u57DF\u898F\u5247"},input_translate:{zh:"\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u8F38\u5165\u6846\u7FFB\u8B6F"},use_input_box_translation:{zh:"\u542F\u7528\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u555F\u7528\u8F38\u5165\u6846\u7FFB\u8B6F"},input_selector:{zh:"\u8F93\u5165\u6846\u9009\u62E9\u5668",en:"Input Selector",zh_TW:"\u8F38\u5165\u6846\u9078\u64C7\u5668"},input_selector_helper:{zh:"\u7528\u4E8E\u8F93\u5165\u6846\u7FFB\u8BD1\u3002",en:"Used for input box translation.",zh_TW:"\u7528\u65BC\u8F38\u5165\u6846\u7FFB\u8B6F\u3002"},trigger_trans_shortcut:{zh:"\u89E6\u53D1\u7FFB\u8BD1\u5FEB\u6377\u952E",en:"Trigger Translation Shortcut Keys",zh_TW:"\u89F8\u767C\u7FFB\u8B6F\u5FEB\u6377\u9375"},trigger_trans_shortcut_help:{zh:"\u9ED8\u8BA4\u4E3A\u5355\u51FB\u201CAltLeft+KeyI\u201D",en:"Default is \"AltLeft+KeyI\"",zh_TW:"\u9810\u8A2D\u70BA\u6309\u4E0B\u300CAltLeft+KeyI\u300D"},shortcut_press_count:{zh:"\u5FEB\u6377\u952E\u8FDE\u51FB\u6B21\u6570",en:"Shortcut Press Number",zh_TW:"\u5FEB\u6377\u9375\u9023\u64CA\u6B21\u6578"},combo_timeout:{zh:"\u8FDE\u51FB\u8D85\u65F6\u65F6\u95F4 (10-1000ms)",en:"Combo Timeout (10-1000ms)",zh_TW:"\u9023\u64CA\u903E\u6642 (10-1000ms)"},input_trans_start_sign:{zh:"\u7FFB\u8BD1\u8D77\u59CB\u6807\u8BC6",en:"Translation Start Sign",zh_TW:"\u7FFB\u8B6F\u8D77\u59CB\u6A19\u8A18"},input_trans_start_sign_help:{zh:"\u6807\u8BC6\u540E\u9762\u53EF\u4EE5\u52A0\u76EE\u6807\u8BED\u8A00\u4EE3\u7801\uFF0C\u5982\uFF1A \u201C/en \u4F60\u597D\u201D\u3001\u201C/zh hello\u201D",en:"The target language code can be added after the sign, such as: \"/en \u4F60\u597D\", \"/zh hello\"",zh_TW:"\u6A19\u8A18\u5F8C\u53EF\u52A0\u4E0A\u76EE\u6A19\u8A9E\u8A00\u4EE3\u78BC\uFF0C\u4F8B\u5982\uFF1A\u300C/en \u4F60\u597D\u300D\u3001\u300C/zh hello\u300D"},detect_lang_remote:{zh:"\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B",en:"Remote language detection",zh_TW:"\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C"},detect_lang_remote_help:{zh:"\u542F\u7528\u540E\u68C0\u6D4B\u51C6\u786E\u5EA6\u589E\u52A0\uFF0C\u4F46\u4F1A\u964D\u4F4E\u7FFB\u8BD1\u901F\u5EA6\uFF0C\u8BF7\u914C\u60C5\u5F00\u542F",en:"After enabling, the detection accuracy will increase, but it will reduce the translation speed. Please enable it as appropriate.",zh_TW:"\u555F\u7528\u5F8C\u53EF\u63D0\u5347\u5075\u6E2C\u6E96\u78BA\u5EA6\uFF0C\u4F46\u6703\u964D\u4F4E\u7FFB\u8B6F\u901F\u5EA6\uFF0C\u8ACB\u8996\u9700\u8981\u958B\u555F\u3002"},detect_lang_service:{zh:"\u8BED\u8A00\u68C0\u6D4B\u670D\u52A1",en:"Language detect service",zh_TW:"\u8A9E\u8A00\u6AA2\u6E2C\u670D\u52D9"},disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},enable:{zh:"\u542F\u7528",en:"Enable",zh_TW:"\u555F\u7528"},selection_translate:{zh:"\u5212\u8BCD\u7FFB\u8BD1",en:"Selection Translate",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F"},toggle_selection_translate:{zh:"\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"Use Selection Translate",zh_TW:"\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},trigger_tranbox_shortcut:{zh:"\u663E\u793A\u7FFB\u8BD1\u6846/\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57\u5FEB\u6377\u952E",en:"Open Translate Popup/Translate Selected Shortcut",zh_TW:"\u986F\u793A\u7FFB\u8B6F\u6846\uFF0F\u7FFB\u8B6F\u9078\u4E2D\u6587\u5B57\u5FEB\u6377\u9375"},tranbtn_offset_x:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Button Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbtn_offset_y:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Button Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},tranbox_offset_x:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Box Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbox_offset_y:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Box Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},translated_text:{zh:"\u8BD1\u6587",en:"Translated Text",zh_TW:"\u8B6F\u6587"},original_text:{zh:"\u539F\u6587",en:"Original Text",zh_TW:"\u539F\u6587"},favorite_words:{zh:"\u6536\u85CF\u8BCD\u6C47",en:"Favorite Words",zh_TW:"\u6536\u85CF\u8A5E\u5F59"},touch_setting:{zh:"\u89E6\u5C4F\u8BBE\u7F6E",en:"Touch Setting",zh_TW:"\u89F8\u63A7\u8A2D\u5B9A"},touch_translate_shortcut:{zh:"\u89E6\u5C4F\u7FFB\u8BD1\u5FEB\u6377\u65B9\u5F0F (\u652F\u6301\u591A\u9009)",en:"Touch Translate Shortcut (multiple supported)",zh_TW:"\u89F8\u63A7\u7FFB\u8B6F\u6377\u5F91 (\u652F\u63F4\u591A\u9078)"},touch_tap_0:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},touch_tap_2:{zh:"\u53CC\u6307\u8F7B\u89E6",en:"Two finger tap",zh_TW:"\u96D9\u6307\u8F15\u89F8"},touch_tap_3:{zh:"\u4E09\u6307\u8F7B\u89E6",en:"Three finger tap",zh_TW:"\u4E09\u6307\u8F15\u89F8"},touch_tap_4:{zh:"\u56DB\u6307\u8F7B\u89E6",en:"Four finger tap",zh_TW:"\u56DB\u6307\u8F15\u89F8"},touch_tap_5:{zh:"\u5355\u6307\u53CC\u51FB",en:"Double-click",zh_TW:"\u55AE\u6307\u96D9\u64CA"},touch_tap_6:{zh:"\u5355\u6307\u4E09\u51FB",en:"Triple-click",zh_TW:"\u55AE\u6307\u4E09\u64CA"},touch_tap_7:{zh:"\u53CC\u6307\u53CC\u51FB",en:"Two-finger double-click",zh_TW:"\u96D9\u6307\u96D9\u64CA"},translate_blacklist:{zh:"\u7981\u7528\u7FFB\u8BD1\u540D\u5355",en:"Translate Blacklist",zh_TW:"\u505C\u7528\u7FFB\u8B6F\u540D\u55AE"},disabled_orilist:{zh:"\u7981\u7528Origin\u540D\u5355",en:"Disabled Origin List",zh_TW:"\u505C\u7528 Origin \u540D\u55AE"},disabled_csplist:{zh:"\u7981\u7528CSP\u540D\u5355",en:"Disabled CSP List",zh_TW:"\u505C\u7528 CSP \u540D\u55AE"},disabled_csplist_helper:{zh:"3\u3001\u901A\u8FC7\u8C03\u6574CSP\u7B56\u7565\uFF0C\u4F7F\u5F97\u67D0\u4E9B\u9875\u9762\u80FD\u591F\u6CE8\u5165JS/CSS/Media\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6653\u76F8\u5173\u98CE\u9669\u3002",en:"3. By adjusting the CSP policy, some pages can inject JS/CSS/Media. Please use it with caution unless you are aware of the related risks.",zh_TW:"3. \u900F\u904E\u8ABF\u6574 CSP \u653F\u7B56\uFF0C\u4F7F\u90E8\u5206\u9801\u9762\u53EF\u6CE8\u5165 JS/CSS/Media\u3002\u8ACB\u8B39\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6089\u76F8\u95DC\u98A8\u96AA\u3002"},skip_langs:{zh:"\u4E0D\u7FFB\u8BD1\u7684\u8BED\u8A00",en:"Disable Languages",zh_TW:"\u4E0D\u7FFB\u8B6F\u7684\u8A9E\u8A00"},skip_langs_helper:{zh:"\u6B64\u529F\u80FD\u4F9D\u8D56\u51C6\u786E\u7684\u8BED\u8A00\u68C0\u6D4B\uFF0C\u5EFA\u8BAE\u542F\u7528\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B\u3002",en:"This feature relies on accurate language detection. It is recommended to enable remote language detection.",zh_TW:"\u6B64\u529F\u80FD\u4EF0\u8CF4\u6E96\u78BA\u7684\u8A9E\u8A00\u5075\u6E2C\uFF0C\u5EFA\u8B70\u555F\u7528\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C\u3002"},context_menus:{zh:"\u53F3\u952E\u83DC\u5355",en:"Context Menus",zh_TW:"\u53F3\u9375\u9078\u55AE"},hide_context_menus:{zh:"\u9690\u85CF\u53F3\u952E\u83DC\u5355",en:"Hide Context Menus",zh_TW:"\u96B1\u85CF\u53F3\u9375\u9078\u55AE"},simple_context_menus:{zh:"\u7B80\u5355\u53F3\u952E\u83DC\u5355",en:"Simple_context_menus Context Menus",zh_TW:"\u7C21\u6613\u53F3\u9375\u9078\u55AE"},secondary_context_menus:{zh:"\u4E8C\u7EA7\u53F3\u952E\u83DC\u5355",en:"Secondary Context Menus",zh_TW:"\u6B21\u7D1A\u53F3\u9375\u9078\u55AE"},mulkeys_help:{zh:"\u652F\u6301\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\uFF0C\u8F6E\u8BE2\u8C03\u7528\u3002",en:"Supports polling calls separated by newlines or English commas \",\".",zh_TW:"\u652F\u63F4\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\uFF0C\u8F2A\u8A62\u547C\u53EB\u3002"},translation_element_tag:{zh:"\u8BD1\u6587\u5143\u7D20\u6807\u7B7E",en:"Translation Element Tag",zh_TW:"\u8B6F\u6587\u5143\u7D20\u6A19\u7C64"},show_only_translations:{zh:"\u4EC5\u663E\u793A\u8BD1\u6587",en:"Show Only Translations",zh_TW:"\u50C5\u986F\u793A\u8B6F\u6587"},show_only_translations_help:{zh:"\u975E\u5B8C\u7F8E\u5B9E\u73B0\uFF0C\u67D0\u4E9B\u9875\u9762\u53EF\u80FD\u6709\u6837\u5F0F\u7B49\u95EE\u9898\u3002",en:"It is not a perfect implementation and some pages may have style issues.",zh_TW:"\u6B64\u70BA\u975E\u5B8C\u7F8E\u5BE6\u4F5C\uFF0C\u90E8\u5206\u9801\u9762\u53EF\u80FD\u51FA\u73FE\u6A23\u5F0F\u7B49\u554F\u984C\u3002"},translate_page_title:{zh:"\u662F\u5426\u7FFB\u8BD1\u9875\u9762\u6807\u9898",en:"Translate Page Title",zh_TW:"\u662F\u5426\u7FFB\u8B6F\u9801\u9762\u6A19\u984C"},more:{zh:"\u66F4\u591A",en:"More",zh_TW:"\u66F4\u591A"},less:{zh:"\u66F4\u5C11",en:"Less",zh_TW:"\u66F4\u5C11"},fixer_selector:{zh:"\u7F51\u9875\u4FEE\u590D\u9009\u62E9\u5668",en:"Fixer Selector",zh_TW:"\u7DB2\u9801\u4FEE\u5FA9\u9078\u64C7\u5668"},reg_niutrans:{zh:"\u83B7\u53D6\u5C0F\u725B\u7FFB\u8BD1\u5BC6\u94A5\u3010\u7B80\u7EA6\u7FFB\u8BD1\u4E13\u5C5E\u65B0\u7528\u6237\u6CE8\u518C\u8D60\u9001300\u4E07\u5B57\u7B26\u3011",en:"Get NiuTrans APIKey [KISS Translator Exclusive New User Registration Free 3 Million Characters]",zh_TW:"\u53D6\u5F97\u5C0F\u725B\u7FFB\u8B6F\u91D1\u9470\u3010\u7C21\u7D04\u7FFB\u8B6F\u5C08\u5C6C\u65B0\u7528\u6236\u8A3B\u518A\u8D08\u9001 300 \u842C\u5B57\u5143\u3011"},trigger_mode:{zh:"\u89E6\u53D1\u65B9\u5F0F",en:"Trigger Mode",zh_TW:"\u89F8\u767C\u65B9\u5F0F"},trigger_click:{zh:"\u70B9\u51FB\u89E6\u53D1",en:"Click Trigger",zh_TW:"\u9EDE\u64CA\u89F8\u767C"},trigger_hover:{zh:"\u9F20\u6807\u60AC\u505C\u89E6\u53D1",en:"Hover Trigger",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u89F8\u767C"},trigger_select:{zh:"\u9009\u4E2D\u89E6\u53D1",en:"Select Trigger",zh_TW:"\u9078\u53D6\u89F8\u767C"},extend_styles:{zh:"\u9644\u52A0\u6837\u5F0F",en:"Extend Styles",zh_TW:"\u9644\u52A0\u6A23\u5F0F"},custom_option:{zh:"\u81EA\u5B9A\u4E49\u9009\u9879",en:"Custom Option",zh_TW:"\u81EA\u8A02\u9078\u9805"},translate_selected_text:{zh:"\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57",en:"Translate Selected Text",zh_TW:"\u7FFB\u8B6F\u9078\u53D6\u6587\u5B57"},toggle_style:{zh:"\u5207\u6362\u6837\u5F0F",en:"Toggle Style",zh_TW:"\u5207\u63DB\u6A23\u5F0F"},open_menu:{zh:"\u6253\u5F00\u5F39\u7A97\u83DC\u5355",en:"Open Popup Menu",zh_TW:"\u958B\u555F\u5F48\u7A97\u9078\u55AE"},open_setting:{zh:"\u6253\u5F00\u8BBE\u7F6E",en:"Open Setting",zh_TW:"\u958B\u555F\u8A2D\u5B9A"},follow_selection:{zh:"\u7FFB\u8BD1\u6846\u8DDF\u968F\u9009\u4E2D\u6587\u672C",en:"Transbox Follow Selection",zh_TW:"\u7FFB\u8B6F\u6846\u8DDF\u96A8\u9078\u53D6\u6587\u5B57"},tranbox_auto_height:{zh:"\u7FFB\u8BD1\u6846\u81EA\u9002\u5E94\u9AD8\u5EA6",en:"Translation box adaptive height",zh_TW:"\u7FFB\u8B6F\u6846\u81EA\u9069\u61C9\u9AD8\u5EA6"},translate_start_hook:{zh:"\u7FFB\u8BD1\u5F00\u59CB\u94A9\u5B50\u51FD\u6570",en:"Translate Start Hook",zh_TW:"\u7FFB\u8B6F\u958B\u59CB Hook"},translate_start_hook_helper:{zh:"\u7FFB\u8BD1\u524D\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes})",en:"Run before translation, input parameters are: ({hostNode, parentNode, nodes})",zh_TW:"\u7FFB\u8B6F\u524D\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes})"},translate_end_hook:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u94A9\u5B50\u51FD\u6570",en:"Translate End Hook",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210 Hook"},translate_end_hook_helper:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})",en:"Run when translation is complete, input parameters are: ({hostNode, parentNode, nodes, wrapperNode, innerNode})",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})"},translate_remove_hook:{zh:"\u7FFB\u8BD1\u79FB\u9664\u94A9\u5B50\u51FD\u6570",en:"Translate Removed Hook",zh_TW:"\u7FFB\u8B6F\u79FB\u9664 Hook"},translate_remove_hook_helper:{zh:"\u7FFB\u8BD1\u79FB\u9664\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A \u7FFB\u8BD1\u8282\u70B9\u3002",en:"Run when translation is removed, the input parameters are: translation node.",zh_TW:"\u79FB\u9664\u7FFB\u8B6F\u6642\u57F7\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A\u7FFB\u8B6F\u7BC0\u9EDE\u3002"},english_dict:{zh:"\u82F1\u6587\u8BCD\u5178",en:"English Dictionary",zh_TW:"\u82F1\u6587\u5B57\u5178"},english_suggest:{zh:"\u82F1\u6587\u5EFA\u8BAE",en:"English Suggest",zh_TW:"\u82F1\u6587\u5EFA\u8B70"},api_name:{zh:"\u63A5\u53E3\u540D\u79F0",en:"API Name",zh_TW:"\u4ECB\u9762\u540D\u7A31"},is_disabled:{zh:"\u662F\u5426\u7981\u7528",en:"Is Disabled",zh_TW:"\u662F\u5426\u505C\u7528"},translate_selected:{zh:"\u662F\u5426\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"If translate selected",zh_TW:"\u662F\u5426\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},use_batch_fetch:{zh:"\u662F\u5426\u805A\u5408\u53D1\u9001\u7FFB\u8BD1\u8BF7\u6C42",en:"Whether to aggregate and send translation requests",zh_TW:"\u662F\u5426\u805A\u5408\u767C\u9001\u7FFB\u8B6F\u8ACB\u6C42"},batch_interval:{zh:"\u805A\u5408\u8BF7\u6C42\u7B49\u5F85\u65F6\u95F4(100-10000)",en:"Aggregation request waiting time (100-10000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u7B49\u5F85\u6642\u9593(100-10000)"},batch_size:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6BB5\u843D\u6570(1-100)",en:"Maximum number of paragraphs in an aggregation request (1-100)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6BB5\u843D\u6578(1-100)"},batch_length:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6587\u672C\u957F\u5EA6(1000-100000)",en:"Maximum text length for aggregation requests (1000-100000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6587\u5B57\u9577\u5EA6(1000-100000)"},use_context:{zh:"\u662F\u5426\u542F\u7528\u667A\u80FD\u4E0A\u4E0B\u6587",en:"Whether to enable AI context",zh_TW:"\u662F\u5426\u555F\u7528\u667A\u6167\u4E0A\u4E0B\u6587"},context_size:{zh:"\u4E0A\u4E0B\u6587\u4F1A\u8BDD\u6570\u91CF(1-20)",en:"Number of context sessions(1-20)",zh_TW:"\u4E0A\u4E0B\u6587\u6703\u8A71\u6578\u91CF(1-20)"},auto_scan_page:{zh:"\u81EA\u52A8\u626B\u63CF\u9875\u9762",en:"Auto scan page",zh_TW:"\u81EA\u52D5\u6383\u63CF\u9801\u9762"},has_rich_text:{zh:"\u542F\u7528\u5BCC\u6587\u672C\u7FFB\u8BD1",en:"Enable rich text translation",zh_TW:"\u555F\u7528\u5BCC\u6587\u672C\u7FFB\u8B6F"},has_shadowroot:{zh:"\u626B\u63CFShadowroot",en:"Scan Shadowroot",zh_TW:"\u6383\u63CFShadowroot"},mousehover_translate:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover Translation",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},use_mousehover_translation:{zh:"\u542F\u7528\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Enable mouseover translation",zh_TW:"\u555F\u7528\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},selected_translation_alert:{zh:"\u5212\u8BCD\u7FFB\u8BD1\u7684\u5F00\u542F\u548C\u5173\u95ED\u8BF7\u5230\u201C\u89C4\u5219\u8BBE\u7F6E\u201D\u91CC\u9762\u8BBE\u7F6E\u3002",en:"To turn selected translation on or off, please go to \"Rule Settings\".",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F\u7684\u958B\u555F\u548C\u95DC\u9589\u8ACB\u5230\u300C\u898F\u5247\u8A2D\u5B9A\u300D\u88E1\u9762\u8A2D\u5B9A\u3002"},mousehover_key_help:{zh:"\u5F53\u5FEB\u6377\u952E\u7F6E\u7A7A\u65F6\u8868\u793A\u9F20\u6807\u60AC\u505C\u76F4\u63A5\u7FFB\u8BD1",en:"When the shortcut key is empty, it means that the mouse hovers to translate directly",zh_TW:"\u7576\u5FEB\u6377\u9375\u7F6E\u7A7A\u6642\u8868\u793A\u6ED1\u9F20\u61F8\u505C\u76F4\u63A5\u7FFB\u8B6F"},autoscan_alt:{zh:"\u81EA\u52A8\u626B\u63CF",en:"Auto Scan",zh_TW:"\u81EA\u52D5\u6383\u63CF"},shadowroot_alt:{zh:"ShadowRoot",en:"ShadowRoot",zh_TW:"ShadowRoot"},richtext_alt:{zh:"\u4FDD\u7559\u5BCC\u6587\u672C",en:"Rich Text",zh_TW:"\u4FDD\u7559\u5BCC\u6587\u672C"},transonly_alt:{zh:"\u9690\u85CF\u539F\u6587",en:"Hide Original",zh_TW:"\u96B1\u85CF\u539F\u6587"},confirm_title:{zh:"\u786E\u8BA4",en:"Confirm",zh_TW:"\u78BA\u8A8D"},confirm_message:{zh:"\u786E\u5B9A\u64CD\u4F5C\u5417\uFF1F",en:"Are you sure you want to proceed?",zh_TW:"\u78BA\u5B9A\u64CD\u4F5C\u55CE\uFF1F"},confirm_action:{zh:"\u786E\u5B9A",en:"Confirm",zh_TW:"\u78BA\u5B9A"},cancel_action:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},pls_press_shortcut:{zh:"\u8BF7\u6309\u4E0B\u5FEB\u6377\u952E\u7EC4\u5408",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},load_setting_err:{zh:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},translation_style:{zh:"\u7FFB\u8BD1\u98CE\u683C",en:"Translation style",zh_TW:"\u7FFB\u8B6F\u98A8\u683C"},placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},tag_name:{zh:"\u5360\u4F4D\u6807\u7B7E\u540D",en:"Placeholder tag name",zh_TW:"\u4F54\u4F4D\u6A19\u540D"},system_prompt_helper:{zh:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9ED8\u8BA4Prompt\u7684\u60C5\u51B5\u4E0B\uFF0C\u8BF7\u52FF\u968F\u610F\u4FEE\u6539\uFF0C\u5426\u5219\u53EF\u80FD\u65E0\u6CD5\u5DE5\u4F5C\u3002",en:"Do not modify the default prompt without fully understanding it, otherwise it may not work.",zh_TW:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9810\u8A2DPrompt\u7684\u60C5\u6CC1\u4E0B\uFF0C\u8ACB\u52FF\u96A8\u610F\u4FEE\u6539\uFF0C\u5426\u5247\u53EF\u80FD\u7121\u6CD5\u904B\u4F5C\u3002"},if_pre_init:{zh:"\u662F\u5426\u9884\u521D\u59CB\u5316",en:"Whether to pre-initialize",zh_TW:"\u662F\u5426\u9810\u521D\u59CB\u5316"},export_old:{zh:"\u5BFC\u51FA\u65E7\u7248",en:"Export old version",zh_TW:"\u532F\u51FA\u820A\u7248"},favorite_words_helper:{zh:"\u5BFC\u5165\u8BCD\u6C47\u8BF7\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u4E2A\u5355\u8BCD\u3002",en:"To import vocabulary, please use a txt file with one word per line.",zh_TW:"\u532F\u5165\u8A5E\u5F59\u8ACB\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u500B\u55AE\u5B57\u3002"},btn_tip_click_away:{zh:"\u5931\u7126\u9690\u85CF/\u663E\u793A",en:"Loss of focus hide/show",zh_TW:"\u5931\u7126\u96B1\u85CF/\u986F\u793A"},btn_tip_follow_selection:{zh:"\u8DDF\u968F/\u56FA\u5B9A\u6A21\u5F0F",en:"Follow/Fixed Mode",zh_TW:"\u8DDF\u96A8/\u56FA\u5B9A\u6A21\u5F0F"},btn_tip_simple_style:{zh:"\u8FF7\u4F60/\u5E38\u89C4\u6A21\u5F0F",en:"Mini/Regular Mode",zh_TW:"\u8FF7\u4F60/\u5E38\u898F\u6A21\u5F0F"},api_placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},api_placetag:{zh:"\u5360\u4F4D\u6807\u7B7E",en:"Placeholder tags",zh_TW:"\u4F54\u4F4D\u6A19"},detected_lang:{zh:"\u8BED\u8A00\u68C0\u6D4B",en:"Language detection",zh_TW:"\u8A9E\u8A00\u5075\u6E2C"},detected_result:{zh:"\u68C0\u6D4B\u7ED3\u679C",en:"Detect result",zh_TW:"\u6AA2\u6E2C\u7D50\u679C"},subtitle_translate:{zh:"\u5B57\u5E55\u7FFB\u8BD1",en:"Subtitle translate",zh_TW:"\u5B57\u5E55\u7FFB\u8B6F"},toggle_subtitle_translate:{zh:"\u542F\u7528\u5B57\u5E55\u7FFB\u8BD1",en:"Enable subtitle translation",zh_TW:"\u555F\u7528\u5B57\u5E55\u7FFB\u8B6F"},is_bilingual_view:{zh:"\u53CC\u8BED\u663E\u793A",en:"Enable bilingual display",zh_TW:"\u96D9\u8A9E\u986F\u793A"},background_styles:{zh:"\u80CC\u666F\u6837\u5F0F",en:"DBackground Style",zh_TW:"\u80CC\u666F\u6A23\u5F0F"},origin_styles:{zh:"\u539F\u6587\u6837\u5F0F",en:"Original style",zh_TW:"\u539F\u6587\u6A23\u5F0F"},translation_styles:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Translation style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},ai_segmentation:{zh:"AI\u667A\u80FD\u65AD\u53E5",en:"AI intelligent punctuation",zh_TW:"AI\u667A\u6167\u65B7\u53E5"},ai_chunk_length:{zh:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)",en:"AI processing chunk length(200-20000)",zh_TW:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)"},subtitle_helper_1:{zh:"1\u3001\u76EE\u524D\u4EC5\u652F\u6301Youtube\u684C\u9762\u7F51\u7AD9\u3002",en:"1. Currently only supports Youtube desktop website.",zh_TW:"1.\u76EE\u524D\u50C5\u652F\u63F4Youtube\u684C\u9762\u7DB2\u7AD9\uFF0C\u4E14\u50C5\u652F\u63F4\u700F\u89BD\u5668\u64F4\u5145\u529F\u80FD\u3002"},subtitle_helper_2:{zh:"2\u3001\u63D2\u4EF6\u5185\u7F6E\u57FA\u7840\u7684\u5B57\u5E55\u5408\u5E76\u3001\u65AD\u53E5\u7B97\u6CD5\uFF0C\u53EF\u6EE1\u8DB3\u5927\u90E8\u5206\u60C5\u51B5\u3002",en:"2. The plug-in has built-in basic subtitle merging and sentence segmentation algorithms, which can meet most situations.",zh_TW:"2.\u63D2\u4EF6\u5167\u5EFA\u57FA\u790E\u7684\u5B57\u5E55\u5408\u4F75\u3001\u65B7\u53E5\u6F14\u7B97\u6CD5\uFF0C\u53EF\u6EFF\u8DB3\u5927\u90E8\u5206\u60C5\u6CC1\u3002"},subtitle_helper_3:{zh:"3\u3001\u4EA6\u53EF\u4EE5\u542F\u7528AI\u667A\u80FD\u65AD\u53E5\uFF0C\u4F46\u9700\u8003\u8651\u5207\u5272\u957F\u5EA6\u53CAAI\u63A5\u53E3\u80FD\u529B\uFF0C\u53EF\u80FD\u5904\u7406\u65F6\u95F4\u4F1A\u5F88\u957F\uFF0C\u751A\u81F3\u5904\u7406\u5931\u8D25\uFF0C\u5BFC\u81F4\u65E0\u6CD5\u770B\u5230\u5B57\u5E55\u3002",en:"3. You can also enable AI intelligent segmentation, but you need to consider the segmentation length and AI interface capabilities. The processing time may be very long or even fail, resulting in the inability to see subtitles.",zh_TW:"3.\u4EA6\u53EF\u555F\u7528AI\u667A\u80FD\u65B7\u53E5\uFF0C\u4F46\u9700\u8003\u616E\u5207\u5272\u9577\u5EA6\u53CAAI\u4ECB\u9762\u80FD\u529B\uFF0C\u53EF\u80FD\u8655\u7406\u6642\u9593\u6703\u5F88\u9577\uFF0C\u751A\u81F3\u8655\u7406\u5931\u6557\uFF0C\u5C0E\u81F4\u7121\u6CD5\u770B\u5230\u5B57\u5E55\u3002"},default_styles_example:{zh:"\u9ED8\u8BA4\u6837\u5F0F\u53C2\u8003\uFF1A",en:"Default styles reference:",zh_TW:"\u8A8D\u6A23\u5F0F\u53C3\u8003\uFF1A"},subtitle_load_succeed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01",en:"Bilingual subtitles loaded successfully!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01"},subtitle_load_failed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01",en:"Failed to load bilingual subtitles!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01"},try_get_subtitle_data:{zh:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019...",en:"Trying to get subtitle data, please wait...",zh_TW:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019..."},subtitle_data_processing:{zh:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D...",en:"Subtitle data processing...",zh_TW:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D..."},starting_to_process_subtitle:{zh:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E...",en:"Starting to process subtitle data...",zh_TW:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E..."},subtitle_data_is_ready:{zh:"\u5B57\u5E55\u6570\u636E\u5DF2\u51C6\u5907\u5C31\u7EEA\uFF0C\u8BF7\u70B9\u51FBKT\u6309\u94AE\u52A0\u8F7D",en:"The subtitle data is ready, please click the KT button to load it",zh_TW:"\u5B57\u5E55\u8CC7\u6599\u5DF2\u6E96\u5099\u5C31\u7DD2\uFF0C\u8ACB\u9EDE\u64CAKT\u6309\u9215\u52A0\u8F09"},log_level:{zh:"\u65E5\u5FD7\u7EA7\u522B",en:"Log Level",zh_TW:"\u65E5\u8A8C\u7B49\u7D1A"},goto_custom_api_example:{zh:"\u70B9\u51FB\u67E5\u770B\u3010\u81EA\u5B9A\u4E49\u63A5\u53E3\u793A\u4F8B\u3011",en:"Click to view [Custom Interface Example]",zh_TW:"\u9EDE\u9078\u67E5\u770B\u3010\u81EA\u8A02\u4ECB\u9762\u7BC4\u4F8B\u3011"},split_paragraph:{zh:"\u5207\u5206\u957F\u6BB5\u843D",en:"Split long paragraph",zh_TW:"\u5207\u5206\u9577\u6BB5\u843D"},split_length:{zh:"\u5207\u5206\u957F\u5EA6 (0-10000)",en:"Segmentation length(0-10000)",zh_TW:"\u5207\u5206\u9577\u5EA6(0-10000)"},highlight_words:{zh:"\u9AD8\u4EAE\u6536\u85CF\u8BCD\u6C47",en:"Highlight favorite words",zh_TW:"\u9AD8\u4EAE\u6536\u85CF\u8A5E\u5F59"},split_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},split_textlength:{zh:"\u6309\u7167\u957F\u5EA6\u5207\u5206",en:"Split by length",zh_TW:"\u4F9D\u9577\u5EA6\u5207\u5206"},split_punctuation:{zh:"\u6309\u7167\u53E5\u5B50\u5207\u5206",en:"Split by sentence",zh_TW:"\u6309\u7167\u53E5\u5B50\u5207\u5206"},highlight_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},highlight_beforetrans:{zh:"\u7FFB\u8BD1\u524D\u9AD8\u4EAE",en:"Highlight before translation",zh_TW:"\u7FFB\u8B6F\u524D\u9AD8\u4EAE"},highlight_aftertrans:{zh:"\u7FFB\u8BD1\u540E\u9AD8\u4EAE",en:"Highlight after translation",zh_TW:"\u7FFB\u8B6F\u5F8C\u9AD8\u4EAE"}};const newI18n=lang=>key=>{var _I18N$key;return((_I18N$key=I18N[key])===null||_I18N$key===void 0?void 0:_I18N$key[lang])||"";}; +const UI_LANGS=(/* unused pure expression or super */ null && ([["en","English"],["zh","简体中文"],["zh_TW","繁體中文"]]));const customApiLangs="[\"en\", \"English - English\"],\n[\"zh-CN\", \"Simplified Chinese - \u7B80\u4F53\u4E2D\u6587\"],\n[\"zh-TW\", \"Traditional Chinese - \u7E41\u9AD4\u4E2D\u6587\"],\n[\"ar\", \"Arabic - \u0627\u0644\u0639\u0631\u0628\u064A\u0629\"],\n[\"bg\", \"Bulgarian - \u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438\"],\n[\"ca\", \"Catalan - Catal\xE0\"],\n[\"hr\", \"Croatian - Hrvatski\"],\n[\"cs\", \"Czech - \u010Ce\u0161tina\"],\n[\"da\", \"Danish - Dansk\"],\n[\"nl\", \"Dutch - Nederlands\"],\n[\"fi\", \"Finnish - Suomi\"],\n[\"fr\", \"French - Fran\xE7ais\"],\n[\"de\", \"German - Deutsch\"],\n[\"el\", \"Greek - \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\"],\n[\"hi\", \"Hindi - \u0939\u093F\u0928\u094D\u0926\u0940\"],\n[\"hu\", \"Hungarian - Magyar\"],\n[\"id\", \"Indonesian - Indonesia\"],\n[\"it\", \"Italian - Italiano\"],\n[\"ja\", \"Japanese - \u65E5\u672C\u8A9E\"],\n[\"ko\", \"Korean - \uD55C\uAD6D\uC5B4\"],\n[\"ms\", \"Malay - Melayu\"],\n[\"mt\", \"Maltese - Malti\"],\n[\"nb\", \"Norwegian - Norsk Bokm\xE5l\"],\n[\"pl\", \"Polish - Polski\"],\n[\"pt\", \"Portuguese - Portugu\xEAs\"],\n[\"ro\", \"Romanian - Rom\xE2n\u0103\"],\n[\"ru\", \"Russian - \u0420\u0443\u0441\u0441\u043A\u0438\u0439\"],\n[\"sk\", \"Slovak - Sloven\u010Dina\"],\n[\"sl\", \"Slovenian - Sloven\u0161\u010Dina\"],\n[\"es\", \"Spanish - Espa\xF1ol\"],\n[\"sv\", \"Swedish - Svenska\"],\n[\"ta\", \"Tamil - \u0BA4\u0BAE\u0BBF\u0BB4\u0BCD\"],\n[\"te\", \"Telugu - \u0C24\u0C46\u0C32\u0C41\u0C17\u0C41\"],\n[\"th\", \"Thai - \u0E44\u0E17\u0E22\"],\n[\"tr\", \"Turkish - T\xFCrk\xE7e\"],\n[\"uk\", \"Ukrainian - \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430\"],\n[\"vi\", \"Vietnamese - Ti\u1EBFng Vi\u1EC7t\"],\n";const customApiHelpZH="// \u8BF7\u6C42\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n \"url\": \"{{url}}\",\n \"method\": \"POST\",\n \"headers\": {\n \"Content-type\": \"application/json\",\n \"Authorization\": \"Bearer {{key}}\"\n },\n \"body\": {\n \"text\": \"{{text}}\", // \u5F85\u7FFB\u8BD1\u6587\u5B57\n \"from\": \"{{from}}\", // \u6587\u5B57\u7684\u8BED\u8A00\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09\n \"to\": \"{{to}}\", // \u76EE\u6807\u8BED\u8A00\n },\n}\n\n\n// \u8FD4\u56DE\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n text: \"\", // \u7FFB\u8BD1\u540E\u7684\u6587\u5B57\n from: \"\", // \u8BC6\u522B\u7684\u6E90\u8BED\u8A00\n to: \"\", // \u76EE\u6807\u8BED\u8A00\uFF08\u53EF\u9009\uFF09\n}\n\n\n// Hook \u8303\u4F8B\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n headers: {\n \"Content-type\": \"application/json\",\n },\n method: \"GET\",\n body: null,\n}]\n\n// Response Hook\n// \u5176\u4E2D\u8FD4\u56DE\u6570\u7EC4\u7B2C\u4E00\u4E2A\u503C\u8868\u793A\u8BD1\u6587\u5B57\u7B26\u4E32\uFF0C\u7B2C\u4E8C\u4E2A\u503C\u4E3A\u5E03\u5C14\u503C\uFF0C\u8868\u793A\u539F\u6587\u8BED\u8A00\u4E0E\u76EE\u6807\u8BED\u8A00\u662F\u5426\u76F8\u540C\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// \u652F\u6301\u7684\u8BED\u8A00\u4EE3\u7801\u5982\u4E0B\n".concat(customApiLangs,"\n");const customApiHelpEN="// Default request\n{\n \"url\": \"{{url}}\",\n \"method\": \"POST\",\n \"headers\": {\n \"Content-type\": \"application/json\",\n \"Authorization\": \"Bearer {{key}}\"\n },\n \"body\": {\n \"text\": \"{{text}}\", // Text to be translated\n \"from\": \"{{from}}\", // The language of the text (may be empty)\n \"to\": \"{{to}}\", // Target language\n },\n}\n\n\n// Default response\n{\n text: \"\", // translated text\n from: \"\", // Recognized source language\n to: \"\", // Target language (optional)\n}\n\n\n/// Hook Example\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n headers: {\n \"Content-type\": \"application/json\",\n },\n method: \"GET\",\n body: null,\n}]\n\n// Response Hook\n// In the returned array, the first value is the translated string, while the second value is a boolean\n// that indicates whether the source language is the same as the target language.\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// The supported language codes are as follows\n".concat(customApiLangs,"\n");const requestHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'url', 'body', 'headers', 'method'\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n return { url, body, headers, userMsg, method };\n}";const requestHookHelperEN="1. The first parameter contains the following fields: 'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2. The return value must be an object containing the following fields: 'url', 'body', 'headers', 'method'\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n return { url, body, headers, userMsg, method };\n}";const responsetHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'res', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'translations'\n \uFF08'translations' \u5E94\u4E3A\u4E00\u4E2A\u4E8C\u7EF4\u6570\u7EC4\uFF1A[[\u8BD1\u6587, \u539F\u6587\u8BED\u8A00]]\uFF09\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync ({ res, ...args }) => {\n const translations = [[\"\u4F60\u597D\", \"en\"]];\n const modelMsg = {}; // \u7528\u4E8EAI\u4E0A\u4E0B\u6587\n return { translations, modelMsg };\n}";const responsetHookHelperEN="1. The first parameter contains the following fields: 'res', ...\n2. The return value must be an object containing the following fields: 'translations'\n ('translations' should be a two-dimensional array: [[translation, source language]]).\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync ({ res, ...args }) => {\n const translations = [[\"\u4F60\u597D\", \"en\"]];\n const modelMsg = {}; // For AI context\n return { translations, modelMsg };\n}";const I18N={app_name:{zh:"\u7B80\u7EA6\u7FFB\u8BD1",en:"KISS Translator",zh_TW:"\u7C21\u7D04\u7FFB\u8B6F"},translate:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},custom_api_help:{zh:customApiHelpZH,en:customApiHelpEN,zh_TW:customApiHelpZH},request_hook_helper:{zh:requestHookHelperZH,en:requestHookHelperEN,zh_TW:requestHookHelperZH},response_hook_helper:{zh:responsetHookHelperZH,en:responsetHookHelperEN,zh_TW:responsetHookHelperZH},translate_alt:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},basic_setting:{zh:"\u57FA\u672C\u8BBE\u7F6E",en:"Basic Setting",zh_TW:"\u57FA\u672C\u8A2D\u5B9A"},rules_setting:{zh:"\u89C4\u5219\u8BBE\u7F6E",en:"Rules Setting",zh_TW:"\u898F\u5247\u8A2D\u5B9A"},apis_setting:{zh:"\u63A5\u53E3\u8BBE\u7F6E",en:"Apis Setting",zh_TW:"API\u8A2D\u5B9A"},sync_setting:{zh:"\u540C\u6B65\u8BBE\u7F6E",en:"Sync Setting",zh_TW:"\u540C\u6B65\u8A2D\u5B9A"},patch_setting:{zh:"\u8865\u4E01\u8BBE\u7F6E",en:"Patch Setting",zh_TW:"\u4FEE\u88DC\u8A2D\u5B9A"},patch_setting_help:{zh:"\u9488\u5BF9\u4E00\u4E9B\u7279\u6B8A\u7F51\u7AD9\u7684\u4FEE\u6B63\u811A\u672C\uFF0C\u4EE5\u4FBF\u7FFB\u8BD1\u8F6F\u4EF6\u5F97\u5230\u66F4\u597D\u7684\u5C55\u793A\u6548\u679C\u3002",en:"Corrected scripts for some special websites so that the translation software can get better display results.",zh_TW:"\u91DD\u5C0D\u67D0\u4E9B\u7279\u6B8A\u7DB2\u7AD9\u7684\u4FEE\u6B63\u8173\u672C\uFF0C\u8B93\u7FFB\u8B6F\u8EDF\u9AD4\u6709\u66F4\u597D\u7684\u986F\u793A\u6548\u679C\u3002"},inject_webfix:{zh:"\u6CE8\u5165\u4FEE\u590D\u8865\u4E01",en:"Inject Webfix",zh_TW:"\u6CE8\u5165\u4FEE\u6B63\u88DC\u4E01"},about:{zh:"\u5173\u4E8E",en:"About",zh_TW:"\u95DC\u65BC"},about_md:{zh:"README.md",en:"README.en.md",zh_TW:"README.md"},about_md_local:{zh:"\u8BF7 [\u70B9\u51FB\u8FD9\u91CC](".concat("https://github.com/fishjar/kiss-translator",") \u67E5\u770B\u8BE6\u60C5\u3002"),en:"Please [click here](".concat("https://github.com/fishjar/kiss-translator",") for details."),zh_TW:"\u8ACB\u3010\u9EDE\u9019\u88E1\u3011\u67E5\u770B\u8A73\u7D30\u5167\u5BB9\u3002"},ui_lang:{zh:"\u754C\u9762\u8BED\u8A00",en:"Interface Language",zh_TW:"\u4ECB\u9762\u8A9E\u8A00"},fetch_limit:{zh:"\u6700\u5927\u5E76\u53D1\u8BF7\u6C42\u6570\u91CF (1-100)",en:"Maximum Number Of Concurrent Requests (1-100)",zh_TW:"\u6700\u5927\u540C\u6642\u8ACB\u6C42\u6578\u91CF (1-100)"},if_think:{zh:"\u542F\u7528\u6216\u7981\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B",en:"Enable or disable the model\u2019s thinking behavior ",zh_TW:"\u555F\u7528\u6216\u505C\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B"},think:{zh:"\u542F\u7528\u6DF1\u5EA6\u601D\u8003",en:"enable thinking",zh_TW:"\u555F\u7528\u6DF1\u5EA6\u601D\u8003"},nothink:{zh:"\u7981\u7528\u6DF1\u5EA6\u601D\u8003",en:"disable thinking",zh_TW:"\u505C\u7528\u6DF1\u5EA6\u601D\u8003"},think_ignore:{zh:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684\u8F93\u51FA,\u9017\u53F7(,)\u5206\u5272,\u5F53\u6A21\u578B\u652F\u6301\u601D\u8003\u4F46ollama\u4E0D\u652F\u6301\u65F6\u9700\u8981\u586B\u5199\u672C\u53C2\u6570",en:"Ignore the block for the following models, comma (,) separated",zh_TW:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684 \u8F38\u51FA\uFF0C\u4EE5\u9017\u865F (,) \u5206\u9694\uFF1B\u7576\u6A21\u578B\u652F\u63F4\u601D\u8003\u4F46 ollama \u4E0D\u652F\u63F4\u6642\u9700\u8981\u586B\u5BEB\u6B64\u53C3\u6578"},fetch_interval:{zh:"\u6BCF\u6B21\u8BF7\u6C42\u95F4\u9694\u65F6\u95F4 (0-5000ms)",en:"Time Between Requests (0-5000ms)",zh_TW:"\u6BCF\u6B21\u8ACB\u6C42\u9593\u9694\u6642\u9593 (0-5000ms)"},translate_interval:{zh:"\u7FFB\u8BD1\u95F4\u9694\u65F6\u95F4 (10-2000ms)",en:"Translation Interval (10-2000ms)",zh_TW:"\u7FFB\u8B6F\u9593\u9694\u6642\u9593 (10-2000ms)"},http_timeout:{zh:"\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4 (5000-60000ms)",en:"Request Timeout Time (5000-60000ms)",zh_TW:"\u8ACB\u6C42\u903E\u6642\u6642\u9593 (5000-60000ms)"},custom_header:{zh:"\u81EA\u5B9A\u4E49Header\u53C2\u6570",en:"Custom Header Params"},custom_header_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\"",en:"Use JSON format, for example \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\""},custom_body:{zh:"\u81EA\u5B9A\u4E49Body\u53C2\u6570",en:"Custom Body Params"},custom_body_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"top_p\": 0.7",en:"Use JSON format, for example \"top_p\": 0.7"},min_translate_length:{zh:"\u6700\u5C0F\u7FFB\u8BD1\u5B57\u7B26\u6570 (1-100)",en:"Minimum number Of Translated Characters (1-100)",zh_TW:"\u6700\u5C0F\u7FFB\u8B6F\u5B57\u5143\u6578 (1-100)"},max_translate_length:{zh:"\u6700\u5927\u7FFB\u8BD1\u5B57\u7B26\u6570 (100-100000)",en:"Maximum number Of Translated Characters (100-100000)",zh_TW:"\u6700\u5927\u7FFB\u8B6F\u5B57\u5143\u6578 (100-100000)"},num_of_newline_characters:{zh:"\u6362\u884C\u5B57\u7B26\u6570 (1-1000)",en:"Number of Newline Characters (1-1000)",zh_TW:"\u63DB\u884C\u5B57\u5143\u6578 (1-1000)"},translate_service:{zh:"\u7FFB\u8BD1\u670D\u52A1",en:"Translate Service",zh_TW:"\u7FFB\u8B6F\u670D\u52D9"},translate_service_multiple:{zh:"\u7FFB\u8BD1\u670D\u52A1 (\u652F\u6301\u591A\u9009)",en:"Translation service (multiple supported)",zh_TW:"\u7FFB\u8B6F\u670D\u52D9 (\u652F\u63F4\u591A\u9078)"},translate_timing:{zh:"\u7FFB\u8BD1\u65F6\u673A",en:"Translate Timing",zh_TW:"\u7FFB\u8B6F\u6642\u6A5F"},mk_pagescroll:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u7FFB\u8BD1\uFF08\u63A8\u8350\uFF09",en:"Rolling Loading (Suggested)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u7FFB\u8B6F\uFF08\u5EFA\u8B70\uFF09"},mk_pageopen:{zh:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8BD1",en:"Translate all now",zh_TW:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8B6F"},mk_mouseover:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},mk_ctrlKey:{zh:"Control + \u9F20\u6807\u60AC\u505C",en:"Control + Mouseover",zh_TW:"Control + \u6ED1\u9F20\u61F8\u505C"},mk_shiftKey:{zh:"Shift + \u9F20\u6807\u60AC\u505C",en:"Shift + Mouseover",zh_TW:"Shift + \u6ED1\u9F20\u61F8\u505C"},mk_altKey:{zh:"Alt + \u9F20\u6807\u60AC\u505C",en:"Alt + Mouseover",zh_TW:"Alt + \u6ED1\u9F20\u61F8\u505C"},from_lang:{zh:"\u539F\u6587\u8BED\u8A00",en:"Source Language",zh_TW:"\u539F\u6587\u8A9E\u8A00"},to_lang:{zh:"\u76EE\u6807\u8BED\u8A00",en:"Target Language",zh_TW:"\u76EE\u6A19\u8A9E\u8A00"},to_lang2:{zh:"\u7B2C\u4E8C\u76EE\u6807\u8BED\u8A00",en:"Target Language 2",zh_TW:"\u7B2C\u4E8C\u76EE\u6A19\u8A9E\u8A00"},to_lang2_helper:{zh:"\u8BBE\u5B9A\u540E\uFF0C\u4E0E\u76EE\u6807\u8BED\u8A00\u4EA7\u751F\u4E92\u8BD1\u6548\u679C\uFF0C\u4F46\u4F9D\u8D56\u8FDC\u7A0B\u8BED\u8A00\u8BC6\u522B\u3002",en:"After setting, it will produce mutual translation effect with the target language, but it relies on remote language recognition.",zh_TW:"\u8A2D\u5B9A\u5F8C\u6703\u8207\u76EE\u6A19\u8A9E\u8A00\u4E92\u8B6F\uFF0C\u4F46\u4F9D\u8CF4\u9060\u7AEF\u8A9E\u8A00\u8B58\u5225\u3002"},text_style:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},text_style_alt:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},bg_color:{zh:"\u6837\u5F0F\u989C\u8272",en:"Style Color",zh_TW:"\u6A23\u5F0F\u984F\u8272"},remain_unchanged:{zh:"\u4FDD\u7559\u4E0D\u53D8",en:"Remain Unchanged",zh_TW:"\u4FDD\u7559\u4E0D\u8B8A"},google_api:{zh:"\u8C37\u6B4C\u7FFB\u8BD1\u63A5\u53E3",en:"Google Translate API",zh_TW:"Google \u7FFB\u8B6F\u4ECB\u9762"},default_selector:{zh:"\u9ED8\u8BA4\u9009\u62E9\u5668",en:"Default selector",zh_TW:"\u9810\u8A2D\u9078\u64C7\u5668"},selector_rules:{zh:"\u9009\u62E9\u5668\u89C4\u5219",en:"Selector Rules",zh_TW:"\u9078\u64C7\u5668\u898F\u5247"},save:{zh:"\u4FDD\u5B58",en:"Save",zh_TW:"\u5132\u5B58"},edit:{zh:"\u7F16\u8F91",en:"Edit",zh_TW:"\u7DE8\u8F2F"},cancel:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},delete:{zh:"\u5220\u9664",en:"Delete",zh_TW:"\u522A\u9664"},reset:{zh:"\u91CD\u7F6E",en:"Reset",zh_TW:"\u91CD\u8A2D"},add:{zh:"\u6DFB\u52A0",en:"Add",zh_TW:"\u65B0\u589E"},inject_rules:{zh:"\u6CE8\u5165\u8BA2\u9605\u89C4\u5219",en:"Inject Subscribe Rules",zh_TW:"\u6CE8\u5165\u8A02\u95B1\u898F\u5247"},personal_rules:{zh:"\u4E2A\u4EBA\u89C4\u5219",en:"Rules",zh_TW:"\u500B\u4EBA\u898F\u5247"},subscribe_rules:{zh:"\u8BA2\u9605\u89C4\u5219",en:"Subscribe",zh_TW:"\u8A02\u95B1\u898F\u5247"},overwrite_subscribe_rules:{zh:"\u8986\u5199\u8BA2\u9605\u89C4\u5219",en:"Overwrite",zh_TW:"\u8986\u5BEB\u8A02\u95B1\u898F\u5247"},subscribe_url:{zh:"\u8BA2\u9605\u5730\u5740",en:"Subscribe URL",zh_TW:"\u8A02\u95B1\u7DB2\u5740"},rules_warn_1:{zh:"1\u3001\u89C4\u5219\u751F\u6548\u7684\u4F18\u5148\u7EA7\u4F9D\u6B21\u4E3A\uFF1A\u4E2A\u4EBA\u89C4\u5219 > \u8BA2\u9605\u89C4\u5219 > \u5168\u5C40\u89C4\u5219\u3002\"\u5168\u5C40\u89C4\u5219\"\u76F8\u5F53\u4E8E\u515C\u5E95\u89C4\u5219\u3002",en:"1. The priority of rules is: personal rules > subscription rules > global rules. \"Global rules\" are like a fallback rule.",zh_TW:"1.\u898F\u5247\u751F\u6548\u7684\u512A\u5148\u9806\u5E8F\u4F9D\u5E8F\u70BA\uFF1A\u500B\u4EBA\u898F\u5247 > \u8A02\u95B1\u898F\u5247 > \u5168\u57DF\u898F\u5247\u3002 \"\u5168\u57DF\u898F\u5247\"\u76F8\u7576\u65BC\u515C\u5E95\u898F\u5247\u3002"},rules_warn_2:{zh:"2\u3001\u201C\u8BA2\u9605\u89C4\u5219\u201D\u9009\u62E9\u6CE8\u5165\u540E\u624D\u4F1A\u751F\u6548\u3002",en:"2. \"Subscription rules\" will take effect only after injection is selected.",zh_TW:"2\u3001\u300C\u8A02\u95B1\u898F\u5247\u300D\u9078\u64C7\u6CE8\u5165\u5F8C\u624D\u6703\u751F\u6548\u3002"},rules_warn_3:{zh:"3\u3001\u5173\u4E8E\u89C4\u5219\u586B\u5199\uFF1A\u8F93\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u6846\u9009\u201C*\u201D\u8868\u793A\u91C7\u7528\u5168\u5C40\u89C4\u5219\u3002",en:"3. Regarding filling in the rules: Leave the input box blank or select \"*\" in the drop-down box to use global rule.",zh_TW:"3. \u898F\u5247\u586B\u5BEB\u8AAA\u660E\uFF1A\u8F38\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u9078\u64C7\u300C*\u300D\u8868\u793A\u4F7F\u7528\u5168\u57DF\u898F\u5247\u3002"},sync_warn:{zh:"\u6D89\u53CA\u9690\u79C1\u6570\u636E\u7684\u540C\u6B65\u8BF7\u8C28\u614E\u9009\u62E9\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52A1\uFF0C\u5EFA\u8BAE\u81EA\u884C\u642D\u5EFA kiss-worker \u6216 WebDAV \u670D\u52A1\u3002",en:"When synchronizing data that involves privacy, please be cautious about choosing third-party sync services. It is recommended to set up your own sync service using kiss-worker or WebDAV.",zh_TW:"\u540C\u6B65\u6D89\u53CA\u96B1\u79C1\u8CC7\u6599\u6642\uFF0C\u8ACB\u8B39\u614E\u9078\u64C7\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52D9\uFF1B\u5EFA\u8B70\u81EA\u5EFA kiss-worker \u6216 WebDAV \u670D\u52D9\u3002"},sync_warn_2:{zh:"\u5982\u679C\u670D\u52A1\u5668\u5B58\u5728\u5176\u4ED6\u5BA2\u6237\u7AEF\u540C\u6B65\u7684\u6570\u636E\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u5C06\u76F4\u63A5\u8986\u76D6\u672C\u5730\u914D\u7F6E\uFF0C\u540E\u9762\u5219\u6839\u636E\u4FEE\u6539\u65F6\u95F4\uFF0C\u65B0\u7684\u8986\u76D6\u65E7\u7684\u3002",en:"If the server has data synchronized by other clients, the first synchronization will directly overwrite the local configuration, and later, according to the modification time, the new one will overwrite the old one.",zh_TW:"\u82E5\u4F3A\u670D\u5668\u4E0A\u5B58\u5728\u5176\u4ED6\u7528\u6236\u7AEF\u540C\u6B65\u7684\u8CC7\u6599\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u6703\u76F4\u63A5\u8986\u84CB\u672C\u6A5F\u8A2D\u5B9A\uFF1B\u4E4B\u5F8C\u5247\u4F9D\u4FEE\u6539\u6642\u9593\uFF0C\u7531\u65B0\u7684\u8986\u84CB\u820A\u7684\u3002"},about_sync_api:{zh:"\u81EA\u5EFAkiss-wroker\u6570\u636E\u540C\u6B65\u670D\u52A1",en:"Self-hosting a Kiss-worker data sync service",zh_TW:"\u81EA\u5EFA kiss-wroker \u8CC7\u6599\u540C\u6B65\u670D\u52D9"},about_api:{zh:"1\u3001\u5176\u4E2D BuiltinAI \u4E3A\u6D4F\u89C8\u5668\u5185\u7F6EAI\u7FFB\u8BD1\uFF0C\u76EE\u524D\u4EC5 Chrome 138 \u53CA\u4EE5\u4E0A\u7248\u672C\u5F97\u5230\u652F\u6301\u3002",en:"1. BuiltinAI is the browser's built-in AI translation, which is currently only supported by Chrome 138 and above.",zh_TW:"1.\u5176\u4E2D BuiltinAI \u70BA\u700F\u89BD\u5668\u5167\u5EFAAI\u7FFB\u8B6F\uFF0C\u76EE\u524D\u50C5 Chrome 138 \u4EE5\u4E0A\u7248\u672C\u652F\u63F4\u3002"},about_api_2:{zh:"2\u3001\u5927\u90E8\u5206AI\u63A5\u53E3\u90FD\u4E0EOpenAI\u517C\u5BB9\uFF0C\u56E0\u6B64\u9009\u62E9\u6DFB\u52A0OpenAI\u7C7B\u578B\u5373\u53EF\u3002",en:"2. Most AI interfaces are compatible with OpenAI, so just choose to add the OpenAI type.",zh_TW:"2.\u5927\u90E8\u5206AI\u4ECB\u9762\u90FD\u8207OpenAI\u76F8\u5BB9\uFF0C\u56E0\u6B64\u9078\u64C7\u65B0\u589EOpenAI\u985E\u578B\u5373\u53EF\u3002"},about_api_3:{zh:"3\u3001\u6682\u672A\u5217\u51FA\u7684\u63A5\u53E3\uFF0C\u7406\u8BBA\u4E0A\u90FD\u53EF\u4EE5\u901A\u8FC7\u81EA\u5B9A\u4E49\u63A5\u53E3 (Custom) \u7684\u5F62\u5F0F\u652F\u6301\u3002",en:"3. Interfaces that have not yet been launched can theoretically be supported through custom interfaces.",zh_TW:"3\u3001\u66AB\u672A\u5217\u51FA\u7684\u4ECB\u9762\uFF0C\u7406\u8AD6\u4E0A\u90FD\u53EF\u900F\u904E\u81EA\u8A02\u4ECB\u9762 (Custom) \u7684\u5F62\u5F0F\u652F\u63F4\u3002"},about_api_proxy:{zh:"\u67E5\u770B\u81EA\u5EFA\u4E00\u4E2A\u7FFB\u8BD1\u63A5\u53E3\u4EE3\u7406",en:"Check out the self-built translation interface proxy",zh_TW:"\u67E5\u770B\u5982\u4F55\u81EA\u5EFA\u7FFB\u8B6F\u4ECB\u9762 Proxy"},setting_helper:{zh:"\u65B0\u65E7\u914D\u7F6E\u5E76\u4E0D\u517C\u5BB9\uFF0C\u5BFC\u51FA\u7684\u65E7\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u5BFC\u5165\u3002",en:"The old and new configurations are not compatible. Do not import the exported old configuration again.",zh_TW:"\u65B0\u820A\u914D\u7F6E\u4E26\u4E0D\u76F8\u5BB9\uFF0C\u532F\u51FA\u7684\u820A\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u532F\u5165\u3002"},style_none:{zh:"\u65E0",en:"None",zh_TW:"\u7121"},under_line:{zh:"\u4E0B\u5212\u76F4\u7EBF",en:"Underline",zh_TW:"\u4E0B\u5283\u76F4\u7DDA"},dot_line:{zh:"\u4E0B\u5212\u70B9\u72B6\u7EBF",en:"Dotted Underline",zh_TW:"\u4E0B\u5283\u9EDE\u72C0\u7DDA"},dash_line:{zh:"\u4E0B\u5212\u865A\u7EBF",en:"Dashed Underline",zh_TW:"\u4E0B\u5283\u865B\u7DDA"},dash_box:{zh:"\u865A\u7EBF\u6846",en:"Dashed Box"},wavy_line:{zh:"\u4E0B\u5212\u6CE2\u6D6A\u7EBF",en:"Wavy Underline",zh_TW:"\u4E0B\u5283\u6CE2\u6D6A\u7DDA"},fuzzy:{zh:"\u6A21\u7CCA",en:"Fuzzy",zh_TW:"\u6A21\u7CCA"},highlight:{zh:"\u9AD8\u4EAE",en:"Highlight",zh_TW:"\u53CD\u767D\u6A19\u793A"},blockquote:{zh:"\u5F15\u7528",en:"Blockquote",zh_TW:"\u5F15\u7528"},gradient:{zh:"\u6E10\u53D8",en:"Gradient",zh_TW:"\u6F38\u8B8A"},blink:{zh:"\u95EA\u73B0",en:"Blink",zh_TW:"\u9583\u73FE"},glow:{zh:"\u53D1\u5149",en:"Glow",zh_TW:"\u767C\u5149"},diy_style:{zh:"\u81EA\u5B9A\u4E49\u6837\u5F0F",en:"Custom Style",zh_TW:"\u81EA\u8A02\u6A23\u5F0F"},diy_style_helper:{zh:"\u9075\u5FAA\u201CCSS\u201D\u7684\u8BED\u6CD5",en:"Follow the syntax of \"CSS\"",zh_TW:"\u9075\u5FAA CSS \u8A9E\u6CD5"},setting:{zh:"\u8BBE\u7F6E",en:"Setting",zh_TW:"\u8A2D\u5B9A"},pattern:{zh:"\u5339\u914D\u7F51\u5740",en:"URL pattern",zh_TW:"\u5339\u914D\u7DB2\u5740"},pattern_helper:{zh:"1\u3001\u652F\u6301\u661F\u53F7(*)\u901A\u914D\u7B26\u30022\u3001\u591A\u4E2AURL\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\u3002",en:"1. Supports the asterisk (*) wildcard character. 2. Separate multiple URLs with newlines or English commas \",\".",zh_TW:"1. \u652F\u63F4\u661F\u865F (*) \u842C\u7528\u5B57\u5143\u30022. \u591A\u500B URL \u8ACB\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u3002"},selector_helper:{zh:"1\u3001\u9700\u8981\u7FFB\u8BD1\u7684\u76EE\u6807\u5143\u7D20\u30022\u3001\u5F00\u542F\u81EA\u52A8\u626B\u63CF\u9875\u9762\u540E\uFF0C\u672C\u8BBE\u7F6E\u65E0\u6548\u30023\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The target element to be translated. 2. This setting is invalid when automatic page scanning is enabled. 3. Follow the CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u7FFB\u8B6F\u7684\u76EE\u6A19\u5143\u7D20\u3002 2.\u958B\u555F\u81EA\u52D5\u6383\u63CF\u9801\u9762\u5F8C\uFF0C\u672C\u8A2D\u5B9A\u7121\u6548\u3002 3.\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},translate_switch:{zh:"\u5F00\u542F\u7FFB\u8BD1",en:"Translate Switch",zh_TW:"\u958B\u555F\u7FFB\u8B6F"},default_enabled:{zh:"\u9ED8\u8BA4\u5F00\u542F",en:"Enabled",zh_TW:"\u9810\u8A2D\u958B\u555F"},default_disabled:{zh:"\u9ED8\u8BA4\u5173\u95ED",en:"Disabled",zh_TW:"\u9810\u8A2D\u95DC\u9589"},selector:{zh:"\u9009\u62E9\u5668",en:"Selector",zh_TW:"\u9078\u64C7\u5668"},target_selector:{zh:"\u76EE\u6807\u5143\u7D20\u9009\u62E9\u5668",en:"Target element selector",zh_TW:"\u76EE\u6A19\u5143\u7D20\u9078\u64C7\u5668"},keep_selector:{zh:"\u4FDD\u7559\u5143\u7D20\u9009\u62E9\u5668",en:"Keep unchanged selector",zh_TW:"\u4FDD\u7559\u5143\u7D20\u9078\u64C7\u5668"},keep_selector_helper:{zh:"1\u3001\u76EE\u6807\u5143\u7D20\u4E0B\u9762\u9700\u8981\u539F\u6837\u4FDD\u7559\u7684\u5B50\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The child nodes under the target element need to remain intact. 2. Follow the CSS selector syntax.",zh_TW:"1. \u76EE\u6A19\u5143\u7D20\u4E0B\u7684\u5B50\u7BC0\u9EDE\u9700\u8981\u4FDD\u6301\u539F\u6A23\u3002 2. \u9075\u5FAA CSS \u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},root_selector:{zh:"\u6839\u8282\u70B9\u9009\u62E9\u5668",en:"Root node selector",zh_TW:"\u6839\u7BC0\u9EDE\u9078\u64C7\u5668"},root_selector_helper:{zh:"1\u3001\u7528\u4E8E\u7F29\u5C0F\u9875\u9762\u7FFB\u8BD1\u8303\u56F4\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Used to narrow the translation scope of the page. 2. Follow the CSS selector syntax.",zh_TW:"1.\u7528\u65BC\u7E2E\u5C0F\u9801\u9762\u7FFB\u8B6F\u7BC4\u570D\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},ignore_selector:{zh:"\u4E0D\u7FFB\u8BD1\u8282\u70B9\u9009\u62E9\u5668",en:"Ignore node selectors",zh_TW:"\u4E0D\u7FFB\u8B6F\u7BC0\u9EDE\u9078\u64C7\u5668"},ignore_selector_helper:{zh:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Nodes to be ignored. 2. Follow CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u7BC0\u9EDE\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},terms:{zh:"\u4E13\u4E1A\u672F\u8BED",en:"Terms",zh_TW:"\u5C08\u696D\u8853\u8A9E"},terms_helper:{zh:"1\u3001\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u65E0\u9700\u659C\u6746\uFF0C\u4E0D\u652F\u6301\u4FEE\u9970\u7B26\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. Supports regular expression matching, no slash required, and no modifiers are supported. 2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1. \u652F\u63F4\u6B63\u5247\u8868\u9054\u5F0F\u6BD4\u5C0D\uFF0C\u7121\u9700\u659C\u7DDA\uFF0C\u4E14\u4E0D\u652F\u63F4\u4FEE\u98FE\u7B26\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},ai_terms:{zh:"AI\u4E13\u4E1A\u672F\u8BED",en:"AI Terms",zh_TW:"AI\u5C08\u696D\u8853\u8A9E"},ai_terms_helper:{zh:"1\u3001AI\u667A\u80FD\u66FF\u6362\uFF0C\u4E0D\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. AI intelligent replacement does not support regular expressions.2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1.AI\u667A\u80FD\u66FF\u63DB\uFF0C\u4E0D\u652F\u63F4\u6B63\u898F\u8868\u793A\u5F0F\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},selector_style:{zh:"\u9009\u62E9\u5668\u8282\u70B9\u6837\u5F0F",en:"Selector Style",zh_TW:"\u9078\u64C7\u5668\u7BC0\u9EDE\u6A23\u5F0F"},terms_style:{zh:"\u4E13\u4E1A\u672F\u8BED\u6837\u5F0F",en:"Terms Style",zh_TW:"\u5C08\u696D\u8853\u8A9E\u6A23\u5F0F"},highlight_style:{zh:"\u8BCD\u6C47\u9AD8\u4EAE\u6837\u5F0F",en:"Fav Words highlight style",zh_TW:"\u8A5E\u5F59\u9AD8\u4EAE\u6A23\u5F0F"},selector_style_helper:{zh:"\u5F00\u542F\u7FFB\u8BD1\u65F6\u6CE8\u5165\u3002",en:"It is injected when translation is turned on.",zh_TW:"\u5728\u958B\u555F\u7FFB\u8B6F\u6642\u6CE8\u5165\u3002"},selector_parent_style:{zh:"\u9009\u62E9\u5668\u7236\u8282\u70B9\u6837\u5F0F",en:"Parent Selector Style",zh_TW:"\u9078\u64C7\u5668\u7236\u7BC0\u9EDE\u6A23\u5F0F"},selector_grand_style:{zh:"\u9009\u62E9\u5668\u7956\u8282\u70B9\u6837\u5F0F",en:"Grand Selector Style",zh_TW:"\u9078\u64C7\u5668\u7956\u7BC0\u9EDE\u6A23\u5F0F"},inject_js:{zh:"\u6CE8\u5165JS",en:"Inject JS",zh_TW:"\u6CE8\u5165 JS"},inject_js_helper:{zh:"\u9884\u52A0\u8F7D\u65F6\u6CE8\u5165\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002\u5185\u7F6E\u5168\u5C40\u5BF9\u8C61 KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }",en:"Injected during preload, runs only once per page. Built-in global object KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }",zh_TW:"\u9810\u5148\u8F09\u5165\u6642\u6CE8\u5165\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002\u5167\u5EFA\u5168\u57DF\u7269\u4EF6 KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }"},inject_css:{zh:"\u6CE8\u5165CSS",en:"Inject CSS",zh_TW:"\u6CE8\u5165 CSS"},inject_css_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},fixer_function:{zh:"\u4FEE\u590D\u51FD\u6570",en:"Fixer Function",zh_TW:"\u4FEE\u5FA9\u51FD\u5F0F"},fixer_function_helper:{zh:"1\u3001br\u662F\u5C06
\u6362\u884C\u66FF\u6362\u6210

\u30022\u3001bn\u662F\u5C06\\n\u6362\u884C\u66FF\u6362\u6210

\u30023\u3001brToDiv\u548CbnToDiv\u662F\u66FF\u6362\u6210

\u3002",en:"1. br replaces
line breaks with

. 2. bn replaces \\n newline with

. 3. brToDiv and bnToDiv are replaced with

.",zh_TW:"1. br \u6703\u5C07
\u63DB\u884C\u66FF\u63DB\u70BA

\u30022. bn \u6703\u5C07 \\n \u63DB\u884C\u66FF\u63DB\u70BA

\u30023. brToDiv \u8207 bnToDiv \u6703\u66FF\u63DB\u70BA

\u3002"},import:{zh:"\u5BFC\u5165",en:"Import",zh_TW:"\u532F\u5165"},export:{zh:"\u5BFC\u51FA",en:"Export",zh_TW:"\u532F\u51FA"},export_translation:{zh:"\u5BFC\u51FA\u91CA\u4E49",en:"Export Translation",zh_TW:"\u532F\u51FA\u91CB\u7FA9"},error_cant_be_blank:{zh:"\u4E0D\u80FD\u4E3A\u7A7A",en:"Can not be blank",zh_TW:"\u4E0D\u53EF\u70BA\u7A7A"},error_duplicate_values:{zh:"\u5B58\u5728\u91CD\u590D\u7684\u503C",en:"There are duplicate values",zh_TW:"\u5B58\u5728\u91CD\u8907\u7684\u503C"},error_wrong_file_type:{zh:"\u9519\u8BEF\u7684\u6587\u4EF6\u7C7B\u578B",en:"Wrong file type",zh_TW:"\u6A94\u6848\u985E\u578B\u932F\u8AA4"},error_fetch_url:{zh:"\u8BF7\u68C0\u67E5url\u5730\u5740\u662F\u5426\u6B63\u786E\u6216\u7A0D\u540E\u518D\u8BD5\u3002",en:"Please check if the url address is correct or try again later.",zh_TW:"\u8ACB\u6AA2\u67E5 URL \u662F\u5426\u6B63\u78BA\u6216\u7A0D\u5F8C\u518D\u8A66\u3002"},deepl_api:{zh:"DeepL \u63A5\u53E3",en:"DeepL API",zh_TW:"DeepL \u4ECB\u9762"},deepl_key:{zh:"DeepL \u5BC6\u94A5",en:"DeepL Key",zh_TW:"DeepL \u91D1\u9470"},openai_api:{zh:"OpenAI \u63A5\u53E3",en:"OpenAI API",zh_TW:"OpenAI \u4ECB\u9762"},openai_key:{zh:"OpenAI \u5BC6\u94A5",en:"OpenAI Key",zh_TW:"OpenAI \u91D1\u9470"},openai_model:{zh:"OpenAI \u6A21\u578B",en:"OpenAI Model",zh_TW:"OpenAI \u6A21\u578B"},openai_prompt:{zh:"OpenAI \u63D0\u793A\u8BCD",en:"OpenAI Prompt",zh_TW:"OpenAI \u63D0\u793A\u8A5E"},if_clear_cache:{zh:"\u662F\u5426\u6E05\u9664\u7F13\u5B58\uFF08\u9ED8\u8BA4\u7F13\u5B587\u5929\uFF09",en:"Whether clear cache (Default cache is 7 days)",zh_TW:"\u662F\u5426\u6E05\u9664\u5FEB\u53D6\uFF08\u9810\u8A2D\u5FEB\u53D67\u5929\uFF09"},clear_cache_never:{zh:"\u4E0D\u6E05\u9664\u7F13\u5B58",en:"Never clear cache",zh_TW:"\u4E0D\u6E05\u9664\u5FEB\u53D6"},clear_cache_restart:{zh:"\u91CD\u542F\u6D4F\u89C8\u5668\u65F6\u6E05\u9664\u7F13\u5B58",en:"Clear cache when restarting browser",zh_TW:"\u91CD\u65B0\u555F\u52D5\u700F\u89BD\u5668\u6642\u6E05\u9664\u5FEB\u53D6"},data_sync_type:{zh:"\u6570\u636E\u540C\u6B65\u65B9\u5F0F",en:"Data Sync Type",zh_TW:"\u8CC7\u6599\u540C\u6B65\u65B9\u5F0F"},data_sync_url:{zh:"\u6570\u636E\u540C\u6B65\u63A5\u53E3",en:"Data Sync API",zh_TW:"\u8CC7\u6599\u540C\u6B65\u4ECB\u9762"},data_sync_user:{zh:"\u6570\u636E\u540C\u6B65\u8D26\u6237",en:"Data Sync User",zh_TW:"\u8CC7\u6599\u540C\u6B65\u5E33\u865F"},data_sync_key:{zh:"\u6570\u636E\u540C\u6B65\u5BC6\u94A5",en:"Data Sync Key",zh_TW:"\u8CC7\u6599\u540C\u6B65\u91D1\u9470"},sync_now:{zh:"\u7ACB\u5373\u540C\u6B65",en:"Sync Now",zh_TW:"\u7ACB\u5373\u540C\u6B65"},sync_success:{zh:"\u540C\u6B65\u6210\u529F\uFF01",en:"Sync Success",zh_TW:"\u540C\u6B65\u6210\u529F\uFF01"},sync_failed:{zh:"\u540C\u6B65\u5931\u8D25\uFF01",en:"Sync Error",zh_TW:"\u540C\u6B65\u5931\u6557\uFF01"},error_got_some_wrong:{zh:"\u62B1\u6B49\uFF0C\u51FA\u9519\u4E86\uFF01",en:"Sorry, something went wrong!",zh_TW:"\u62B1\u6B49\uFF0C\u767C\u751F\u932F\u8AA4\uFF01"},error_sync_setting:{zh:"\u60A8\u7684\u540C\u6B65\u7C7B\u578B\u5FC5\u987B\u4E3A\u201CKISS-Worker\u201D\uFF0C\u4E14\u9700\u586B\u5199\u5B8C\u6574",en:"Your sync type must be \"KISS-Worker\" and must be filled in completely",zh_TW:"\u60A8\u7684\u540C\u6B65\u578B\u614B\u5FC5\u9808\u70BA\u300CKISS-Worker\u300D\uFF0C\u4E14\u9700\u586B\u5BEB\u5B8C\u6574\u3002"},click_test:{zh:"\u70B9\u51FB\u6D4B\u8BD5",en:"Click Test",zh_TW:"\u9EDE\u64CA\u6E2C\u8A66"},test_success:{zh:"\u6D4B\u8BD5\u6210\u529F",en:"Test success",zh_TW:"\u6E2C\u8A66\u6210\u529F"},test_failed:{zh:"\u6D4B\u8BD5\u5931\u8D25",en:"Test failed",zh_TW:"\u6E2C\u8A66\u5931\u6557"},clear_all_cache_now:{zh:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u7F13\u5B58",en:"Clear all cache now",zh_TW:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u5FEB\u53D6"},clear_cache:{zh:"\u6E05\u9664\u7F13\u5B58",en:"Clear Cache",zh_TW:"\u6E05\u9664\u5FEB\u53D6"},clear_success:{zh:"\u6E05\u9664\u6210\u529F",en:"Clear success",zh_TW:"\u6E05\u9664\u6210\u529F"},clear_failed:{zh:"\u6E05\u9664\u5931\u8D25",en:"Clear failed",zh_TW:"\u6E05\u9664\u5931\u6557"},share:{zh:"\u5206\u4EAB",en:"Share",zh_TW:"\u5206\u4EAB"},clear_all:{zh:"\u6E05\u7A7A",en:"Clear All",zh_TW:"\u6E05\u7A7A"},help:{zh:"\u6C42\u52A9",en:"Help",zh_TW:"\u6C42\u52A9"},restore_default:{zh:"\u6062\u590D\u9ED8\u8BA4",en:"Restore Default",zh_TW:"\u6062\u5FA9\u9810\u8A2D"},shortcuts_setting:{zh:"\u5FEB\u6377\u952E\u8BBE\u7F6E",en:"Shortcuts Setting",zh_TW:"\u5FEB\u6377\u9375\u8A2D\u5B9A"},toggle_translate_shortcut:{zh:"\"\u5F00\u542F\u7FFB\u8BD1\"\u5FEB\u6377\u952E",en:"\"Toggle Translate\" Shortcut",zh_TW:"\u300C\u958B\u555F\u7FFB\u8B6F\u300D\u5FEB\u6377\u9375"},toggle_style_shortcut:{zh:"\"\u5207\u6362\u6837\u5F0F\"\u5FEB\u6377\u952E",en:"\"Toggle Style\" Shortcut",zh_TW:"\u300C\u5207\u63DB\u6A23\u5F0F\u300D\u5FEB\u6377\u9375"},toggle_popup_shortcut:{zh:"\"\u6253\u5F00\u5F39\u7A97\"\u5FEB\u6377\u952E",en:"\"Open Popup\" Shortcut",zh_TW:"\u300C\u958B\u555F\u5F48\u7A97\u300D\u5FEB\u6377\u9375"},open_setting_shortcut:{zh:"\"\u6253\u5F00\u8BBE\u7F6E\"\u5FEB\u6377\u952E",en:"\"Open Setting\" Shortcut",zh_TW:"\u300C\u958B\u555F\u8A2D\u5B9A\u300D\u5FEB\u6377\u9375"},hide_fab_button:{zh:"\u9690\u85CF\u60AC\u6D6E\u6309\u94AE",en:"Hide Fab Button",zh_TW:"\u96B1\u85CF\u61F8\u6D6E\u6309\u9215"},fab_click_action:{zh:"\u5355\u51FB\u60AC\u6D6E\u6309\u94AE\u52A8\u4F5C",en:"Single Click Fab Action",zh_TW:"\u55AE\u64CA\u61F8\u6D6E\u6309\u94AE\u52D5\u4F5C"},fab_click_menu:{zh:"\u5F39\u51FA\u83DC\u5355",en:"Popup Menu",zh_TW:"\u5F48\u51FA\u9078\u55AE"},fab_click_translate:{zh:"\u76F4\u63A5\u7FFB\u8BD1",en:"Translate",zh_TW:"\u76F4\u63A5\u7FFB\u8B6F"},hide_tran_button:{zh:"\u9690\u85CF\u7FFB\u8BD1\u6309\u94AE",en:"Hide Translate Button",zh_TW:"\u96B1\u85CF\u7FFB\u8B6F\u6309\u9215"},hide_click_away:{zh:"\u70B9\u51FB\u5916\u90E8\u5173\u95ED\u5F39\u7A97",en:"Click outside to close the pop-up window",zh_TW:"\u9EDE\u64CA\u5916\u90E8\u95DC\u9589\u5F48\u7A97"},use_simple_style:{zh:"\u4F7F\u7528\u7B80\u6D01\u754C\u9762",en:"Use a simple interface",zh_TW:"\u4F7F\u7528\u7C21\u6F54\u4ECB\u9762"},show:{zh:"\u663E\u793A",en:"Show",zh_TW:"\u986F\u793A"},hide:{zh:"\u9690\u85CF",en:"Hide",zh_TW:"\u96B1\u85CF"},save_rule:{zh:"\u4FDD\u5B58\u89C4\u5219",en:"Save Rule",zh_TW:"\u5132\u5B58\u898F\u5247"},global_rule:{zh:"\u5168\u5C40\u89C4\u5219",en:"Global Rule",zh_TW:"\u5168\u57DF\u898F\u5247"},input_translate:{zh:"\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u8F38\u5165\u6846\u7FFB\u8B6F"},use_input_box_translation:{zh:"\u542F\u7528\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u555F\u7528\u8F38\u5165\u6846\u7FFB\u8B6F"},input_selector:{zh:"\u8F93\u5165\u6846\u9009\u62E9\u5668",en:"Input Selector",zh_TW:"\u8F38\u5165\u6846\u9078\u64C7\u5668"},input_selector_helper:{zh:"\u7528\u4E8E\u8F93\u5165\u6846\u7FFB\u8BD1\u3002",en:"Used for input box translation.",zh_TW:"\u7528\u65BC\u8F38\u5165\u6846\u7FFB\u8B6F\u3002"},trigger_trans_shortcut:{zh:"\u89E6\u53D1\u7FFB\u8BD1\u5FEB\u6377\u952E",en:"Trigger Translation Shortcut Keys",zh_TW:"\u89F8\u767C\u7FFB\u8B6F\u5FEB\u6377\u9375"},trigger_trans_shortcut_help:{zh:"\u9ED8\u8BA4\u4E3A\u5355\u51FB\u201CAltLeft+KeyI\u201D",en:"Default is \"AltLeft+KeyI\"",zh_TW:"\u9810\u8A2D\u70BA\u6309\u4E0B\u300CAltLeft+KeyI\u300D"},shortcut_press_count:{zh:"\u5FEB\u6377\u952E\u8FDE\u51FB\u6B21\u6570",en:"Shortcut Press Number",zh_TW:"\u5FEB\u6377\u9375\u9023\u64CA\u6B21\u6578"},combo_timeout:{zh:"\u8FDE\u51FB\u8D85\u65F6\u65F6\u95F4 (10-1000ms)",en:"Combo Timeout (10-1000ms)",zh_TW:"\u9023\u64CA\u903E\u6642 (10-1000ms)"},input_trans_start_sign:{zh:"\u7FFB\u8BD1\u8D77\u59CB\u6807\u8BC6",en:"Translation Start Sign",zh_TW:"\u7FFB\u8B6F\u8D77\u59CB\u6A19\u8A18"},input_trans_start_sign_help:{zh:"\u6807\u8BC6\u540E\u9762\u53EF\u4EE5\u52A0\u76EE\u6807\u8BED\u8A00\u4EE3\u7801\uFF0C\u5982\uFF1A \u201C/en \u4F60\u597D\u201D\u3001\u201C/zh hello\u201D",en:"The target language code can be added after the sign, such as: \"/en \u4F60\u597D\", \"/zh hello\"",zh_TW:"\u6A19\u8A18\u5F8C\u53EF\u52A0\u4E0A\u76EE\u6A19\u8A9E\u8A00\u4EE3\u78BC\uFF0C\u4F8B\u5982\uFF1A\u300C/en \u4F60\u597D\u300D\u3001\u300C/zh hello\u300D"},detect_lang_remote:{zh:"\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B",en:"Remote language detection",zh_TW:"\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C"},detect_lang_remote_help:{zh:"\u542F\u7528\u540E\u68C0\u6D4B\u51C6\u786E\u5EA6\u589E\u52A0\uFF0C\u4F46\u4F1A\u964D\u4F4E\u7FFB\u8BD1\u901F\u5EA6\uFF0C\u8BF7\u914C\u60C5\u5F00\u542F",en:"After enabling, the detection accuracy will increase, but it will reduce the translation speed. Please enable it as appropriate.",zh_TW:"\u555F\u7528\u5F8C\u53EF\u63D0\u5347\u5075\u6E2C\u6E96\u78BA\u5EA6\uFF0C\u4F46\u6703\u964D\u4F4E\u7FFB\u8B6F\u901F\u5EA6\uFF0C\u8ACB\u8996\u9700\u8981\u958B\u555F\u3002"},detect_lang_service:{zh:"\u8BED\u8A00\u68C0\u6D4B\u670D\u52A1",en:"Language detect service",zh_TW:"\u8A9E\u8A00\u6AA2\u6E2C\u670D\u52D9"},disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},enable:{zh:"\u542F\u7528",en:"Enable",zh_TW:"\u555F\u7528"},selection_translate:{zh:"\u5212\u8BCD\u7FFB\u8BD1",en:"Selection Translate",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F"},toggle_selection_translate:{zh:"\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"Use Selection Translate",zh_TW:"\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},trigger_tranbox_shortcut:{zh:"\u663E\u793A\u7FFB\u8BD1\u6846/\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57\u5FEB\u6377\u952E",en:"Open Translate Popup/Translate Selected Shortcut",zh_TW:"\u986F\u793A\u7FFB\u8B6F\u6846\uFF0F\u7FFB\u8B6F\u9078\u4E2D\u6587\u5B57\u5FEB\u6377\u9375"},tranbtn_offset_x:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Button Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbtn_offset_y:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Button Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},tranbox_offset_x:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Box Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbox_offset_y:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Box Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},translated_text:{zh:"\u8BD1\u6587",en:"Translated Text",zh_TW:"\u8B6F\u6587"},original_text:{zh:"\u539F\u6587",en:"Original Text",zh_TW:"\u539F\u6587"},favorite_words:{zh:"\u6536\u85CF\u8BCD\u6C47",en:"Favorite Words",zh_TW:"\u6536\u85CF\u8A5E\u5F59"},touch_setting:{zh:"\u89E6\u5C4F\u8BBE\u7F6E",en:"Touch Setting",zh_TW:"\u89F8\u63A7\u8A2D\u5B9A"},touch_translate_shortcut:{zh:"\u89E6\u5C4F\u7FFB\u8BD1\u5FEB\u6377\u65B9\u5F0F (\u652F\u6301\u591A\u9009)",en:"Touch Translate Shortcut (multiple supported)",zh_TW:"\u89F8\u63A7\u7FFB\u8B6F\u6377\u5F91 (\u652F\u63F4\u591A\u9078)"},touch_tap_0:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},touch_tap_2:{zh:"\u53CC\u6307\u8F7B\u89E6",en:"Two finger tap",zh_TW:"\u96D9\u6307\u8F15\u89F8"},touch_tap_3:{zh:"\u4E09\u6307\u8F7B\u89E6",en:"Three finger tap",zh_TW:"\u4E09\u6307\u8F15\u89F8"},touch_tap_4:{zh:"\u56DB\u6307\u8F7B\u89E6",en:"Four finger tap",zh_TW:"\u56DB\u6307\u8F15\u89F8"},touch_tap_5:{zh:"\u5355\u6307\u53CC\u51FB",en:"Double-click",zh_TW:"\u55AE\u6307\u96D9\u64CA"},touch_tap_6:{zh:"\u5355\u6307\u4E09\u51FB",en:"Triple-click",zh_TW:"\u55AE\u6307\u4E09\u64CA"},touch_tap_7:{zh:"\u53CC\u6307\u53CC\u51FB",en:"Two-finger double-click",zh_TW:"\u96D9\u6307\u96D9\u64CA"},translate_blacklist:{zh:"\u7981\u7528\u7FFB\u8BD1\u540D\u5355",en:"Translate Blacklist",zh_TW:"\u505C\u7528\u7FFB\u8B6F\u540D\u55AE"},disabled_orilist:{zh:"\u7981\u7528Origin\u540D\u5355",en:"Disabled Origin List",zh_TW:"\u505C\u7528 Origin \u540D\u55AE"},disabled_csplist:{zh:"\u7981\u7528CSP\u540D\u5355",en:"Disabled CSP List",zh_TW:"\u505C\u7528 CSP \u540D\u55AE"},disabled_csplist_helper:{zh:"3\u3001\u901A\u8FC7\u8C03\u6574CSP\u7B56\u7565\uFF0C\u4F7F\u5F97\u67D0\u4E9B\u9875\u9762\u80FD\u591F\u6CE8\u5165JS/CSS/Media\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6653\u76F8\u5173\u98CE\u9669\u3002",en:"3. By adjusting the CSP policy, some pages can inject JS/CSS/Media. Please use it with caution unless you are aware of the related risks.",zh_TW:"3. \u900F\u904E\u8ABF\u6574 CSP \u653F\u7B56\uFF0C\u4F7F\u90E8\u5206\u9801\u9762\u53EF\u6CE8\u5165 JS/CSS/Media\u3002\u8ACB\u8B39\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6089\u76F8\u95DC\u98A8\u96AA\u3002"},skip_langs:{zh:"\u4E0D\u7FFB\u8BD1\u7684\u8BED\u8A00",en:"Disable Languages",zh_TW:"\u4E0D\u7FFB\u8B6F\u7684\u8A9E\u8A00"},skip_langs_helper:{zh:"\u6B64\u529F\u80FD\u4F9D\u8D56\u51C6\u786E\u7684\u8BED\u8A00\u68C0\u6D4B\uFF0C\u5EFA\u8BAE\u542F\u7528\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B\u3002",en:"This feature relies on accurate language detection. It is recommended to enable remote language detection.",zh_TW:"\u6B64\u529F\u80FD\u4EF0\u8CF4\u6E96\u78BA\u7684\u8A9E\u8A00\u5075\u6E2C\uFF0C\u5EFA\u8B70\u555F\u7528\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C\u3002"},context_menus:{zh:"\u53F3\u952E\u83DC\u5355",en:"Context Menus",zh_TW:"\u53F3\u9375\u9078\u55AE"},hide_context_menus:{zh:"\u9690\u85CF\u53F3\u952E\u83DC\u5355",en:"Hide Context Menus",zh_TW:"\u96B1\u85CF\u53F3\u9375\u9078\u55AE"},simple_context_menus:{zh:"\u7B80\u5355\u53F3\u952E\u83DC\u5355",en:"Simple_context_menus Context Menus",zh_TW:"\u7C21\u6613\u53F3\u9375\u9078\u55AE"},secondary_context_menus:{zh:"\u4E8C\u7EA7\u53F3\u952E\u83DC\u5355",en:"Secondary Context Menus",zh_TW:"\u6B21\u7D1A\u53F3\u9375\u9078\u55AE"},mulkeys_help:{zh:"\u652F\u6301\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\uFF0C\u8F6E\u8BE2\u8C03\u7528\u3002",en:"Supports polling calls separated by newlines or English commas \",\".",zh_TW:"\u652F\u63F4\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\uFF0C\u8F2A\u8A62\u547C\u53EB\u3002"},translation_element_tag:{zh:"\u8BD1\u6587\u5143\u7D20\u6807\u7B7E",en:"Translation Element Tag",zh_TW:"\u8B6F\u6587\u5143\u7D20\u6A19\u7C64"},show_only_translations:{zh:"\u4EC5\u663E\u793A\u8BD1\u6587",en:"Show Only Translations",zh_TW:"\u50C5\u986F\u793A\u8B6F\u6587"},show_only_translations_help:{zh:"\u975E\u5B8C\u7F8E\u5B9E\u73B0\uFF0C\u67D0\u4E9B\u9875\u9762\u53EF\u80FD\u6709\u6837\u5F0F\u7B49\u95EE\u9898\u3002",en:"It is not a perfect implementation and some pages may have style issues.",zh_TW:"\u6B64\u70BA\u975E\u5B8C\u7F8E\u5BE6\u4F5C\uFF0C\u90E8\u5206\u9801\u9762\u53EF\u80FD\u51FA\u73FE\u6A23\u5F0F\u7B49\u554F\u984C\u3002"},translate_page_title:{zh:"\u662F\u5426\u7FFB\u8BD1\u9875\u9762\u6807\u9898",en:"Translate Page Title",zh_TW:"\u662F\u5426\u7FFB\u8B6F\u9801\u9762\u6A19\u984C"},more:{zh:"\u66F4\u591A",en:"More",zh_TW:"\u66F4\u591A"},less:{zh:"\u66F4\u5C11",en:"Less",zh_TW:"\u66F4\u5C11"},fixer_selector:{zh:"\u7F51\u9875\u4FEE\u590D\u9009\u62E9\u5668",en:"Fixer Selector",zh_TW:"\u7DB2\u9801\u4FEE\u5FA9\u9078\u64C7\u5668"},reg_niutrans:{zh:"\u83B7\u53D6\u5C0F\u725B\u7FFB\u8BD1\u5BC6\u94A5\u3010\u7B80\u7EA6\u7FFB\u8BD1\u4E13\u5C5E\u65B0\u7528\u6237\u6CE8\u518C\u8D60\u9001300\u4E07\u5B57\u7B26\u3011",en:"Get NiuTrans APIKey [KISS Translator Exclusive New User Registration Free 3 Million Characters]",zh_TW:"\u53D6\u5F97\u5C0F\u725B\u7FFB\u8B6F\u91D1\u9470\u3010\u7C21\u7D04\u7FFB\u8B6F\u5C08\u5C6C\u65B0\u7528\u6236\u8A3B\u518A\u8D08\u9001 300 \u842C\u5B57\u5143\u3011"},trigger_mode:{zh:"\u89E6\u53D1\u65B9\u5F0F",en:"Trigger Mode",zh_TW:"\u89F8\u767C\u65B9\u5F0F"},trigger_click:{zh:"\u70B9\u51FB\u89E6\u53D1",en:"Click Trigger",zh_TW:"\u9EDE\u64CA\u89F8\u767C"},trigger_hover:{zh:"\u9F20\u6807\u60AC\u505C\u89E6\u53D1",en:"Hover Trigger",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u89F8\u767C"},trigger_select:{zh:"\u9009\u4E2D\u89E6\u53D1",en:"Select Trigger",zh_TW:"\u9078\u53D6\u89F8\u767C"},extend_styles:{zh:"\u9644\u52A0\u6837\u5F0F",en:"Extend Styles",zh_TW:"\u9644\u52A0\u6A23\u5F0F"},custom_option:{zh:"\u81EA\u5B9A\u4E49\u9009\u9879",en:"Custom Option",zh_TW:"\u81EA\u8A02\u9078\u9805"},translate_selected_text:{zh:"\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57",en:"Translate Selected Text",zh_TW:"\u7FFB\u8B6F\u9078\u53D6\u6587\u5B57"},toggle_style:{zh:"\u5207\u6362\u6837\u5F0F",en:"Toggle Style",zh_TW:"\u5207\u63DB\u6A23\u5F0F"},open_menu:{zh:"\u6253\u5F00\u5F39\u7A97\u83DC\u5355",en:"Open Popup Menu",zh_TW:"\u958B\u555F\u5F48\u7A97\u9078\u55AE"},open_setting:{zh:"\u6253\u5F00\u8BBE\u7F6E",en:"Open Setting",zh_TW:"\u958B\u555F\u8A2D\u5B9A"},follow_selection:{zh:"\u7FFB\u8BD1\u6846\u8DDF\u968F\u9009\u4E2D\u6587\u672C",en:"Transbox Follow Selection",zh_TW:"\u7FFB\u8B6F\u6846\u8DDF\u96A8\u9078\u53D6\u6587\u5B57"},tranbox_auto_height:{zh:"\u7FFB\u8BD1\u6846\u81EA\u9002\u5E94\u9AD8\u5EA6",en:"Translation box adaptive height",zh_TW:"\u7FFB\u8B6F\u6846\u81EA\u9069\u61C9\u9AD8\u5EA6"},translate_start_hook:{zh:"\u7FFB\u8BD1\u5F00\u59CB\u94A9\u5B50\u51FD\u6570",en:"Translate Start Hook",zh_TW:"\u7FFB\u8B6F\u958B\u59CB Hook"},translate_start_hook_helper:{zh:"\u7FFB\u8BD1\u524D\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}",en:"Run before translation, input parameters are: {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}",zh_TW:"\u7FFB\u8B6F\u524D\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}"},translate_end_hook:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u94A9\u5B50\u51FD\u6570",en:"Translate End Hook",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210 Hook"},translate_end_hook_helper:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})",en:"Run when translation is complete, input parameters are: ({hostNode, parentNode, nodes, wrapperNode, innerNode})",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})"},translate_remove_hook:{zh:"\u7FFB\u8BD1\u79FB\u9664\u94A9\u5B50\u51FD\u6570",en:"Translate Removed Hook",zh_TW:"\u7FFB\u8B6F\u79FB\u9664 Hook"},translate_remove_hook_helper:{zh:"\u7FFB\u8BD1\u79FB\u9664\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A \u7FFB\u8BD1\u8282\u70B9\u3002",en:"Run when translation is removed, the input parameters are: translation node.",zh_TW:"\u79FB\u9664\u7FFB\u8B6F\u6642\u57F7\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A\u7FFB\u8B6F\u7BC0\u9EDE\u3002"},english_dict:{zh:"\u82F1\u6587\u8BCD\u5178",en:"English Dictionary",zh_TW:"\u82F1\u6587\u5B57\u5178"},english_suggest:{zh:"\u82F1\u6587\u5EFA\u8BAE",en:"English Suggest",zh_TW:"\u82F1\u6587\u5EFA\u8B70"},api_name:{zh:"\u63A5\u53E3\u540D\u79F0",en:"API Name",zh_TW:"\u4ECB\u9762\u540D\u7A31"},is_disabled:{zh:"\u662F\u5426\u7981\u7528",en:"Is Disabled",zh_TW:"\u662F\u5426\u505C\u7528"},translate_selected:{zh:"\u662F\u5426\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"If translate selected",zh_TW:"\u662F\u5426\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},use_batch_fetch:{zh:"\u662F\u5426\u805A\u5408\u53D1\u9001\u7FFB\u8BD1\u8BF7\u6C42",en:"Whether to aggregate and send translation requests",zh_TW:"\u662F\u5426\u805A\u5408\u767C\u9001\u7FFB\u8B6F\u8ACB\u6C42"},batch_interval:{zh:"\u805A\u5408\u8BF7\u6C42\u7B49\u5F85\u65F6\u95F4(100-10000)",en:"Aggregation request waiting time (100-10000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u7B49\u5F85\u6642\u9593(100-10000)"},batch_size:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6BB5\u843D\u6570(1-100)",en:"Maximum number of paragraphs in an aggregation request (1-100)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6BB5\u843D\u6578(1-100)"},batch_length:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6587\u672C\u957F\u5EA6(1000-100000)",en:"Maximum text length for aggregation requests (1000-100000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6587\u5B57\u9577\u5EA6(1000-100000)"},use_context:{zh:"\u662F\u5426\u542F\u7528\u667A\u80FD\u4E0A\u4E0B\u6587",en:"Whether to enable AI context",zh_TW:"\u662F\u5426\u555F\u7528\u667A\u6167\u4E0A\u4E0B\u6587"},context_size:{zh:"\u4E0A\u4E0B\u6587\u4F1A\u8BDD\u6570\u91CF(1-20)",en:"Number of context sessions(1-20)",zh_TW:"\u4E0A\u4E0B\u6587\u6703\u8A71\u6578\u91CF(1-20)"},auto_scan_page:{zh:"\u81EA\u52A8\u626B\u63CF\u9875\u9762",en:"Auto scan page",zh_TW:"\u81EA\u52D5\u6383\u63CF\u9801\u9762"},has_rich_text:{zh:"\u542F\u7528\u5BCC\u6587\u672C\u7FFB\u8BD1",en:"Enable rich text translation",zh_TW:"\u555F\u7528\u5BCC\u6587\u672C\u7FFB\u8B6F"},has_shadowroot:{zh:"\u626B\u63CFShadowroot",en:"Scan Shadowroot",zh_TW:"\u6383\u63CFShadowroot"},mousehover_translate:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover Translation",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},use_mousehover_translation:{zh:"\u542F\u7528\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Enable mouseover translation",zh_TW:"\u555F\u7528\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},selected_translation_alert:{zh:"\u5212\u8BCD\u7FFB\u8BD1\u7684\u5F00\u542F\u548C\u5173\u95ED\u8BF7\u5230\u201C\u89C4\u5219\u8BBE\u7F6E\u201D\u91CC\u9762\u8BBE\u7F6E\u3002",en:"To turn selected translation on or off, please go to \"Rule Settings\".",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F\u7684\u958B\u555F\u548C\u95DC\u9589\u8ACB\u5230\u300C\u898F\u5247\u8A2D\u5B9A\u300D\u88E1\u9762\u8A2D\u5B9A\u3002"},mousehover_key_help:{zh:"\u5F53\u5FEB\u6377\u952E\u7F6E\u7A7A\u65F6\u8868\u793A\u9F20\u6807\u60AC\u505C\u76F4\u63A5\u7FFB\u8BD1",en:"When the shortcut key is empty, it means that the mouse hovers to translate directly",zh_TW:"\u7576\u5FEB\u6377\u9375\u7F6E\u7A7A\u6642\u8868\u793A\u6ED1\u9F20\u61F8\u505C\u76F4\u63A5\u7FFB\u8B6F"},autoscan_alt:{zh:"\u81EA\u52A8\u626B\u63CF",en:"Auto Scan",zh_TW:"\u81EA\u52D5\u6383\u63CF"},shadowroot_alt:{zh:"ShadowRoot",en:"ShadowRoot",zh_TW:"ShadowRoot"},richtext_alt:{zh:"\u4FDD\u7559\u5BCC\u6587\u672C",en:"Rich Text",zh_TW:"\u4FDD\u7559\u5BCC\u6587\u672C"},transonly_alt:{zh:"\u9690\u85CF\u539F\u6587",en:"Hide Original",zh_TW:"\u96B1\u85CF\u539F\u6587"},confirm_title:{zh:"\u786E\u8BA4",en:"Confirm",zh_TW:"\u78BA\u8A8D"},confirm_message:{zh:"\u786E\u5B9A\u64CD\u4F5C\u5417\uFF1F",en:"Are you sure you want to proceed?",zh_TW:"\u78BA\u5B9A\u64CD\u4F5C\u55CE\uFF1F"},confirm_action:{zh:"\u786E\u5B9A",en:"Confirm",zh_TW:"\u78BA\u5B9A"},cancel_action:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},pls_press_shortcut:{zh:"\u8BF7\u6309\u4E0B\u5FEB\u6377\u952E\u7EC4\u5408",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},load_setting_err:{zh:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},translation_style:{zh:"\u7FFB\u8BD1\u98CE\u683C",en:"Translation style",zh_TW:"\u7FFB\u8B6F\u98A8\u683C"},placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},tag_name:{zh:"\u5360\u4F4D\u6807\u7B7E\u540D",en:"Placeholder tag name",zh_TW:"\u4F54\u4F4D\u6A19\u540D"},system_prompt_helper:{zh:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9ED8\u8BA4Prompt\u7684\u60C5\u51B5\u4E0B\uFF0C\u8BF7\u52FF\u968F\u610F\u4FEE\u6539\uFF0C\u5426\u5219\u53EF\u80FD\u65E0\u6CD5\u5DE5\u4F5C\u3002",en:"Do not modify the default prompt without fully understanding it, otherwise it may not work.",zh_TW:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9810\u8A2DPrompt\u7684\u60C5\u6CC1\u4E0B\uFF0C\u8ACB\u52FF\u96A8\u610F\u4FEE\u6539\uFF0C\u5426\u5247\u53EF\u80FD\u7121\u6CD5\u904B\u4F5C\u3002"},if_pre_init:{zh:"\u662F\u5426\u9884\u521D\u59CB\u5316",en:"Whether to pre-initialize",zh_TW:"\u662F\u5426\u9810\u521D\u59CB\u5316"},export_old:{zh:"\u5BFC\u51FA\u65E7\u7248",en:"Export old version",zh_TW:"\u532F\u51FA\u820A\u7248"},favorite_words_helper:{zh:"\u5BFC\u5165\u8BCD\u6C47\u8BF7\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u4E2A\u5355\u8BCD\u3002",en:"To import vocabulary, please use a txt file with one word per line.",zh_TW:"\u532F\u5165\u8A5E\u5F59\u8ACB\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u500B\u55AE\u5B57\u3002"},btn_tip_click_away:{zh:"\u5931\u7126\u9690\u85CF/\u663E\u793A",en:"Loss of focus hide/show",zh_TW:"\u5931\u7126\u96B1\u85CF/\u986F\u793A"},btn_tip_follow_selection:{zh:"\u8DDF\u968F/\u56FA\u5B9A\u6A21\u5F0F",en:"Follow/Fixed Mode",zh_TW:"\u8DDF\u96A8/\u56FA\u5B9A\u6A21\u5F0F"},btn_tip_simple_style:{zh:"\u8FF7\u4F60/\u5E38\u89C4\u6A21\u5F0F",en:"Mini/Regular Mode",zh_TW:"\u8FF7\u4F60/\u5E38\u898F\u6A21\u5F0F"},api_placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},api_placetag:{zh:"\u5360\u4F4D\u6807\u7B7E",en:"Placeholder tags",zh_TW:"\u4F54\u4F4D\u6A19"},detected_lang:{zh:"\u8BED\u8A00\u68C0\u6D4B",en:"Language detection",zh_TW:"\u8A9E\u8A00\u5075\u6E2C"},detected_result:{zh:"\u68C0\u6D4B\u7ED3\u679C",en:"Detect result",zh_TW:"\u6AA2\u6E2C\u7D50\u679C"},subtitle_translate:{zh:"\u5B57\u5E55\u7FFB\u8BD1",en:"Subtitle translate",zh_TW:"\u5B57\u5E55\u7FFB\u8B6F"},toggle_subtitle_translate:{zh:"\u542F\u7528\u5B57\u5E55\u7FFB\u8BD1",en:"Enable subtitle translation",zh_TW:"\u555F\u7528\u5B57\u5E55\u7FFB\u8B6F"},is_bilingual_view:{zh:"\u53CC\u8BED\u663E\u793A",en:"Enable bilingual display",zh_TW:"\u96D9\u8A9E\u986F\u793A"},is_skip_ad:{zh:"\u662F\u5426\u5FEB\u8FDB\u5E7F\u544A",en:"Should I fast forward to the ad?",zh_TW:"\u662F\u5426\u5FEB\u8F49\u5EE3\u544A"},background_styles:{zh:"\u80CC\u666F\u6837\u5F0F",en:"DBackground Style",zh_TW:"\u80CC\u666F\u6A23\u5F0F"},origin_styles:{zh:"\u539F\u6587\u6837\u5F0F",en:"Original style",zh_TW:"\u539F\u6587\u6A23\u5F0F"},translation_styles:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Translation style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},ai_segmentation:{zh:"AI\u667A\u80FD\u65AD\u53E5",en:"AI intelligent punctuation",zh_TW:"AI\u667A\u6167\u65B7\u53E5"},ai_chunk_length:{zh:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)",en:"AI processing chunk length(200-20000)",zh_TW:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)"},subtitle_helper_1:{zh:"1\u3001\u76EE\u524D\u4EC5\u652F\u6301Youtube\u684C\u9762\u7F51\u7AD9\u3002",en:"1. Currently only supports Youtube desktop website.",zh_TW:"1.\u76EE\u524D\u50C5\u652F\u63F4Youtube\u684C\u9762\u7DB2\u7AD9\uFF0C\u4E14\u50C5\u652F\u63F4\u700F\u89BD\u5668\u64F4\u5145\u529F\u80FD\u3002"},subtitle_helper_2:{zh:"2\u3001\u63D2\u4EF6\u5185\u7F6E\u57FA\u7840\u7684\u5B57\u5E55\u5408\u5E76\u3001\u65AD\u53E5\u7B97\u6CD5\uFF0C\u53EF\u6EE1\u8DB3\u5927\u90E8\u5206\u60C5\u51B5\u3002",en:"2. The plug-in has built-in basic subtitle merging and sentence segmentation algorithms, which can meet most situations.",zh_TW:"2.\u63D2\u4EF6\u5167\u5EFA\u57FA\u790E\u7684\u5B57\u5E55\u5408\u4F75\u3001\u65B7\u53E5\u6F14\u7B97\u6CD5\uFF0C\u53EF\u6EFF\u8DB3\u5927\u90E8\u5206\u60C5\u6CC1\u3002"},subtitle_helper_3:{zh:"3\u3001\u4EA6\u53EF\u4EE5\u542F\u7528AI\u667A\u80FD\u65AD\u53E5\uFF0C\u4F46\u9700\u8003\u8651\u5207\u5272\u957F\u5EA6\u53CAAI\u63A5\u53E3\u80FD\u529B\uFF0C\u53EF\u80FD\u5904\u7406\u65F6\u95F4\u4F1A\u5F88\u957F\uFF0C\u751A\u81F3\u5904\u7406\u5931\u8D25\uFF0C\u5BFC\u81F4\u65E0\u6CD5\u770B\u5230\u5B57\u5E55\u3002",en:"3. You can also enable AI intelligent segmentation, but you need to consider the segmentation length and AI interface capabilities. The processing time may be very long or even fail, resulting in the inability to see subtitles.",zh_TW:"3.\u4EA6\u53EF\u555F\u7528AI\u667A\u80FD\u65B7\u53E5\uFF0C\u4F46\u9700\u8003\u616E\u5207\u5272\u9577\u5EA6\u53CAAI\u4ECB\u9762\u80FD\u529B\uFF0C\u53EF\u80FD\u8655\u7406\u6642\u9593\u6703\u5F88\u9577\uFF0C\u751A\u81F3\u8655\u7406\u5931\u6557\uFF0C\u5C0E\u81F4\u7121\u6CD5\u770B\u5230\u5B57\u5E55\u3002"},default_styles_example:{zh:"\u9ED8\u8BA4\u6837\u5F0F\u53C2\u8003\uFF1A",en:"Default styles reference:",zh_TW:"\u8A8D\u6A23\u5F0F\u53C3\u8003\uFF1A"},subtitle_load_succeed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01",en:"Bilingual subtitles loaded successfully!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01"},subtitle_load_failed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01",en:"Failed to load bilingual subtitles!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01"},try_get_subtitle_data:{zh:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019...",en:"Trying to get subtitle data, please wait...",zh_TW:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019..."},subtitle_data_processing:{zh:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D...",en:"Subtitle data processing...",zh_TW:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D..."},starting_to_process_subtitle:{zh:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E...",en:"Starting to process subtitle data...",zh_TW:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E..."},subtitle_data_is_ready:{zh:"\u5B57\u5E55\u6570\u636E\u5DF2\u51C6\u5907\u5C31\u7EEA\uFF0C\u8BF7\u70B9\u51FBKT\u6309\u94AE\u52A0\u8F7D",en:"The subtitle data is ready, please click the KT button to load it",zh_TW:"\u5B57\u5E55\u8CC7\u6599\u5DF2\u6E96\u5099\u5C31\u7DD2\uFF0C\u8ACB\u9EDE\u64CAKT\u6309\u9215\u52A0\u8F09"},log_level:{zh:"\u65E5\u5FD7\u7EA7\u522B",en:"Log Level",zh_TW:"\u65E5\u8A8C\u7B49\u7D1A"},goto_custom_api_example:{zh:"\u70B9\u51FB\u67E5\u770B\u3010\u81EA\u5B9A\u4E49\u63A5\u53E3\u793A\u4F8B\u3011",en:"Click to view [Custom Interface Example]",zh_TW:"\u9EDE\u9078\u67E5\u770B\u3010\u81EA\u8A02\u4ECB\u9762\u7BC4\u4F8B\u3011"},split_paragraph:{zh:"\u5207\u5206\u957F\u6BB5\u843D",en:"Split long paragraph",zh_TW:"\u5207\u5206\u9577\u6BB5\u843D"},split_length:{zh:"\u5207\u5206\u957F\u5EA6 (0-10000)",en:"Segmentation length(0-10000)",zh_TW:"\u5207\u5206\u9577\u5EA6(0-10000)"},highlight_words:{zh:"\u9AD8\u4EAE\u6536\u85CF\u8BCD\u6C47",en:"Highlight favorite words",zh_TW:"\u9AD8\u4EAE\u6536\u85CF\u8A5E\u5F59"},split_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},split_textlength:{zh:"\u6309\u7167\u957F\u5EA6\u5207\u5206",en:"Split by length",zh_TW:"\u4F9D\u9577\u5EA6\u5207\u5206"},split_punctuation:{zh:"\u6309\u7167\u53E5\u5B50\u5207\u5206",en:"Split by sentence",zh_TW:"\u6309\u7167\u53E5\u5B50\u5207\u5206"},highlight_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},highlight_beforetrans:{zh:"\u7FFB\u8BD1\u524D\u9AD8\u4EAE",en:"Highlight before translation",zh_TW:"\u7FFB\u8B6F\u524D\u9AD8\u4EAE"},highlight_aftertrans:{zh:"\u7FFB\u8BD1\u540E\u9AD8\u4EAE",en:"Highlight after translation",zh_TW:"\u7FFB\u8B6F\u5F8C\u9AD8\u4EAE"},pagescroll_root_margin:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u63D0\u524D\u89E6\u53D1 (0-10000px)",en:"Early triggering of scroll loading (0-10000px)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u63D0\u524D\u89F8\u767C (0-10000px)"}};const newI18n=lang=>key=>{var _I18N$key;return((_I18N$key=I18N[key])===null||_I18N$key===void 0?void 0:_I18N$key[lang])||"";}; ;// CONCATENATED MODULE: ./src/config/storage.js const KV_RULES_KEY="kiss-rules_v".concat(APP_VERSION[0],".json");const KV_WORDS_KEY="kiss-words.json";const KV_RULES_SHARE_KEY="kiss-rules-share_v".concat(APP_VERSION[0],".json");const KV_SETTING_KEY="kiss-setting_v".concat(APP_VERSION[0],".json");const KV_SALT_SYNC="KISS-Translator-SYNC";const KV_SALT_SHARE="KISS-Translator-SHARE";const STOKEY_MSAUTH="".concat(APP_NAME,"_msauth");const STOKEY_BDAUTH="".concat(APP_NAME,"_bdauth");const STOKEY_SETTING_OLD="".concat(APP_NAME,"_setting");const STOKEY_RULES_OLD="".concat(APP_NAME,"_rules");const STOKEY_SETTING="".concat(APP_NAME,"_setting_v").concat(APP_VERSION[0]);const STOKEY_RULES="".concat(APP_NAME,"_rules_v").concat(APP_VERSION[0]);const STOKEY_WORDS="".concat(APP_NAME,"_words");const STOKEY_SYNC="".concat(APP_NAME,"_sync");const STOKEY_FAB="".concat(APP_NAME,"_fab");const STOKEY_TRANBOX="".concat(APP_NAME,"_tranbox");const STOKEY_RULESCACHE_PREFIX="".concat(APP_NAME,"_rulescache_");const CACHE_NAME="".concat(APP_NAME,"_cache");const DEFAULT_CACHE_TIMEOUT=(/* unused pure expression or super */ null && (3600*24*7));// 缓存超时时间(7天) ;// CONCATENATED MODULE: ./src/config/url.js @@ -35114,7 +35118,7 @@ const CLIENT_WEB="web";const CLIENT_CHROME="chrome";const CLIENT_EDGE="edge";con ;// CONCATENATED MODULE: ./src/config/index.js ;// CONCATENATED MODULE: ./src/index.js -function App(){var _I18N$about_md;const[lang,setLang]=(0,react.useState)("zh");const{data,loading,error}=useGet("".concat(URL_RAW_PREFIX,"/").concat(I18N===null||I18N===void 0?void 0:(_I18N$about_md=I18N["about_md"])===null||_I18N$about_md===void 0?void 0:_I18N$about_md[lang]));return/*#__PURE__*/(0,jsx_runtime.jsxs)(Paper_Paper,{sx:{padding:2,margin:2},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Stack_Stack,{spacing:2,direction:"row",justifyContent:"flex-end",children:/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{variant:"text",onClick:()=>{setLang(pre=>pre==="zh"?"en":"zh");},children:lang==="zh"?"ENGLISH":"中文"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://github.com/fishjar/kiss-translator",children:"KISS Translator v".concat("2.0.4")})}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://fishjar.github.io/kiss-translator/kiss-translator.user.js",children:"Install/Update Userscript for Tampermonkey/Violentmonkey"}),/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js",children:"Install/Update Userscript for iOS Safari"}),/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://fishjar.github.io/kiss-translator/options.html",children:"Open Options Page"})]}),loading?/*#__PURE__*/(0,jsx_runtime.jsx)("center",{children:/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{})}):/*#__PURE__*/(0,jsx_runtime.jsx)(ReactMarkdown,{children:error||data})]});}const src_root=client.createRoot(document.getElementById("root"));src_root.render(/*#__PURE__*/(0,jsx_runtime.jsx)(react.StrictMode,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(App,{})})); +function App(){var _I18N$about_md;const[lang,setLang]=(0,react.useState)("zh");const{data,loading,error}=useGet("".concat(URL_RAW_PREFIX,"/").concat(I18N===null||I18N===void 0?void 0:(_I18N$about_md=I18N["about_md"])===null||_I18N$about_md===void 0?void 0:_I18N$about_md[lang]));return/*#__PURE__*/(0,jsx_runtime.jsxs)(Paper_Paper,{sx:{padding:2,margin:2},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Stack_Stack,{spacing:2,direction:"row",justifyContent:"flex-end",children:/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{variant:"text",onClick:()=>{setLang(pre=>pre==="zh"?"en":"zh");},children:lang==="zh"?"ENGLISH":"中文"})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://github.com/fishjar/kiss-translator",children:"KISS Translator v".concat("2.0.5")})}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://fishjar.github.io/kiss-translator/kiss-translator.user.js",children:"Install/Update Userscript for Tampermonkey/Violentmonkey"}),/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js",children:"Install/Update Userscript for iOS Safari"}),/*#__PURE__*/(0,jsx_runtime.jsx)(Link_Link,{href:"https://fishjar.github.io/kiss-translator/options.html",children:"Open Options Page"})]}),loading?/*#__PURE__*/(0,jsx_runtime.jsx)("center",{children:/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{})}):/*#__PURE__*/(0,jsx_runtime.jsx)(ReactMarkdown,{children:error||data})]});}const src_root=client.createRoot(document.getElementById("root"));src_root.render(/*#__PURE__*/(0,jsx_runtime.jsx)(react.StrictMode,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(App,{})})); })(); /******/ })() diff --git a/manifest.firefox.json b/manifest.firefox.json index 9e1b0a1..0cc79ab 100644 --- a/manifest.firefox.json +++ b/manifest.firefox.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "__MSG_app_name__", "description": "__MSG_app_description__", - "version": "2.0.4", + "version": "2.0.5", "default_locale": "en", "author": "Gabe", "homepage_url": "https://github.com/fishjar/kiss-translator", @@ -17,7 +17,8 @@ } ], "web_accessible_resources": [ - "injector.js" + "injector-subtitle.js", + "injector-shadowroot.js" ], "commands": { "_execute_browser_action": { diff --git a/manifest.json b/manifest.json index 863944c..e8d71e6 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "__MSG_app_name__", "description": "__MSG_app_description__", - "version": "2.0.4", + "version": "2.0.5", "default_locale": "en", "author": "Gabe", "homepage_url": "https://github.com/fishjar/kiss-translator", @@ -19,8 +19,12 @@ ], "web_accessible_resources": [ { - "resources": ["injector.js"], + "resources": ["injector-subtitle.js"], "matches": ["https://www.youtube.com/*"] + }, + { + "resources": ["injector-shadowroot.js"], + "matches": [""] } ], "commands": { diff --git a/manifest.thunderbird.json b/manifest.thunderbird.json index f128f87..77bf09c 100644 --- a/manifest.thunderbird.json +++ b/manifest.thunderbird.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "__MSG_app_name__", "description": "__MSG_app_description__", - "version": "2.0.4", + "version": "2.0.5", "default_locale": "en", "author": "Gabe", "homepage_url": "https://github.com/fishjar/kiss-translator", @@ -23,7 +23,8 @@ } ], "web_accessible_resources": [ - "injector.js" + "injector-subtitle.js", + "injector-shadowroot.js" ], "commands": { "_execute_browser_action": { diff --git a/options.js b/options.js index e5d4ec2..44f4cab 100644 --- a/options.js +++ b/options.js @@ -55520,7 +55520,7 @@ const Alert = /*#__PURE__*/react.forwardRef(function Alert(inProps, ref) { false ? 0 : void 0; /* harmony default export */ const Alert_Alert = (Alert); ;// CONCATENATED MODULE: ./src/config/app.js -const APP_NAME="KISS Translator".trim().split(/\s+/).join("-");const APP_LCNAME=APP_NAME.toLowerCase();const APP_UPNAME=APP_NAME.toUpperCase();const APP_CONSTS={fabID:"".concat(APP_LCNAME,"-fab"),boxID:"".concat(APP_LCNAME,"-box"),popupID:"".concat(APP_LCNAME,"-popup")};const APP_VERSION="2.0.4".split(".");const THEME_LIGHT="light";const THEME_DARK="dark"; +const APP_NAME="KISS Translator".trim().split(/\s+/).join("-");const APP_LCNAME=APP_NAME.toLowerCase();const APP_UPNAME=APP_NAME.toUpperCase();const APP_CONSTS={fabID:"".concat(APP_LCNAME,"-fab"),boxID:"".concat(APP_LCNAME,"-box"),popupID:"".concat(APP_LCNAME,"-popup")};const APP_VERSION="2.0.5".split(".");const THEME_LIGHT="light";const THEME_DARK="dark"; ;// CONCATENATED MODULE: ./src/config/api.js const DEFAULT_HTTP_TIMEOUT=10000;// 调用超时时间 const DEFAULT_FETCH_LIMIT=10;// 默认最大任务数量 @@ -55537,10 +55537,10 @@ const INPUT_PLACE_KEY="{{key}}";// 占位符 const INPUT_PLACE_MODEL="{{model}}";// 占位符 // export const OPT_DICT_BAIDU = "Baidu"; const OPT_DICT_BING="Bing";const OPT_DICT_YOUDAO="Youdao";const OPT_DICT_ALL=[OPT_DICT_BING,OPT_DICT_YOUDAO];const OPT_DICT_MAP=new Set(OPT_DICT_ALL);const OPT_SUG_BAIDU="Baidu";const OPT_SUG_YOUDAO="Youdao";const OPT_SUG_ALL=[OPT_SUG_BAIDU,OPT_SUG_YOUDAO];const OPT_SUG_MAP=new Set(OPT_SUG_ALL);const OPT_TRANS_BUILTINAI="BuiltinAI";const OPT_TRANS_GOOGLE="Google";const OPT_TRANS_GOOGLE_2="Google2";const OPT_TRANS_MICROSOFT="Microsoft";const OPT_TRANS_AZUREAI="AzureAI";const OPT_TRANS_DEEPL="DeepL";const OPT_TRANS_DEEPLX="DeepLX";const OPT_TRANS_DEEPLFREE="DeepLFree";const OPT_TRANS_NIUTRANS="NiuTrans";const OPT_TRANS_BAIDU="Baidu";const OPT_TRANS_TENCENT="Tencent";const OPT_TRANS_VOLCENGINE="Volcengine";const api_OPT_TRANS_OPENAI="OpenAI";const api_OPT_TRANS_GEMINI="Gemini";const api_OPT_TRANS_GEMINI_2="Gemini2";const api_OPT_TRANS_CLAUDE="Claude";const OPT_TRANS_CLOUDFLAREAI="CloudflareAI";const api_OPT_TRANS_OLLAMA="Ollama";const api_OPT_TRANS_OPENROUTER="OpenRouter";const api_OPT_TRANS_CUSTOMIZE="Custom";// 内置支持的翻译引擎 -const OPT_ALL_TYPES=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_GOOGLE_2,OPT_TRANS_MICROSOFT,OPT_TRANS_AZUREAI,// OPT_TRANS_BAIDU, +const OPT_ALL_TRANS_TYPES=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_GOOGLE_2,OPT_TRANS_MICROSOFT,OPT_TRANS_AZUREAI,// OPT_TRANS_BAIDU, OPT_TRANS_TENCENT,OPT_TRANS_VOLCENGINE,OPT_TRANS_DEEPL,OPT_TRANS_DEEPLFREE,OPT_TRANS_DEEPLX,OPT_TRANS_NIUTRANS,api_OPT_TRANS_OPENAI,api_OPT_TRANS_GEMINI,api_OPT_TRANS_GEMINI_2,api_OPT_TRANS_CLAUDE,OPT_TRANS_CLOUDFLAREAI,api_OPT_TRANS_OLLAMA,api_OPT_TRANS_OPENROUTER,api_OPT_TRANS_CUSTOMIZE];const OPT_LANGDETECTOR_ALL=[OPT_TRANS_BUILTINAI,OPT_TRANS_GOOGLE,OPT_TRANS_MICROSOFT,OPT_TRANS_BAIDU,OPT_TRANS_TENCENT];const OPT_LANGDETECTOR_MAP=new Set(OPT_LANGDETECTOR_ALL);// 翻译引擎特殊集合 const API_SPE_TYPES={// 内置翻译 -builtin:new Set(OPT_ALL_TYPES),// 机器翻译 +builtin:new Set(OPT_ALL_TRANS_TYPES),// 机器翻译 machine:new Set([OPT_TRANS_MICROSOFT,OPT_TRANS_DEEPLFREE,OPT_TRANS_BAIDU,OPT_TRANS_TENCENT,OPT_TRANS_VOLCENGINE]),// AI翻译 ai:new Set([api_OPT_TRANS_OPENAI,api_OPT_TRANS_GEMINI,api_OPT_TRANS_GEMINI_2,api_OPT_TRANS_CLAUDE,api_OPT_TRANS_OLLAMA,api_OPT_TRANS_OPENROUTER]),// 支持多key mulkeys:new Set([OPT_TRANS_AZUREAI,OPT_TRANS_DEEPL,api_OPT_TRANS_OPENAI,api_OPT_TRANS_GEMINI,api_OPT_TRANS_GEMINI_2,api_OPT_TRANS_CLAUDE,OPT_TRANS_CLOUDFLAREAI,api_OPT_TRANS_OLLAMA,api_OPT_TRANS_OPENROUTER,OPT_TRANS_NIUTRANS,api_OPT_TRANS_CUSTOMIZE]),// 支持批处理 @@ -55560,7 +55560,7 @@ context:new Set([api_OPT_TRANS_OPENAI,api_OPT_TRANS_GEMINI,api_OPT_TRANS_GEMINI_ "concise"// 简明风格 ];const BUILTIN_PLACEHOLDERS=["{ }","{{ }}","[ ]","[[ ]]"];const BUILTIN_PLACETAGS=["i","a","b","x"];const OPT_LANGS_TO=[["en","English - English"],["zh-CN","Simplified Chinese - 简体中文"],["zh-TW","Traditional Chinese - 繁體中文"],["ar","Arabic - العربية"],["bg","Bulgarian - Български"],["ca","Catalan - Català"],["hr","Croatian - Hrvatski"],["cs","Czech - Čeština"],["da","Danish - Dansk"],["nl","Dutch - Nederlands"],["fi","Finnish - Suomi"],["fr","French - Français"],["de","German - Deutsch"],["el","Greek - Ελληνικά"],["hi","Hindi - हिन्दी"],["hu","Hungarian - Magyar"],["id","Indonesian - Indonesia"],["it","Italian - Italiano"],["ja","Japanese - 日本語"],["ko","Korean - 한국어"],["ms","Malay - Melayu"],["mt","Maltese - Malti"],["nb","Norwegian - Norsk Bokmål"],["pl","Polish - Polski"],["pt","Portuguese - Português"],["ro","Romanian - Română"],["ru","Russian - Русский"],["sk","Slovak - Slovenčina"],["sl","Slovenian - Slovenščina"],["es","Spanish - Español"],["sv","Swedish - Svenska"],["ta","Tamil - தமிழ்"],["te","Telugu - తెలుగు"],["th","Thai - ไทย"],["tr","Turkish - Türkçe"],["uk","Ukrainian - Українська"],["vi","Vietnamese - Tiếng Việt"]];const OPT_LANGS_LIST=OPT_LANGS_TO.map(_ref=>{let[lang]=_ref;return lang;});const OPT_LANGS_FROM=[["auto","Auto-detect"],...OPT_LANGS_TO];const OPT_LANGS_MAP=new Map(OPT_LANGS_TO);// CODE->名称 const OPT_LANGS_SPEC_NAME=new Map(OPT_LANGS_FROM.map(_ref2=>{let[key,val]=_ref2;return[key,val.split(" - ")[0]];}));const OPT_LANGS_SPEC_DEFAULT=new Map(OPT_LANGS_FROM.map(_ref3=>{let[key]=_ref3;return[key,key];}));const OPT_LANGS_SPEC_DEFAULT_UC=new Map(OPT_LANGS_FROM.map(_ref4=>{let[key]=_ref4;return[key,key.toUpperCase()];}));const OPT_LANGS_TO_SPEC={[OPT_TRANS_BUILTINAI]:new Map([...OPT_LANGS_SPEC_DEFAULT,["zh-CN","zh"],["zh-TW","zh"]]),[OPT_TRANS_GOOGLE]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_GOOGLE_2]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_MICROSOFT]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto",""],["zh-CN","zh-Hans"],["zh-TW","zh-Hant"]]),[OPT_TRANS_AZUREAI]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto",""],["zh-CN","zh-Hans"],["zh-TW","zh-Hant"]]),[OPT_TRANS_DEEPL]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto",""],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_DEEPLFREE]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto","auto"],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_DEEPLX]:new Map([...OPT_LANGS_SPEC_DEFAULT_UC,["auto","auto"],["zh-CN","ZH"],["zh-TW","ZH"]]),[OPT_TRANS_NIUTRANS]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto","auto"],["zh-CN","zh"],["zh-TW","cht"]]),[OPT_TRANS_VOLCENGINE]:new Map([...OPT_LANGS_SPEC_DEFAULT,["auto","auto"],["zh-CN","zh"],["zh-TW","zh-Hant"]]),[OPT_TRANS_BAIDU]:new Map([...OPT_LANGS_SPEC_DEFAULT,["zh-CN","zh"],["zh-TW","cht"],["ar","ara"],["bg","bul"],["ca","cat"],["hr","hrv"],["da","dan"],["fi","fin"],["fr","fra"],["hi","mai"],["ja","jp"],["ko","kor"],["ms","may"],["mt","mlt"],["nb","nor"],["ro","rom"],["ru","ru"],["sl","slo"],["es","spa"],["sv","swe"],["ta","tam"],["te","tel"],["uk","ukr"],["vi","vie"]]),[OPT_TRANS_TENCENT]:new Map([["auto","auto"],["zh-CN","zh"],["zh-TW","zh"],["en","en"],["ar","ar"],["de","de"],["ru","ru"],["fr","fr"],["fi","fil"],["ko","ko"],["ms","ms"],["pt","pt"],["ja","ja"],["th","th"],["tr","tr"],["es","es"],["it","it"],["hi","hi"],["id","id"],["vi","vi"]]),[api_OPT_TRANS_OPENAI]:OPT_LANGS_SPEC_DEFAULT,[api_OPT_TRANS_GEMINI]:OPT_LANGS_SPEC_DEFAULT,[api_OPT_TRANS_GEMINI_2]:OPT_LANGS_SPEC_DEFAULT,[api_OPT_TRANS_CLAUDE]:OPT_LANGS_SPEC_DEFAULT,[api_OPT_TRANS_OLLAMA]:OPT_LANGS_SPEC_DEFAULT,[api_OPT_TRANS_OPENROUTER]:OPT_LANGS_SPEC_DEFAULT,[OPT_TRANS_CLOUDFLAREAI]:OPT_LANGS_SPEC_DEFAULT,[api_OPT_TRANS_CUSTOMIZE]:OPT_LANGS_SPEC_DEFAULT};const specToCode=m=>new Map(Array.from(m.entries()).map(_ref5=>{let[k,v]=_ref5;if(v===""){return["auto","auto"];}if(v==="zh"||v==="ZH"){return[v,"zh-CN"];}return[v,k];}));// 名称->CODE -const OPT_LANGS_TO_CODE={};Object.entries(OPT_LANGS_TO_SPEC).forEach(_ref6=>{let[t,m]=_ref6;OPT_LANGS_TO_CODE[t]=specToCode(m);});const defaultSystemPrompt="Act as a translation API. Output a single raw JSON object only. No extra text or fences.\n\nInput:\n{\"targetLanguage\":\"\",\"title\":\"\",\"description\":\"\",\"segments\":[{\"id\":1,\"text\":\"...\"}],\"glossary\":{\"sourceTerm\":\"targetTerm\"},\"tone\":\"\"}\n\nOutput:\n{\"translations\":[{\"id\":1,\"text\":\"...\",\"sourceLanguage\":\"\"}]}\n\nRules:\n1. Use title/description for context only; do not output them.\n2. Keep id, order, and count of segments.\n3. Preserve whitespace, HTML entities, and all HTML-like tags (e.g., , ). Translate inner text only.\n4. Highest priority: Follow 'glossary'. Use value for translation; if value is \"\", keep the key.\n5. Do not translate: content in ,
, text enclosed in backticks, or placeholders like {1}, {{1}}, [1], [[1]].\n6.  Apply the specified tone to the translation.\n7.  Detect sourceLanguage for each segment.\n8.  Return empty or unchanged inputs as is.\n\nExample:\nInput: {\"targetLanguage\":\"zh-CN\",\"segments\":[{\"id\":1,\"text\":\"A React component.\"}],\"glossary\":{\"component\":\"\u7EC4\u4EF6\",\"React\":\"\"}}\nOutput: {\"translations\":[{\"id\":1,\"text\":\"\u4E00\u4E2AReact\u7EC4\u4EF6\",\"sourceLanguage\":\"en\"}]}\n\nFail-safe: On any error, return {\"translations\":[]}.";// const defaultSubtitlePrompt = `Goal: Convert raw subtitle event JSON into a clean, sentence-based JSON array.
+const OPT_LANGS_TO_CODE={};Object.entries(OPT_LANGS_TO_SPEC).forEach(_ref6=>{let[t,m]=_ref6;OPT_LANGS_TO_CODE[t]=specToCode(m);});const defaultNobatchPrompt="You are a professional, authentic machine translation engine.";const defaultNobatchUserPrompt="Translate the following source text from ".concat(INPUT_PLACE_FROM," to ").concat(INPUT_PLACE_TO,". Output translation directly without any additional text.\n\nSource Text: ").concat(INPUT_PLACE_TEXT,"\n\nTranslated Text:");const defaultSystemPrompt="Act as a translation API. Output a single raw JSON object only. No extra text or fences.\n\nInput:\n{\"targetLanguage\":\"\",\"title\":\"\",\"description\":\"\",\"segments\":[{\"id\":1,\"text\":\"...\"}],\"glossary\":{\"sourceTerm\":\"targetTerm\"},\"tone\":\"\"}\n\nOutput:\n{\"translations\":[{\"id\":1,\"text\":\"...\",\"sourceLanguage\":\"\"}]}\n\nRules:\n1.  Use title/description for context only; do not output them.\n2.  Keep id, order, and count of segments.\n3.  Preserve whitespace, HTML entities, and all HTML-like tags (e.g., , ). Translate inner text only.\n4.  Highest priority: Follow 'glossary'. Use value for translation; if value is \"\", keep the key.\n5.  Do not translate: content in , 
, text enclosed in backticks, or placeholders like {1}, {{1}}, [1], [[1]].\n6.  Apply the specified tone to the translation.\n7.  Detect sourceLanguage for each segment.\n8.  Return empty or unchanged inputs as is.\n\nExample:\nInput: {\"targetLanguage\":\"zh-CN\",\"segments\":[{\"id\":1,\"text\":\"A React component.\"}],\"glossary\":{\"component\":\"\u7EC4\u4EF6\",\"React\":\"\"}}\nOutput: {\"translations\":[{\"id\":1,\"text\":\"\u4E00\u4E2AReact\u7EC4\u4EF6\",\"sourceLanguage\":\"en\"}]}\n\nFail-safe: On any error, return {\"translations\":[]}.";// const defaultSubtitlePrompt = `Goal: Convert raw subtitle event JSON into a clean, sentence-based JSON array.
 // Output (valid JSON array, output ONLY this array):
 // [{
 //   "text": "string",        // Full sentence with correct punctuation
@@ -55579,7 +55579,7 @@ const defaultApi={apiSlug:"",// 唯一标识
 apiName:"",// 接口名称
 apiType:"",// 接口类型
 url:"",key:"",model:"",// 模型名称
-systemPrompt:defaultSystemPrompt,subtitlePrompt:defaultSubtitlePrompt,userPrompt:"",tone:BUILTIN_STONES[0],// 翻译风格
+systemPrompt:defaultSystemPrompt,subtitlePrompt:defaultSubtitlePrompt,nobatchPrompt:defaultNobatchPrompt,nobatchUserPrompt:defaultNobatchUserPrompt,userPrompt:"",tone:BUILTIN_STONES[0],// 翻译风格
 placeholder:BUILTIN_PLACEHOLDERS[0],// 占位符
 placetag:[BUILTIN_PLACETAGS[0]],// 占位标签
 // aiTerms: false, // AI智能专业术语 (todo: 备用)
@@ -55594,10 +55594,12 @@ batchLength:DEFAULT_BATCH_LENGTH,// 每次发送最大文字数量
 useBatchFetch:false,// 是否启用聚合发送请求
 useContext:false,// 是否启用智能上下文
 contextSize:DEFAULT_CONTEXT_SIZE,// 智能上下文保留会话数
-temperature:0.0,maxTokens:20480,think:false,thinkIgnore:"qwen3,deepseek-r1",isDisabled:false,// 是否不显示,
+temperature:0.0,maxTokens:20480,// think: false, // (OpenAI 兼容接口未支持,暂时移除)
+// thinkIgnore: "qwen3,deepseek-r1", // (OpenAI 兼容接口未支持,暂时移除)
+isDisabled:false,// 是否不显示,
 region:""// Azure 专用
-};const defaultApiOpts={[OPT_TRANS_BUILTINAI]:defaultApi,[OPT_TRANS_GOOGLE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single"},[OPT_TRANS_GOOGLE_2]:{...defaultApi,url:"https://translate-pa.googleapis.com/v1/translateHtml",key:"AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520",useBatchFetch:true},[OPT_TRANS_MICROSOFT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_AZUREAI]:{...defaultApi,url:"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0",useBatchFetch:true},[OPT_TRANS_BAIDU]:{...defaultApi},[OPT_TRANS_TENCENT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_VOLCENGINE]:{...defaultApi},[OPT_TRANS_DEEPL]:{...defaultApi,url:"https://api-free.deepl.com/v2/translate",useBatchFetch:true},[OPT_TRANS_DEEPLFREE]:{...defaultApi,fetchLimit:1},[OPT_TRANS_DEEPLX]:{...defaultApi,url:"http://localhost:1188/translate",fetchLimit:1},[OPT_TRANS_NIUTRANS]:{...defaultApi,url:"https://api.niutrans.com/NiuTransServer/translation",dictNo:"",memoryNo:""},[api_OPT_TRANS_OPENAI]:{...defaultApi,url:"https://api.openai.com/v1/chat/completions",model:"gpt-4",useBatchFetch:true,fetchLimit:1},[api_OPT_TRANS_GEMINI]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1/models/".concat(INPUT_PLACE_MODEL,":generateContent?key=").concat(INPUT_PLACE_KEY),model:"gemini-2.5-flash",useBatchFetch:true},[api_OPT_TRANS_GEMINI_2]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",model:"gemini-2.0-flash",useBatchFetch:true},[api_OPT_TRANS_CLAUDE]:{...defaultApi,url:"https://api.anthropic.com/v1/messages",model:"claude-3-haiku-20240307",useBatchFetch:true},[OPT_TRANS_CLOUDFLAREAI]:{...defaultApi,url:"https://api.cloudflare.com/client/v4/accounts/{{ACCOUNT_ID}}/ai/run/@cf/meta/m2m100-1.2b"},[api_OPT_TRANS_OLLAMA]:{...defaultApi,url:"http://localhost:11434/v1/chat/completions",model:"llama3.1",useBatchFetch:true},[api_OPT_TRANS_OPENROUTER]:{...defaultApi,url:"https://openrouter.ai/api/v1/chat/completions",model:"openai/gpt-4o",useBatchFetch:true},[api_OPT_TRANS_CUSTOMIZE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN",reqHook:defaultRequestHook,resHook:defaultResponseHook}};// 内置翻译接口列表(带参数)
-const DEFAULT_API_LIST=OPT_ALL_TYPES.map(apiType=>({...defaultApiOpts[apiType],apiSlug:apiType,apiName:apiType,apiType}));const DEFAULT_API_TYPE=OPT_TRANS_MICROSOFT;const DEFAULT_API_SETTING=DEFAULT_API_LIST[DEFAULT_API_TYPE];
+};const defaultApiOpts={[OPT_TRANS_BUILTINAI]:defaultApi,[OPT_TRANS_GOOGLE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single"},[OPT_TRANS_GOOGLE_2]:{...defaultApi,url:"https://translate-pa.googleapis.com/v1/translateHtml",key:"AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520",useBatchFetch:true},[OPT_TRANS_MICROSOFT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_AZUREAI]:{...defaultApi,url:"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0",useBatchFetch:true},[OPT_TRANS_BAIDU]:{...defaultApi},[OPT_TRANS_TENCENT]:{...defaultApi,useBatchFetch:true},[OPT_TRANS_VOLCENGINE]:{...defaultApi},[OPT_TRANS_DEEPL]:{...defaultApi,url:"https://api-free.deepl.com/v2/translate",useBatchFetch:true},[OPT_TRANS_DEEPLFREE]:{...defaultApi,fetchLimit:1},[OPT_TRANS_DEEPLX]:{...defaultApi,url:"http://localhost:1188/translate"},[OPT_TRANS_NIUTRANS]:{...defaultApi,url:"https://api.niutrans.com/NiuTransServer/translation",dictNo:"",memoryNo:""},[api_OPT_TRANS_OPENAI]:{...defaultApi,url:"https://api.openai.com/v1/chat/completions",model:"gpt-4",useBatchFetch:true},[api_OPT_TRANS_GEMINI]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1/models/".concat(INPUT_PLACE_MODEL,":generateContent?key=").concat(INPUT_PLACE_KEY),model:"gemini-2.5-flash",useBatchFetch:true},[api_OPT_TRANS_GEMINI_2]:{...defaultApi,url:"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",model:"gemini-2.0-flash",useBatchFetch:true},[api_OPT_TRANS_CLAUDE]:{...defaultApi,url:"https://api.anthropic.com/v1/messages",model:"claude-3-haiku-20240307",useBatchFetch:true},[OPT_TRANS_CLOUDFLAREAI]:{...defaultApi,url:"https://api.cloudflare.com/client/v4/accounts/{{ACCOUNT_ID}}/ai/run/@cf/meta/m2m100-1.2b"},[api_OPT_TRANS_OLLAMA]:{...defaultApi,url:"http://localhost:11434/v1/chat/completions",model:"llama3.1",useBatchFetch:true},[api_OPT_TRANS_OPENROUTER]:{...defaultApi,url:"https://openrouter.ai/api/v1/chat/completions",model:"openai/gpt-4o",useBatchFetch:true},[api_OPT_TRANS_CUSTOMIZE]:{...defaultApi,url:"https://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN",reqHook:defaultRequestHook,resHook:defaultResponseHook}};// 内置翻译接口列表(带参数)
+const DEFAULT_API_LIST=OPT_ALL_TRANS_TYPES.map(apiType=>({...defaultApiOpts[apiType],apiSlug:apiType,apiName:apiType,apiType}));const DEFAULT_API_TYPE=OPT_TRANS_MICROSOFT;const DEFAULT_API_SETTING=DEFAULT_API_LIST.find(a=>a.apiType===DEFAULT_API_TYPE);
 ;// CONCATENATED MODULE: ./src/config/rules.js
 const rules_GLOBAL_KEY="*";const REMAIN_KEY="-";const SHADOW_KEY=">>>";const rules_DEFAULT_COLOR="#209CEE";// 默认高亮背景色/线条颜色
 const DEFAULT_TRANS_TAG="font";const DEFAULT_SELECT_STYLE="-webkit-line-clamp: unset; max-height: none; height: auto;";const OPT_STYLE_NONE="style_none";// 无
@@ -55633,7 +55635,7 @@ selectStyle:"",// 选择器节点样式
 parentStyle:"",// 选择器父节点样式
 grandStyle:"",// 选择器父节点样式
 injectJs:"",// 注入JS
-injectCss:"",// 注入CSS
+// injectCss: "", // 注入CSS (作废)
 transOnly:rules_GLOBAL_KEY,// 是否仅显示译文
 // transTiming: GLOBAL_KEY, // 翻译时机/鼠标悬停翻译  (暂时作废)
 transTag:rules_GLOBAL_KEY,// 译文元素标签
@@ -55673,7 +55675,7 @@ selectStyle:DEFAULT_SELECT_STYLE,// 选择器节点样式
 parentStyle:DEFAULT_SELECT_STYLE,// 选择器父节点样式
 grandStyle:DEFAULT_SELECT_STYLE,// 选择器祖节点样式
 injectJs:"",// 注入JS
-injectCss:"",// 注入CSS
+// injectCss: "", // 注入CSS(作废)
 transOnly:"false",// 是否仅显示译文
 // transTiming: OPT_TIMING_PAGESCROLL, // 翻译时机/鼠标悬停翻译 (暂时作废)
 transTag:DEFAULT_TRANS_TAG,// 译文元素标签
@@ -55698,7 +55700,7 @@ highlightWords:OPT_HIGHLIGHT_WORDS_DISABLE// 高亮词汇
 const RULES_MAP={// "www.google.com/search": {
 //   rootsSelector: `#rcnt`,
 // },
-"en.wikipedia.org":{ignoreSelector:".button, code, footer, form, mark, pre, .mwe-math-element, .mw-editsection"},"news.ycombinator.com":{selector:"p, .titleline, .commtext, .hn-item-title, .hn-comment-text, .hn-story-title",keepSelector:"code, img, svg, pre, .sitebit",ignoreSelector:"button, code, footer, form, header, mark, nav, pre, .reply",autoScan:"false"},"twitter.com, https://x.com":{selector:"[data-testid='tweetText']",keepSelector:"img, svg, a, span:has(a), div:has(a)",ignoreSelector:"button, [data-testid='videoPlayer'], [role='group']",autoScan:"false"},"www.youtube.com/live_chat":{rootsSelector:"div#items",selector:"span.yt-live-chat-text-message-renderer",autoScan:"false"},"www.youtube.com":{rootsSelector:"ytd-page-manager",ignoreSelector:"aside, button, footer, form, header, pre, mark, nav, #player, #container, .caption-window, .ytp-settings-menu"}};const rules_BUILTIN_RULES=Object.entries(RULES_MAP).map(_ref=>{let[pattern,rule]=_ref;return{// ...DEFAULT_RULE,
+"en.wikipedia.org":{ignoreSelector:".button, code, footer, form, mark, pre, .mwe-math-element, .mw-editsection"},"news.ycombinator.com":{selector:"p, .titleline, .commtext, .hn-item-title, .hn-comment-text, .hn-story-title",keepSelector:"code, img, svg, pre, .sitebit",ignoreSelector:"button, code, footer, form, header, mark, nav, pre, .reply",autoScan:"false"},"twitter.com, https://x.com":{selector:"[data-testid='tweetText']",keepSelector:"img, svg, a, span:has(a), div:has(a)",ignoreSelector:"button, [data-testid='videoPlayer'], [role='group']",autoScan:"false"},"www.youtube.com/live_chat":{rootsSelector:"div#items",selector:"span.yt-live-chat-text-message-renderer",autoScan:"false"},"www.youtube.com":{rootsSelector:"ytd-page-manager",ignoreSelector:"aside, button, footer, form, header, pre, mark, nav, #player, #container, .caption-window, .ytp-settings-menu"},"web.telegram.org":{autoScan:"false",selector:".text-content, .embedded-text-wrapper",rootsSelector:".Transition"}};const rules_BUILTIN_RULES=Object.entries(RULES_MAP).map(_ref=>{let[pattern,rule]=_ref;return{// ...DEFAULT_RULE,
 ...rule,pattern};});
 ;// CONCATENATED MODULE: ./src/libs/log.js
 // 定义日志级别
@@ -55775,6 +55777,7 @@ apiSlug:OPT_TRANS_MICROSOFT,segSlug:"-",// AI智能断句
 chunkLength:1000,// AI处理切割长度
 // fromLang: "en",
 toLang:"zh-CN",isBilingual:true,// 是否双语显示
+skipAd:false,// 是否快进广告
 windowStyle:SUBTITLE_WINDOW_STYLE,// 背景样式
 originStyle:SUBTITLE_ORIGIN_STYLE,// 原文样式
 translationStyle:SUBTITLE_TRANSLATION_STYLE// 译文样式
@@ -55815,10 +55818,11 @@ mouseHoverSetting:DEFAULT_MOUSE_HOVER_SETTING,// 鼠标悬停翻译
 preInit:true,// 是否预加载脚本
 transAllnow:false,// 是否立即全部翻译
 subtitleSetting:DEFAULT_SUBTITLE_SETTING,// 字幕设置
-logLevel:LogLevel.INFO.value// 日志级别
+logLevel:LogLevel.INFO.value,// 日志级别
+rootMargin:500// 提前触发翻译
 };
 ;// CONCATENATED MODULE: ./src/config/i18n.js
-const UI_LANGS=[["en","English"],["zh","简体中文"],["zh_TW","繁體中文"]];const customApiLangs="[\"en\", \"English - English\"],\n[\"zh-CN\", \"Simplified Chinese - \u7B80\u4F53\u4E2D\u6587\"],\n[\"zh-TW\", \"Traditional Chinese - \u7E41\u9AD4\u4E2D\u6587\"],\n[\"ar\", \"Arabic - \u0627\u0644\u0639\u0631\u0628\u064A\u0629\"],\n[\"bg\", \"Bulgarian - \u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438\"],\n[\"ca\", \"Catalan - Catal\xE0\"],\n[\"hr\", \"Croatian - Hrvatski\"],\n[\"cs\", \"Czech - \u010Ce\u0161tina\"],\n[\"da\", \"Danish - Dansk\"],\n[\"nl\", \"Dutch - Nederlands\"],\n[\"fi\", \"Finnish - Suomi\"],\n[\"fr\", \"French - Fran\xE7ais\"],\n[\"de\", \"German - Deutsch\"],\n[\"el\", \"Greek - \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\"],\n[\"hi\", \"Hindi - \u0939\u093F\u0928\u094D\u0926\u0940\"],\n[\"hu\", \"Hungarian - Magyar\"],\n[\"id\", \"Indonesian - Indonesia\"],\n[\"it\", \"Italian - Italiano\"],\n[\"ja\", \"Japanese - \u65E5\u672C\u8A9E\"],\n[\"ko\", \"Korean - \uD55C\uAD6D\uC5B4\"],\n[\"ms\", \"Malay - Melayu\"],\n[\"mt\", \"Maltese - Malti\"],\n[\"nb\", \"Norwegian - Norsk Bokm\xE5l\"],\n[\"pl\", \"Polish - Polski\"],\n[\"pt\", \"Portuguese - Portugu\xEAs\"],\n[\"ro\", \"Romanian - Rom\xE2n\u0103\"],\n[\"ru\", \"Russian - \u0420\u0443\u0441\u0441\u043A\u0438\u0439\"],\n[\"sk\", \"Slovak - Sloven\u010Dina\"],\n[\"sl\", \"Slovenian - Sloven\u0161\u010Dina\"],\n[\"es\", \"Spanish - Espa\xF1ol\"],\n[\"sv\", \"Swedish - Svenska\"],\n[\"ta\", \"Tamil - \u0BA4\u0BAE\u0BBF\u0BB4\u0BCD\"],\n[\"te\", \"Telugu - \u0C24\u0C46\u0C32\u0C41\u0C17\u0C41\"],\n[\"th\", \"Thai - \u0E44\u0E17\u0E22\"],\n[\"tr\", \"Turkish - T\xFCrk\xE7e\"],\n[\"uk\", \"Ukrainian - \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430\"],\n[\"vi\", \"Vietnamese - Ti\u1EBFng Vi\u1EC7t\"],\n";const customApiHelpZH="// \u8BF7\u6C42\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n  \"url\": \"{{url}}\",\n  \"method\": \"POST\",\n  \"headers\": {\n    \"Content-type\": \"application/json\",\n    \"Authorization\": \"Bearer {{key}}\"\n  },\n  \"body\": {\n    \"text\": \"{{text}}\", // \u5F85\u7FFB\u8BD1\u6587\u5B57\n    \"from\": \"{{from}}\", // \u6587\u5B57\u7684\u8BED\u8A00\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09\n    \"to\": \"{{to}}\",     // \u76EE\u6807\u8BED\u8A00\n  },\n}\n\n\n// \u8FD4\u56DE\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n  text: \"\", // \u7FFB\u8BD1\u540E\u7684\u6587\u5B57\n  from: \"\", // \u8BC6\u522B\u7684\u6E90\u8BED\u8A00\n  to: \"\",   // \u76EE\u6807\u8BED\u8A00\uFF08\u53EF\u9009\uFF09\n}\n\n\n// Hook \u8303\u4F8B\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n  headers: {\n      \"Content-type\": \"application/json\",\n  },\n  method: \"GET\",\n  body: null,\n}]\n\n// Response Hook\n// \u5176\u4E2D\u8FD4\u56DE\u6570\u7EC4\u7B2C\u4E00\u4E2A\u503C\u8868\u793A\u8BD1\u6587\u5B57\u7B26\u4E32\uFF0C\u7B2C\u4E8C\u4E2A\u503C\u4E3A\u5E03\u5C14\u503C\uFF0C\u8868\u793A\u539F\u6587\u8BED\u8A00\u4E0E\u76EE\u6807\u8BED\u8A00\u662F\u5426\u76F8\u540C\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// \u652F\u6301\u7684\u8BED\u8A00\u4EE3\u7801\u5982\u4E0B\n".concat(customApiLangs,"\n");const customApiHelpEN="// Default request\n{\n  \"url\": \"{{url}}\",\n  \"method\": \"POST\",\n  \"headers\": {\n    \"Content-type\": \"application/json\",\n    \"Authorization\": \"Bearer {{key}}\"\n  },\n  \"body\": {\n    \"text\": \"{{text}}\", // Text to be translated\n    \"from\": \"{{from}}\", // The language of the text (may be empty)\n    \"to\": \"{{to}}\",     // Target language\n  },\n}\n\n\n// Default response\n{\n  text: \"\", // translated text\n  from: \"\", // Recognized source language\n  to: \"\",   // Target language (optional)\n}\n\n\n/// Hook Example\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n  headers: {\n      \"Content-type\": \"application/json\",\n  },\n  method: \"GET\",\n  body: null,\n}]\n\n// Response Hook\n// In the returned array, the first value is the translated string, while the second value is a boolean\n// that indicates whether the source language is the same as the target language.\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// The supported language codes are as follows\n".concat(customApiLangs,"\n");const requestHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'url', 'body', 'headers', 'method'\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n  return { url, body, headers, userMsg, method };\n}";const requestHookHelperEN="1. The first parameter contains the following fields: 'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2. The return value must be an object containing the following fields: 'url', 'body', 'headers', 'method'\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n  return { url, body, headers, userMsg, method };\n}";const responsetHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'res', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'translations'\n  \uFF08'translations' \u5E94\u4E3A\u4E00\u4E2A\u4E8C\u7EF4\u6570\u7EC4\uFF1A[[\u8BD1\u6587, \u539F\u6587\u8BED\u8A00]]\uFF09\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync ({ res, ...args }) => {\n  const translations = [[\"\u4F60\u597D\", \"en\"]];\n  const modelMsg = {}; // \u7528\u4E8EAI\u4E0A\u4E0B\u6587\n  return { translations, modelMsg };\n}";const responsetHookHelperEN="1. The first parameter contains the following fields: 'res', ...\n2. The return value must be an object containing the following fields: 'translations'\n  ('translations' should be a two-dimensional array: [[translation, source language]]).\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync ({ res, ...args }) => {\n  const translations = [[\"\u4F60\u597D\", \"en\"]];\n  const modelMsg = {}; // For AI context\n  return { translations, modelMsg };\n}";const I18N={app_name:{zh:"\u7B80\u7EA6\u7FFB\u8BD1",en:"KISS Translator",zh_TW:"\u7C21\u7D04\u7FFB\u8B6F"},translate:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},custom_api_help:{zh:customApiHelpZH,en:customApiHelpEN,zh_TW:customApiHelpZH},request_hook_helper:{zh:requestHookHelperZH,en:requestHookHelperEN,zh_TW:requestHookHelperZH},response_hook_helper:{zh:responsetHookHelperZH,en:responsetHookHelperEN,zh_TW:responsetHookHelperZH},translate_alt:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},basic_setting:{zh:"\u57FA\u672C\u8BBE\u7F6E",en:"Basic Setting",zh_TW:"\u57FA\u672C\u8A2D\u5B9A"},rules_setting:{zh:"\u89C4\u5219\u8BBE\u7F6E",en:"Rules Setting",zh_TW:"\u898F\u5247\u8A2D\u5B9A"},apis_setting:{zh:"\u63A5\u53E3\u8BBE\u7F6E",en:"Apis Setting",zh_TW:"API\u8A2D\u5B9A"},sync_setting:{zh:"\u540C\u6B65\u8BBE\u7F6E",en:"Sync Setting",zh_TW:"\u540C\u6B65\u8A2D\u5B9A"},patch_setting:{zh:"\u8865\u4E01\u8BBE\u7F6E",en:"Patch Setting",zh_TW:"\u4FEE\u88DC\u8A2D\u5B9A"},patch_setting_help:{zh:"\u9488\u5BF9\u4E00\u4E9B\u7279\u6B8A\u7F51\u7AD9\u7684\u4FEE\u6B63\u811A\u672C\uFF0C\u4EE5\u4FBF\u7FFB\u8BD1\u8F6F\u4EF6\u5F97\u5230\u66F4\u597D\u7684\u5C55\u793A\u6548\u679C\u3002",en:"Corrected scripts for some special websites so that the translation software can get better display results.",zh_TW:"\u91DD\u5C0D\u67D0\u4E9B\u7279\u6B8A\u7DB2\u7AD9\u7684\u4FEE\u6B63\u8173\u672C\uFF0C\u8B93\u7FFB\u8B6F\u8EDF\u9AD4\u6709\u66F4\u597D\u7684\u986F\u793A\u6548\u679C\u3002"},inject_webfix:{zh:"\u6CE8\u5165\u4FEE\u590D\u8865\u4E01",en:"Inject Webfix",zh_TW:"\u6CE8\u5165\u4FEE\u6B63\u88DC\u4E01"},about:{zh:"\u5173\u4E8E",en:"About",zh_TW:"\u95DC\u65BC"},about_md:{zh:"README.md",en:"README.en.md",zh_TW:"README.md"},about_md_local:{zh:"\u8BF7 [\u70B9\u51FB\u8FD9\u91CC](".concat("https://github.com/fishjar/kiss-translator",") \u67E5\u770B\u8BE6\u60C5\u3002"),en:"Please [click here](".concat("https://github.com/fishjar/kiss-translator",") for details."),zh_TW:"\u8ACB\u3010\u9EDE\u9019\u88E1\u3011\u67E5\u770B\u8A73\u7D30\u5167\u5BB9\u3002"},ui_lang:{zh:"\u754C\u9762\u8BED\u8A00",en:"Interface Language",zh_TW:"\u4ECB\u9762\u8A9E\u8A00"},fetch_limit:{zh:"\u6700\u5927\u5E76\u53D1\u8BF7\u6C42\u6570\u91CF (1-100)",en:"Maximum Number Of Concurrent Requests (1-100)",zh_TW:"\u6700\u5927\u540C\u6642\u8ACB\u6C42\u6578\u91CF (1-100)"},if_think:{zh:"\u542F\u7528\u6216\u7981\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B",en:"Enable or disable the model\u2019s thinking behavior ",zh_TW:"\u555F\u7528\u6216\u505C\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B"},think:{zh:"\u542F\u7528\u6DF1\u5EA6\u601D\u8003",en:"enable thinking",zh_TW:"\u555F\u7528\u6DF1\u5EA6\u601D\u8003"},nothink:{zh:"\u7981\u7528\u6DF1\u5EA6\u601D\u8003",en:"disable thinking",zh_TW:"\u505C\u7528\u6DF1\u5EA6\u601D\u8003"},think_ignore:{zh:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684\u8F93\u51FA,\u9017\u53F7(,)\u5206\u5272,\u5F53\u6A21\u578B\u652F\u6301\u601D\u8003\u4F46ollama\u4E0D\u652F\u6301\u65F6\u9700\u8981\u586B\u5199\u672C\u53C2\u6570",en:"Ignore the  block for the following models, comma (,) separated",zh_TW:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684  \u8F38\u51FA\uFF0C\u4EE5\u9017\u865F (,) \u5206\u9694\uFF1B\u7576\u6A21\u578B\u652F\u63F4\u601D\u8003\u4F46 ollama \u4E0D\u652F\u63F4\u6642\u9700\u8981\u586B\u5BEB\u6B64\u53C3\u6578"},fetch_interval:{zh:"\u6BCF\u6B21\u8BF7\u6C42\u95F4\u9694\u65F6\u95F4 (0-5000ms)",en:"Time Between Requests (0-5000ms)",zh_TW:"\u6BCF\u6B21\u8ACB\u6C42\u9593\u9694\u6642\u9593 (0-5000ms)"},translate_interval:{zh:"\u7FFB\u8BD1\u95F4\u9694\u65F6\u95F4 (10-2000ms)",en:"Translation Interval (10-2000ms)",zh_TW:"\u7FFB\u8B6F\u9593\u9694\u6642\u9593 (10-2000ms)"},http_timeout:{zh:"\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4 (5000-60000ms)",en:"Request Timeout Time (5000-60000ms)",zh_TW:"\u8ACB\u6C42\u903E\u6642\u6642\u9593 (5000-60000ms)"},custom_header:{zh:"\u81EA\u5B9A\u4E49Header\u53C2\u6570",en:"Custom Header Params"},custom_header_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\"",en:"Use JSON format, for example \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\""},custom_body:{zh:"\u81EA\u5B9A\u4E49Body\u53C2\u6570",en:"Custom Body Params"},custom_body_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"top_p\": 0.7",en:"Use JSON format, for example \"top_p\": 0.7"},min_translate_length:{zh:"\u6700\u5C0F\u7FFB\u8BD1\u5B57\u7B26\u6570 (1-100)",en:"Minimum number Of Translated Characters (1-100)",zh_TW:"\u6700\u5C0F\u7FFB\u8B6F\u5B57\u5143\u6578 (1-100)"},max_translate_length:{zh:"\u6700\u5927\u7FFB\u8BD1\u5B57\u7B26\u6570 (100-100000)",en:"Maximum number Of Translated Characters (100-100000)",zh_TW:"\u6700\u5927\u7FFB\u8B6F\u5B57\u5143\u6578 (100-100000)"},num_of_newline_characters:{zh:"\u6362\u884C\u5B57\u7B26\u6570 (1-1000)",en:"Number of Newline Characters (1-1000)",zh_TW:"\u63DB\u884C\u5B57\u5143\u6578 (1-1000)"},translate_service:{zh:"\u7FFB\u8BD1\u670D\u52A1",en:"Translate Service",zh_TW:"\u7FFB\u8B6F\u670D\u52D9"},translate_service_multiple:{zh:"\u7FFB\u8BD1\u670D\u52A1 (\u652F\u6301\u591A\u9009)",en:"Translation service (multiple supported)",zh_TW:"\u7FFB\u8B6F\u670D\u52D9 (\u652F\u63F4\u591A\u9078)"},translate_timing:{zh:"\u7FFB\u8BD1\u65F6\u673A",en:"Translate Timing",zh_TW:"\u7FFB\u8B6F\u6642\u6A5F"},mk_pagescroll:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u7FFB\u8BD1\uFF08\u63A8\u8350\uFF09",en:"Rolling Loading (Suggested)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u7FFB\u8B6F\uFF08\u5EFA\u8B70\uFF09"},mk_pageopen:{zh:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8BD1",en:"Translate all now",zh_TW:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8B6F"},mk_mouseover:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},mk_ctrlKey:{zh:"Control + \u9F20\u6807\u60AC\u505C",en:"Control + Mouseover",zh_TW:"Control + \u6ED1\u9F20\u61F8\u505C"},mk_shiftKey:{zh:"Shift + \u9F20\u6807\u60AC\u505C",en:"Shift + Mouseover",zh_TW:"Shift + \u6ED1\u9F20\u61F8\u505C"},mk_altKey:{zh:"Alt + \u9F20\u6807\u60AC\u505C",en:"Alt + Mouseover",zh_TW:"Alt + \u6ED1\u9F20\u61F8\u505C"},from_lang:{zh:"\u539F\u6587\u8BED\u8A00",en:"Source Language",zh_TW:"\u539F\u6587\u8A9E\u8A00"},to_lang:{zh:"\u76EE\u6807\u8BED\u8A00",en:"Target Language",zh_TW:"\u76EE\u6A19\u8A9E\u8A00"},to_lang2:{zh:"\u7B2C\u4E8C\u76EE\u6807\u8BED\u8A00",en:"Target Language 2",zh_TW:"\u7B2C\u4E8C\u76EE\u6A19\u8A9E\u8A00"},to_lang2_helper:{zh:"\u8BBE\u5B9A\u540E\uFF0C\u4E0E\u76EE\u6807\u8BED\u8A00\u4EA7\u751F\u4E92\u8BD1\u6548\u679C\uFF0C\u4F46\u4F9D\u8D56\u8FDC\u7A0B\u8BED\u8A00\u8BC6\u522B\u3002",en:"After setting, it will produce mutual translation effect with the target language, but it relies on remote language recognition.",zh_TW:"\u8A2D\u5B9A\u5F8C\u6703\u8207\u76EE\u6A19\u8A9E\u8A00\u4E92\u8B6F\uFF0C\u4F46\u4F9D\u8CF4\u9060\u7AEF\u8A9E\u8A00\u8B58\u5225\u3002"},text_style:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},text_style_alt:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},bg_color:{zh:"\u6837\u5F0F\u989C\u8272",en:"Style Color",zh_TW:"\u6A23\u5F0F\u984F\u8272"},remain_unchanged:{zh:"\u4FDD\u7559\u4E0D\u53D8",en:"Remain Unchanged",zh_TW:"\u4FDD\u7559\u4E0D\u8B8A"},google_api:{zh:"\u8C37\u6B4C\u7FFB\u8BD1\u63A5\u53E3",en:"Google Translate API",zh_TW:"Google \u7FFB\u8B6F\u4ECB\u9762"},default_selector:{zh:"\u9ED8\u8BA4\u9009\u62E9\u5668",en:"Default selector",zh_TW:"\u9810\u8A2D\u9078\u64C7\u5668"},selector_rules:{zh:"\u9009\u62E9\u5668\u89C4\u5219",en:"Selector Rules",zh_TW:"\u9078\u64C7\u5668\u898F\u5247"},save:{zh:"\u4FDD\u5B58",en:"Save",zh_TW:"\u5132\u5B58"},edit:{zh:"\u7F16\u8F91",en:"Edit",zh_TW:"\u7DE8\u8F2F"},cancel:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},delete:{zh:"\u5220\u9664",en:"Delete",zh_TW:"\u522A\u9664"},reset:{zh:"\u91CD\u7F6E",en:"Reset",zh_TW:"\u91CD\u8A2D"},add:{zh:"\u6DFB\u52A0",en:"Add",zh_TW:"\u65B0\u589E"},inject_rules:{zh:"\u6CE8\u5165\u8BA2\u9605\u89C4\u5219",en:"Inject Subscribe Rules",zh_TW:"\u6CE8\u5165\u8A02\u95B1\u898F\u5247"},personal_rules:{zh:"\u4E2A\u4EBA\u89C4\u5219",en:"Rules",zh_TW:"\u500B\u4EBA\u898F\u5247"},subscribe_rules:{zh:"\u8BA2\u9605\u89C4\u5219",en:"Subscribe",zh_TW:"\u8A02\u95B1\u898F\u5247"},overwrite_subscribe_rules:{zh:"\u8986\u5199\u8BA2\u9605\u89C4\u5219",en:"Overwrite",zh_TW:"\u8986\u5BEB\u8A02\u95B1\u898F\u5247"},subscribe_url:{zh:"\u8BA2\u9605\u5730\u5740",en:"Subscribe URL",zh_TW:"\u8A02\u95B1\u7DB2\u5740"},rules_warn_1:{zh:"1\u3001\u89C4\u5219\u751F\u6548\u7684\u4F18\u5148\u7EA7\u4F9D\u6B21\u4E3A\uFF1A\u4E2A\u4EBA\u89C4\u5219 > \u8BA2\u9605\u89C4\u5219 > \u5168\u5C40\u89C4\u5219\u3002\"\u5168\u5C40\u89C4\u5219\"\u76F8\u5F53\u4E8E\u515C\u5E95\u89C4\u5219\u3002",en:"1. The priority of rules is: personal rules > subscription rules > global rules. \"Global rules\" are like a fallback rule.",zh_TW:"1.\u898F\u5247\u751F\u6548\u7684\u512A\u5148\u9806\u5E8F\u4F9D\u5E8F\u70BA\uFF1A\u500B\u4EBA\u898F\u5247 > \u8A02\u95B1\u898F\u5247 > \u5168\u57DF\u898F\u5247\u3002 \"\u5168\u57DF\u898F\u5247\"\u76F8\u7576\u65BC\u515C\u5E95\u898F\u5247\u3002"},rules_warn_2:{zh:"2\u3001\u201C\u8BA2\u9605\u89C4\u5219\u201D\u9009\u62E9\u6CE8\u5165\u540E\u624D\u4F1A\u751F\u6548\u3002",en:"2. \"Subscription rules\" will take effect only after injection is selected.",zh_TW:"2\u3001\u300C\u8A02\u95B1\u898F\u5247\u300D\u9078\u64C7\u6CE8\u5165\u5F8C\u624D\u6703\u751F\u6548\u3002"},rules_warn_3:{zh:"3\u3001\u5173\u4E8E\u89C4\u5219\u586B\u5199\uFF1A\u8F93\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u6846\u9009\u201C*\u201D\u8868\u793A\u91C7\u7528\u5168\u5C40\u89C4\u5219\u3002",en:"3. Regarding filling in the rules: Leave the input box blank or select \"*\" in the drop-down box to use global rule.",zh_TW:"3. \u898F\u5247\u586B\u5BEB\u8AAA\u660E\uFF1A\u8F38\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u9078\u64C7\u300C*\u300D\u8868\u793A\u4F7F\u7528\u5168\u57DF\u898F\u5247\u3002"},sync_warn:{zh:"\u6D89\u53CA\u9690\u79C1\u6570\u636E\u7684\u540C\u6B65\u8BF7\u8C28\u614E\u9009\u62E9\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52A1\uFF0C\u5EFA\u8BAE\u81EA\u884C\u642D\u5EFA kiss-worker \u6216 WebDAV \u670D\u52A1\u3002",en:"When synchronizing data that involves privacy, please be cautious about choosing third-party sync services. It is recommended to set up your own sync service using kiss-worker or WebDAV.",zh_TW:"\u540C\u6B65\u6D89\u53CA\u96B1\u79C1\u8CC7\u6599\u6642\uFF0C\u8ACB\u8B39\u614E\u9078\u64C7\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52D9\uFF1B\u5EFA\u8B70\u81EA\u5EFA kiss-worker \u6216 WebDAV \u670D\u52D9\u3002"},sync_warn_2:{zh:"\u5982\u679C\u670D\u52A1\u5668\u5B58\u5728\u5176\u4ED6\u5BA2\u6237\u7AEF\u540C\u6B65\u7684\u6570\u636E\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u5C06\u76F4\u63A5\u8986\u76D6\u672C\u5730\u914D\u7F6E\uFF0C\u540E\u9762\u5219\u6839\u636E\u4FEE\u6539\u65F6\u95F4\uFF0C\u65B0\u7684\u8986\u76D6\u65E7\u7684\u3002",en:"If the server has data synchronized by other clients, the first synchronization will directly overwrite the local configuration, and later, according to the modification time, the new one will overwrite the old one.",zh_TW:"\u82E5\u4F3A\u670D\u5668\u4E0A\u5B58\u5728\u5176\u4ED6\u7528\u6236\u7AEF\u540C\u6B65\u7684\u8CC7\u6599\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u6703\u76F4\u63A5\u8986\u84CB\u672C\u6A5F\u8A2D\u5B9A\uFF1B\u4E4B\u5F8C\u5247\u4F9D\u4FEE\u6539\u6642\u9593\uFF0C\u7531\u65B0\u7684\u8986\u84CB\u820A\u7684\u3002"},about_sync_api:{zh:"\u81EA\u5EFAkiss-wroker\u6570\u636E\u540C\u6B65\u670D\u52A1",en:"Self-hosting a Kiss-worker data sync service",zh_TW:"\u81EA\u5EFA kiss-wroker \u8CC7\u6599\u540C\u6B65\u670D\u52D9"},about_api:{zh:"1\u3001\u5176\u4E2D BuiltinAI \u4E3A\u6D4F\u89C8\u5668\u5185\u7F6EAI\u7FFB\u8BD1\uFF0C\u76EE\u524D\u4EC5 Chrome 138 \u53CA\u4EE5\u4E0A\u7248\u672C\u5F97\u5230\u652F\u6301\u3002",en:"1. BuiltinAI is the browser's built-in AI translation, which is currently only supported by Chrome 138 and above.",zh_TW:"1.\u5176\u4E2D BuiltinAI \u70BA\u700F\u89BD\u5668\u5167\u5EFAAI\u7FFB\u8B6F\uFF0C\u76EE\u524D\u50C5 Chrome 138 \u4EE5\u4E0A\u7248\u672C\u652F\u63F4\u3002"},about_api_2:{zh:"2\u3001\u5927\u90E8\u5206AI\u63A5\u53E3\u90FD\u4E0EOpenAI\u517C\u5BB9\uFF0C\u56E0\u6B64\u9009\u62E9\u6DFB\u52A0OpenAI\u7C7B\u578B\u5373\u53EF\u3002",en:"2. Most AI interfaces are compatible with OpenAI, so just choose to add the OpenAI type.",zh_TW:"2.\u5927\u90E8\u5206AI\u4ECB\u9762\u90FD\u8207OpenAI\u76F8\u5BB9\uFF0C\u56E0\u6B64\u9078\u64C7\u65B0\u589EOpenAI\u985E\u578B\u5373\u53EF\u3002"},about_api_3:{zh:"3\u3001\u6682\u672A\u5217\u51FA\u7684\u63A5\u53E3\uFF0C\u7406\u8BBA\u4E0A\u90FD\u53EF\u4EE5\u901A\u8FC7\u81EA\u5B9A\u4E49\u63A5\u53E3 (Custom) \u7684\u5F62\u5F0F\u652F\u6301\u3002",en:"3. Interfaces that have not yet been launched can theoretically be supported through custom interfaces.",zh_TW:"3\u3001\u66AB\u672A\u5217\u51FA\u7684\u4ECB\u9762\uFF0C\u7406\u8AD6\u4E0A\u90FD\u53EF\u900F\u904E\u81EA\u8A02\u4ECB\u9762  (Custom)  \u7684\u5F62\u5F0F\u652F\u63F4\u3002"},about_api_proxy:{zh:"\u67E5\u770B\u81EA\u5EFA\u4E00\u4E2A\u7FFB\u8BD1\u63A5\u53E3\u4EE3\u7406",en:"Check out the self-built translation interface proxy",zh_TW:"\u67E5\u770B\u5982\u4F55\u81EA\u5EFA\u7FFB\u8B6F\u4ECB\u9762 Proxy"},setting_helper:{zh:"\u65B0\u65E7\u914D\u7F6E\u5E76\u4E0D\u517C\u5BB9\uFF0C\u5BFC\u51FA\u7684\u65E7\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u5BFC\u5165\u3002",en:"The old and new configurations are not compatible. Do not import the exported old configuration again.",zh_TW:"\u65B0\u820A\u914D\u7F6E\u4E26\u4E0D\u76F8\u5BB9\uFF0C\u532F\u51FA\u7684\u820A\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u532F\u5165\u3002"},style_none:{zh:"\u65E0",en:"None",zh_TW:"\u7121"},under_line:{zh:"\u4E0B\u5212\u76F4\u7EBF",en:"Underline",zh_TW:"\u4E0B\u5283\u76F4\u7DDA"},dot_line:{zh:"\u4E0B\u5212\u70B9\u72B6\u7EBF",en:"Dotted Underline",zh_TW:"\u4E0B\u5283\u9EDE\u72C0\u7DDA"},dash_line:{zh:"\u4E0B\u5212\u865A\u7EBF",en:"Dashed Underline",zh_TW:"\u4E0B\u5283\u865B\u7DDA"},dash_box:{zh:"\u865A\u7EBF\u6846",en:"Dashed Box"},wavy_line:{zh:"\u4E0B\u5212\u6CE2\u6D6A\u7EBF",en:"Wavy Underline",zh_TW:"\u4E0B\u5283\u6CE2\u6D6A\u7DDA"},fuzzy:{zh:"\u6A21\u7CCA",en:"Fuzzy",zh_TW:"\u6A21\u7CCA"},highlight:{zh:"\u9AD8\u4EAE",en:"Highlight",zh_TW:"\u53CD\u767D\u6A19\u793A"},blockquote:{zh:"\u5F15\u7528",en:"Blockquote",zh_TW:"\u5F15\u7528"},gradient:{zh:"\u6E10\u53D8",en:"Gradient",zh_TW:"\u6F38\u8B8A"},blink:{zh:"\u95EA\u73B0",en:"Blink",zh_TW:"\u9583\u73FE"},glow:{zh:"\u53D1\u5149",en:"Glow",zh_TW:"\u767C\u5149"},diy_style:{zh:"\u81EA\u5B9A\u4E49\u6837\u5F0F",en:"Custom Style",zh_TW:"\u81EA\u8A02\u6A23\u5F0F"},diy_style_helper:{zh:"\u9075\u5FAA\u201CCSS\u201D\u7684\u8BED\u6CD5",en:"Follow the syntax of \"CSS\"",zh_TW:"\u9075\u5FAA CSS \u8A9E\u6CD5"},setting:{zh:"\u8BBE\u7F6E",en:"Setting",zh_TW:"\u8A2D\u5B9A"},pattern:{zh:"\u5339\u914D\u7F51\u5740",en:"URL pattern",zh_TW:"\u5339\u914D\u7DB2\u5740"},pattern_helper:{zh:"1\u3001\u652F\u6301\u661F\u53F7(*)\u901A\u914D\u7B26\u30022\u3001\u591A\u4E2AURL\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\u3002",en:"1. Supports the asterisk (*) wildcard character. 2. Separate multiple URLs with newlines or English commas \",\".",zh_TW:"1. \u652F\u63F4\u661F\u865F (*) \u842C\u7528\u5B57\u5143\u30022. \u591A\u500B URL \u8ACB\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u3002"},selector_helper:{zh:"1\u3001\u9700\u8981\u7FFB\u8BD1\u7684\u76EE\u6807\u5143\u7D20\u30022\u3001\u5F00\u542F\u81EA\u52A8\u626B\u63CF\u9875\u9762\u540E\uFF0C\u672C\u8BBE\u7F6E\u65E0\u6548\u30023\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The target element to be translated. 2. This setting is invalid when automatic page scanning is enabled. 3. Follow the CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u7FFB\u8B6F\u7684\u76EE\u6A19\u5143\u7D20\u3002 2.\u958B\u555F\u81EA\u52D5\u6383\u63CF\u9801\u9762\u5F8C\uFF0C\u672C\u8A2D\u5B9A\u7121\u6548\u3002 3.\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},translate_switch:{zh:"\u5F00\u542F\u7FFB\u8BD1",en:"Translate Switch",zh_TW:"\u958B\u555F\u7FFB\u8B6F"},default_enabled:{zh:"\u9ED8\u8BA4\u5F00\u542F",en:"Enabled",zh_TW:"\u9810\u8A2D\u958B\u555F"},default_disabled:{zh:"\u9ED8\u8BA4\u5173\u95ED",en:"Disabled",zh_TW:"\u9810\u8A2D\u95DC\u9589"},selector:{zh:"\u9009\u62E9\u5668",en:"Selector",zh_TW:"\u9078\u64C7\u5668"},target_selector:{zh:"\u76EE\u6807\u5143\u7D20\u9009\u62E9\u5668",en:"Target element selector",zh_TW:"\u76EE\u6A19\u5143\u7D20\u9078\u64C7\u5668"},keep_selector:{zh:"\u4FDD\u7559\u5143\u7D20\u9009\u62E9\u5668",en:"Keep unchanged selector",zh_TW:"\u4FDD\u7559\u5143\u7D20\u9078\u64C7\u5668"},keep_selector_helper:{zh:"1\u3001\u76EE\u6807\u5143\u7D20\u4E0B\u9762\u9700\u8981\u539F\u6837\u4FDD\u7559\u7684\u5B50\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The child nodes under the target element need to remain intact. 2. Follow the CSS selector syntax.",zh_TW:"1. \u76EE\u6A19\u5143\u7D20\u4E0B\u7684\u5B50\u7BC0\u9EDE\u9700\u8981\u4FDD\u6301\u539F\u6A23\u3002 2. \u9075\u5FAA CSS \u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},root_selector:{zh:"\u6839\u8282\u70B9\u9009\u62E9\u5668",en:"Root node selector",zh_TW:"\u6839\u7BC0\u9EDE\u9078\u64C7\u5668"},root_selector_helper:{zh:"1\u3001\u7528\u4E8E\u7F29\u5C0F\u9875\u9762\u7FFB\u8BD1\u8303\u56F4\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Used to narrow the translation scope of the page. 2. Follow the CSS selector syntax.",zh_TW:"1.\u7528\u65BC\u7E2E\u5C0F\u9801\u9762\u7FFB\u8B6F\u7BC4\u570D\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},ignore_selector:{zh:"\u4E0D\u7FFB\u8BD1\u8282\u70B9\u9009\u62E9\u5668",en:"Ignore node selectors",zh_TW:"\u4E0D\u7FFB\u8B6F\u7BC0\u9EDE\u9078\u64C7\u5668"},ignore_selector_helper:{zh:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Nodes to be ignored. 2. Follow CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u7BC0\u9EDE\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},terms:{zh:"\u4E13\u4E1A\u672F\u8BED",en:"Terms",zh_TW:"\u5C08\u696D\u8853\u8A9E"},terms_helper:{zh:"1\u3001\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u65E0\u9700\u659C\u6746\uFF0C\u4E0D\u652F\u6301\u4FEE\u9970\u7B26\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. Supports regular expression matching, no slash required, and no modifiers are supported. 2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1. \u652F\u63F4\u6B63\u5247\u8868\u9054\u5F0F\u6BD4\u5C0D\uFF0C\u7121\u9700\u659C\u7DDA\uFF0C\u4E14\u4E0D\u652F\u63F4\u4FEE\u98FE\u7B26\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},ai_terms:{zh:"AI\u4E13\u4E1A\u672F\u8BED",en:"AI Terms",zh_TW:"AI\u5C08\u696D\u8853\u8A9E"},ai_terms_helper:{zh:"1\u3001AI\u667A\u80FD\u66FF\u6362\uFF0C\u4E0D\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. AI intelligent replacement does not support regular expressions.2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1.AI\u667A\u80FD\u66FF\u63DB\uFF0C\u4E0D\u652F\u63F4\u6B63\u898F\u8868\u793A\u5F0F\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},selector_style:{zh:"\u9009\u62E9\u5668\u8282\u70B9\u6837\u5F0F",en:"Selector Style",zh_TW:"\u9078\u64C7\u5668\u7BC0\u9EDE\u6A23\u5F0F"},terms_style:{zh:"\u4E13\u4E1A\u672F\u8BED\u6837\u5F0F",en:"Terms Style",zh_TW:"\u5C08\u696D\u8853\u8A9E\u6A23\u5F0F"},highlight_style:{zh:"\u8BCD\u6C47\u9AD8\u4EAE\u6837\u5F0F",en:"Fav Words highlight style",zh_TW:"\u8A5E\u5F59\u9AD8\u4EAE\u6A23\u5F0F"},selector_style_helper:{zh:"\u5F00\u542F\u7FFB\u8BD1\u65F6\u6CE8\u5165\u3002",en:"It is injected when translation is turned on.",zh_TW:"\u5728\u958B\u555F\u7FFB\u8B6F\u6642\u6CE8\u5165\u3002"},selector_parent_style:{zh:"\u9009\u62E9\u5668\u7236\u8282\u70B9\u6837\u5F0F",en:"Parent Selector Style",zh_TW:"\u9078\u64C7\u5668\u7236\u7BC0\u9EDE\u6A23\u5F0F"},selector_grand_style:{zh:"\u9009\u62E9\u5668\u7956\u8282\u70B9\u6837\u5F0F",en:"Grand Selector Style",zh_TW:"\u9078\u64C7\u5668\u7956\u7BC0\u9EDE\u6A23\u5F0F"},inject_js:{zh:"\u6CE8\u5165JS",en:"Inject JS",zh_TW:"\u6CE8\u5165 JS"},inject_js_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},inject_css:{zh:"\u6CE8\u5165CSS",en:"Inject CSS",zh_TW:"\u6CE8\u5165 CSS"},inject_css_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},fixer_function:{zh:"\u4FEE\u590D\u51FD\u6570",en:"Fixer Function",zh_TW:"\u4FEE\u5FA9\u51FD\u5F0F"},fixer_function_helper:{zh:"1\u3001br\u662F\u5C06
\u6362\u884C\u66FF\u6362\u6210

\u30022\u3001bn\u662F\u5C06\\n\u6362\u884C\u66FF\u6362\u6210

\u30023\u3001brToDiv\u548CbnToDiv\u662F\u66FF\u6362\u6210

\u3002",en:"1. br replaces
line breaks with

. 2. bn replaces \\n newline with

. 3. brToDiv and bnToDiv are replaced with

.",zh_TW:"1. br \u6703\u5C07
\u63DB\u884C\u66FF\u63DB\u70BA

\u30022. bn \u6703\u5C07 \\n \u63DB\u884C\u66FF\u63DB\u70BA

\u30023. brToDiv \u8207 bnToDiv \u6703\u66FF\u63DB\u70BA

\u3002"},import:{zh:"\u5BFC\u5165",en:"Import",zh_TW:"\u532F\u5165"},export:{zh:"\u5BFC\u51FA",en:"Export",zh_TW:"\u532F\u51FA"},export_translation:{zh:"\u5BFC\u51FA\u91CA\u4E49",en:"Export Translation",zh_TW:"\u532F\u51FA\u91CB\u7FA9"},error_cant_be_blank:{zh:"\u4E0D\u80FD\u4E3A\u7A7A",en:"Can not be blank",zh_TW:"\u4E0D\u53EF\u70BA\u7A7A"},error_duplicate_values:{zh:"\u5B58\u5728\u91CD\u590D\u7684\u503C",en:"There are duplicate values",zh_TW:"\u5B58\u5728\u91CD\u8907\u7684\u503C"},error_wrong_file_type:{zh:"\u9519\u8BEF\u7684\u6587\u4EF6\u7C7B\u578B",en:"Wrong file type",zh_TW:"\u6A94\u6848\u985E\u578B\u932F\u8AA4"},error_fetch_url:{zh:"\u8BF7\u68C0\u67E5url\u5730\u5740\u662F\u5426\u6B63\u786E\u6216\u7A0D\u540E\u518D\u8BD5\u3002",en:"Please check if the url address is correct or try again later.",zh_TW:"\u8ACB\u6AA2\u67E5 URL \u662F\u5426\u6B63\u78BA\u6216\u7A0D\u5F8C\u518D\u8A66\u3002"},deepl_api:{zh:"DeepL \u63A5\u53E3",en:"DeepL API",zh_TW:"DeepL \u4ECB\u9762"},deepl_key:{zh:"DeepL \u5BC6\u94A5",en:"DeepL Key",zh_TW:"DeepL \u91D1\u9470"},openai_api:{zh:"OpenAI \u63A5\u53E3",en:"OpenAI API",zh_TW:"OpenAI \u4ECB\u9762"},openai_key:{zh:"OpenAI \u5BC6\u94A5",en:"OpenAI Key",zh_TW:"OpenAI \u91D1\u9470"},openai_model:{zh:"OpenAI \u6A21\u578B",en:"OpenAI Model",zh_TW:"OpenAI \u6A21\u578B"},openai_prompt:{zh:"OpenAI \u63D0\u793A\u8BCD",en:"OpenAI Prompt",zh_TW:"OpenAI \u63D0\u793A\u8A5E"},if_clear_cache:{zh:"\u662F\u5426\u6E05\u9664\u7F13\u5B58\uFF08\u9ED8\u8BA4\u7F13\u5B587\u5929\uFF09",en:"Whether clear cache (Default cache is 7 days)",zh_TW:"\u662F\u5426\u6E05\u9664\u5FEB\u53D6\uFF08\u9810\u8A2D\u5FEB\u53D67\u5929\uFF09"},clear_cache_never:{zh:"\u4E0D\u6E05\u9664\u7F13\u5B58",en:"Never clear cache",zh_TW:"\u4E0D\u6E05\u9664\u5FEB\u53D6"},clear_cache_restart:{zh:"\u91CD\u542F\u6D4F\u89C8\u5668\u65F6\u6E05\u9664\u7F13\u5B58",en:"Clear cache when restarting browser",zh_TW:"\u91CD\u65B0\u555F\u52D5\u700F\u89BD\u5668\u6642\u6E05\u9664\u5FEB\u53D6"},data_sync_type:{zh:"\u6570\u636E\u540C\u6B65\u65B9\u5F0F",en:"Data Sync Type",zh_TW:"\u8CC7\u6599\u540C\u6B65\u65B9\u5F0F"},data_sync_url:{zh:"\u6570\u636E\u540C\u6B65\u63A5\u53E3",en:"Data Sync API",zh_TW:"\u8CC7\u6599\u540C\u6B65\u4ECB\u9762"},data_sync_user:{zh:"\u6570\u636E\u540C\u6B65\u8D26\u6237",en:"Data Sync User",zh_TW:"\u8CC7\u6599\u540C\u6B65\u5E33\u865F"},data_sync_key:{zh:"\u6570\u636E\u540C\u6B65\u5BC6\u94A5",en:"Data Sync Key",zh_TW:"\u8CC7\u6599\u540C\u6B65\u91D1\u9470"},sync_now:{zh:"\u7ACB\u5373\u540C\u6B65",en:"Sync Now",zh_TW:"\u7ACB\u5373\u540C\u6B65"},sync_success:{zh:"\u540C\u6B65\u6210\u529F\uFF01",en:"Sync Success",zh_TW:"\u540C\u6B65\u6210\u529F\uFF01"},sync_failed:{zh:"\u540C\u6B65\u5931\u8D25\uFF01",en:"Sync Error",zh_TW:"\u540C\u6B65\u5931\u6557\uFF01"},error_got_some_wrong:{zh:"\u62B1\u6B49\uFF0C\u51FA\u9519\u4E86\uFF01",en:"Sorry, something went wrong!",zh_TW:"\u62B1\u6B49\uFF0C\u767C\u751F\u932F\u8AA4\uFF01"},error_sync_setting:{zh:"\u60A8\u7684\u540C\u6B65\u7C7B\u578B\u5FC5\u987B\u4E3A\u201CKISS-Worker\u201D\uFF0C\u4E14\u9700\u586B\u5199\u5B8C\u6574",en:"Your sync type must be \"KISS-Worker\" and must be filled in completely",zh_TW:"\u60A8\u7684\u540C\u6B65\u578B\u614B\u5FC5\u9808\u70BA\u300CKISS-Worker\u300D\uFF0C\u4E14\u9700\u586B\u5BEB\u5B8C\u6574\u3002"},click_test:{zh:"\u70B9\u51FB\u6D4B\u8BD5",en:"Click Test",zh_TW:"\u9EDE\u64CA\u6E2C\u8A66"},test_success:{zh:"\u6D4B\u8BD5\u6210\u529F",en:"Test success",zh_TW:"\u6E2C\u8A66\u6210\u529F"},test_failed:{zh:"\u6D4B\u8BD5\u5931\u8D25",en:"Test failed",zh_TW:"\u6E2C\u8A66\u5931\u6557"},clear_all_cache_now:{zh:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u7F13\u5B58",en:"Clear all cache now",zh_TW:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u5FEB\u53D6"},clear_cache:{zh:"\u6E05\u9664\u7F13\u5B58",en:"Clear Cache",zh_TW:"\u6E05\u9664\u5FEB\u53D6"},clear_success:{zh:"\u6E05\u9664\u6210\u529F",en:"Clear success",zh_TW:"\u6E05\u9664\u6210\u529F"},clear_failed:{zh:"\u6E05\u9664\u5931\u8D25",en:"Clear failed",zh_TW:"\u6E05\u9664\u5931\u6557"},share:{zh:"\u5206\u4EAB",en:"Share",zh_TW:"\u5206\u4EAB"},clear_all:{zh:"\u6E05\u7A7A",en:"Clear All",zh_TW:"\u6E05\u7A7A"},help:{zh:"\u6C42\u52A9",en:"Help",zh_TW:"\u6C42\u52A9"},restore_default:{zh:"\u6062\u590D\u9ED8\u8BA4",en:"Restore Default",zh_TW:"\u6062\u5FA9\u9810\u8A2D"},shortcuts_setting:{zh:"\u5FEB\u6377\u952E\u8BBE\u7F6E",en:"Shortcuts Setting",zh_TW:"\u5FEB\u6377\u9375\u8A2D\u5B9A"},toggle_translate_shortcut:{zh:"\"\u5F00\u542F\u7FFB\u8BD1\"\u5FEB\u6377\u952E",en:"\"Toggle Translate\" Shortcut",zh_TW:"\u300C\u958B\u555F\u7FFB\u8B6F\u300D\u5FEB\u6377\u9375"},toggle_style_shortcut:{zh:"\"\u5207\u6362\u6837\u5F0F\"\u5FEB\u6377\u952E",en:"\"Toggle Style\" Shortcut",zh_TW:"\u300C\u5207\u63DB\u6A23\u5F0F\u300D\u5FEB\u6377\u9375"},toggle_popup_shortcut:{zh:"\"\u6253\u5F00\u5F39\u7A97\"\u5FEB\u6377\u952E",en:"\"Open Popup\" Shortcut",zh_TW:"\u300C\u958B\u555F\u5F48\u7A97\u300D\u5FEB\u6377\u9375"},open_setting_shortcut:{zh:"\"\u6253\u5F00\u8BBE\u7F6E\"\u5FEB\u6377\u952E",en:"\"Open Setting\" Shortcut",zh_TW:"\u300C\u958B\u555F\u8A2D\u5B9A\u300D\u5FEB\u6377\u9375"},hide_fab_button:{zh:"\u9690\u85CF\u60AC\u6D6E\u6309\u94AE",en:"Hide Fab Button",zh_TW:"\u96B1\u85CF\u61F8\u6D6E\u6309\u9215"},fab_click_action:{zh:"\u5355\u51FB\u60AC\u6D6E\u6309\u94AE\u52A8\u4F5C",en:"Single Click Fab Action",zh_TW:"\u55AE\u64CA\u61F8\u6D6E\u6309\u94AE\u52D5\u4F5C"},fab_click_menu:{zh:"\u5F39\u51FA\u83DC\u5355",en:"Popup Menu",zh_TW:"\u5F48\u51FA\u9078\u55AE"},fab_click_translate:{zh:"\u76F4\u63A5\u7FFB\u8BD1",en:"Translate",zh_TW:"\u76F4\u63A5\u7FFB\u8B6F"},hide_tran_button:{zh:"\u9690\u85CF\u7FFB\u8BD1\u6309\u94AE",en:"Hide Translate Button",zh_TW:"\u96B1\u85CF\u7FFB\u8B6F\u6309\u9215"},hide_click_away:{zh:"\u70B9\u51FB\u5916\u90E8\u5173\u95ED\u5F39\u7A97",en:"Click outside to close the pop-up window",zh_TW:"\u9EDE\u64CA\u5916\u90E8\u95DC\u9589\u5F48\u7A97"},use_simple_style:{zh:"\u4F7F\u7528\u7B80\u6D01\u754C\u9762",en:"Use a simple interface",zh_TW:"\u4F7F\u7528\u7C21\u6F54\u4ECB\u9762"},show:{zh:"\u663E\u793A",en:"Show",zh_TW:"\u986F\u793A"},hide:{zh:"\u9690\u85CF",en:"Hide",zh_TW:"\u96B1\u85CF"},save_rule:{zh:"\u4FDD\u5B58\u89C4\u5219",en:"Save Rule",zh_TW:"\u5132\u5B58\u898F\u5247"},global_rule:{zh:"\u5168\u5C40\u89C4\u5219",en:"Global Rule",zh_TW:"\u5168\u57DF\u898F\u5247"},input_translate:{zh:"\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u8F38\u5165\u6846\u7FFB\u8B6F"},use_input_box_translation:{zh:"\u542F\u7528\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u555F\u7528\u8F38\u5165\u6846\u7FFB\u8B6F"},input_selector:{zh:"\u8F93\u5165\u6846\u9009\u62E9\u5668",en:"Input Selector",zh_TW:"\u8F38\u5165\u6846\u9078\u64C7\u5668"},input_selector_helper:{zh:"\u7528\u4E8E\u8F93\u5165\u6846\u7FFB\u8BD1\u3002",en:"Used for input box translation.",zh_TW:"\u7528\u65BC\u8F38\u5165\u6846\u7FFB\u8B6F\u3002"},trigger_trans_shortcut:{zh:"\u89E6\u53D1\u7FFB\u8BD1\u5FEB\u6377\u952E",en:"Trigger Translation Shortcut Keys",zh_TW:"\u89F8\u767C\u7FFB\u8B6F\u5FEB\u6377\u9375"},trigger_trans_shortcut_help:{zh:"\u9ED8\u8BA4\u4E3A\u5355\u51FB\u201CAltLeft+KeyI\u201D",en:"Default is \"AltLeft+KeyI\"",zh_TW:"\u9810\u8A2D\u70BA\u6309\u4E0B\u300CAltLeft+KeyI\u300D"},shortcut_press_count:{zh:"\u5FEB\u6377\u952E\u8FDE\u51FB\u6B21\u6570",en:"Shortcut Press Number",zh_TW:"\u5FEB\u6377\u9375\u9023\u64CA\u6B21\u6578"},combo_timeout:{zh:"\u8FDE\u51FB\u8D85\u65F6\u65F6\u95F4 (10-1000ms)",en:"Combo Timeout (10-1000ms)",zh_TW:"\u9023\u64CA\u903E\u6642 (10-1000ms)"},input_trans_start_sign:{zh:"\u7FFB\u8BD1\u8D77\u59CB\u6807\u8BC6",en:"Translation Start Sign",zh_TW:"\u7FFB\u8B6F\u8D77\u59CB\u6A19\u8A18"},input_trans_start_sign_help:{zh:"\u6807\u8BC6\u540E\u9762\u53EF\u4EE5\u52A0\u76EE\u6807\u8BED\u8A00\u4EE3\u7801\uFF0C\u5982\uFF1A \u201C/en \u4F60\u597D\u201D\u3001\u201C/zh hello\u201D",en:"The target language code can be added after the sign, such as: \"/en \u4F60\u597D\", \"/zh hello\"",zh_TW:"\u6A19\u8A18\u5F8C\u53EF\u52A0\u4E0A\u76EE\u6A19\u8A9E\u8A00\u4EE3\u78BC\uFF0C\u4F8B\u5982\uFF1A\u300C/en \u4F60\u597D\u300D\u3001\u300C/zh hello\u300D"},detect_lang_remote:{zh:"\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B",en:"Remote language detection",zh_TW:"\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C"},detect_lang_remote_help:{zh:"\u542F\u7528\u540E\u68C0\u6D4B\u51C6\u786E\u5EA6\u589E\u52A0\uFF0C\u4F46\u4F1A\u964D\u4F4E\u7FFB\u8BD1\u901F\u5EA6\uFF0C\u8BF7\u914C\u60C5\u5F00\u542F",en:"After enabling, the detection accuracy will increase, but it will reduce the translation speed. Please enable it as appropriate.",zh_TW:"\u555F\u7528\u5F8C\u53EF\u63D0\u5347\u5075\u6E2C\u6E96\u78BA\u5EA6\uFF0C\u4F46\u6703\u964D\u4F4E\u7FFB\u8B6F\u901F\u5EA6\uFF0C\u8ACB\u8996\u9700\u8981\u958B\u555F\u3002"},detect_lang_service:{zh:"\u8BED\u8A00\u68C0\u6D4B\u670D\u52A1",en:"Language detect service",zh_TW:"\u8A9E\u8A00\u6AA2\u6E2C\u670D\u52D9"},disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},enable:{zh:"\u542F\u7528",en:"Enable",zh_TW:"\u555F\u7528"},selection_translate:{zh:"\u5212\u8BCD\u7FFB\u8BD1",en:"Selection Translate",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F"},toggle_selection_translate:{zh:"\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"Use Selection Translate",zh_TW:"\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},trigger_tranbox_shortcut:{zh:"\u663E\u793A\u7FFB\u8BD1\u6846/\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57\u5FEB\u6377\u952E",en:"Open Translate Popup/Translate Selected Shortcut",zh_TW:"\u986F\u793A\u7FFB\u8B6F\u6846\uFF0F\u7FFB\u8B6F\u9078\u4E2D\u6587\u5B57\u5FEB\u6377\u9375"},tranbtn_offset_x:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Button Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbtn_offset_y:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Button Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},tranbox_offset_x:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Box Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbox_offset_y:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Box Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},translated_text:{zh:"\u8BD1\u6587",en:"Translated Text",zh_TW:"\u8B6F\u6587"},original_text:{zh:"\u539F\u6587",en:"Original Text",zh_TW:"\u539F\u6587"},favorite_words:{zh:"\u6536\u85CF\u8BCD\u6C47",en:"Favorite Words",zh_TW:"\u6536\u85CF\u8A5E\u5F59"},touch_setting:{zh:"\u89E6\u5C4F\u8BBE\u7F6E",en:"Touch Setting",zh_TW:"\u89F8\u63A7\u8A2D\u5B9A"},touch_translate_shortcut:{zh:"\u89E6\u5C4F\u7FFB\u8BD1\u5FEB\u6377\u65B9\u5F0F (\u652F\u6301\u591A\u9009)",en:"Touch Translate Shortcut (multiple supported)",zh_TW:"\u89F8\u63A7\u7FFB\u8B6F\u6377\u5F91 (\u652F\u63F4\u591A\u9078)"},touch_tap_0:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},touch_tap_2:{zh:"\u53CC\u6307\u8F7B\u89E6",en:"Two finger tap",zh_TW:"\u96D9\u6307\u8F15\u89F8"},touch_tap_3:{zh:"\u4E09\u6307\u8F7B\u89E6",en:"Three finger tap",zh_TW:"\u4E09\u6307\u8F15\u89F8"},touch_tap_4:{zh:"\u56DB\u6307\u8F7B\u89E6",en:"Four finger tap",zh_TW:"\u56DB\u6307\u8F15\u89F8"},touch_tap_5:{zh:"\u5355\u6307\u53CC\u51FB",en:"Double-click",zh_TW:"\u55AE\u6307\u96D9\u64CA"},touch_tap_6:{zh:"\u5355\u6307\u4E09\u51FB",en:"Triple-click",zh_TW:"\u55AE\u6307\u4E09\u64CA"},touch_tap_7:{zh:"\u53CC\u6307\u53CC\u51FB",en:"Two-finger double-click",zh_TW:"\u96D9\u6307\u96D9\u64CA"},translate_blacklist:{zh:"\u7981\u7528\u7FFB\u8BD1\u540D\u5355",en:"Translate Blacklist",zh_TW:"\u505C\u7528\u7FFB\u8B6F\u540D\u55AE"},disabled_orilist:{zh:"\u7981\u7528Origin\u540D\u5355",en:"Disabled Origin List",zh_TW:"\u505C\u7528 Origin \u540D\u55AE"},disabled_csplist:{zh:"\u7981\u7528CSP\u540D\u5355",en:"Disabled CSP List",zh_TW:"\u505C\u7528 CSP \u540D\u55AE"},disabled_csplist_helper:{zh:"3\u3001\u901A\u8FC7\u8C03\u6574CSP\u7B56\u7565\uFF0C\u4F7F\u5F97\u67D0\u4E9B\u9875\u9762\u80FD\u591F\u6CE8\u5165JS/CSS/Media\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6653\u76F8\u5173\u98CE\u9669\u3002",en:"3. By adjusting the CSP policy, some pages can inject JS/CSS/Media. Please use it with caution unless you are aware of the related risks.",zh_TW:"3. \u900F\u904E\u8ABF\u6574 CSP \u653F\u7B56\uFF0C\u4F7F\u90E8\u5206\u9801\u9762\u53EF\u6CE8\u5165 JS/CSS/Media\u3002\u8ACB\u8B39\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6089\u76F8\u95DC\u98A8\u96AA\u3002"},skip_langs:{zh:"\u4E0D\u7FFB\u8BD1\u7684\u8BED\u8A00",en:"Disable Languages",zh_TW:"\u4E0D\u7FFB\u8B6F\u7684\u8A9E\u8A00"},skip_langs_helper:{zh:"\u6B64\u529F\u80FD\u4F9D\u8D56\u51C6\u786E\u7684\u8BED\u8A00\u68C0\u6D4B\uFF0C\u5EFA\u8BAE\u542F\u7528\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B\u3002",en:"This feature relies on accurate language detection. It is recommended to enable remote language detection.",zh_TW:"\u6B64\u529F\u80FD\u4EF0\u8CF4\u6E96\u78BA\u7684\u8A9E\u8A00\u5075\u6E2C\uFF0C\u5EFA\u8B70\u555F\u7528\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C\u3002"},context_menus:{zh:"\u53F3\u952E\u83DC\u5355",en:"Context Menus",zh_TW:"\u53F3\u9375\u9078\u55AE"},hide_context_menus:{zh:"\u9690\u85CF\u53F3\u952E\u83DC\u5355",en:"Hide Context Menus",zh_TW:"\u96B1\u85CF\u53F3\u9375\u9078\u55AE"},simple_context_menus:{zh:"\u7B80\u5355\u53F3\u952E\u83DC\u5355",en:"Simple_context_menus Context Menus",zh_TW:"\u7C21\u6613\u53F3\u9375\u9078\u55AE"},secondary_context_menus:{zh:"\u4E8C\u7EA7\u53F3\u952E\u83DC\u5355",en:"Secondary Context Menus",zh_TW:"\u6B21\u7D1A\u53F3\u9375\u9078\u55AE"},mulkeys_help:{zh:"\u652F\u6301\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\uFF0C\u8F6E\u8BE2\u8C03\u7528\u3002",en:"Supports polling calls separated by newlines or English commas \",\".",zh_TW:"\u652F\u63F4\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\uFF0C\u8F2A\u8A62\u547C\u53EB\u3002"},translation_element_tag:{zh:"\u8BD1\u6587\u5143\u7D20\u6807\u7B7E",en:"Translation Element Tag",zh_TW:"\u8B6F\u6587\u5143\u7D20\u6A19\u7C64"},show_only_translations:{zh:"\u4EC5\u663E\u793A\u8BD1\u6587",en:"Show Only Translations",zh_TW:"\u50C5\u986F\u793A\u8B6F\u6587"},show_only_translations_help:{zh:"\u975E\u5B8C\u7F8E\u5B9E\u73B0\uFF0C\u67D0\u4E9B\u9875\u9762\u53EF\u80FD\u6709\u6837\u5F0F\u7B49\u95EE\u9898\u3002",en:"It is not a perfect implementation and some pages may have style issues.",zh_TW:"\u6B64\u70BA\u975E\u5B8C\u7F8E\u5BE6\u4F5C\uFF0C\u90E8\u5206\u9801\u9762\u53EF\u80FD\u51FA\u73FE\u6A23\u5F0F\u7B49\u554F\u984C\u3002"},translate_page_title:{zh:"\u662F\u5426\u7FFB\u8BD1\u9875\u9762\u6807\u9898",en:"Translate Page Title",zh_TW:"\u662F\u5426\u7FFB\u8B6F\u9801\u9762\u6A19\u984C"},more:{zh:"\u66F4\u591A",en:"More",zh_TW:"\u66F4\u591A"},less:{zh:"\u66F4\u5C11",en:"Less",zh_TW:"\u66F4\u5C11"},fixer_selector:{zh:"\u7F51\u9875\u4FEE\u590D\u9009\u62E9\u5668",en:"Fixer Selector",zh_TW:"\u7DB2\u9801\u4FEE\u5FA9\u9078\u64C7\u5668"},reg_niutrans:{zh:"\u83B7\u53D6\u5C0F\u725B\u7FFB\u8BD1\u5BC6\u94A5\u3010\u7B80\u7EA6\u7FFB\u8BD1\u4E13\u5C5E\u65B0\u7528\u6237\u6CE8\u518C\u8D60\u9001300\u4E07\u5B57\u7B26\u3011",en:"Get NiuTrans APIKey [KISS Translator Exclusive New User Registration Free 3 Million Characters]",zh_TW:"\u53D6\u5F97\u5C0F\u725B\u7FFB\u8B6F\u91D1\u9470\u3010\u7C21\u7D04\u7FFB\u8B6F\u5C08\u5C6C\u65B0\u7528\u6236\u8A3B\u518A\u8D08\u9001 300 \u842C\u5B57\u5143\u3011"},trigger_mode:{zh:"\u89E6\u53D1\u65B9\u5F0F",en:"Trigger Mode",zh_TW:"\u89F8\u767C\u65B9\u5F0F"},trigger_click:{zh:"\u70B9\u51FB\u89E6\u53D1",en:"Click Trigger",zh_TW:"\u9EDE\u64CA\u89F8\u767C"},trigger_hover:{zh:"\u9F20\u6807\u60AC\u505C\u89E6\u53D1",en:"Hover Trigger",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u89F8\u767C"},trigger_select:{zh:"\u9009\u4E2D\u89E6\u53D1",en:"Select Trigger",zh_TW:"\u9078\u53D6\u89F8\u767C"},extend_styles:{zh:"\u9644\u52A0\u6837\u5F0F",en:"Extend Styles",zh_TW:"\u9644\u52A0\u6A23\u5F0F"},custom_option:{zh:"\u81EA\u5B9A\u4E49\u9009\u9879",en:"Custom Option",zh_TW:"\u81EA\u8A02\u9078\u9805"},translate_selected_text:{zh:"\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57",en:"Translate Selected Text",zh_TW:"\u7FFB\u8B6F\u9078\u53D6\u6587\u5B57"},toggle_style:{zh:"\u5207\u6362\u6837\u5F0F",en:"Toggle Style",zh_TW:"\u5207\u63DB\u6A23\u5F0F"},open_menu:{zh:"\u6253\u5F00\u5F39\u7A97\u83DC\u5355",en:"Open Popup Menu",zh_TW:"\u958B\u555F\u5F48\u7A97\u9078\u55AE"},open_setting:{zh:"\u6253\u5F00\u8BBE\u7F6E",en:"Open Setting",zh_TW:"\u958B\u555F\u8A2D\u5B9A"},follow_selection:{zh:"\u7FFB\u8BD1\u6846\u8DDF\u968F\u9009\u4E2D\u6587\u672C",en:"Transbox Follow Selection",zh_TW:"\u7FFB\u8B6F\u6846\u8DDF\u96A8\u9078\u53D6\u6587\u5B57"},tranbox_auto_height:{zh:"\u7FFB\u8BD1\u6846\u81EA\u9002\u5E94\u9AD8\u5EA6",en:"Translation box adaptive height",zh_TW:"\u7FFB\u8B6F\u6846\u81EA\u9069\u61C9\u9AD8\u5EA6"},translate_start_hook:{zh:"\u7FFB\u8BD1\u5F00\u59CB\u94A9\u5B50\u51FD\u6570",en:"Translate Start Hook",zh_TW:"\u7FFB\u8B6F\u958B\u59CB Hook"},translate_start_hook_helper:{zh:"\u7FFB\u8BD1\u524D\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes})",en:"Run before translation, input parameters are: ({hostNode, parentNode, nodes})",zh_TW:"\u7FFB\u8B6F\u524D\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes})"},translate_end_hook:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u94A9\u5B50\u51FD\u6570",en:"Translate End Hook",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210 Hook"},translate_end_hook_helper:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})",en:"Run when translation is complete, input parameters are: ({hostNode, parentNode, nodes, wrapperNode, innerNode})",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})"},translate_remove_hook:{zh:"\u7FFB\u8BD1\u79FB\u9664\u94A9\u5B50\u51FD\u6570",en:"Translate Removed Hook",zh_TW:"\u7FFB\u8B6F\u79FB\u9664 Hook"},translate_remove_hook_helper:{zh:"\u7FFB\u8BD1\u79FB\u9664\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A \u7FFB\u8BD1\u8282\u70B9\u3002",en:"Run when translation is removed, the input parameters are: translation node.",zh_TW:"\u79FB\u9664\u7FFB\u8B6F\u6642\u57F7\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A\u7FFB\u8B6F\u7BC0\u9EDE\u3002"},english_dict:{zh:"\u82F1\u6587\u8BCD\u5178",en:"English Dictionary",zh_TW:"\u82F1\u6587\u5B57\u5178"},english_suggest:{zh:"\u82F1\u6587\u5EFA\u8BAE",en:"English Suggest",zh_TW:"\u82F1\u6587\u5EFA\u8B70"},api_name:{zh:"\u63A5\u53E3\u540D\u79F0",en:"API Name",zh_TW:"\u4ECB\u9762\u540D\u7A31"},is_disabled:{zh:"\u662F\u5426\u7981\u7528",en:"Is Disabled",zh_TW:"\u662F\u5426\u505C\u7528"},translate_selected:{zh:"\u662F\u5426\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"If translate selected",zh_TW:"\u662F\u5426\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},use_batch_fetch:{zh:"\u662F\u5426\u805A\u5408\u53D1\u9001\u7FFB\u8BD1\u8BF7\u6C42",en:"Whether to aggregate and send translation requests",zh_TW:"\u662F\u5426\u805A\u5408\u767C\u9001\u7FFB\u8B6F\u8ACB\u6C42"},batch_interval:{zh:"\u805A\u5408\u8BF7\u6C42\u7B49\u5F85\u65F6\u95F4(100-10000)",en:"Aggregation request waiting time (100-10000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u7B49\u5F85\u6642\u9593(100-10000)"},batch_size:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6BB5\u843D\u6570(1-100)",en:"Maximum number of paragraphs in an aggregation request (1-100)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6BB5\u843D\u6578(1-100)"},batch_length:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6587\u672C\u957F\u5EA6(1000-100000)",en:"Maximum text length for aggregation requests (1000-100000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6587\u5B57\u9577\u5EA6(1000-100000)"},use_context:{zh:"\u662F\u5426\u542F\u7528\u667A\u80FD\u4E0A\u4E0B\u6587",en:"Whether to enable AI context",zh_TW:"\u662F\u5426\u555F\u7528\u667A\u6167\u4E0A\u4E0B\u6587"},context_size:{zh:"\u4E0A\u4E0B\u6587\u4F1A\u8BDD\u6570\u91CF(1-20)",en:"Number of context sessions(1-20)",zh_TW:"\u4E0A\u4E0B\u6587\u6703\u8A71\u6578\u91CF(1-20)"},auto_scan_page:{zh:"\u81EA\u52A8\u626B\u63CF\u9875\u9762",en:"Auto scan page",zh_TW:"\u81EA\u52D5\u6383\u63CF\u9801\u9762"},has_rich_text:{zh:"\u542F\u7528\u5BCC\u6587\u672C\u7FFB\u8BD1",en:"Enable rich text translation",zh_TW:"\u555F\u7528\u5BCC\u6587\u672C\u7FFB\u8B6F"},has_shadowroot:{zh:"\u626B\u63CFShadowroot",en:"Scan Shadowroot",zh_TW:"\u6383\u63CFShadowroot"},mousehover_translate:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover Translation",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},use_mousehover_translation:{zh:"\u542F\u7528\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Enable mouseover translation",zh_TW:"\u555F\u7528\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},selected_translation_alert:{zh:"\u5212\u8BCD\u7FFB\u8BD1\u7684\u5F00\u542F\u548C\u5173\u95ED\u8BF7\u5230\u201C\u89C4\u5219\u8BBE\u7F6E\u201D\u91CC\u9762\u8BBE\u7F6E\u3002",en:"To turn selected translation on or off, please go to \"Rule Settings\".",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F\u7684\u958B\u555F\u548C\u95DC\u9589\u8ACB\u5230\u300C\u898F\u5247\u8A2D\u5B9A\u300D\u88E1\u9762\u8A2D\u5B9A\u3002"},mousehover_key_help:{zh:"\u5F53\u5FEB\u6377\u952E\u7F6E\u7A7A\u65F6\u8868\u793A\u9F20\u6807\u60AC\u505C\u76F4\u63A5\u7FFB\u8BD1",en:"When the shortcut key is empty, it means that the mouse hovers to translate directly",zh_TW:"\u7576\u5FEB\u6377\u9375\u7F6E\u7A7A\u6642\u8868\u793A\u6ED1\u9F20\u61F8\u505C\u76F4\u63A5\u7FFB\u8B6F"},autoscan_alt:{zh:"\u81EA\u52A8\u626B\u63CF",en:"Auto Scan",zh_TW:"\u81EA\u52D5\u6383\u63CF"},shadowroot_alt:{zh:"ShadowRoot",en:"ShadowRoot",zh_TW:"ShadowRoot"},richtext_alt:{zh:"\u4FDD\u7559\u5BCC\u6587\u672C",en:"Rich Text",zh_TW:"\u4FDD\u7559\u5BCC\u6587\u672C"},transonly_alt:{zh:"\u9690\u85CF\u539F\u6587",en:"Hide Original",zh_TW:"\u96B1\u85CF\u539F\u6587"},confirm_title:{zh:"\u786E\u8BA4",en:"Confirm",zh_TW:"\u78BA\u8A8D"},confirm_message:{zh:"\u786E\u5B9A\u64CD\u4F5C\u5417\uFF1F",en:"Are you sure you want to proceed?",zh_TW:"\u78BA\u5B9A\u64CD\u4F5C\u55CE\uFF1F"},confirm_action:{zh:"\u786E\u5B9A",en:"Confirm",zh_TW:"\u78BA\u5B9A"},cancel_action:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},pls_press_shortcut:{zh:"\u8BF7\u6309\u4E0B\u5FEB\u6377\u952E\u7EC4\u5408",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},load_setting_err:{zh:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},translation_style:{zh:"\u7FFB\u8BD1\u98CE\u683C",en:"Translation style",zh_TW:"\u7FFB\u8B6F\u98A8\u683C"},placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},tag_name:{zh:"\u5360\u4F4D\u6807\u7B7E\u540D",en:"Placeholder tag name",zh_TW:"\u4F54\u4F4D\u6A19\u540D"},system_prompt_helper:{zh:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9ED8\u8BA4Prompt\u7684\u60C5\u51B5\u4E0B\uFF0C\u8BF7\u52FF\u968F\u610F\u4FEE\u6539\uFF0C\u5426\u5219\u53EF\u80FD\u65E0\u6CD5\u5DE5\u4F5C\u3002",en:"Do not modify the default prompt without fully understanding it, otherwise it may not work.",zh_TW:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9810\u8A2DPrompt\u7684\u60C5\u6CC1\u4E0B\uFF0C\u8ACB\u52FF\u96A8\u610F\u4FEE\u6539\uFF0C\u5426\u5247\u53EF\u80FD\u7121\u6CD5\u904B\u4F5C\u3002"},if_pre_init:{zh:"\u662F\u5426\u9884\u521D\u59CB\u5316",en:"Whether to pre-initialize",zh_TW:"\u662F\u5426\u9810\u521D\u59CB\u5316"},export_old:{zh:"\u5BFC\u51FA\u65E7\u7248",en:"Export old version",zh_TW:"\u532F\u51FA\u820A\u7248"},favorite_words_helper:{zh:"\u5BFC\u5165\u8BCD\u6C47\u8BF7\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u4E2A\u5355\u8BCD\u3002",en:"To import vocabulary, please use a txt file with one word per line.",zh_TW:"\u532F\u5165\u8A5E\u5F59\u8ACB\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u500B\u55AE\u5B57\u3002"},btn_tip_click_away:{zh:"\u5931\u7126\u9690\u85CF/\u663E\u793A",en:"Loss of focus hide/show",zh_TW:"\u5931\u7126\u96B1\u85CF/\u986F\u793A"},btn_tip_follow_selection:{zh:"\u8DDF\u968F/\u56FA\u5B9A\u6A21\u5F0F",en:"Follow/Fixed Mode",zh_TW:"\u8DDF\u96A8/\u56FA\u5B9A\u6A21\u5F0F"},btn_tip_simple_style:{zh:"\u8FF7\u4F60/\u5E38\u89C4\u6A21\u5F0F",en:"Mini/Regular Mode",zh_TW:"\u8FF7\u4F60/\u5E38\u898F\u6A21\u5F0F"},api_placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},api_placetag:{zh:"\u5360\u4F4D\u6807\u7B7E",en:"Placeholder tags",zh_TW:"\u4F54\u4F4D\u6A19"},detected_lang:{zh:"\u8BED\u8A00\u68C0\u6D4B",en:"Language detection",zh_TW:"\u8A9E\u8A00\u5075\u6E2C"},detected_result:{zh:"\u68C0\u6D4B\u7ED3\u679C",en:"Detect result",zh_TW:"\u6AA2\u6E2C\u7D50\u679C"},subtitle_translate:{zh:"\u5B57\u5E55\u7FFB\u8BD1",en:"Subtitle translate",zh_TW:"\u5B57\u5E55\u7FFB\u8B6F"},toggle_subtitle_translate:{zh:"\u542F\u7528\u5B57\u5E55\u7FFB\u8BD1",en:"Enable subtitle translation",zh_TW:"\u555F\u7528\u5B57\u5E55\u7FFB\u8B6F"},is_bilingual_view:{zh:"\u53CC\u8BED\u663E\u793A",en:"Enable bilingual display",zh_TW:"\u96D9\u8A9E\u986F\u793A"},background_styles:{zh:"\u80CC\u666F\u6837\u5F0F",en:"DBackground Style",zh_TW:"\u80CC\u666F\u6A23\u5F0F"},origin_styles:{zh:"\u539F\u6587\u6837\u5F0F",en:"Original style",zh_TW:"\u539F\u6587\u6A23\u5F0F"},translation_styles:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Translation style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},ai_segmentation:{zh:"AI\u667A\u80FD\u65AD\u53E5",en:"AI intelligent punctuation",zh_TW:"AI\u667A\u6167\u65B7\u53E5"},ai_chunk_length:{zh:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)",en:"AI processing chunk length(200-20000)",zh_TW:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)"},subtitle_helper_1:{zh:"1\u3001\u76EE\u524D\u4EC5\u652F\u6301Youtube\u684C\u9762\u7F51\u7AD9\u3002",en:"1. Currently only supports Youtube desktop website.",zh_TW:"1.\u76EE\u524D\u50C5\u652F\u63F4Youtube\u684C\u9762\u7DB2\u7AD9\uFF0C\u4E14\u50C5\u652F\u63F4\u700F\u89BD\u5668\u64F4\u5145\u529F\u80FD\u3002"},subtitle_helper_2:{zh:"2\u3001\u63D2\u4EF6\u5185\u7F6E\u57FA\u7840\u7684\u5B57\u5E55\u5408\u5E76\u3001\u65AD\u53E5\u7B97\u6CD5\uFF0C\u53EF\u6EE1\u8DB3\u5927\u90E8\u5206\u60C5\u51B5\u3002",en:"2. The plug-in has built-in basic subtitle merging and sentence segmentation algorithms, which can meet most situations.",zh_TW:"2.\u63D2\u4EF6\u5167\u5EFA\u57FA\u790E\u7684\u5B57\u5E55\u5408\u4F75\u3001\u65B7\u53E5\u6F14\u7B97\u6CD5\uFF0C\u53EF\u6EFF\u8DB3\u5927\u90E8\u5206\u60C5\u6CC1\u3002"},subtitle_helper_3:{zh:"3\u3001\u4EA6\u53EF\u4EE5\u542F\u7528AI\u667A\u80FD\u65AD\u53E5\uFF0C\u4F46\u9700\u8003\u8651\u5207\u5272\u957F\u5EA6\u53CAAI\u63A5\u53E3\u80FD\u529B\uFF0C\u53EF\u80FD\u5904\u7406\u65F6\u95F4\u4F1A\u5F88\u957F\uFF0C\u751A\u81F3\u5904\u7406\u5931\u8D25\uFF0C\u5BFC\u81F4\u65E0\u6CD5\u770B\u5230\u5B57\u5E55\u3002",en:"3. You can also enable AI intelligent segmentation, but you need to consider the segmentation length and AI interface capabilities. The processing time may be very long or even fail, resulting in the inability to see subtitles.",zh_TW:"3.\u4EA6\u53EF\u555F\u7528AI\u667A\u80FD\u65B7\u53E5\uFF0C\u4F46\u9700\u8003\u616E\u5207\u5272\u9577\u5EA6\u53CAAI\u4ECB\u9762\u80FD\u529B\uFF0C\u53EF\u80FD\u8655\u7406\u6642\u9593\u6703\u5F88\u9577\uFF0C\u751A\u81F3\u8655\u7406\u5931\u6557\uFF0C\u5C0E\u81F4\u7121\u6CD5\u770B\u5230\u5B57\u5E55\u3002"},default_styles_example:{zh:"\u9ED8\u8BA4\u6837\u5F0F\u53C2\u8003\uFF1A",en:"Default styles reference:",zh_TW:"\u8A8D\u6A23\u5F0F\u53C3\u8003\uFF1A"},subtitle_load_succeed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01",en:"Bilingual subtitles loaded successfully!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01"},subtitle_load_failed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01",en:"Failed to load bilingual subtitles!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01"},try_get_subtitle_data:{zh:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019...",en:"Trying to get subtitle data, please wait...",zh_TW:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019..."},subtitle_data_processing:{zh:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D...",en:"Subtitle data processing...",zh_TW:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D..."},starting_to_process_subtitle:{zh:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E...",en:"Starting to process subtitle data...",zh_TW:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E..."},subtitle_data_is_ready:{zh:"\u5B57\u5E55\u6570\u636E\u5DF2\u51C6\u5907\u5C31\u7EEA\uFF0C\u8BF7\u70B9\u51FBKT\u6309\u94AE\u52A0\u8F7D",en:"The subtitle data is ready, please click the KT button to load it",zh_TW:"\u5B57\u5E55\u8CC7\u6599\u5DF2\u6E96\u5099\u5C31\u7DD2\uFF0C\u8ACB\u9EDE\u64CAKT\u6309\u9215\u52A0\u8F09"},log_level:{zh:"\u65E5\u5FD7\u7EA7\u522B",en:"Log Level",zh_TW:"\u65E5\u8A8C\u7B49\u7D1A"},goto_custom_api_example:{zh:"\u70B9\u51FB\u67E5\u770B\u3010\u81EA\u5B9A\u4E49\u63A5\u53E3\u793A\u4F8B\u3011",en:"Click to view [Custom Interface Example]",zh_TW:"\u9EDE\u9078\u67E5\u770B\u3010\u81EA\u8A02\u4ECB\u9762\u7BC4\u4F8B\u3011"},split_paragraph:{zh:"\u5207\u5206\u957F\u6BB5\u843D",en:"Split long paragraph",zh_TW:"\u5207\u5206\u9577\u6BB5\u843D"},split_length:{zh:"\u5207\u5206\u957F\u5EA6 (0-10000)",en:"Segmentation length(0-10000)",zh_TW:"\u5207\u5206\u9577\u5EA6(0-10000)"},highlight_words:{zh:"\u9AD8\u4EAE\u6536\u85CF\u8BCD\u6C47",en:"Highlight favorite words",zh_TW:"\u9AD8\u4EAE\u6536\u85CF\u8A5E\u5F59"},split_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},split_textlength:{zh:"\u6309\u7167\u957F\u5EA6\u5207\u5206",en:"Split by length",zh_TW:"\u4F9D\u9577\u5EA6\u5207\u5206"},split_punctuation:{zh:"\u6309\u7167\u53E5\u5B50\u5207\u5206",en:"Split by sentence",zh_TW:"\u6309\u7167\u53E5\u5B50\u5207\u5206"},highlight_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},highlight_beforetrans:{zh:"\u7FFB\u8BD1\u524D\u9AD8\u4EAE",en:"Highlight before translation",zh_TW:"\u7FFB\u8B6F\u524D\u9AD8\u4EAE"},highlight_aftertrans:{zh:"\u7FFB\u8BD1\u540E\u9AD8\u4EAE",en:"Highlight after translation",zh_TW:"\u7FFB\u8B6F\u5F8C\u9AD8\u4EAE"}};const newI18n=lang=>key=>{var _I18N$key;return((_I18N$key=I18N[key])===null||_I18N$key===void 0?void 0:_I18N$key[lang])||"";}; +const UI_LANGS=[["en","English"],["zh","简体中文"],["zh_TW","繁體中文"]];const customApiLangs="[\"en\", \"English - English\"],\n[\"zh-CN\", \"Simplified Chinese - \u7B80\u4F53\u4E2D\u6587\"],\n[\"zh-TW\", \"Traditional Chinese - \u7E41\u9AD4\u4E2D\u6587\"],\n[\"ar\", \"Arabic - \u0627\u0644\u0639\u0631\u0628\u064A\u0629\"],\n[\"bg\", \"Bulgarian - \u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438\"],\n[\"ca\", \"Catalan - Catal\xE0\"],\n[\"hr\", \"Croatian - Hrvatski\"],\n[\"cs\", \"Czech - \u010Ce\u0161tina\"],\n[\"da\", \"Danish - Dansk\"],\n[\"nl\", \"Dutch - Nederlands\"],\n[\"fi\", \"Finnish - Suomi\"],\n[\"fr\", \"French - Fran\xE7ais\"],\n[\"de\", \"German - Deutsch\"],\n[\"el\", \"Greek - \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\"],\n[\"hi\", \"Hindi - \u0939\u093F\u0928\u094D\u0926\u0940\"],\n[\"hu\", \"Hungarian - Magyar\"],\n[\"id\", \"Indonesian - Indonesia\"],\n[\"it\", \"Italian - Italiano\"],\n[\"ja\", \"Japanese - \u65E5\u672C\u8A9E\"],\n[\"ko\", \"Korean - \uD55C\uAD6D\uC5B4\"],\n[\"ms\", \"Malay - Melayu\"],\n[\"mt\", \"Maltese - Malti\"],\n[\"nb\", \"Norwegian - Norsk Bokm\xE5l\"],\n[\"pl\", \"Polish - Polski\"],\n[\"pt\", \"Portuguese - Portugu\xEAs\"],\n[\"ro\", \"Romanian - Rom\xE2n\u0103\"],\n[\"ru\", \"Russian - \u0420\u0443\u0441\u0441\u043A\u0438\u0439\"],\n[\"sk\", \"Slovak - Sloven\u010Dina\"],\n[\"sl\", \"Slovenian - Sloven\u0161\u010Dina\"],\n[\"es\", \"Spanish - Espa\xF1ol\"],\n[\"sv\", \"Swedish - Svenska\"],\n[\"ta\", \"Tamil - \u0BA4\u0BAE\u0BBF\u0BB4\u0BCD\"],\n[\"te\", \"Telugu - \u0C24\u0C46\u0C32\u0C41\u0C17\u0C41\"],\n[\"th\", \"Thai - \u0E44\u0E17\u0E22\"],\n[\"tr\", \"Turkish - T\xFCrk\xE7e\"],\n[\"uk\", \"Ukrainian - \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430\"],\n[\"vi\", \"Vietnamese - Ti\u1EBFng Vi\u1EC7t\"],\n";const customApiHelpZH="// \u8BF7\u6C42\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n \"url\": \"{{url}}\",\n \"method\": \"POST\",\n \"headers\": {\n \"Content-type\": \"application/json\",\n \"Authorization\": \"Bearer {{key}}\"\n },\n \"body\": {\n \"text\": \"{{text}}\", // \u5F85\u7FFB\u8BD1\u6587\u5B57\n \"from\": \"{{from}}\", // \u6587\u5B57\u7684\u8BED\u8A00\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09\n \"to\": \"{{to}}\", // \u76EE\u6807\u8BED\u8A00\n },\n}\n\n\n// \u8FD4\u56DE\u6570\u636E\u9ED8\u8BA4\u683C\u5F0F\n{\n text: \"\", // \u7FFB\u8BD1\u540E\u7684\u6587\u5B57\n from: \"\", // \u8BC6\u522B\u7684\u6E90\u8BED\u8A00\n to: \"\", // \u76EE\u6807\u8BED\u8A00\uFF08\u53EF\u9009\uFF09\n}\n\n\n// Hook \u8303\u4F8B\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n headers: {\n \"Content-type\": \"application/json\",\n },\n method: \"GET\",\n body: null,\n}]\n\n// Response Hook\n// \u5176\u4E2D\u8FD4\u56DE\u6570\u7EC4\u7B2C\u4E00\u4E2A\u503C\u8868\u793A\u8BD1\u6587\u5B57\u7B26\u4E32\uFF0C\u7B2C\u4E8C\u4E2A\u503C\u4E3A\u5E03\u5C14\u503C\uFF0C\u8868\u793A\u539F\u6587\u8BED\u8A00\u4E0E\u76EE\u6807\u8BED\u8A00\u662F\u5426\u76F8\u540C\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// \u652F\u6301\u7684\u8BED\u8A00\u4EE3\u7801\u5982\u4E0B\n".concat(customApiLangs,"\n");const customApiHelpEN="// Default request\n{\n \"url\": \"{{url}}\",\n \"method\": \"POST\",\n \"headers\": {\n \"Content-type\": \"application/json\",\n \"Authorization\": \"Bearer {{key}}\"\n },\n \"body\": {\n \"text\": \"{{text}}\", // Text to be translated\n \"from\": \"{{from}}\", // The language of the text (may be empty)\n \"to\": \"{{to}}\", // Target language\n },\n}\n\n\n// Default response\n{\n text: \"\", // translated text\n from: \"\", // Recognized source language\n to: \"\", // Target language (optional)\n}\n\n\n/// Hook Example\n// URL\nhttps://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN\n\n// Request Hook\n(text, from, to, url, key) => [url, {\n headers: {\n \"Content-type\": \"application/json\",\n },\n method: \"GET\",\n body: null,\n}]\n\n// Response Hook\n// In the returned array, the first value is the translated string, while the second value is a boolean\n// that indicates whether the source language is the same as the target language.\n(res, text, from, to) => [res.sentences.map((item) => item.trans).join(\" \"), to === res.src]\n\n\n// The supported language codes are as follows\n".concat(customApiLangs,"\n");const requestHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'url', 'body', 'headers', 'method'\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n return { url, body, headers, userMsg, method };\n}";const requestHookHelperEN="1. The first parameter contains the following fields: 'texts', 'from', 'to', 'url', 'key', 'model', 'systemPrompt', ...\n2. The return value must be an object containing the following fields: 'url', 'body', 'headers', 'method'\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync (args, { url, body, headers, userMsg, method } = {}) => {\n return { url, body, headers, userMsg, method };\n}";const responsetHookHelperZH="1\u3001\u7B2C\u4E00\u4E2A\u53C2\u6570\u5305\u542B\u5982\u4E0B\u5B57\u6BB5\uFF1A'res', ...\n2\u3001\u8FD4\u56DE\u503C\u5FC5\u987B\u662F\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\u7684\u5BF9\u8C61\uFF1A 'translations'\n \uFF08'translations' \u5E94\u4E3A\u4E00\u4E2A\u4E8C\u7EF4\u6570\u7EC4\uFF1A[[\u8BD1\u6587, \u539F\u6587\u8BED\u8A00]]\uFF09\n3\u3001\u5982\u8FD4\u56DE\u7A7A\u503C\uFF0C\u5219hook\u51FD\u6570\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u6548\u679C\u3002\n\n// \u793A\u4F8B\nasync ({ res, ...args }) => {\n const translations = [[\"\u4F60\u597D\", \"en\"]];\n const modelMsg = {}; // \u7528\u4E8EAI\u4E0A\u4E0B\u6587\n return { translations, modelMsg };\n}";const responsetHookHelperEN="1. The first parameter contains the following fields: 'res', ...\n2. The return value must be an object containing the following fields: 'translations'\n ('translations' should be a two-dimensional array: [[translation, source language]]).\n3. If a null value is returned, the hook function will have no effect.\n\n// Example\nasync ({ res, ...args }) => {\n const translations = [[\"\u4F60\u597D\", \"en\"]];\n const modelMsg = {}; // For AI context\n return { translations, modelMsg };\n}";const I18N={app_name:{zh:"\u7B80\u7EA6\u7FFB\u8BD1",en:"KISS Translator",zh_TW:"\u7C21\u7D04\u7FFB\u8B6F"},translate:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},custom_api_help:{zh:customApiHelpZH,en:customApiHelpEN,zh_TW:customApiHelpZH},request_hook_helper:{zh:requestHookHelperZH,en:requestHookHelperEN,zh_TW:requestHookHelperZH},response_hook_helper:{zh:responsetHookHelperZH,en:responsetHookHelperEN,zh_TW:responsetHookHelperZH},translate_alt:{zh:"\u7FFB\u8BD1",en:"Translate",zh_TW:"\u7FFB\u8B6F"},basic_setting:{zh:"\u57FA\u672C\u8BBE\u7F6E",en:"Basic Setting",zh_TW:"\u57FA\u672C\u8A2D\u5B9A"},rules_setting:{zh:"\u89C4\u5219\u8BBE\u7F6E",en:"Rules Setting",zh_TW:"\u898F\u5247\u8A2D\u5B9A"},apis_setting:{zh:"\u63A5\u53E3\u8BBE\u7F6E",en:"Apis Setting",zh_TW:"API\u8A2D\u5B9A"},sync_setting:{zh:"\u540C\u6B65\u8BBE\u7F6E",en:"Sync Setting",zh_TW:"\u540C\u6B65\u8A2D\u5B9A"},patch_setting:{zh:"\u8865\u4E01\u8BBE\u7F6E",en:"Patch Setting",zh_TW:"\u4FEE\u88DC\u8A2D\u5B9A"},patch_setting_help:{zh:"\u9488\u5BF9\u4E00\u4E9B\u7279\u6B8A\u7F51\u7AD9\u7684\u4FEE\u6B63\u811A\u672C\uFF0C\u4EE5\u4FBF\u7FFB\u8BD1\u8F6F\u4EF6\u5F97\u5230\u66F4\u597D\u7684\u5C55\u793A\u6548\u679C\u3002",en:"Corrected scripts for some special websites so that the translation software can get better display results.",zh_TW:"\u91DD\u5C0D\u67D0\u4E9B\u7279\u6B8A\u7DB2\u7AD9\u7684\u4FEE\u6B63\u8173\u672C\uFF0C\u8B93\u7FFB\u8B6F\u8EDF\u9AD4\u6709\u66F4\u597D\u7684\u986F\u793A\u6548\u679C\u3002"},inject_webfix:{zh:"\u6CE8\u5165\u4FEE\u590D\u8865\u4E01",en:"Inject Webfix",zh_TW:"\u6CE8\u5165\u4FEE\u6B63\u88DC\u4E01"},about:{zh:"\u5173\u4E8E",en:"About",zh_TW:"\u95DC\u65BC"},about_md:{zh:"README.md",en:"README.en.md",zh_TW:"README.md"},about_md_local:{zh:"\u8BF7 [\u70B9\u51FB\u8FD9\u91CC](".concat("https://github.com/fishjar/kiss-translator",") \u67E5\u770B\u8BE6\u60C5\u3002"),en:"Please [click here](".concat("https://github.com/fishjar/kiss-translator",") for details."),zh_TW:"\u8ACB\u3010\u9EDE\u9019\u88E1\u3011\u67E5\u770B\u8A73\u7D30\u5167\u5BB9\u3002"},ui_lang:{zh:"\u754C\u9762\u8BED\u8A00",en:"Interface Language",zh_TW:"\u4ECB\u9762\u8A9E\u8A00"},fetch_limit:{zh:"\u6700\u5927\u5E76\u53D1\u8BF7\u6C42\u6570\u91CF (1-100)",en:"Maximum Number Of Concurrent Requests (1-100)",zh_TW:"\u6700\u5927\u540C\u6642\u8ACB\u6C42\u6578\u91CF (1-100)"},if_think:{zh:"\u542F\u7528\u6216\u7981\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B",en:"Enable or disable the model\u2019s thinking behavior ",zh_TW:"\u555F\u7528\u6216\u505C\u7528\u6A21\u578B\u7684\u6DF1\u5EA6\u601D\u8003\u80FD\u529B"},think:{zh:"\u542F\u7528\u6DF1\u5EA6\u601D\u8003",en:"enable thinking",zh_TW:"\u555F\u7528\u6DF1\u5EA6\u601D\u8003"},nothink:{zh:"\u7981\u7528\u6DF1\u5EA6\u601D\u8003",en:"disable thinking",zh_TW:"\u505C\u7528\u6DF1\u5EA6\u601D\u8003"},think_ignore:{zh:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684\u8F93\u51FA,\u9017\u53F7(,)\u5206\u5272,\u5F53\u6A21\u578B\u652F\u6301\u601D\u8003\u4F46ollama\u4E0D\u652F\u6301\u65F6\u9700\u8981\u586B\u5199\u672C\u53C2\u6570",en:"Ignore the block for the following models, comma (,) separated",zh_TW:"\u5FFD\u7565\u4EE5\u4E0B\u6A21\u578B\u7684 \u8F38\u51FA\uFF0C\u4EE5\u9017\u865F (,) \u5206\u9694\uFF1B\u7576\u6A21\u578B\u652F\u63F4\u601D\u8003\u4F46 ollama \u4E0D\u652F\u63F4\u6642\u9700\u8981\u586B\u5BEB\u6B64\u53C3\u6578"},fetch_interval:{zh:"\u6BCF\u6B21\u8BF7\u6C42\u95F4\u9694\u65F6\u95F4 (0-5000ms)",en:"Time Between Requests (0-5000ms)",zh_TW:"\u6BCF\u6B21\u8ACB\u6C42\u9593\u9694\u6642\u9593 (0-5000ms)"},translate_interval:{zh:"\u7FFB\u8BD1\u95F4\u9694\u65F6\u95F4 (10-2000ms)",en:"Translation Interval (10-2000ms)",zh_TW:"\u7FFB\u8B6F\u9593\u9694\u6642\u9593 (10-2000ms)"},http_timeout:{zh:"\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4 (5000-60000ms)",en:"Request Timeout Time (5000-60000ms)",zh_TW:"\u8ACB\u6C42\u903E\u6642\u6642\u9593 (5000-60000ms)"},custom_header:{zh:"\u81EA\u5B9A\u4E49Header\u53C2\u6570",en:"Custom Header Params"},custom_header_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\"",en:"Use JSON format, for example \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\""},custom_body:{zh:"\u81EA\u5B9A\u4E49Body\u53C2\u6570",en:"Custom Body Params"},custom_body_help:{zh:"\u4F7F\u7528JSON\u683C\u5F0F\uFF0C\u4F8B\u5982 \"top_p\": 0.7",en:"Use JSON format, for example \"top_p\": 0.7"},min_translate_length:{zh:"\u6700\u5C0F\u7FFB\u8BD1\u5B57\u7B26\u6570 (1-100)",en:"Minimum number Of Translated Characters (1-100)",zh_TW:"\u6700\u5C0F\u7FFB\u8B6F\u5B57\u5143\u6578 (1-100)"},max_translate_length:{zh:"\u6700\u5927\u7FFB\u8BD1\u5B57\u7B26\u6570 (100-100000)",en:"Maximum number Of Translated Characters (100-100000)",zh_TW:"\u6700\u5927\u7FFB\u8B6F\u5B57\u5143\u6578 (100-100000)"},num_of_newline_characters:{zh:"\u6362\u884C\u5B57\u7B26\u6570 (1-1000)",en:"Number of Newline Characters (1-1000)",zh_TW:"\u63DB\u884C\u5B57\u5143\u6578 (1-1000)"},translate_service:{zh:"\u7FFB\u8BD1\u670D\u52A1",en:"Translate Service",zh_TW:"\u7FFB\u8B6F\u670D\u52D9"},translate_service_multiple:{zh:"\u7FFB\u8BD1\u670D\u52A1 (\u652F\u6301\u591A\u9009)",en:"Translation service (multiple supported)",zh_TW:"\u7FFB\u8B6F\u670D\u52D9 (\u652F\u63F4\u591A\u9078)"},translate_timing:{zh:"\u7FFB\u8BD1\u65F6\u673A",en:"Translate Timing",zh_TW:"\u7FFB\u8B6F\u6642\u6A5F"},mk_pagescroll:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u7FFB\u8BD1\uFF08\u63A8\u8350\uFF09",en:"Rolling Loading (Suggested)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u7FFB\u8B6F\uFF08\u5EFA\u8B70\uFF09"},mk_pageopen:{zh:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8BD1",en:"Translate all now",zh_TW:"\u7ACB\u5373\u5168\u90E8\u7FFB\u8B6F"},mk_mouseover:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},mk_ctrlKey:{zh:"Control + \u9F20\u6807\u60AC\u505C",en:"Control + Mouseover",zh_TW:"Control + \u6ED1\u9F20\u61F8\u505C"},mk_shiftKey:{zh:"Shift + \u9F20\u6807\u60AC\u505C",en:"Shift + Mouseover",zh_TW:"Shift + \u6ED1\u9F20\u61F8\u505C"},mk_altKey:{zh:"Alt + \u9F20\u6807\u60AC\u505C",en:"Alt + Mouseover",zh_TW:"Alt + \u6ED1\u9F20\u61F8\u505C"},from_lang:{zh:"\u539F\u6587\u8BED\u8A00",en:"Source Language",zh_TW:"\u539F\u6587\u8A9E\u8A00"},to_lang:{zh:"\u76EE\u6807\u8BED\u8A00",en:"Target Language",zh_TW:"\u76EE\u6A19\u8A9E\u8A00"},to_lang2:{zh:"\u7B2C\u4E8C\u76EE\u6807\u8BED\u8A00",en:"Target Language 2",zh_TW:"\u7B2C\u4E8C\u76EE\u6A19\u8A9E\u8A00"},to_lang2_helper:{zh:"\u8BBE\u5B9A\u540E\uFF0C\u4E0E\u76EE\u6807\u8BED\u8A00\u4EA7\u751F\u4E92\u8BD1\u6548\u679C\uFF0C\u4F46\u4F9D\u8D56\u8FDC\u7A0B\u8BED\u8A00\u8BC6\u522B\u3002",en:"After setting, it will produce mutual translation effect with the target language, but it relies on remote language recognition.",zh_TW:"\u8A2D\u5B9A\u5F8C\u6703\u8207\u76EE\u6A19\u8A9E\u8A00\u4E92\u8B6F\uFF0C\u4F46\u4F9D\u8CF4\u9060\u7AEF\u8A9E\u8A00\u8B58\u5225\u3002"},text_style:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},text_style_alt:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Text Style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},bg_color:{zh:"\u6837\u5F0F\u989C\u8272",en:"Style Color",zh_TW:"\u6A23\u5F0F\u984F\u8272"},remain_unchanged:{zh:"\u4FDD\u7559\u4E0D\u53D8",en:"Remain Unchanged",zh_TW:"\u4FDD\u7559\u4E0D\u8B8A"},google_api:{zh:"\u8C37\u6B4C\u7FFB\u8BD1\u63A5\u53E3",en:"Google Translate API",zh_TW:"Google \u7FFB\u8B6F\u4ECB\u9762"},default_selector:{zh:"\u9ED8\u8BA4\u9009\u62E9\u5668",en:"Default selector",zh_TW:"\u9810\u8A2D\u9078\u64C7\u5668"},selector_rules:{zh:"\u9009\u62E9\u5668\u89C4\u5219",en:"Selector Rules",zh_TW:"\u9078\u64C7\u5668\u898F\u5247"},save:{zh:"\u4FDD\u5B58",en:"Save",zh_TW:"\u5132\u5B58"},edit:{zh:"\u7F16\u8F91",en:"Edit",zh_TW:"\u7DE8\u8F2F"},cancel:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},delete:{zh:"\u5220\u9664",en:"Delete",zh_TW:"\u522A\u9664"},reset:{zh:"\u91CD\u7F6E",en:"Reset",zh_TW:"\u91CD\u8A2D"},add:{zh:"\u6DFB\u52A0",en:"Add",zh_TW:"\u65B0\u589E"},inject_rules:{zh:"\u6CE8\u5165\u8BA2\u9605\u89C4\u5219",en:"Inject Subscribe Rules",zh_TW:"\u6CE8\u5165\u8A02\u95B1\u898F\u5247"},personal_rules:{zh:"\u4E2A\u4EBA\u89C4\u5219",en:"Rules",zh_TW:"\u500B\u4EBA\u898F\u5247"},subscribe_rules:{zh:"\u8BA2\u9605\u89C4\u5219",en:"Subscribe",zh_TW:"\u8A02\u95B1\u898F\u5247"},overwrite_subscribe_rules:{zh:"\u8986\u5199\u8BA2\u9605\u89C4\u5219",en:"Overwrite",zh_TW:"\u8986\u5BEB\u8A02\u95B1\u898F\u5247"},subscribe_url:{zh:"\u8BA2\u9605\u5730\u5740",en:"Subscribe URL",zh_TW:"\u8A02\u95B1\u7DB2\u5740"},rules_warn_1:{zh:"1\u3001\u89C4\u5219\u751F\u6548\u7684\u4F18\u5148\u7EA7\u4F9D\u6B21\u4E3A\uFF1A\u4E2A\u4EBA\u89C4\u5219 > \u8BA2\u9605\u89C4\u5219 > \u5168\u5C40\u89C4\u5219\u3002\"\u5168\u5C40\u89C4\u5219\"\u76F8\u5F53\u4E8E\u515C\u5E95\u89C4\u5219\u3002",en:"1. The priority of rules is: personal rules > subscription rules > global rules. \"Global rules\" are like a fallback rule.",zh_TW:"1.\u898F\u5247\u751F\u6548\u7684\u512A\u5148\u9806\u5E8F\u4F9D\u5E8F\u70BA\uFF1A\u500B\u4EBA\u898F\u5247 > \u8A02\u95B1\u898F\u5247 > \u5168\u57DF\u898F\u5247\u3002 \"\u5168\u57DF\u898F\u5247\"\u76F8\u7576\u65BC\u515C\u5E95\u898F\u5247\u3002"},rules_warn_2:{zh:"2\u3001\u201C\u8BA2\u9605\u89C4\u5219\u201D\u9009\u62E9\u6CE8\u5165\u540E\u624D\u4F1A\u751F\u6548\u3002",en:"2. \"Subscription rules\" will take effect only after injection is selected.",zh_TW:"2\u3001\u300C\u8A02\u95B1\u898F\u5247\u300D\u9078\u64C7\u6CE8\u5165\u5F8C\u624D\u6703\u751F\u6548\u3002"},rules_warn_3:{zh:"3\u3001\u5173\u4E8E\u89C4\u5219\u586B\u5199\uFF1A\u8F93\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u6846\u9009\u201C*\u201D\u8868\u793A\u91C7\u7528\u5168\u5C40\u89C4\u5219\u3002",en:"3. Regarding filling in the rules: Leave the input box blank or select \"*\" in the drop-down box to use global rule.",zh_TW:"3. \u898F\u5247\u586B\u5BEB\u8AAA\u660E\uFF1A\u8F38\u5165\u6846\u7559\u7A7A\u6216\u4E0B\u62C9\u9078\u64C7\u300C*\u300D\u8868\u793A\u4F7F\u7528\u5168\u57DF\u898F\u5247\u3002"},sync_warn:{zh:"\u6D89\u53CA\u9690\u79C1\u6570\u636E\u7684\u540C\u6B65\u8BF7\u8C28\u614E\u9009\u62E9\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52A1\uFF0C\u5EFA\u8BAE\u81EA\u884C\u642D\u5EFA kiss-worker \u6216 WebDAV \u670D\u52A1\u3002",en:"When synchronizing data that involves privacy, please be cautious about choosing third-party sync services. It is recommended to set up your own sync service using kiss-worker or WebDAV.",zh_TW:"\u540C\u6B65\u6D89\u53CA\u96B1\u79C1\u8CC7\u6599\u6642\uFF0C\u8ACB\u8B39\u614E\u9078\u64C7\u7B2C\u4E09\u65B9\u540C\u6B65\u670D\u52D9\uFF1B\u5EFA\u8B70\u81EA\u5EFA kiss-worker \u6216 WebDAV \u670D\u52D9\u3002"},sync_warn_2:{zh:"\u5982\u679C\u670D\u52A1\u5668\u5B58\u5728\u5176\u4ED6\u5BA2\u6237\u7AEF\u540C\u6B65\u7684\u6570\u636E\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u5C06\u76F4\u63A5\u8986\u76D6\u672C\u5730\u914D\u7F6E\uFF0C\u540E\u9762\u5219\u6839\u636E\u4FEE\u6539\u65F6\u95F4\uFF0C\u65B0\u7684\u8986\u76D6\u65E7\u7684\u3002",en:"If the server has data synchronized by other clients, the first synchronization will directly overwrite the local configuration, and later, according to the modification time, the new one will overwrite the old one.",zh_TW:"\u82E5\u4F3A\u670D\u5668\u4E0A\u5B58\u5728\u5176\u4ED6\u7528\u6236\u7AEF\u540C\u6B65\u7684\u8CC7\u6599\uFF0C\u7B2C\u4E00\u6B21\u540C\u6B65\u6703\u76F4\u63A5\u8986\u84CB\u672C\u6A5F\u8A2D\u5B9A\uFF1B\u4E4B\u5F8C\u5247\u4F9D\u4FEE\u6539\u6642\u9593\uFF0C\u7531\u65B0\u7684\u8986\u84CB\u820A\u7684\u3002"},about_sync_api:{zh:"\u81EA\u5EFAkiss-wroker\u6570\u636E\u540C\u6B65\u670D\u52A1",en:"Self-hosting a Kiss-worker data sync service",zh_TW:"\u81EA\u5EFA kiss-wroker \u8CC7\u6599\u540C\u6B65\u670D\u52D9"},about_api:{zh:"1\u3001\u5176\u4E2D BuiltinAI \u4E3A\u6D4F\u89C8\u5668\u5185\u7F6EAI\u7FFB\u8BD1\uFF0C\u76EE\u524D\u4EC5 Chrome 138 \u53CA\u4EE5\u4E0A\u7248\u672C\u5F97\u5230\u652F\u6301\u3002",en:"1. BuiltinAI is the browser's built-in AI translation, which is currently only supported by Chrome 138 and above.",zh_TW:"1.\u5176\u4E2D BuiltinAI \u70BA\u700F\u89BD\u5668\u5167\u5EFAAI\u7FFB\u8B6F\uFF0C\u76EE\u524D\u50C5 Chrome 138 \u4EE5\u4E0A\u7248\u672C\u652F\u63F4\u3002"},about_api_2:{zh:"2\u3001\u5927\u90E8\u5206AI\u63A5\u53E3\u90FD\u4E0EOpenAI\u517C\u5BB9\uFF0C\u56E0\u6B64\u9009\u62E9\u6DFB\u52A0OpenAI\u7C7B\u578B\u5373\u53EF\u3002",en:"2. Most AI interfaces are compatible with OpenAI, so just choose to add the OpenAI type.",zh_TW:"2.\u5927\u90E8\u5206AI\u4ECB\u9762\u90FD\u8207OpenAI\u76F8\u5BB9\uFF0C\u56E0\u6B64\u9078\u64C7\u65B0\u589EOpenAI\u985E\u578B\u5373\u53EF\u3002"},about_api_3:{zh:"3\u3001\u6682\u672A\u5217\u51FA\u7684\u63A5\u53E3\uFF0C\u7406\u8BBA\u4E0A\u90FD\u53EF\u4EE5\u901A\u8FC7\u81EA\u5B9A\u4E49\u63A5\u53E3 (Custom) \u7684\u5F62\u5F0F\u652F\u6301\u3002",en:"3. Interfaces that have not yet been launched can theoretically be supported through custom interfaces.",zh_TW:"3\u3001\u66AB\u672A\u5217\u51FA\u7684\u4ECB\u9762\uFF0C\u7406\u8AD6\u4E0A\u90FD\u53EF\u900F\u904E\u81EA\u8A02\u4ECB\u9762 (Custom) \u7684\u5F62\u5F0F\u652F\u63F4\u3002"},about_api_proxy:{zh:"\u67E5\u770B\u81EA\u5EFA\u4E00\u4E2A\u7FFB\u8BD1\u63A5\u53E3\u4EE3\u7406",en:"Check out the self-built translation interface proxy",zh_TW:"\u67E5\u770B\u5982\u4F55\u81EA\u5EFA\u7FFB\u8B6F\u4ECB\u9762 Proxy"},setting_helper:{zh:"\u65B0\u65E7\u914D\u7F6E\u5E76\u4E0D\u517C\u5BB9\uFF0C\u5BFC\u51FA\u7684\u65E7\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u5BFC\u5165\u3002",en:"The old and new configurations are not compatible. Do not import the exported old configuration again.",zh_TW:"\u65B0\u820A\u914D\u7F6E\u4E26\u4E0D\u76F8\u5BB9\uFF0C\u532F\u51FA\u7684\u820A\u7248\u914D\u7F6E\uFF0C\u52FF\u518D\u6B21\u532F\u5165\u3002"},style_none:{zh:"\u65E0",en:"None",zh_TW:"\u7121"},under_line:{zh:"\u4E0B\u5212\u76F4\u7EBF",en:"Underline",zh_TW:"\u4E0B\u5283\u76F4\u7DDA"},dot_line:{zh:"\u4E0B\u5212\u70B9\u72B6\u7EBF",en:"Dotted Underline",zh_TW:"\u4E0B\u5283\u9EDE\u72C0\u7DDA"},dash_line:{zh:"\u4E0B\u5212\u865A\u7EBF",en:"Dashed Underline",zh_TW:"\u4E0B\u5283\u865B\u7DDA"},dash_box:{zh:"\u865A\u7EBF\u6846",en:"Dashed Box"},wavy_line:{zh:"\u4E0B\u5212\u6CE2\u6D6A\u7EBF",en:"Wavy Underline",zh_TW:"\u4E0B\u5283\u6CE2\u6D6A\u7DDA"},fuzzy:{zh:"\u6A21\u7CCA",en:"Fuzzy",zh_TW:"\u6A21\u7CCA"},highlight:{zh:"\u9AD8\u4EAE",en:"Highlight",zh_TW:"\u53CD\u767D\u6A19\u793A"},blockquote:{zh:"\u5F15\u7528",en:"Blockquote",zh_TW:"\u5F15\u7528"},gradient:{zh:"\u6E10\u53D8",en:"Gradient",zh_TW:"\u6F38\u8B8A"},blink:{zh:"\u95EA\u73B0",en:"Blink",zh_TW:"\u9583\u73FE"},glow:{zh:"\u53D1\u5149",en:"Glow",zh_TW:"\u767C\u5149"},diy_style:{zh:"\u81EA\u5B9A\u4E49\u6837\u5F0F",en:"Custom Style",zh_TW:"\u81EA\u8A02\u6A23\u5F0F"},diy_style_helper:{zh:"\u9075\u5FAA\u201CCSS\u201D\u7684\u8BED\u6CD5",en:"Follow the syntax of \"CSS\"",zh_TW:"\u9075\u5FAA CSS \u8A9E\u6CD5"},setting:{zh:"\u8BBE\u7F6E",en:"Setting",zh_TW:"\u8A2D\u5B9A"},pattern:{zh:"\u5339\u914D\u7F51\u5740",en:"URL pattern",zh_TW:"\u5339\u914D\u7DB2\u5740"},pattern_helper:{zh:"1\u3001\u652F\u6301\u661F\u53F7(*)\u901A\u914D\u7B26\u30022\u3001\u591A\u4E2AURL\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\u3002",en:"1. Supports the asterisk (*) wildcard character. 2. Separate multiple URLs with newlines or English commas \",\".",zh_TW:"1. \u652F\u63F4\u661F\u865F (*) \u842C\u7528\u5B57\u5143\u30022. \u591A\u500B URL \u8ACB\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u3002"},selector_helper:{zh:"1\u3001\u9700\u8981\u7FFB\u8BD1\u7684\u76EE\u6807\u5143\u7D20\u30022\u3001\u5F00\u542F\u81EA\u52A8\u626B\u63CF\u9875\u9762\u540E\uFF0C\u672C\u8BBE\u7F6E\u65E0\u6548\u30023\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The target element to be translated. 2. This setting is invalid when automatic page scanning is enabled. 3. Follow the CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u7FFB\u8B6F\u7684\u76EE\u6A19\u5143\u7D20\u3002 2.\u958B\u555F\u81EA\u52D5\u6383\u63CF\u9801\u9762\u5F8C\uFF0C\u672C\u8A2D\u5B9A\u7121\u6548\u3002 3.\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},translate_switch:{zh:"\u5F00\u542F\u7FFB\u8BD1",en:"Translate Switch",zh_TW:"\u958B\u555F\u7FFB\u8B6F"},default_enabled:{zh:"\u9ED8\u8BA4\u5F00\u542F",en:"Enabled",zh_TW:"\u9810\u8A2D\u958B\u555F"},default_disabled:{zh:"\u9ED8\u8BA4\u5173\u95ED",en:"Disabled",zh_TW:"\u9810\u8A2D\u95DC\u9589"},selector:{zh:"\u9009\u62E9\u5668",en:"Selector",zh_TW:"\u9078\u64C7\u5668"},target_selector:{zh:"\u76EE\u6807\u5143\u7D20\u9009\u62E9\u5668",en:"Target element selector",zh_TW:"\u76EE\u6A19\u5143\u7D20\u9078\u64C7\u5668"},keep_selector:{zh:"\u4FDD\u7559\u5143\u7D20\u9009\u62E9\u5668",en:"Keep unchanged selector",zh_TW:"\u4FDD\u7559\u5143\u7D20\u9078\u64C7\u5668"},keep_selector_helper:{zh:"1\u3001\u76EE\u6807\u5143\u7D20\u4E0B\u9762\u9700\u8981\u539F\u6837\u4FDD\u7559\u7684\u5B50\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. The child nodes under the target element need to remain intact. 2. Follow the CSS selector syntax.",zh_TW:"1. \u76EE\u6A19\u5143\u7D20\u4E0B\u7684\u5B50\u7BC0\u9EDE\u9700\u8981\u4FDD\u6301\u539F\u6A23\u3002 2. \u9075\u5FAA CSS \u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},root_selector:{zh:"\u6839\u8282\u70B9\u9009\u62E9\u5668",en:"Root node selector",zh_TW:"\u6839\u7BC0\u9EDE\u9078\u64C7\u5668"},root_selector_helper:{zh:"1\u3001\u7528\u4E8E\u7F29\u5C0F\u9875\u9762\u7FFB\u8BD1\u8303\u56F4\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Used to narrow the translation scope of the page. 2. Follow the CSS selector syntax.",zh_TW:"1.\u7528\u65BC\u7E2E\u5C0F\u9801\u9762\u7FFB\u8B6F\u7BC4\u570D\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},ignore_selector:{zh:"\u4E0D\u7FFB\u8BD1\u8282\u70B9\u9009\u62E9\u5668",en:"Ignore node selectors",zh_TW:"\u4E0D\u7FFB\u8B6F\u7BC0\u9EDE\u9078\u64C7\u5668"},ignore_selector_helper:{zh:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u8282\u70B9\u30022\u3001\u9075\u5FAACSS\u9009\u62E9\u5668\u8BED\u6CD5\u3002",en:"1. Nodes to be ignored. 2. Follow CSS selector syntax.",zh_TW:"1\u3001\u9700\u8981\u5FFD\u7565\u7684\u7BC0\u9EDE\u3002 2\u3001\u9075\u5FAACSS\u9078\u64C7\u5668\u8A9E\u6CD5\u3002"},terms:{zh:"\u4E13\u4E1A\u672F\u8BED",en:"Terms",zh_TW:"\u5C08\u696D\u8853\u8A9E"},terms_helper:{zh:"1\u3001\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u65E0\u9700\u659C\u6746\uFF0C\u4E0D\u652F\u6301\u4FEE\u9970\u7B26\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. Supports regular expression matching, no slash required, and no modifiers are supported. 2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1. \u652F\u63F4\u6B63\u5247\u8868\u9054\u5F0F\u6BD4\u5C0D\uFF0C\u7121\u9700\u659C\u7DDA\uFF0C\u4E14\u4E0D\u652F\u63F4\u4FEE\u98FE\u7B26\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},ai_terms:{zh:"AI\u4E13\u4E1A\u672F\u8BED",en:"AI Terms",zh_TW:"AI\u5C08\u696D\u8853\u8A9E"},ai_terms_helper:{zh:"1\u3001AI\u667A\u80FD\u66FF\u6362\uFF0C\u4E0D\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\u30022\u3001\u591A\u6761\u672F\u8BED\u7528\u6362\u884C\u6216\u5206\u53F7\u201C;\u201D\u9694\u5F00\u30023\u3001\u672F\u8BED\u548C\u8BD1\u6587\u7528\u82F1\u6587\u9017\u53F7\u201C,\u201D\u9694\u5F00\u30024\u3001\u6CA1\u6709\u8BD1\u6587\u89C6\u4E3A\u4E0D\u7FFB\u8BD1\u672F\u8BED\u3002",en:"1. AI intelligent replacement does not support regular expressions.2. Separate multiple terms with newlines or semicolons \";\". 3. Terms and translations are separated by English commas \",\". 4. If there is no translation, the term will be deemed not to be translated.",zh_TW:"1.AI\u667A\u80FD\u66FF\u63DB\uFF0C\u4E0D\u652F\u63F4\u6B63\u898F\u8868\u793A\u5F0F\u30022. \u591A\u689D\u8853\u8A9E\u4EE5\u63DB\u884C\u6216\u5206\u865F\u300C;\u300D\u5206\u9694\u30023. \u8853\u8A9E\u8207\u8B6F\u6587\u4EE5\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\u30024. \u7121\u8B6F\u6587\u8005\u8996\u70BA\u4E0D\u7FFB\u8B6F\u8A72\u8853\u8A9E\u3002"},selector_style:{zh:"\u9009\u62E9\u5668\u8282\u70B9\u6837\u5F0F",en:"Selector Style",zh_TW:"\u9078\u64C7\u5668\u7BC0\u9EDE\u6A23\u5F0F"},terms_style:{zh:"\u4E13\u4E1A\u672F\u8BED\u6837\u5F0F",en:"Terms Style",zh_TW:"\u5C08\u696D\u8853\u8A9E\u6A23\u5F0F"},highlight_style:{zh:"\u8BCD\u6C47\u9AD8\u4EAE\u6837\u5F0F",en:"Fav Words highlight style",zh_TW:"\u8A5E\u5F59\u9AD8\u4EAE\u6A23\u5F0F"},selector_style_helper:{zh:"\u5F00\u542F\u7FFB\u8BD1\u65F6\u6CE8\u5165\u3002",en:"It is injected when translation is turned on.",zh_TW:"\u5728\u958B\u555F\u7FFB\u8B6F\u6642\u6CE8\u5165\u3002"},selector_parent_style:{zh:"\u9009\u62E9\u5668\u7236\u8282\u70B9\u6837\u5F0F",en:"Parent Selector Style",zh_TW:"\u9078\u64C7\u5668\u7236\u7BC0\u9EDE\u6A23\u5F0F"},selector_grand_style:{zh:"\u9009\u62E9\u5668\u7956\u8282\u70B9\u6837\u5F0F",en:"Grand Selector Style",zh_TW:"\u9078\u64C7\u5668\u7956\u7BC0\u9EDE\u6A23\u5F0F"},inject_js:{zh:"\u6CE8\u5165JS",en:"Inject JS",zh_TW:"\u6CE8\u5165 JS"},inject_js_helper:{zh:"\u9884\u52A0\u8F7D\u65F6\u6CE8\u5165\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002\u5185\u7F6E\u5168\u5C40\u5BF9\u8C61 KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }",en:"Injected during preload, runs only once per page. Built-in global object KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }",zh_TW:"\u9810\u5148\u8F09\u5165\u6642\u6CE8\u5165\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002\u5167\u5EFA\u5168\u57DF\u7269\u4EF6 KT: {\n apiTranslate,\n apiDectect,\n apiSetting,\n apisMap,\n toLang,\n docInfo,\n glossary,\n }"},inject_css:{zh:"\u6CE8\u5165CSS",en:"Inject CSS",zh_TW:"\u6CE8\u5165 CSS"},inject_css_helper:{zh:"\u521D\u59CB\u5316\u65F6\u6CE8\u5165\u8FD0\u884C\uFF0C\u4E00\u4E2A\u9875\u9762\u4EC5\u8FD0\u884C\u4E00\u6B21\u3002",en:"Injected and run at initialization, and only run once per page.",zh_TW:"\u521D\u59CB\u5316\u6642\u6CE8\u5165\u904B\u884C\uFF0C\u4E00\u500B\u9801\u9762\u50C5\u904B\u884C\u4E00\u6B21\u3002"},fixer_function:{zh:"\u4FEE\u590D\u51FD\u6570",en:"Fixer Function",zh_TW:"\u4FEE\u5FA9\u51FD\u5F0F"},fixer_function_helper:{zh:"1\u3001br\u662F\u5C06
\u6362\u884C\u66FF\u6362\u6210

\u30022\u3001bn\u662F\u5C06\\n\u6362\u884C\u66FF\u6362\u6210

\u30023\u3001brToDiv\u548CbnToDiv\u662F\u66FF\u6362\u6210

\u3002",en:"1. br replaces
line breaks with

. 2. bn replaces \\n newline with

. 3. brToDiv and bnToDiv are replaced with

.",zh_TW:"1. br \u6703\u5C07
\u63DB\u884C\u66FF\u63DB\u70BA

\u30022. bn \u6703\u5C07 \\n \u63DB\u884C\u66FF\u63DB\u70BA

\u30023. brToDiv \u8207 bnToDiv \u6703\u66FF\u63DB\u70BA

\u3002"},import:{zh:"\u5BFC\u5165",en:"Import",zh_TW:"\u532F\u5165"},export:{zh:"\u5BFC\u51FA",en:"Export",zh_TW:"\u532F\u51FA"},export_translation:{zh:"\u5BFC\u51FA\u91CA\u4E49",en:"Export Translation",zh_TW:"\u532F\u51FA\u91CB\u7FA9"},error_cant_be_blank:{zh:"\u4E0D\u80FD\u4E3A\u7A7A",en:"Can not be blank",zh_TW:"\u4E0D\u53EF\u70BA\u7A7A"},error_duplicate_values:{zh:"\u5B58\u5728\u91CD\u590D\u7684\u503C",en:"There are duplicate values",zh_TW:"\u5B58\u5728\u91CD\u8907\u7684\u503C"},error_wrong_file_type:{zh:"\u9519\u8BEF\u7684\u6587\u4EF6\u7C7B\u578B",en:"Wrong file type",zh_TW:"\u6A94\u6848\u985E\u578B\u932F\u8AA4"},error_fetch_url:{zh:"\u8BF7\u68C0\u67E5url\u5730\u5740\u662F\u5426\u6B63\u786E\u6216\u7A0D\u540E\u518D\u8BD5\u3002",en:"Please check if the url address is correct or try again later.",zh_TW:"\u8ACB\u6AA2\u67E5 URL \u662F\u5426\u6B63\u78BA\u6216\u7A0D\u5F8C\u518D\u8A66\u3002"},deepl_api:{zh:"DeepL \u63A5\u53E3",en:"DeepL API",zh_TW:"DeepL \u4ECB\u9762"},deepl_key:{zh:"DeepL \u5BC6\u94A5",en:"DeepL Key",zh_TW:"DeepL \u91D1\u9470"},openai_api:{zh:"OpenAI \u63A5\u53E3",en:"OpenAI API",zh_TW:"OpenAI \u4ECB\u9762"},openai_key:{zh:"OpenAI \u5BC6\u94A5",en:"OpenAI Key",zh_TW:"OpenAI \u91D1\u9470"},openai_model:{zh:"OpenAI \u6A21\u578B",en:"OpenAI Model",zh_TW:"OpenAI \u6A21\u578B"},openai_prompt:{zh:"OpenAI \u63D0\u793A\u8BCD",en:"OpenAI Prompt",zh_TW:"OpenAI \u63D0\u793A\u8A5E"},if_clear_cache:{zh:"\u662F\u5426\u6E05\u9664\u7F13\u5B58\uFF08\u9ED8\u8BA4\u7F13\u5B587\u5929\uFF09",en:"Whether clear cache (Default cache is 7 days)",zh_TW:"\u662F\u5426\u6E05\u9664\u5FEB\u53D6\uFF08\u9810\u8A2D\u5FEB\u53D67\u5929\uFF09"},clear_cache_never:{zh:"\u4E0D\u6E05\u9664\u7F13\u5B58",en:"Never clear cache",zh_TW:"\u4E0D\u6E05\u9664\u5FEB\u53D6"},clear_cache_restart:{zh:"\u91CD\u542F\u6D4F\u89C8\u5668\u65F6\u6E05\u9664\u7F13\u5B58",en:"Clear cache when restarting browser",zh_TW:"\u91CD\u65B0\u555F\u52D5\u700F\u89BD\u5668\u6642\u6E05\u9664\u5FEB\u53D6"},data_sync_type:{zh:"\u6570\u636E\u540C\u6B65\u65B9\u5F0F",en:"Data Sync Type",zh_TW:"\u8CC7\u6599\u540C\u6B65\u65B9\u5F0F"},data_sync_url:{zh:"\u6570\u636E\u540C\u6B65\u63A5\u53E3",en:"Data Sync API",zh_TW:"\u8CC7\u6599\u540C\u6B65\u4ECB\u9762"},data_sync_user:{zh:"\u6570\u636E\u540C\u6B65\u8D26\u6237",en:"Data Sync User",zh_TW:"\u8CC7\u6599\u540C\u6B65\u5E33\u865F"},data_sync_key:{zh:"\u6570\u636E\u540C\u6B65\u5BC6\u94A5",en:"Data Sync Key",zh_TW:"\u8CC7\u6599\u540C\u6B65\u91D1\u9470"},sync_now:{zh:"\u7ACB\u5373\u540C\u6B65",en:"Sync Now",zh_TW:"\u7ACB\u5373\u540C\u6B65"},sync_success:{zh:"\u540C\u6B65\u6210\u529F\uFF01",en:"Sync Success",zh_TW:"\u540C\u6B65\u6210\u529F\uFF01"},sync_failed:{zh:"\u540C\u6B65\u5931\u8D25\uFF01",en:"Sync Error",zh_TW:"\u540C\u6B65\u5931\u6557\uFF01"},error_got_some_wrong:{zh:"\u62B1\u6B49\uFF0C\u51FA\u9519\u4E86\uFF01",en:"Sorry, something went wrong!",zh_TW:"\u62B1\u6B49\uFF0C\u767C\u751F\u932F\u8AA4\uFF01"},error_sync_setting:{zh:"\u60A8\u7684\u540C\u6B65\u7C7B\u578B\u5FC5\u987B\u4E3A\u201CKISS-Worker\u201D\uFF0C\u4E14\u9700\u586B\u5199\u5B8C\u6574",en:"Your sync type must be \"KISS-Worker\" and must be filled in completely",zh_TW:"\u60A8\u7684\u540C\u6B65\u578B\u614B\u5FC5\u9808\u70BA\u300CKISS-Worker\u300D\uFF0C\u4E14\u9700\u586B\u5BEB\u5B8C\u6574\u3002"},click_test:{zh:"\u70B9\u51FB\u6D4B\u8BD5",en:"Click Test",zh_TW:"\u9EDE\u64CA\u6E2C\u8A66"},test_success:{zh:"\u6D4B\u8BD5\u6210\u529F",en:"Test success",zh_TW:"\u6E2C\u8A66\u6210\u529F"},test_failed:{zh:"\u6D4B\u8BD5\u5931\u8D25",en:"Test failed",zh_TW:"\u6E2C\u8A66\u5931\u6557"},clear_all_cache_now:{zh:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u7F13\u5B58",en:"Clear all cache now",zh_TW:"\u7ACB\u5373\u6E05\u9664\u5168\u90E8\u5FEB\u53D6"},clear_cache:{zh:"\u6E05\u9664\u7F13\u5B58",en:"Clear Cache",zh_TW:"\u6E05\u9664\u5FEB\u53D6"},clear_success:{zh:"\u6E05\u9664\u6210\u529F",en:"Clear success",zh_TW:"\u6E05\u9664\u6210\u529F"},clear_failed:{zh:"\u6E05\u9664\u5931\u8D25",en:"Clear failed",zh_TW:"\u6E05\u9664\u5931\u6557"},share:{zh:"\u5206\u4EAB",en:"Share",zh_TW:"\u5206\u4EAB"},clear_all:{zh:"\u6E05\u7A7A",en:"Clear All",zh_TW:"\u6E05\u7A7A"},help:{zh:"\u6C42\u52A9",en:"Help",zh_TW:"\u6C42\u52A9"},restore_default:{zh:"\u6062\u590D\u9ED8\u8BA4",en:"Restore Default",zh_TW:"\u6062\u5FA9\u9810\u8A2D"},shortcuts_setting:{zh:"\u5FEB\u6377\u952E\u8BBE\u7F6E",en:"Shortcuts Setting",zh_TW:"\u5FEB\u6377\u9375\u8A2D\u5B9A"},toggle_translate_shortcut:{zh:"\"\u5F00\u542F\u7FFB\u8BD1\"\u5FEB\u6377\u952E",en:"\"Toggle Translate\" Shortcut",zh_TW:"\u300C\u958B\u555F\u7FFB\u8B6F\u300D\u5FEB\u6377\u9375"},toggle_style_shortcut:{zh:"\"\u5207\u6362\u6837\u5F0F\"\u5FEB\u6377\u952E",en:"\"Toggle Style\" Shortcut",zh_TW:"\u300C\u5207\u63DB\u6A23\u5F0F\u300D\u5FEB\u6377\u9375"},toggle_popup_shortcut:{zh:"\"\u6253\u5F00\u5F39\u7A97\"\u5FEB\u6377\u952E",en:"\"Open Popup\" Shortcut",zh_TW:"\u300C\u958B\u555F\u5F48\u7A97\u300D\u5FEB\u6377\u9375"},open_setting_shortcut:{zh:"\"\u6253\u5F00\u8BBE\u7F6E\"\u5FEB\u6377\u952E",en:"\"Open Setting\" Shortcut",zh_TW:"\u300C\u958B\u555F\u8A2D\u5B9A\u300D\u5FEB\u6377\u9375"},hide_fab_button:{zh:"\u9690\u85CF\u60AC\u6D6E\u6309\u94AE",en:"Hide Fab Button",zh_TW:"\u96B1\u85CF\u61F8\u6D6E\u6309\u9215"},fab_click_action:{zh:"\u5355\u51FB\u60AC\u6D6E\u6309\u94AE\u52A8\u4F5C",en:"Single Click Fab Action",zh_TW:"\u55AE\u64CA\u61F8\u6D6E\u6309\u94AE\u52D5\u4F5C"},fab_click_menu:{zh:"\u5F39\u51FA\u83DC\u5355",en:"Popup Menu",zh_TW:"\u5F48\u51FA\u9078\u55AE"},fab_click_translate:{zh:"\u76F4\u63A5\u7FFB\u8BD1",en:"Translate",zh_TW:"\u76F4\u63A5\u7FFB\u8B6F"},hide_tran_button:{zh:"\u9690\u85CF\u7FFB\u8BD1\u6309\u94AE",en:"Hide Translate Button",zh_TW:"\u96B1\u85CF\u7FFB\u8B6F\u6309\u9215"},hide_click_away:{zh:"\u70B9\u51FB\u5916\u90E8\u5173\u95ED\u5F39\u7A97",en:"Click outside to close the pop-up window",zh_TW:"\u9EDE\u64CA\u5916\u90E8\u95DC\u9589\u5F48\u7A97"},use_simple_style:{zh:"\u4F7F\u7528\u7B80\u6D01\u754C\u9762",en:"Use a simple interface",zh_TW:"\u4F7F\u7528\u7C21\u6F54\u4ECB\u9762"},show:{zh:"\u663E\u793A",en:"Show",zh_TW:"\u986F\u793A"},hide:{zh:"\u9690\u85CF",en:"Hide",zh_TW:"\u96B1\u85CF"},save_rule:{zh:"\u4FDD\u5B58\u89C4\u5219",en:"Save Rule",zh_TW:"\u5132\u5B58\u898F\u5247"},global_rule:{zh:"\u5168\u5C40\u89C4\u5219",en:"Global Rule",zh_TW:"\u5168\u57DF\u898F\u5247"},input_translate:{zh:"\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u8F38\u5165\u6846\u7FFB\u8B6F"},use_input_box_translation:{zh:"\u542F\u7528\u8F93\u5165\u6846\u7FFB\u8BD1",en:"Input Box Translation",zh_TW:"\u555F\u7528\u8F38\u5165\u6846\u7FFB\u8B6F"},input_selector:{zh:"\u8F93\u5165\u6846\u9009\u62E9\u5668",en:"Input Selector",zh_TW:"\u8F38\u5165\u6846\u9078\u64C7\u5668"},input_selector_helper:{zh:"\u7528\u4E8E\u8F93\u5165\u6846\u7FFB\u8BD1\u3002",en:"Used for input box translation.",zh_TW:"\u7528\u65BC\u8F38\u5165\u6846\u7FFB\u8B6F\u3002"},trigger_trans_shortcut:{zh:"\u89E6\u53D1\u7FFB\u8BD1\u5FEB\u6377\u952E",en:"Trigger Translation Shortcut Keys",zh_TW:"\u89F8\u767C\u7FFB\u8B6F\u5FEB\u6377\u9375"},trigger_trans_shortcut_help:{zh:"\u9ED8\u8BA4\u4E3A\u5355\u51FB\u201CAltLeft+KeyI\u201D",en:"Default is \"AltLeft+KeyI\"",zh_TW:"\u9810\u8A2D\u70BA\u6309\u4E0B\u300CAltLeft+KeyI\u300D"},shortcut_press_count:{zh:"\u5FEB\u6377\u952E\u8FDE\u51FB\u6B21\u6570",en:"Shortcut Press Number",zh_TW:"\u5FEB\u6377\u9375\u9023\u64CA\u6B21\u6578"},combo_timeout:{zh:"\u8FDE\u51FB\u8D85\u65F6\u65F6\u95F4 (10-1000ms)",en:"Combo Timeout (10-1000ms)",zh_TW:"\u9023\u64CA\u903E\u6642 (10-1000ms)"},input_trans_start_sign:{zh:"\u7FFB\u8BD1\u8D77\u59CB\u6807\u8BC6",en:"Translation Start Sign",zh_TW:"\u7FFB\u8B6F\u8D77\u59CB\u6A19\u8A18"},input_trans_start_sign_help:{zh:"\u6807\u8BC6\u540E\u9762\u53EF\u4EE5\u52A0\u76EE\u6807\u8BED\u8A00\u4EE3\u7801\uFF0C\u5982\uFF1A \u201C/en \u4F60\u597D\u201D\u3001\u201C/zh hello\u201D",en:"The target language code can be added after the sign, such as: \"/en \u4F60\u597D\", \"/zh hello\"",zh_TW:"\u6A19\u8A18\u5F8C\u53EF\u52A0\u4E0A\u76EE\u6A19\u8A9E\u8A00\u4EE3\u78BC\uFF0C\u4F8B\u5982\uFF1A\u300C/en \u4F60\u597D\u300D\u3001\u300C/zh hello\u300D"},detect_lang_remote:{zh:"\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B",en:"Remote language detection",zh_TW:"\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C"},detect_lang_remote_help:{zh:"\u542F\u7528\u540E\u68C0\u6D4B\u51C6\u786E\u5EA6\u589E\u52A0\uFF0C\u4F46\u4F1A\u964D\u4F4E\u7FFB\u8BD1\u901F\u5EA6\uFF0C\u8BF7\u914C\u60C5\u5F00\u542F",en:"After enabling, the detection accuracy will increase, but it will reduce the translation speed. Please enable it as appropriate.",zh_TW:"\u555F\u7528\u5F8C\u53EF\u63D0\u5347\u5075\u6E2C\u6E96\u78BA\u5EA6\uFF0C\u4F46\u6703\u964D\u4F4E\u7FFB\u8B6F\u901F\u5EA6\uFF0C\u8ACB\u8996\u9700\u8981\u958B\u555F\u3002"},detect_lang_service:{zh:"\u8BED\u8A00\u68C0\u6D4B\u670D\u52A1",en:"Language detect service",zh_TW:"\u8A9E\u8A00\u6AA2\u6E2C\u670D\u52D9"},disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},enable:{zh:"\u542F\u7528",en:"Enable",zh_TW:"\u555F\u7528"},selection_translate:{zh:"\u5212\u8BCD\u7FFB\u8BD1",en:"Selection Translate",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F"},toggle_selection_translate:{zh:"\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"Use Selection Translate",zh_TW:"\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},trigger_tranbox_shortcut:{zh:"\u663E\u793A\u7FFB\u8BD1\u6846/\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57\u5FEB\u6377\u952E",en:"Open Translate Popup/Translate Selected Shortcut",zh_TW:"\u986F\u793A\u7FFB\u8B6F\u6846\uFF0F\u7FFB\u8B6F\u9078\u4E2D\u6587\u5B57\u5FEB\u6377\u9375"},tranbtn_offset_x:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Button Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbtn_offset_y:{zh:"\u7FFB\u8BD1\u6309\u94AE\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Button Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6309\u9215\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},tranbox_offset_x:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBX\uFF08\xB1200\uFF09",en:"Translate Box Offset X (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB X\uFF08\xB1200\uFF09"},tranbox_offset_y:{zh:"\u7FFB\u8BD1\u6846\u504F\u79FBY\uFF08\xB1200\uFF09",en:"Translate Box Offset Y (\xB1200)",zh_TW:"\u7FFB\u8B6F\u6846\u4F4D\u79FB Y\uFF08\xB1200\uFF09"},translated_text:{zh:"\u8BD1\u6587",en:"Translated Text",zh_TW:"\u8B6F\u6587"},original_text:{zh:"\u539F\u6587",en:"Original Text",zh_TW:"\u539F\u6587"},favorite_words:{zh:"\u6536\u85CF\u8BCD\u6C47",en:"Favorite Words",zh_TW:"\u6536\u85CF\u8A5E\u5F59"},touch_setting:{zh:"\u89E6\u5C4F\u8BBE\u7F6E",en:"Touch Setting",zh_TW:"\u89F8\u63A7\u8A2D\u5B9A"},touch_translate_shortcut:{zh:"\u89E6\u5C4F\u7FFB\u8BD1\u5FEB\u6377\u65B9\u5F0F (\u652F\u6301\u591A\u9009)",en:"Touch Translate Shortcut (multiple supported)",zh_TW:"\u89F8\u63A7\u7FFB\u8B6F\u6377\u5F91 (\u652F\u63F4\u591A\u9078)"},touch_tap_0:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},touch_tap_2:{zh:"\u53CC\u6307\u8F7B\u89E6",en:"Two finger tap",zh_TW:"\u96D9\u6307\u8F15\u89F8"},touch_tap_3:{zh:"\u4E09\u6307\u8F7B\u89E6",en:"Three finger tap",zh_TW:"\u4E09\u6307\u8F15\u89F8"},touch_tap_4:{zh:"\u56DB\u6307\u8F7B\u89E6",en:"Four finger tap",zh_TW:"\u56DB\u6307\u8F15\u89F8"},touch_tap_5:{zh:"\u5355\u6307\u53CC\u51FB",en:"Double-click",zh_TW:"\u55AE\u6307\u96D9\u64CA"},touch_tap_6:{zh:"\u5355\u6307\u4E09\u51FB",en:"Triple-click",zh_TW:"\u55AE\u6307\u4E09\u64CA"},touch_tap_7:{zh:"\u53CC\u6307\u53CC\u51FB",en:"Two-finger double-click",zh_TW:"\u96D9\u6307\u96D9\u64CA"},translate_blacklist:{zh:"\u7981\u7528\u7FFB\u8BD1\u540D\u5355",en:"Translate Blacklist",zh_TW:"\u505C\u7528\u7FFB\u8B6F\u540D\u55AE"},disabled_orilist:{zh:"\u7981\u7528Origin\u540D\u5355",en:"Disabled Origin List",zh_TW:"\u505C\u7528 Origin \u540D\u55AE"},disabled_csplist:{zh:"\u7981\u7528CSP\u540D\u5355",en:"Disabled CSP List",zh_TW:"\u505C\u7528 CSP \u540D\u55AE"},disabled_csplist_helper:{zh:"3\u3001\u901A\u8FC7\u8C03\u6574CSP\u7B56\u7565\uFF0C\u4F7F\u5F97\u67D0\u4E9B\u9875\u9762\u80FD\u591F\u6CE8\u5165JS/CSS/Media\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6653\u76F8\u5173\u98CE\u9669\u3002",en:"3. By adjusting the CSP policy, some pages can inject JS/CSS/Media. Please use it with caution unless you are aware of the related risks.",zh_TW:"3. \u900F\u904E\u8ABF\u6574 CSP \u653F\u7B56\uFF0C\u4F7F\u90E8\u5206\u9801\u9762\u53EF\u6CE8\u5165 JS/CSS/Media\u3002\u8ACB\u8B39\u614E\u4F7F\u7528\uFF0C\u9664\u975E\u60A8\u5DF2\u77E5\u6089\u76F8\u95DC\u98A8\u96AA\u3002"},skip_langs:{zh:"\u4E0D\u7FFB\u8BD1\u7684\u8BED\u8A00",en:"Disable Languages",zh_TW:"\u4E0D\u7FFB\u8B6F\u7684\u8A9E\u8A00"},skip_langs_helper:{zh:"\u6B64\u529F\u80FD\u4F9D\u8D56\u51C6\u786E\u7684\u8BED\u8A00\u68C0\u6D4B\uFF0C\u5EFA\u8BAE\u542F\u7528\u8FDC\u7A0B\u8BED\u8A00\u68C0\u6D4B\u3002",en:"This feature relies on accurate language detection. It is recommended to enable remote language detection.",zh_TW:"\u6B64\u529F\u80FD\u4EF0\u8CF4\u6E96\u78BA\u7684\u8A9E\u8A00\u5075\u6E2C\uFF0C\u5EFA\u8B70\u555F\u7528\u9060\u7AEF\u8A9E\u8A00\u5075\u6E2C\u3002"},context_menus:{zh:"\u53F3\u952E\u83DC\u5355",en:"Context Menus",zh_TW:"\u53F3\u9375\u9078\u55AE"},hide_context_menus:{zh:"\u9690\u85CF\u53F3\u952E\u83DC\u5355",en:"Hide Context Menus",zh_TW:"\u96B1\u85CF\u53F3\u9375\u9078\u55AE"},simple_context_menus:{zh:"\u7B80\u5355\u53F3\u952E\u83DC\u5355",en:"Simple_context_menus Context Menus",zh_TW:"\u7C21\u6613\u53F3\u9375\u9078\u55AE"},secondary_context_menus:{zh:"\u4E8C\u7EA7\u53F3\u952E\u83DC\u5355",en:"Secondary Context Menus",zh_TW:"\u6B21\u7D1A\u53F3\u9375\u9078\u55AE"},mulkeys_help:{zh:"\u652F\u6301\u7528\u6362\u884C\u6216\u82F1\u6587\u9017\u53F7\u201C,\u201D\u5206\u9694\uFF0C\u8F6E\u8BE2\u8C03\u7528\u3002",en:"Supports polling calls separated by newlines or English commas \",\".",zh_TW:"\u652F\u63F4\u4EE5\u63DB\u884C\u6216\u82F1\u6587\u9017\u865F\u300C,\u300D\u5206\u9694\uFF0C\u8F2A\u8A62\u547C\u53EB\u3002"},translation_element_tag:{zh:"\u8BD1\u6587\u5143\u7D20\u6807\u7B7E",en:"Translation Element Tag",zh_TW:"\u8B6F\u6587\u5143\u7D20\u6A19\u7C64"},show_only_translations:{zh:"\u4EC5\u663E\u793A\u8BD1\u6587",en:"Show Only Translations",zh_TW:"\u50C5\u986F\u793A\u8B6F\u6587"},show_only_translations_help:{zh:"\u975E\u5B8C\u7F8E\u5B9E\u73B0\uFF0C\u67D0\u4E9B\u9875\u9762\u53EF\u80FD\u6709\u6837\u5F0F\u7B49\u95EE\u9898\u3002",en:"It is not a perfect implementation and some pages may have style issues.",zh_TW:"\u6B64\u70BA\u975E\u5B8C\u7F8E\u5BE6\u4F5C\uFF0C\u90E8\u5206\u9801\u9762\u53EF\u80FD\u51FA\u73FE\u6A23\u5F0F\u7B49\u554F\u984C\u3002"},translate_page_title:{zh:"\u662F\u5426\u7FFB\u8BD1\u9875\u9762\u6807\u9898",en:"Translate Page Title",zh_TW:"\u662F\u5426\u7FFB\u8B6F\u9801\u9762\u6A19\u984C"},more:{zh:"\u66F4\u591A",en:"More",zh_TW:"\u66F4\u591A"},less:{zh:"\u66F4\u5C11",en:"Less",zh_TW:"\u66F4\u5C11"},fixer_selector:{zh:"\u7F51\u9875\u4FEE\u590D\u9009\u62E9\u5668",en:"Fixer Selector",zh_TW:"\u7DB2\u9801\u4FEE\u5FA9\u9078\u64C7\u5668"},reg_niutrans:{zh:"\u83B7\u53D6\u5C0F\u725B\u7FFB\u8BD1\u5BC6\u94A5\u3010\u7B80\u7EA6\u7FFB\u8BD1\u4E13\u5C5E\u65B0\u7528\u6237\u6CE8\u518C\u8D60\u9001300\u4E07\u5B57\u7B26\u3011",en:"Get NiuTrans APIKey [KISS Translator Exclusive New User Registration Free 3 Million Characters]",zh_TW:"\u53D6\u5F97\u5C0F\u725B\u7FFB\u8B6F\u91D1\u9470\u3010\u7C21\u7D04\u7FFB\u8B6F\u5C08\u5C6C\u65B0\u7528\u6236\u8A3B\u518A\u8D08\u9001 300 \u842C\u5B57\u5143\u3011"},trigger_mode:{zh:"\u89E6\u53D1\u65B9\u5F0F",en:"Trigger Mode",zh_TW:"\u89F8\u767C\u65B9\u5F0F"},trigger_click:{zh:"\u70B9\u51FB\u89E6\u53D1",en:"Click Trigger",zh_TW:"\u9EDE\u64CA\u89F8\u767C"},trigger_hover:{zh:"\u9F20\u6807\u60AC\u505C\u89E6\u53D1",en:"Hover Trigger",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u89F8\u767C"},trigger_select:{zh:"\u9009\u4E2D\u89E6\u53D1",en:"Select Trigger",zh_TW:"\u9078\u53D6\u89F8\u767C"},extend_styles:{zh:"\u9644\u52A0\u6837\u5F0F",en:"Extend Styles",zh_TW:"\u9644\u52A0\u6A23\u5F0F"},custom_option:{zh:"\u81EA\u5B9A\u4E49\u9009\u9879",en:"Custom Option",zh_TW:"\u81EA\u8A02\u9078\u9805"},translate_selected_text:{zh:"\u7FFB\u8BD1\u9009\u4E2D\u6587\u5B57",en:"Translate Selected Text",zh_TW:"\u7FFB\u8B6F\u9078\u53D6\u6587\u5B57"},toggle_style:{zh:"\u5207\u6362\u6837\u5F0F",en:"Toggle Style",zh_TW:"\u5207\u63DB\u6A23\u5F0F"},open_menu:{zh:"\u6253\u5F00\u5F39\u7A97\u83DC\u5355",en:"Open Popup Menu",zh_TW:"\u958B\u555F\u5F48\u7A97\u9078\u55AE"},open_setting:{zh:"\u6253\u5F00\u8BBE\u7F6E",en:"Open Setting",zh_TW:"\u958B\u555F\u8A2D\u5B9A"},follow_selection:{zh:"\u7FFB\u8BD1\u6846\u8DDF\u968F\u9009\u4E2D\u6587\u672C",en:"Transbox Follow Selection",zh_TW:"\u7FFB\u8B6F\u6846\u8DDF\u96A8\u9078\u53D6\u6587\u5B57"},tranbox_auto_height:{zh:"\u7FFB\u8BD1\u6846\u81EA\u9002\u5E94\u9AD8\u5EA6",en:"Translation box adaptive height",zh_TW:"\u7FFB\u8B6F\u6846\u81EA\u9069\u61C9\u9AD8\u5EA6"},translate_start_hook:{zh:"\u7FFB\u8BD1\u5F00\u59CB\u94A9\u5B50\u51FD\u6570",en:"Translate Start Hook",zh_TW:"\u7FFB\u8B6F\u958B\u59CB Hook"},translate_start_hook_helper:{zh:"\u7FFB\u8BD1\u524D\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}",en:"Run before translation, input parameters are: {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}",zh_TW:"\u7FFB\u8B6F\u524D\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A {text,\n fromLang,\n toLang,\n apiSetting,\n docInfo,\n glossary,}"},translate_end_hook:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u94A9\u5B50\u51FD\u6570",en:"Translate End Hook",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210 Hook"},translate_end_hook_helper:{zh:"\u7FFB\u8BD1\u5B8C\u6210\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})",en:"Run when translation is complete, input parameters are: ({hostNode, parentNode, nodes, wrapperNode, innerNode})",zh_TW:"\u7FFB\u8B6F\u5B8C\u6210\u6642\u904B\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A ({hostNode, parentNode, nodes, wrapperNode, innerNode})"},translate_remove_hook:{zh:"\u7FFB\u8BD1\u79FB\u9664\u94A9\u5B50\u51FD\u6570",en:"Translate Removed Hook",zh_TW:"\u7FFB\u8B6F\u79FB\u9664 Hook"},translate_remove_hook_helper:{zh:"\u7FFB\u8BD1\u79FB\u9664\u65F6\u8FD0\u884C\uFF0C\u5165\u53C2\u4E3A\uFF1A \u7FFB\u8BD1\u8282\u70B9\u3002",en:"Run when translation is removed, the input parameters are: translation node.",zh_TW:"\u79FB\u9664\u7FFB\u8B6F\u6642\u57F7\u884C\uFF0C\u5165\u53C3\u70BA\uFF1A\u7FFB\u8B6F\u7BC0\u9EDE\u3002"},english_dict:{zh:"\u82F1\u6587\u8BCD\u5178",en:"English Dictionary",zh_TW:"\u82F1\u6587\u5B57\u5178"},english_suggest:{zh:"\u82F1\u6587\u5EFA\u8BAE",en:"English Suggest",zh_TW:"\u82F1\u6587\u5EFA\u8B70"},api_name:{zh:"\u63A5\u53E3\u540D\u79F0",en:"API Name",zh_TW:"\u4ECB\u9762\u540D\u7A31"},is_disabled:{zh:"\u662F\u5426\u7981\u7528",en:"Is Disabled",zh_TW:"\u662F\u5426\u505C\u7528"},translate_selected:{zh:"\u662F\u5426\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",en:"If translate selected",zh_TW:"\u662F\u5426\u555F\u7528\u5283\u8A5E\u7FFB\u8B6F"},use_batch_fetch:{zh:"\u662F\u5426\u805A\u5408\u53D1\u9001\u7FFB\u8BD1\u8BF7\u6C42",en:"Whether to aggregate and send translation requests",zh_TW:"\u662F\u5426\u805A\u5408\u767C\u9001\u7FFB\u8B6F\u8ACB\u6C42"},batch_interval:{zh:"\u805A\u5408\u8BF7\u6C42\u7B49\u5F85\u65F6\u95F4(100-10000)",en:"Aggregation request waiting time (100-10000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u7B49\u5F85\u6642\u9593(100-10000)"},batch_size:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6BB5\u843D\u6570(1-100)",en:"Maximum number of paragraphs in an aggregation request (1-100)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6BB5\u843D\u6578(1-100)"},batch_length:{zh:"\u805A\u5408\u8BF7\u6C42\u6700\u5927\u6587\u672C\u957F\u5EA6(1000-100000)",en:"Maximum text length for aggregation requests (1000-100000)",zh_TW:"\u805A\u5408\u8ACB\u6C42\u6700\u5927\u6587\u5B57\u9577\u5EA6(1000-100000)"},use_context:{zh:"\u662F\u5426\u542F\u7528\u667A\u80FD\u4E0A\u4E0B\u6587",en:"Whether to enable AI context",zh_TW:"\u662F\u5426\u555F\u7528\u667A\u6167\u4E0A\u4E0B\u6587"},context_size:{zh:"\u4E0A\u4E0B\u6587\u4F1A\u8BDD\u6570\u91CF(1-20)",en:"Number of context sessions(1-20)",zh_TW:"\u4E0A\u4E0B\u6587\u6703\u8A71\u6578\u91CF(1-20)"},auto_scan_page:{zh:"\u81EA\u52A8\u626B\u63CF\u9875\u9762",en:"Auto scan page",zh_TW:"\u81EA\u52D5\u6383\u63CF\u9801\u9762"},has_rich_text:{zh:"\u542F\u7528\u5BCC\u6587\u672C\u7FFB\u8BD1",en:"Enable rich text translation",zh_TW:"\u555F\u7528\u5BCC\u6587\u672C\u7FFB\u8B6F"},has_shadowroot:{zh:"\u626B\u63CFShadowroot",en:"Scan Shadowroot",zh_TW:"\u6383\u63CFShadowroot"},mousehover_translate:{zh:"\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Mouseover Translation",zh_TW:"\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},use_mousehover_translation:{zh:"\u542F\u7528\u9F20\u6807\u60AC\u505C\u7FFB\u8BD1",en:"Enable mouseover translation",zh_TW:"\u555F\u7528\u6ED1\u9F20\u61F8\u505C\u7FFB\u8B6F"},selected_translation_alert:{zh:"\u5212\u8BCD\u7FFB\u8BD1\u7684\u5F00\u542F\u548C\u5173\u95ED\u8BF7\u5230\u201C\u89C4\u5219\u8BBE\u7F6E\u201D\u91CC\u9762\u8BBE\u7F6E\u3002",en:"To turn selected translation on or off, please go to \"Rule Settings\".",zh_TW:"\u5283\u8A5E\u7FFB\u8B6F\u7684\u958B\u555F\u548C\u95DC\u9589\u8ACB\u5230\u300C\u898F\u5247\u8A2D\u5B9A\u300D\u88E1\u9762\u8A2D\u5B9A\u3002"},mousehover_key_help:{zh:"\u5F53\u5FEB\u6377\u952E\u7F6E\u7A7A\u65F6\u8868\u793A\u9F20\u6807\u60AC\u505C\u76F4\u63A5\u7FFB\u8BD1",en:"When the shortcut key is empty, it means that the mouse hovers to translate directly",zh_TW:"\u7576\u5FEB\u6377\u9375\u7F6E\u7A7A\u6642\u8868\u793A\u6ED1\u9F20\u61F8\u505C\u76F4\u63A5\u7FFB\u8B6F"},autoscan_alt:{zh:"\u81EA\u52A8\u626B\u63CF",en:"Auto Scan",zh_TW:"\u81EA\u52D5\u6383\u63CF"},shadowroot_alt:{zh:"ShadowRoot",en:"ShadowRoot",zh_TW:"ShadowRoot"},richtext_alt:{zh:"\u4FDD\u7559\u5BCC\u6587\u672C",en:"Rich Text",zh_TW:"\u4FDD\u7559\u5BCC\u6587\u672C"},transonly_alt:{zh:"\u9690\u85CF\u539F\u6587",en:"Hide Original",zh_TW:"\u96B1\u85CF\u539F\u6587"},confirm_title:{zh:"\u786E\u8BA4",en:"Confirm",zh_TW:"\u78BA\u8A8D"},confirm_message:{zh:"\u786E\u5B9A\u64CD\u4F5C\u5417\uFF1F",en:"Are you sure you want to proceed?",zh_TW:"\u78BA\u5B9A\u64CD\u4F5C\u55CE\uFF1F"},confirm_action:{zh:"\u786E\u5B9A",en:"Confirm",zh_TW:"\u78BA\u5B9A"},cancel_action:{zh:"\u53D6\u6D88",en:"Cancel",zh_TW:"\u53D6\u6D88"},pls_press_shortcut:{zh:"\u8BF7\u6309\u4E0B\u5FEB\u6377\u952E\u7EC4\u5408",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},load_setting_err:{zh:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002",en:"Please press the shortcut key combination",zh_TW:"\u8ACB\u6309\u4E0B\u5FEB\u901F\u9375\u7D44\u5408"},translation_style:{zh:"\u7FFB\u8BD1\u98CE\u683C",en:"Translation style",zh_TW:"\u7FFB\u8B6F\u98A8\u683C"},placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},tag_name:{zh:"\u5360\u4F4D\u6807\u7B7E\u540D",en:"Placeholder tag name",zh_TW:"\u4F54\u4F4D\u6A19\u540D"},system_prompt_helper:{zh:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9ED8\u8BA4Prompt\u7684\u60C5\u51B5\u4E0B\uFF0C\u8BF7\u52FF\u968F\u610F\u4FEE\u6539\uFF0C\u5426\u5219\u53EF\u80FD\u65E0\u6CD5\u5DE5\u4F5C\u3002",en:"Do not modify the default prompt without fully understanding it, otherwise it may not work.",zh_TW:"\u5728\u672A\u5B8C\u5168\u7406\u89E3\u9810\u8A2DPrompt\u7684\u60C5\u6CC1\u4E0B\uFF0C\u8ACB\u52FF\u96A8\u610F\u4FEE\u6539\uFF0C\u5426\u5247\u53EF\u80FD\u7121\u6CD5\u904B\u4F5C\u3002"},if_pre_init:{zh:"\u662F\u5426\u9884\u521D\u59CB\u5316",en:"Whether to pre-initialize",zh_TW:"\u662F\u5426\u9810\u521D\u59CB\u5316"},export_old:{zh:"\u5BFC\u51FA\u65E7\u7248",en:"Export old version",zh_TW:"\u532F\u51FA\u820A\u7248"},favorite_words_helper:{zh:"\u5BFC\u5165\u8BCD\u6C47\u8BF7\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u4E2A\u5355\u8BCD\u3002",en:"To import vocabulary, please use a txt file with one word per line.",zh_TW:"\u532F\u5165\u8A5E\u5F59\u8ACB\u4F7F\u7528txt\u6587\u4EF6\uFF0C\u6BCF\u4E00\u884C\u4E00\u500B\u55AE\u5B57\u3002"},btn_tip_click_away:{zh:"\u5931\u7126\u9690\u85CF/\u663E\u793A",en:"Loss of focus hide/show",zh_TW:"\u5931\u7126\u96B1\u85CF/\u986F\u793A"},btn_tip_follow_selection:{zh:"\u8DDF\u968F/\u56FA\u5B9A\u6A21\u5F0F",en:"Follow/Fixed Mode",zh_TW:"\u8DDF\u96A8/\u56FA\u5B9A\u6A21\u5F0F"},btn_tip_simple_style:{zh:"\u8FF7\u4F60/\u5E38\u89C4\u6A21\u5F0F",en:"Mini/Regular Mode",zh_TW:"\u8FF7\u4F60/\u5E38\u898F\u6A21\u5F0F"},api_placeholder:{zh:"\u5360\u4F4D\u7B26",en:"Placeholder",zh_TW:"\u4F54\u4F4D\u7B26"},api_placetag:{zh:"\u5360\u4F4D\u6807\u7B7E",en:"Placeholder tags",zh_TW:"\u4F54\u4F4D\u6A19"},detected_lang:{zh:"\u8BED\u8A00\u68C0\u6D4B",en:"Language detection",zh_TW:"\u8A9E\u8A00\u5075\u6E2C"},detected_result:{zh:"\u68C0\u6D4B\u7ED3\u679C",en:"Detect result",zh_TW:"\u6AA2\u6E2C\u7D50\u679C"},subtitle_translate:{zh:"\u5B57\u5E55\u7FFB\u8BD1",en:"Subtitle translate",zh_TW:"\u5B57\u5E55\u7FFB\u8B6F"},toggle_subtitle_translate:{zh:"\u542F\u7528\u5B57\u5E55\u7FFB\u8BD1",en:"Enable subtitle translation",zh_TW:"\u555F\u7528\u5B57\u5E55\u7FFB\u8B6F"},is_bilingual_view:{zh:"\u53CC\u8BED\u663E\u793A",en:"Enable bilingual display",zh_TW:"\u96D9\u8A9E\u986F\u793A"},is_skip_ad:{zh:"\u662F\u5426\u5FEB\u8FDB\u5E7F\u544A",en:"Should I fast forward to the ad?",zh_TW:"\u662F\u5426\u5FEB\u8F49\u5EE3\u544A"},background_styles:{zh:"\u80CC\u666F\u6837\u5F0F",en:"DBackground Style",zh_TW:"\u80CC\u666F\u6A23\u5F0F"},origin_styles:{zh:"\u539F\u6587\u6837\u5F0F",en:"Original style",zh_TW:"\u539F\u6587\u6A23\u5F0F"},translation_styles:{zh:"\u8BD1\u6587\u6837\u5F0F",en:"Translation style",zh_TW:"\u8B6F\u6587\u6A23\u5F0F"},ai_segmentation:{zh:"AI\u667A\u80FD\u65AD\u53E5",en:"AI intelligent punctuation",zh_TW:"AI\u667A\u6167\u65B7\u53E5"},ai_chunk_length:{zh:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)",en:"AI processing chunk length(200-20000)",zh_TW:"AI\u5904\u7406\u5207\u5272\u957F\u5EA6(200-20000)"},subtitle_helper_1:{zh:"1\u3001\u76EE\u524D\u4EC5\u652F\u6301Youtube\u684C\u9762\u7F51\u7AD9\u3002",en:"1. Currently only supports Youtube desktop website.",zh_TW:"1.\u76EE\u524D\u50C5\u652F\u63F4Youtube\u684C\u9762\u7DB2\u7AD9\uFF0C\u4E14\u50C5\u652F\u63F4\u700F\u89BD\u5668\u64F4\u5145\u529F\u80FD\u3002"},subtitle_helper_2:{zh:"2\u3001\u63D2\u4EF6\u5185\u7F6E\u57FA\u7840\u7684\u5B57\u5E55\u5408\u5E76\u3001\u65AD\u53E5\u7B97\u6CD5\uFF0C\u53EF\u6EE1\u8DB3\u5927\u90E8\u5206\u60C5\u51B5\u3002",en:"2. The plug-in has built-in basic subtitle merging and sentence segmentation algorithms, which can meet most situations.",zh_TW:"2.\u63D2\u4EF6\u5167\u5EFA\u57FA\u790E\u7684\u5B57\u5E55\u5408\u4F75\u3001\u65B7\u53E5\u6F14\u7B97\u6CD5\uFF0C\u53EF\u6EFF\u8DB3\u5927\u90E8\u5206\u60C5\u6CC1\u3002"},subtitle_helper_3:{zh:"3\u3001\u4EA6\u53EF\u4EE5\u542F\u7528AI\u667A\u80FD\u65AD\u53E5\uFF0C\u4F46\u9700\u8003\u8651\u5207\u5272\u957F\u5EA6\u53CAAI\u63A5\u53E3\u80FD\u529B\uFF0C\u53EF\u80FD\u5904\u7406\u65F6\u95F4\u4F1A\u5F88\u957F\uFF0C\u751A\u81F3\u5904\u7406\u5931\u8D25\uFF0C\u5BFC\u81F4\u65E0\u6CD5\u770B\u5230\u5B57\u5E55\u3002",en:"3. You can also enable AI intelligent segmentation, but you need to consider the segmentation length and AI interface capabilities. The processing time may be very long or even fail, resulting in the inability to see subtitles.",zh_TW:"3.\u4EA6\u53EF\u555F\u7528AI\u667A\u80FD\u65B7\u53E5\uFF0C\u4F46\u9700\u8003\u616E\u5207\u5272\u9577\u5EA6\u53CAAI\u4ECB\u9762\u80FD\u529B\uFF0C\u53EF\u80FD\u8655\u7406\u6642\u9593\u6703\u5F88\u9577\uFF0C\u751A\u81F3\u8655\u7406\u5931\u6557\uFF0C\u5C0E\u81F4\u7121\u6CD5\u770B\u5230\u5B57\u5E55\u3002"},default_styles_example:{zh:"\u9ED8\u8BA4\u6837\u5F0F\u53C2\u8003\uFF1A",en:"Default styles reference:",zh_TW:"\u8A8D\u6A23\u5F0F\u53C3\u8003\uFF1A"},subtitle_load_succeed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01",en:"Bilingual subtitles loaded successfully!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u6210\u529F\uFF01"},subtitle_load_failed:{zh:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01",en:"Failed to load bilingual subtitles!",zh_TW:"\u53CC\u8BED\u5B57\u5E55\u52A0\u8F7D\u5931\u8D25\uFF01"},try_get_subtitle_data:{zh:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019...",en:"Trying to get subtitle data, please wait...",zh_TW:"\u5C1D\u8BD5\u83B7\u53D6\u5B57\u5E55\u6570\u636E\uFF0C\u8BF7\u7A0D\u5019..."},subtitle_data_processing:{zh:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D...",en:"Subtitle data processing...",zh_TW:"\u5B57\u5E55\u6570\u636E\u5904\u7406\u4E2D..."},starting_to_process_subtitle:{zh:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E...",en:"Starting to process subtitle data...",zh_TW:"\u5F00\u59CB\u5904\u7406\u5B57\u5E55\u6570\u636E..."},subtitle_data_is_ready:{zh:"\u5B57\u5E55\u6570\u636E\u5DF2\u51C6\u5907\u5C31\u7EEA\uFF0C\u8BF7\u70B9\u51FBKT\u6309\u94AE\u52A0\u8F7D",en:"The subtitle data is ready, please click the KT button to load it",zh_TW:"\u5B57\u5E55\u8CC7\u6599\u5DF2\u6E96\u5099\u5C31\u7DD2\uFF0C\u8ACB\u9EDE\u64CAKT\u6309\u9215\u52A0\u8F09"},log_level:{zh:"\u65E5\u5FD7\u7EA7\u522B",en:"Log Level",zh_TW:"\u65E5\u8A8C\u7B49\u7D1A"},goto_custom_api_example:{zh:"\u70B9\u51FB\u67E5\u770B\u3010\u81EA\u5B9A\u4E49\u63A5\u53E3\u793A\u4F8B\u3011",en:"Click to view [Custom Interface Example]",zh_TW:"\u9EDE\u9078\u67E5\u770B\u3010\u81EA\u8A02\u4ECB\u9762\u7BC4\u4F8B\u3011"},split_paragraph:{zh:"\u5207\u5206\u957F\u6BB5\u843D",en:"Split long paragraph",zh_TW:"\u5207\u5206\u9577\u6BB5\u843D"},split_length:{zh:"\u5207\u5206\u957F\u5EA6 (0-10000)",en:"Segmentation length(0-10000)",zh_TW:"\u5207\u5206\u9577\u5EA6(0-10000)"},highlight_words:{zh:"\u9AD8\u4EAE\u6536\u85CF\u8BCD\u6C47",en:"Highlight favorite words",zh_TW:"\u9AD8\u4EAE\u6536\u85CF\u8A5E\u5F59"},split_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},split_textlength:{zh:"\u6309\u7167\u957F\u5EA6\u5207\u5206",en:"Split by length",zh_TW:"\u4F9D\u9577\u5EA6\u5207\u5206"},split_punctuation:{zh:"\u6309\u7167\u53E5\u5B50\u5207\u5206",en:"Split by sentence",zh_TW:"\u6309\u7167\u53E5\u5B50\u5207\u5206"},highlight_disable:{zh:"\u7981\u7528",en:"Disable",zh_TW:"\u505C\u7528"},highlight_beforetrans:{zh:"\u7FFB\u8BD1\u524D\u9AD8\u4EAE",en:"Highlight before translation",zh_TW:"\u7FFB\u8B6F\u524D\u9AD8\u4EAE"},highlight_aftertrans:{zh:"\u7FFB\u8BD1\u540E\u9AD8\u4EAE",en:"Highlight after translation",zh_TW:"\u7FFB\u8B6F\u5F8C\u9AD8\u4EAE"},pagescroll_root_margin:{zh:"\u6EDA\u52A8\u52A0\u8F7D\u63D0\u524D\u89E6\u53D1 (0-10000px)",en:"Early triggering of scroll loading (0-10000px)",zh_TW:"\u6EFE\u52D5\u8F09\u5165\u63D0\u524D\u89F8\u767C (0-10000px)"}};const newI18n=lang=>key=>{var _I18N$key;return((_I18N$key=I18N[key])===null||_I18N$key===void 0?void 0:_I18N$key[lang])||"";}; ;// CONCATENATED MODULE: ./src/config/storage.js const KV_RULES_KEY="kiss-rules_v".concat(APP_VERSION[0],".json");const KV_WORDS_KEY="kiss-words.json";const KV_RULES_SHARE_KEY="kiss-rules-share_v".concat(APP_VERSION[0],".json");const KV_SETTING_KEY="kiss-setting_v".concat(APP_VERSION[0],".json");const KV_SALT_SYNC="KISS-Translator-SYNC";const KV_SALT_SHARE="KISS-Translator-SHARE";const STOKEY_MSAUTH="".concat(APP_NAME,"_msauth");const storage_STOKEY_BDAUTH="".concat(APP_NAME,"_bdauth");const STOKEY_SETTING_OLD="".concat(APP_NAME,"_setting");const STOKEY_RULES_OLD="".concat(APP_NAME,"_rules");const storage_STOKEY_SETTING="".concat(APP_NAME,"_setting_v").concat(APP_VERSION[0]);const storage_STOKEY_RULES="".concat(APP_NAME,"_rules_v").concat(APP_VERSION[0]);const STOKEY_WORDS="".concat(APP_NAME,"_words");const storage_STOKEY_SYNC="".concat(APP_NAME,"_sync");const storage_STOKEY_FAB="".concat(APP_NAME,"_fab");const storage_STOKEY_TRANBOX="".concat(APP_NAME,"_tranbox");const storage_STOKEY_RULESCACHE_PREFIX="".concat(APP_NAME,"_rulescache_");const storage_CACHE_NAME="".concat(APP_NAME,"_cache");const DEFAULT_CACHE_TIMEOUT=3600*24*7;// 缓存超时时间(7天) ;// CONCATENATED MODULE: ./src/config/url.js @@ -56611,7 +56615,7 @@ return putHttpCache({input,init,data});}; * @param {*} init * @returns */const fetch_fetchGM=async function(input){let{method="GET",headers,body,timeout}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return new Promise((resolve,reject)=>{GM.xmlHttpRequest({method,url:input,headers,data:body,// withCredentials: true, -timeout,onload:_ref=>{let{response,responseHeaders,status,statusText}=_ref;const headers={};responseHeaders.split("\n").forEach(line=>{const[name,value]=line.split(":").map(item=>item.trim());if(name&&value){headers[name]=value;}});resolve({body:response,headers,status,statusText});},onerror:reject});});};/** +timeout,onload:_ref=>{let{response,responseHeaders,status,statusText}=_ref;const headers={};responseHeaders.split("\n").forEach(line=>{const[name,value]=line.split(":").map(item=>item.trim());if(name&&value){headers[name]=value;}});resolve({body:response,headers,status,statusText});},onerror:reject,onabort:()=>{reject(new Error("GM request onabort."));},ontimeout:()=>{reject(new Error("GM request timeout."));}});});};/** * 发起请求 * @param {*} input * @param {*} init @@ -56663,20 +56667,12 @@ const interpreter=new (sval_default())({// ECMA Version of the code ecmaVer:"latest",// Code source type // "script" or "module" sourceType:"script",// Whether the code runs in a sandbox -sandBox:true});/* harmony default export */ const libs_interpreter = (interpreter); +sandBox:true}); ;// CONCATENATED MODULE: ./src/apis/history.js const historyMap=new Map();const MsgHistory=function(){let maxSize=arguments.length>0&&arguments[0]!==undefined?arguments[0]:DEFAULT_CONTEXT_SIZE;const messages=[];const add=function(){for(var _len=arguments.length,msgs=new Array(_len),_key=0;_key<_len;_key++){msgs[_key]=arguments[_key];}messages.push(...msgs.filter(Boolean));const extra=messages.length-maxSize;if(extra>0){messages.splice(0,extra);}};const getAll=()=>{return[...messages];};const clear=()=>{messages.length=0;};return{add,getAll,clear};};const getMsgHistory=(apiSlug,maxSize)=>{if(historyMap.has(apiSlug)){return historyMap.get(apiSlug);}const msgHistory=MsgHistory(maxSize);historyMap.set(apiSlug,msgHistory);return msgHistory;}; ;// CONCATENATED MODULE: ./src/apis/trans.js const keyMap=new Map();const urlMap=new Map();// 轮询key/url -const keyPick=function(apiSlug){var _cacheMap$get;let key=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";let cacheMap=arguments.length>2?arguments[2]:undefined;const keys=key.split(/\n|,/).map(item=>item.trim()).filter(Boolean);if(keys.length===0){return"";}const preIndex=(_cacheMap$get=cacheMap.get(apiSlug))!==null&&_cacheMap$get!==void 0?_cacheMap$get:-1;const curIndex=(preIndex+1)%keys.length;cacheMap.set(apiSlug,curIndex);return keys[curIndex];};const genSystemPrompt=_ref=>{let{systemPrompt,from,to}=_ref;return systemPrompt.replaceAll(INPUT_PLACE_FROM,from).replaceAll(INPUT_PLACE_TO,to);};const genUserPrompt=_ref2=>{let{// userPrompt, -tone,glossary={},// from, -to,texts,docInfo}=_ref2;const prompt=JSON.stringify({targetLanguage:to,title:docInfo.title,description:docInfo.description,segments:texts.map((text,i)=>({id:i,text})),glossary,tone});// if (userPrompt.includes(INPUT_PLACE_TEXT)) { -// return userPrompt -// .replaceAll(INPUT_PLACE_FROM, from) -// .replaceAll(INPUT_PLACE_TO, to) -// .replaceAll(INPUT_PLACE_TEXT, prompt); -// } -return prompt;};const parseAIRes=raw=>{if(!raw){return[];}try{const jsonString=extractJson(raw);if(!jsonString)return[];const data=JSON.parse(jsonString);if(Array.isArray(data.translations)){// todo: 考虑序号id可能会打乱 +const keyPick=function(apiSlug){var _cacheMap$get;let key=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";let cacheMap=arguments.length>2?arguments[2]:undefined;const keys=key.split(/\n|,/).map(item=>item.trim()).filter(Boolean);if(keys.length===0){return"";}const preIndex=(_cacheMap$get=cacheMap.get(apiSlug))!==null&&_cacheMap$get!==void 0?_cacheMap$get:-1;const curIndex=(preIndex+1)%keys.length;cacheMap.set(apiSlug,curIndex);return keys[curIndex];};const genSystemPrompt=_ref=>{let{systemPrompt,from,to}=_ref;return systemPrompt.replaceAll(INPUT_PLACE_FROM,from).replaceAll(INPUT_PLACE_TO,to);};const genUserPrompt=_ref2=>{let{nobatchUserPrompt,useBatchFetch,tone,glossary={},from,to,texts,docInfo}=_ref2;if(useBatchFetch){return JSON.stringify({targetLanguage:to,title:docInfo.title,description:docInfo.description,segments:texts.map((text,i)=>({id:i,text})),glossary,tone});}return nobatchUserPrompt.replaceAll(INPUT_PLACE_FROM,from).replaceAll(INPUT_PLACE_TO,to).replaceAll(INPUT_PLACE_TEXT,texts[0]);};const parseAIRes=function(raw){let useBatchFetch=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(!raw){return[];}if(!useBatchFetch){return[[raw]];}try{const jsonString=extractJson(raw);if(!jsonString)return[];const data=JSON.parse(jsonString);if(Array.isArray(data.translations)){// todo: 考虑序号id可能会打乱 return data.translations.map(item=>{var _item$text,_item$sourceLanguage;return[(_item$text=item===null||item===void 0?void 0:item.text)!==null&&_item$text!==void 0?_item$text:"",(_item$sourceLanguage=item===null||item===void 0?void 0:item.sourceLanguage)!==null&&_item$sourceLanguage!==void 0?_item$sourceLanguage:""];});}}catch(err){log_kissLog("parseAIRes",err);}return[];};const parseSTRes=raw=>{if(!raw){return[];}try{// const jsonString = extractJson(raw); // const data = JSON.parse(jsonString); const data=parseBilingualVtt(raw);if(Array.isArray(data)){return data;}}catch(err){kissLog("parseAIRes: subtitle",err);}return[];};const genGoogle=_ref3=>{let{texts,from,to,url,key}=_ref3;const params=query_string.stringify({client:"gtx",dt:"t",dj:1,ie:"UTF-8",sl:from,tl:to,q:texts.join(" ")});url="".concat(url,"?").concat(params);const headers={"Content-type":"application/json"};if(key){headers.Authorization="Bearer ".concat(key);}return{url,headers,method:"GET"};};const genGoogle2=_ref4=>{let{texts,from,to,url,key}=_ref4;const body=[[texts,from,to],"wt_lib"];const headers={"Content-Type":"application/json+protobuf","X-Goog-API-Key":key};return{url,body,headers};};const genMicrosoft=_ref5=>{let{texts,from,to,token}=_ref5;const params=query_string.stringify({from,to,"api-version":"3.0"});const url="https://api-edge.cognitive.microsofttranslator.com/translate?".concat(params);const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(token)};const body=texts.map(text=>({Text:text}));return{url,body,headers};};const genAzureAI=_ref6=>{let{texts,from,to,url,key,region}=_ref6;const params=query_string.stringify({from,to});url=url.endsWith("&")?"".concat(url).concat(params):"".concat(url,"&").concat(params);const headers={"Content-type":"application/json","Ocp-Apim-Subscription-Key":key,"Ocp-Apim-Subscription-Region":region};const body=texts.map(text=>({Text:text}));return{url,body,headers};};const genDeepl=_ref7=>{let{texts,from,to,url,key}=_ref7;const body={text:texts,target_lang:to,source_lang:from// split_sentences: "0", @@ -56692,20 +56688,30 @@ contents:[{role:"model",parts:[{text:systemPrompt}]},...hisMsgs,userMsg],generat },// thinkingConfig: { // thinkingBudget: 0, // }, -safetySettings:[{category:"HARM_CATEGORY_HARASSMENT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_HATE_SPEECH",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_SEXUALLY_EXPLICIT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_DANGEROUS_CONTENT",threshold:"BLOCK_NONE"}]};const headers={"Content-type":"application/json"};return{url,body,headers,userMsg};};const genGemini2=_ref14=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref14;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genClaude=_ref15=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref15;const userMsg={role:"user",content:userPrompt};const body={model,system:systemPrompt,messages:[...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json","anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true","x-api-key":key};return{url,body,headers,userMsg};};const genOpenRouter=_ref16=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref16;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genOllama=_ref17=>{let{think,url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref17;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens,think,stream:false};const headers={"Content-type":"application/json"};if(key){headers.Authorization="Bearer ".concat(key);}return{url,body,headers,userMsg};};const genCloudflareAI=_ref18=>{let{texts,from,to,url,key}=_ref18;const body={text:texts.join(" "),source_lang:from,target_lang:to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genCustom=_ref19=>{let{texts,from,to,url,key}=_ref19;const body={texts,from,to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genReqFuncs={[OPT_TRANS_GOOGLE]:genGoogle,[OPT_TRANS_GOOGLE_2]:genGoogle2,[OPT_TRANS_MICROSOFT]:genMicrosoft,[OPT_TRANS_AZUREAI]:genAzureAI,[OPT_TRANS_DEEPL]:genDeepl,[OPT_TRANS_DEEPLFREE]:genDeeplFree,[OPT_TRANS_DEEPLX]:genDeeplX,[OPT_TRANS_NIUTRANS]:genNiuTrans,[OPT_TRANS_BAIDU]:genBaidu,[OPT_TRANS_TENCENT]:genTencent,[OPT_TRANS_VOLCENGINE]:genVolcengine,[api_OPT_TRANS_OPENAI]:genOpenAI,[api_OPT_TRANS_GEMINI]:genGemini,[api_OPT_TRANS_GEMINI_2]:genGemini2,[api_OPT_TRANS_CLAUDE]:genClaude,[OPT_TRANS_CLOUDFLAREAI]:genCloudflareAI,[api_OPT_TRANS_OLLAMA]:genOllama,[api_OPT_TRANS_OPENROUTER]:genOpenRouter,[api_OPT_TRANS_CUSTOMIZE]:genCustom};const genInit=_ref20=>{let{url="",body=null,headers={},userMsg=null,method="POST"}=_ref20;if(!url){throw new Error("genInit: url is empty");}const init={method,headers};if(method!=="GET"&&method!=="HEAD"&&body){var _body$params;let payload=JSON.stringify(body);const id=body===null||body===void 0?void 0:(_body$params=body.params)===null||_body$params===void 0?void 0:_body$params.id;if(id){payload=payload.replace('method":"',(id+3)%13===0||(id+5)%29===0?'method" : "':'method": "');}Object.assign(init,{body:payload});}return[url,init,userMsg];};/** +safetySettings:[{category:"HARM_CATEGORY_HARASSMENT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_HATE_SPEECH",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_SEXUALLY_EXPLICIT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_DANGEROUS_CONTENT",threshold:"BLOCK_NONE"}]};const headers={"Content-type":"application/json"};return{url,body,headers,userMsg};};const genGemini2=_ref14=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref14;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genClaude=_ref15=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref15;const userMsg={role:"user",content:userPrompt};const body={model,system:systemPrompt,messages:[...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json","anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true","x-api-key":key};return{url,body,headers,userMsg};};const genOpenRouter=_ref16=>{let{url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref16;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers,userMsg};};const genOllama=_ref17=>{let{// think, +url,key,systemPrompt,userPrompt,model,temperature,maxTokens,hisMsgs=[]}=_ref17;const userMsg={role:"user",content:userPrompt};const body={model,messages:[{role:"system",content:systemPrompt},...hisMsgs,userMsg],temperature,max_tokens:maxTokens,// think, +stream:false};const headers={"Content-type":"application/json"};if(key){headers.Authorization="Bearer ".concat(key);}return{url,body,headers,userMsg};};const genCloudflareAI=_ref18=>{let{texts,from,to,url,key}=_ref18;const body={text:texts.join(" "),source_lang:from,target_lang:to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genCustom=_ref19=>{let{texts,from,to,url,key}=_ref19;const body={texts,from,to};const headers={"Content-type":"application/json",Authorization:"Bearer ".concat(key)};return{url,body,headers};};const genReqFuncs={[OPT_TRANS_GOOGLE]:genGoogle,[OPT_TRANS_GOOGLE_2]:genGoogle2,[OPT_TRANS_MICROSOFT]:genMicrosoft,[OPT_TRANS_AZUREAI]:genAzureAI,[OPT_TRANS_DEEPL]:genDeepl,[OPT_TRANS_DEEPLFREE]:genDeeplFree,[OPT_TRANS_DEEPLX]:genDeeplX,[OPT_TRANS_NIUTRANS]:genNiuTrans,[OPT_TRANS_BAIDU]:genBaidu,[OPT_TRANS_TENCENT]:genTencent,[OPT_TRANS_VOLCENGINE]:genVolcengine,[api_OPT_TRANS_OPENAI]:genOpenAI,[api_OPT_TRANS_GEMINI]:genGemini,[api_OPT_TRANS_GEMINI_2]:genGemini2,[api_OPT_TRANS_CLAUDE]:genClaude,[OPT_TRANS_CLOUDFLAREAI]:genCloudflareAI,[api_OPT_TRANS_OLLAMA]:genOllama,[api_OPT_TRANS_OPENROUTER]:genOpenRouter,[api_OPT_TRANS_CUSTOMIZE]:genCustom};const genInit=_ref20=>{let{url="",body=null,headers={},userMsg=null,method="POST"}=_ref20;if(!url){throw new Error("genInit: url is empty");}const init={method,headers};if(method!=="GET"&&method!=="HEAD"&&body){var _body$params;let payload=JSON.stringify(body);const id=body===null||body===void 0?void 0:(_body$params=body.params)===null||_body$params===void 0?void 0:_body$params.id;if(id){payload=payload.replace('method":"',(id+3)%13===0||(id+5)%29===0?'method" : "':'method": "');}Object.assign(init,{body:payload});}return[url,init,userMsg];};/** * 构造翻译接口请求参数 * @param {*} * @returns - */const genTransReq=async _ref21=>{let{reqHook,...args}=_ref21;const{apiType,apiSlug,key,systemPrompt,userPrompt,from,to,texts,docInfo,glossary,customHeader,customBody,events}=args;if(API_SPE_TYPES.mulkeys.has(apiType)){args.key=keyPick(apiSlug,key,keyMap);}if(apiType===OPT_TRANS_DEEPLX){args.url=keyPick(apiSlug,args.url,urlMap);}if(API_SPE_TYPES.ai.has(apiType)){args.systemPrompt=genSystemPrompt({systemPrompt,from,to});args.userPrompt=!!events?JSON.stringify(events):genUserPrompt({userPrompt,from,to,texts,docInfo,glossary});}const{url="",body=null,headers={},userMsg=null,method="POST"}=genReqFuncs[apiType](args);// 合并用户自定义headers和body + */const genTransReq=async _ref21=>{let{reqHook,...args}=_ref21;const{apiType,apiSlug,key,systemPrompt,// userPrompt, +nobatchPrompt=defaultNobatchPrompt,nobatchUserPrompt=defaultNobatchUserPrompt,useBatchFetch,from,to,texts,docInfo,glossary,customHeader,customBody,events}=args;if(API_SPE_TYPES.mulkeys.has(apiType)){args.key=keyPick(apiSlug,key,keyMap);}if(apiType===OPT_TRANS_DEEPLX){args.url=keyPick(apiSlug,args.url,urlMap);}if(API_SPE_TYPES.ai.has(apiType)){args.systemPrompt=genSystemPrompt({systemPrompt:useBatchFetch?systemPrompt:nobatchPrompt,from,to});args.userPrompt=!!events?JSON.stringify(events):genUserPrompt({nobatchUserPrompt,useBatchFetch,from,to,texts,docInfo,glossary});}const{url="",body=null,headers={},userMsg=null,method="POST"}=genReqFuncs[apiType](args);// 合并用户自定义headers和body if(customHeader!==null&&customHeader!==void 0&&customHeader.trim()){Object.assign(headers,parseJsonObj(customHeader));}if(customBody!==null&&customBody!==void 0&&customBody.trim()){Object.assign(body,parseJsonObj(customBody));}// 执行 request hook -if(reqHook!==null&&reqHook!==void 0&&reqHook.trim()&&!events){try{libs_interpreter.run("exports.reqHook = ".concat(reqHook));const hookResult=await libs_interpreter.exports.reqHook({...args,defaultSystemPrompt: defaultSystemPrompt,defaultSubtitlePrompt: defaultSubtitlePrompt},{url,body,headers,userMsg,method});if(hookResult&&hookResult.url){return genInit(hookResult);}}catch(err){log_kissLog("run req hook",err);}}return genInit({url,body,headers,userMsg,method});};/** +if(reqHook!==null&&reqHook!==void 0&&reqHook.trim()&&!events){try{interpreter.run("exports.reqHook = ".concat(reqHook));const hookResult=await interpreter.exports.reqHook({...args,defaultSystemPrompt: defaultSystemPrompt,defaultSubtitlePrompt: defaultSubtitlePrompt},{url,body,headers,userMsg,method});if(hookResult&&hookResult.url){return genInit(hookResult);}}catch(err){log_kissLog("run req hook",err);}}return genInit({url,body,headers,userMsg,method});};/** * 解析翻译接口返回数据 * @param {*} res * @param {*} param3 * @returns - */const parseTransRes=async(res,_ref22)=>{var _res$sentences,_res$,_res$translations,_res$result,_res$result$texts,_res$result2,_res$auto_translation,_res$choices,_res$choices$,_res$choices$0$messag,_res$choices2,_res$choices2$,_res$choices2$$messag,_res$candidates,_res$candidates$,_res$candidates$0$con,_res$candidates2,_res$candidates2$,_res$candidates2$$con,_res$candidates2$$con2,_res$candidates2$$con3,_res$content,_res$content$0$text,_res$content2,_res$content2$,_res$result3,_res$choices3,_res$choices3$,_modelMsg2,_ref23,_res$translations2;let{texts,from,to,fromLang,toLang,langMap,resHook,thinkIgnore,history,userMsg,apiType}=_ref22;// 执行 response hook -if(resHook!==null&&resHook!==void 0&&resHook.trim()){try{libs_interpreter.run("exports.resHook = ".concat(resHook));const hookResult=await libs_interpreter.exports.resHook({apiType,userMsg,res,texts,from,to,fromLang,toLang,langMap,extractJson: extractJson,parseAIRes});if(hookResult&&Array.isArray(hookResult.translations)){if(history&&userMsg&&hookResult.modelMsg){history.add(userMsg,hookResult.modelMsg);}return hookResult.translations;}}catch(err){log_kissLog("run res hook",err);}}let modelMsg="";// todo: 根据结果抛出实际异常信息 -switch(apiType){case OPT_TRANS_GOOGLE:return[[res===null||res===void 0?void 0:(_res$sentences=res.sentences)===null||_res$sentences===void 0?void 0:_res$sentences.map(item=>item.trans).join(" "),res===null||res===void 0?void 0:res.src]];case OPT_TRANS_GOOGLE_2:return res===null||res===void 0?void 0:(_res$=res[0])===null||_res$===void 0?void 0:_res$.map((_,i)=>{var _res$2,_res$3;return[res===null||res===void 0?void 0:(_res$2=res[0])===null||_res$2===void 0?void 0:_res$2[i],res===null||res===void 0?void 0:(_res$3=res[1])===null||_res$3===void 0?void 0:_res$3[i]];});case OPT_TRANS_MICROSOFT:case OPT_TRANS_AZUREAI:return res===null||res===void 0?void 0:res.map(item=>{var _item$detectedLanguag;return[item.translations.map(item=>item.text).join(" "),(_item$detectedLanguag=item.detectedLanguage)===null||_item$detectedLanguag===void 0?void 0:_item$detectedLanguag.language];});case OPT_TRANS_DEEPL:return res===null||res===void 0?void 0:(_res$translations=res.translations)===null||_res$translations===void 0?void 0:_res$translations.map(item=>[item.text,item.detected_source_language]);case OPT_TRANS_DEEPLFREE:return[[res===null||res===void 0?void 0:(_res$result=res.result)===null||_res$result===void 0?void 0:(_res$result$texts=_res$result.texts)===null||_res$result$texts===void 0?void 0:_res$result$texts.map(item=>item.text).join(" "),res===null||res===void 0?void 0:(_res$result2=res.result)===null||_res$result2===void 0?void 0:_res$result2.lang]];case OPT_TRANS_DEEPLX:return[[res===null||res===void 0?void 0:res.data,res===null||res===void 0?void 0:res.source_lang]];case OPT_TRANS_NIUTRANS:const json=JSON.parse(res);if(json.error_msg){throw new Error(json.error_msg);}return[[json.tgt_text,json.from]];case OPT_TRANS_BAIDU:if(res.type===1){return[[Object.keys(JSON.parse(res.result).content[0].mean[0].cont)[0],res.from]];}else if(res.type===2){return[[res.data.map(item=>item.dst).join(" "),res.from]];}break;case OPT_TRANS_TENCENT:return res===null||res===void 0?void 0:(_res$auto_translation=res.auto_translation)===null||_res$auto_translation===void 0?void 0:_res$auto_translation.map(text=>[text,res===null||res===void 0?void 0:res.src_lang]);case OPT_TRANS_VOLCENGINE:return[[res===null||res===void 0?void 0:res.translation,res===null||res===void 0?void 0:res.detected_language]];case api_OPT_TRANS_OPENAI:case api_OPT_TRANS_GEMINI_2:case api_OPT_TRANS_OPENROUTER:modelMsg=res===null||res===void 0?void 0:(_res$choices=res.choices)===null||_res$choices===void 0?void 0:(_res$choices$=_res$choices[0])===null||_res$choices$===void 0?void 0:_res$choices$.message;if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_res$choices$0$messag=res===null||res===void 0?void 0:(_res$choices2=res.choices)===null||_res$choices2===void 0?void 0:(_res$choices2$=_res$choices2[0])===null||_res$choices2$===void 0?void 0:(_res$choices2$$messag=_res$choices2$.message)===null||_res$choices2$$messag===void 0?void 0:_res$choices2$$messag.content)!==null&&_res$choices$0$messag!==void 0?_res$choices$0$messag:"");case api_OPT_TRANS_GEMINI:modelMsg=res===null||res===void 0?void 0:(_res$candidates=res.candidates)===null||_res$candidates===void 0?void 0:(_res$candidates$=_res$candidates[0])===null||_res$candidates$===void 0?void 0:_res$candidates$.content;if(history&&userMsg&&modelMsg){history.add(userMsg,modelMsg);}return parseAIRes((_res$candidates$0$con=res===null||res===void 0?void 0:(_res$candidates2=res.candidates)===null||_res$candidates2===void 0?void 0:(_res$candidates2$=_res$candidates2[0])===null||_res$candidates2$===void 0?void 0:(_res$candidates2$$con=_res$candidates2$.content)===null||_res$candidates2$$con===void 0?void 0:(_res$candidates2$$con2=_res$candidates2$$con.parts)===null||_res$candidates2$$con2===void 0?void 0:(_res$candidates2$$con3=_res$candidates2$$con2[0])===null||_res$candidates2$$con3===void 0?void 0:_res$candidates2$$con3.text)!==null&&_res$candidates$0$con!==void 0?_res$candidates$0$con:"");case api_OPT_TRANS_CLAUDE:modelMsg={role:res===null||res===void 0?void 0:res.role,content:res===null||res===void 0?void 0:(_res$content=res.content)===null||_res$content===void 0?void 0:_res$content.text};if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_res$content$0$text=res===null||res===void 0?void 0:(_res$content2=res.content)===null||_res$content2===void 0?void 0:(_res$content2$=_res$content2[0])===null||_res$content2$===void 0?void 0:_res$content2$.text)!==null&&_res$content$0$text!==void 0?_res$content$0$text:"");case OPT_TRANS_CLOUDFLAREAI:return[[res===null||res===void 0?void 0:(_res$result3=res.result)===null||_res$result3===void 0?void 0:_res$result3.translated_text]];case api_OPT_TRANS_OLLAMA:modelMsg=res===null||res===void 0?void 0:(_res$choices3=res.choices)===null||_res$choices3===void 0?void 0:(_res$choices3$=_res$choices3[0])===null||_res$choices3$===void 0?void 0:_res$choices3$.message;const deepModels=thinkIgnore.split(",").filter(model=>model===null||model===void 0?void 0:model.trim());if(deepModels.some(model=>{var _res$model;return res===null||res===void 0?void 0:(_res$model=res.model)===null||_res$model===void 0?void 0:_res$model.startsWith(model);})){var _modelMsg;(_modelMsg=modelMsg)===null||_modelMsg===void 0?void 0:_modelMsg.content.replace(/[\s\S]*<\/think>/i,"");}if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_modelMsg2=modelMsg)===null||_modelMsg2===void 0?void 0:_modelMsg2.content);case api_OPT_TRANS_CUSTOMIZE:return(_ref23=(_res$translations2=res===null||res===void 0?void 0:res.translations)!==null&&_res$translations2!==void 0?_res$translations2:res)===null||_ref23===void 0?void 0:_ref23.map(item=>[item.text,item.src]);default:}throw new Error("parse translate result: apiType not matched",apiType);};/** + */const parseTransRes=async(res,_ref22)=>{var _res$sentences,_res$,_res$translations,_res$result,_res$result$texts,_res$result2,_res$auto_translation,_res$choices,_res$choices$,_modelMsg,_res$candidates,_res$candidates$,_modelMsg$parts$0$tex,_modelMsg2,_modelMsg2$parts,_modelMsg2$parts$,_res$content,_res$content$0$text,_res$content2,_res$content2$,_res$result3,_res$choices2,_res$choices2$,_modelMsg3,_ref23,_res$translations2;let{texts,from,to,fromLang,toLang,langMap,resHook,// thinkIgnore, +history,userMsg,apiType,useBatchFetch}=_ref22;// 执行 response hook +if(resHook!==null&&resHook!==void 0&&resHook.trim()){try{interpreter.run("exports.resHook = ".concat(resHook));const hookResult=await interpreter.exports.resHook({apiType,userMsg,res,texts,from,to,fromLang,toLang,langMap,extractJson: extractJson,parseAIRes});if(hookResult&&Array.isArray(hookResult.translations)){if(history&&userMsg&&hookResult.modelMsg){history.add(userMsg,hookResult.modelMsg);}return hookResult.translations;}}catch(err){log_kissLog("run res hook",err);}}let modelMsg="";// todo: 根据结果抛出实际异常信息 +switch(apiType){case OPT_TRANS_GOOGLE:return[[res===null||res===void 0?void 0:(_res$sentences=res.sentences)===null||_res$sentences===void 0?void 0:_res$sentences.map(item=>item.trans).join(" "),res===null||res===void 0?void 0:res.src]];case OPT_TRANS_GOOGLE_2:return res===null||res===void 0?void 0:(_res$=res[0])===null||_res$===void 0?void 0:_res$.map((_,i)=>{var _res$2,_res$3;return[res===null||res===void 0?void 0:(_res$2=res[0])===null||_res$2===void 0?void 0:_res$2[i],res===null||res===void 0?void 0:(_res$3=res[1])===null||_res$3===void 0?void 0:_res$3[i]];});case OPT_TRANS_MICROSOFT:case OPT_TRANS_AZUREAI:return res===null||res===void 0?void 0:res.map(item=>{var _item$detectedLanguag;return[item.translations.map(item=>item.text).join(" "),(_item$detectedLanguag=item.detectedLanguage)===null||_item$detectedLanguag===void 0?void 0:_item$detectedLanguag.language];});case OPT_TRANS_DEEPL:return res===null||res===void 0?void 0:(_res$translations=res.translations)===null||_res$translations===void 0?void 0:_res$translations.map(item=>[item.text,item.detected_source_language]);case OPT_TRANS_DEEPLFREE:return[[res===null||res===void 0?void 0:(_res$result=res.result)===null||_res$result===void 0?void 0:(_res$result$texts=_res$result.texts)===null||_res$result$texts===void 0?void 0:_res$result$texts.map(item=>item.text).join(" "),res===null||res===void 0?void 0:(_res$result2=res.result)===null||_res$result2===void 0?void 0:_res$result2.lang]];case OPT_TRANS_DEEPLX:return[[res===null||res===void 0?void 0:res.data,res===null||res===void 0?void 0:res.source_lang]];case OPT_TRANS_NIUTRANS:const json=JSON.parse(res);if(json.error_msg){throw new Error(json.error_msg);}return[[json.tgt_text,json.from]];case OPT_TRANS_BAIDU:if(res.type===1){return[[Object.keys(JSON.parse(res.result).content[0].mean[0].cont)[0],res.from]];}else if(res.type===2){return[[res.data.map(item=>item.dst).join(" "),res.from]];}break;case OPT_TRANS_TENCENT:return res===null||res===void 0?void 0:(_res$auto_translation=res.auto_translation)===null||_res$auto_translation===void 0?void 0:_res$auto_translation.map(text=>[text,res===null||res===void 0?void 0:res.src_lang]);case OPT_TRANS_VOLCENGINE:return[[res===null||res===void 0?void 0:res.translation,res===null||res===void 0?void 0:res.detected_language]];case api_OPT_TRANS_OPENAI:case api_OPT_TRANS_GEMINI_2:case api_OPT_TRANS_OPENROUTER:modelMsg=res===null||res===void 0?void 0:(_res$choices=res.choices)===null||_res$choices===void 0?void 0:(_res$choices$=_res$choices[0])===null||_res$choices$===void 0?void 0:_res$choices$.message;if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_modelMsg=modelMsg)===null||_modelMsg===void 0?void 0:_modelMsg.content,useBatchFetch);case api_OPT_TRANS_GEMINI:modelMsg=res===null||res===void 0?void 0:(_res$candidates=res.candidates)===null||_res$candidates===void 0?void 0:(_res$candidates$=_res$candidates[0])===null||_res$candidates$===void 0?void 0:_res$candidates$.content;if(history&&userMsg&&modelMsg){history.add(userMsg,modelMsg);}return parseAIRes((_modelMsg$parts$0$tex=(_modelMsg2=modelMsg)===null||_modelMsg2===void 0?void 0:(_modelMsg2$parts=_modelMsg2.parts)===null||_modelMsg2$parts===void 0?void 0:(_modelMsg2$parts$=_modelMsg2$parts[0])===null||_modelMsg2$parts$===void 0?void 0:_modelMsg2$parts$.text)!==null&&_modelMsg$parts$0$tex!==void 0?_modelMsg$parts$0$tex:"",useBatchFetch);case api_OPT_TRANS_CLAUDE:modelMsg={role:res===null||res===void 0?void 0:res.role,content:res===null||res===void 0?void 0:(_res$content=res.content)===null||_res$content===void 0?void 0:_res$content.text};if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_res$content$0$text=res===null||res===void 0?void 0:(_res$content2=res.content)===null||_res$content2===void 0?void 0:(_res$content2$=_res$content2[0])===null||_res$content2$===void 0?void 0:_res$content2$.text)!==null&&_res$content$0$text!==void 0?_res$content$0$text:"",useBatchFetch);case OPT_TRANS_CLOUDFLAREAI:return[[res===null||res===void 0?void 0:(_res$result3=res.result)===null||_res$result3===void 0?void 0:_res$result3.translated_text]];case api_OPT_TRANS_OLLAMA:modelMsg=res===null||res===void 0?void 0:(_res$choices2=res.choices)===null||_res$choices2===void 0?void 0:(_res$choices2$=_res$choices2[0])===null||_res$choices2$===void 0?void 0:_res$choices2$.message;// const deepModels = thinkIgnore +// .split(",") +// .filter((model) => model?.trim()); +// if (deepModels.some((model) => res?.model?.startsWith(model))) { +// modelMsg?.content.replace(/[\s\S]*<\/think>/i, ""); +// } +if(history&&userMsg&&modelMsg){history.add(userMsg,{role:modelMsg.role,content:modelMsg.content});}return parseAIRes((_modelMsg3=modelMsg)===null||_modelMsg3===void 0?void 0:_modelMsg3.content,useBatchFetch);case api_OPT_TRANS_CUSTOMIZE:return(_ref23=(_res$translations2=res===null||res===void 0?void 0:res.translations)!==null&&_res$translations2!==void 0?_res$translations2:res)===null||_ref23===void 0?void 0:_ref23.map(item=>[item.text,item.src]);default:}throw new Error("parse translate result: apiType not matched",apiType);};/** * 发送翻译请求并解析 * @param {*} param0 * @returns @@ -56717,7 +56723,7 @@ switch(apiType){case OPT_TRANS_GOOGLE:return[[res===null||res===void 0?void 0:(_ * 字幕翻译 * @param {*} param0 * @returns - */const trans_handleSubtitle=async _ref24=>{var _res$choices$0$messag2,_res$choices4,_res$choices4$,_res$choices4$$messag,_res$candidates$0$con2,_res$candidates3,_res$candidates3$,_res$candidates3$$con,_res$candidates3$$con2,_res$candidates3$$con3,_res$content$0$text2,_res$content3,_res$content3$;let{events,from,to,apiSetting}=_ref24;const{apiType,fetchInterval,fetchLimit,httpTimeout}=apiSetting;const[input,init]=await genTransReq({...apiSetting,events,from,to,systemPrompt:apiSetting.subtitlePrompt});const res=await fetchData(input,init,{useCache:false,usePool:true,fetchInterval,fetchLimit,httpTimeout});if(!res){kissLog("subtitle got empty response");return[];}switch(apiType){case OPT_TRANS_OPENAI:case OPT_TRANS_GEMINI_2:case OPT_TRANS_OPENROUTER:case OPT_TRANS_OLLAMA:return parseSTRes((_res$choices$0$messag2=res===null||res===void 0?void 0:(_res$choices4=res.choices)===null||_res$choices4===void 0?void 0:(_res$choices4$=_res$choices4[0])===null||_res$choices4$===void 0?void 0:(_res$choices4$$messag=_res$choices4$.message)===null||_res$choices4$$messag===void 0?void 0:_res$choices4$$messag.content)!==null&&_res$choices$0$messag2!==void 0?_res$choices$0$messag2:"");case OPT_TRANS_GEMINI:return parseSTRes((_res$candidates$0$con2=res===null||res===void 0?void 0:(_res$candidates3=res.candidates)===null||_res$candidates3===void 0?void 0:(_res$candidates3$=_res$candidates3[0])===null||_res$candidates3$===void 0?void 0:(_res$candidates3$$con=_res$candidates3$.content)===null||_res$candidates3$$con===void 0?void 0:(_res$candidates3$$con2=_res$candidates3$$con.parts)===null||_res$candidates3$$con2===void 0?void 0:(_res$candidates3$$con3=_res$candidates3$$con2[0])===null||_res$candidates3$$con3===void 0?void 0:_res$candidates3$$con3.text)!==null&&_res$candidates$0$con2!==void 0?_res$candidates$0$con2:"");case OPT_TRANS_CLAUDE:return parseSTRes((_res$content$0$text2=res===null||res===void 0?void 0:(_res$content3=res.content)===null||_res$content3===void 0?void 0:(_res$content3$=_res$content3[0])===null||_res$content3$===void 0?void 0:_res$content3$.text)!==null&&_res$content$0$text2!==void 0?_res$content$0$text2:"");case OPT_TRANS_CUSTOMIZE:return res;default:}return[];}; + */const trans_handleSubtitle=async _ref24=>{var _res$choices$0$messag,_res$choices3,_res$choices3$,_res$choices3$$messag,_res$candidates$0$con,_res$candidates2,_res$candidates2$,_res$candidates2$$con,_res$candidates2$$con2,_res$candidates2$$con3,_res$content$0$text2,_res$content3,_res$content3$;let{events,from,to,apiSetting}=_ref24;const{apiType,fetchInterval,fetchLimit,httpTimeout}=apiSetting;const[input,init]=await genTransReq({...apiSetting,events,from,to,systemPrompt:apiSetting.subtitlePrompt});const res=await fetchData(input,init,{useCache:false,usePool:true,fetchInterval,fetchLimit,httpTimeout});if(!res){kissLog("subtitle got empty response");return[];}switch(apiType){case OPT_TRANS_OPENAI:case OPT_TRANS_GEMINI_2:case OPT_TRANS_OPENROUTER:case OPT_TRANS_OLLAMA:return parseSTRes((_res$choices$0$messag=res===null||res===void 0?void 0:(_res$choices3=res.choices)===null||_res$choices3===void 0?void 0:(_res$choices3$=_res$choices3[0])===null||_res$choices3$===void 0?void 0:(_res$choices3$$messag=_res$choices3$.message)===null||_res$choices3$$messag===void 0?void 0:_res$choices3$$messag.content)!==null&&_res$choices$0$messag!==void 0?_res$choices$0$messag:"");case OPT_TRANS_GEMINI:return parseSTRes((_res$candidates$0$con=res===null||res===void 0?void 0:(_res$candidates2=res.candidates)===null||_res$candidates2===void 0?void 0:(_res$candidates2$=_res$candidates2[0])===null||_res$candidates2$===void 0?void 0:(_res$candidates2$$con=_res$candidates2$.content)===null||_res$candidates2$$con===void 0?void 0:(_res$candidates2$$con2=_res$candidates2$$con.parts)===null||_res$candidates2$$con2===void 0?void 0:(_res$candidates2$$con3=_res$candidates2$$con2[0])===null||_res$candidates2$$con3===void 0?void 0:_res$candidates2$$con3.text)!==null&&_res$candidates$0$con!==void 0?_res$candidates$0$con:"");case OPT_TRANS_CLAUDE:return parseSTRes((_res$content$0$text2=res===null||res===void 0?void 0:(_res$content3=res.content)===null||_res$content3===void 0?void 0:(_res$content3$=_res$content3[0])===null||_res$content3$===void 0?void 0:_res$content3$.text)!==null&&_res$content$0$text2!==void 0?_res$content$0$text2:"");case OPT_TRANS_CUSTOMIZE:return res;default:}return[];}; ;// CONCATENATED MODULE: ./src/libs/batchQueue.js /** * 批处理队列 @@ -56799,11 +56805,11 @@ keyfrom:"webdict"});const init={headers:{accept:"application/json, text/plain, * * 统一翻译接口 * @param {*} param0 * @returns - */const apiTranslate=async _ref2=>{let{text,fromLang="auto",toLang,apiSetting=DEFAULT_API_SETTING,docInfo={},glossary={},useCache=true,usePool=true}=_ref2;if(!text){return["",false];}const{apiType,apiSlug,useBatchFetch}=apiSetting;const langMap=OPT_LANGS_TO_SPEC[apiType]||OPT_LANGS_SPEC_DEFAULT;const from=langMap.get(fromLang);const to=langMap.get(toLang);if(!to){log_kissLog("target lang: ".concat(toLang," not support"));return["",false];}// todo: 优化缓存失效因素 -const[v1,v2]="2.0.4".split(".");const cacheOpts={apiSlug,text,fromLang,toLang,version:[v1,v2].join(".")};const cacheInput="".concat(URL_CACHE_TRAN,"?").concat(query_string.stringify(cacheOpts));// 查询缓存数据 -if(useCache){const cache=await cache_getHttpCachePolyfill(cacheInput);if(cache!==null&&cache!==void 0&&cache.trText){return[cache.trText,cache.isSame];}}// 请求接口数据 -let tranlation=[];if(apiType===OPT_TRANS_BUILTINAI){tranlation=await apiBuiltinAITranslate({text,from,to,apiSetting});}else if(useBatchFetch&&API_SPE_TYPES.batch.has(apiType)){const{apiSlug,batchInterval,batchSize,batchLength}=apiSetting;const key="".concat(apiSlug,"_").concat(fromLang,"_").concat(toLang);const queue=getBatchQueue(key,handleTranslate,{batchInterval,batchSize,batchLength});tranlation=await queue.addTask(text,{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}else{[tranlation]=await handleTranslate([text],{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}let trText="";let srLang="";if(Array.isArray(tranlation)){[trText,srLang=""]=tranlation;}else if(typeof tranlation==="string"){trText=tranlation;}if(!trText){throw new Error("tanslate api got empty trtext");}const isSame=fromLang==="auto"&&srLang===to;// 插入缓存 -if(useCache){cache_putHttpCachePolyfill(cacheInput,null,{trText,isSame,srLang});}return[trText,isSame];};// 字幕处理/翻译 + */const apiTranslate=async _ref2=>{let{text,fromLang="auto",toLang,apiSetting=DEFAULT_API_SETTING,docInfo={},glossary={},useCache=true,usePool=true}=_ref2;if(!text){throw new Error("The text cannot be empty.");}const{apiType,apiSlug,useBatchFetch}=apiSetting;const langMap=OPT_LANGS_TO_SPEC[apiType]||OPT_LANGS_SPEC_DEFAULT;const from=langMap.get(fromLang);const to=langMap.get(toLang);if(!to){throw new Error("The target lang: ".concat(toLang," not support"));}// todo: 优化缓存失效因素 +const[v1,v2]="2.0.5".split(".");const cacheOpts={apiSlug,text,fromLang,toLang,version:[v1,v2].join(".")};const cacheInput="".concat(URL_CACHE_TRAN,"?").concat(query_string.stringify(cacheOpts));// 查询缓存数据 +if(useCache){const cache=await cache_getHttpCachePolyfill(cacheInput);if(cache!==null&&cache!==void 0&&cache.trText){return cache;}}// 请求接口数据 +let tranlation=[];if(apiType===OPT_TRANS_BUILTINAI){tranlation=await apiBuiltinAITranslate({text,from,to,apiSetting});}else if(useBatchFetch&&API_SPE_TYPES.batch.has(apiType)){const{apiSlug,batchInterval,batchSize,batchLength}=apiSetting;const key="".concat(apiSlug,"_").concat(fromLang,"_").concat(toLang);const queue=getBatchQueue(key,handleTranslate,{batchInterval,batchSize,batchLength});tranlation=await queue.addTask(text,{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}else{[tranlation]=await handleTranslate([text],{from,to,fromLang,toLang,langMap,docInfo,glossary,apiSetting,usePool});}let trText="";let srLang="";let srCode="";if(Array.isArray(tranlation)){[trText,srLang=""]=tranlation;if(srLang){srCode=OPT_LANGS_TO_CODE[apiType].get(srLang)||"";}}else if(typeof tranlation==="string"){trText=tranlation;}if(!trText){throw new Error("tanslate api got empty trtext");}const isSame=fromLang==="auto"&&srLang===to;// 插入缓存 +if(useCache){cache_putHttpCachePolyfill(cacheInput,null,{trText,isSame,srLang,srCode});}return{trText,srLang,srCode,isSame};};// 字幕处理/翻译 const apiSubtitle=async _ref3=>{let{videoId,chunkSign,fromLang="auto",toLang,events=[],apiSetting}=_ref3;const cacheOpts={apiSlug:apiSetting.apiSlug,videoId,chunkSign,fromLang,toLang};const cacheInput="".concat(URL_CACHE_SUBTITLE,"?").concat(queryString.stringify(cacheOpts));const cache=await getHttpCachePolyfill(cacheInput);if(cache){return cache;}const subtitles=await handleSubtitle({events,from:fromLang,to:toLang,apiSetting});if(subtitles!==null&&subtitles!==void 0&&subtitles.length){putHttpCachePolyfill(cacheInput,null,subtitles);return subtitles;}return[];}; ;// CONCATENATED MODULE: ./node_modules/.pnpm/webdav@5.3.0/node_modules/webdav/dist/web/index.js /*! For license information please see index.js.LICENSE.txt */ @@ -59617,7 +59623,7 @@ var n = {}; return t.length === e && "." !== t && ".." !== t; }; }, - te = "object" === ("undefined" == typeof process ? "undefined" : Nt(process)) && process ? "object" === Nt(({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.4","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"})) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.4","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.4","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}).__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; + te = "object" === ("undefined" == typeof process ? "undefined" : Nt(process)) && process ? "object" === Nt(({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.5","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"})) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.5","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}) && ({"NODE_ENV":"production","PUBLIC_URL":"","WDS_SOCKET_HOST":undefined,"WDS_SOCKET_PATH":undefined,"WDS_SOCKET_PORT":undefined,"FAST_REFRESH":true,"REACT_APP_CLIENT":"userscript","REACT_APP_NAME":"KISS Translator","REACT_APP_NAME_CN":"简约翻译","REACT_APP_VERSION":"2.0.5","REACT_APP_HOMEPAGE":"https://github.com/fishjar/kiss-translator","REACT_APP_OPTIONSPAGE":"https://fishjar.github.io/kiss-translator/options.html","REACT_APP_OPTIONSPAGE_DEV":"http://localhost:3000/options.html","REACT_APP_LOGOURL":"https://fishjar.github.io/kiss-translator/images/logo192.png","REACT_APP_RULESURL":"https://fishjar.github.io/kiss-rules/kiss-rules_v2.json","REACT_APP_RULESURL_ON":"https://fishjar.github.io/kiss-rules/kiss-rules-on_v2.json","REACT_APP_RULESURL_OFF":"https://fishjar.github.io/kiss-rules/kiss-rules-off_v2.json","REACT_APP_USERSCRIPT_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator.user.js","REACT_APP_USERSCRIPT_IOS_DOWNLOADURL":"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js"}).__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; It.sep = "win32" === te ? "\\" : "/"; var ee = Symbol("globstar **"); It.GLOBSTAR = ee; @@ -62002,7 +62008,7 @@ Divider.muiSkipListHighlight = true; false ? 0 : void 0; /* harmony default export */ const Divider_Divider = (Divider); ;// CONCATENATED MODULE: ./src/hooks/Loading.js -function Loading(){return/*#__PURE__*/(0,jsx_runtime.jsxs)("center",{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{href:"https://github.com/fishjar/kiss-translator",children:"KISS Translator v".concat("2.0.4")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{})]});} +function Loading(){return/*#__PURE__*/(0,jsx_runtime.jsxs)("center",{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{href:"https://github.com/fishjar/kiss-translator",children:"KISS Translator v".concat("2.0.5")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{})]});} ;// CONCATENATED MODULE: ./src/hooks/Setting.js const SettingContext=/*#__PURE__*/(0,react.createContext)({setting:setting_DEFAULT_SETTING,updateSetting:()=>{},reloadSetting:()=>{}});function SettingProvider(_ref){let{children}=_ref;const{data:setting,isLoading,update,reload}=useStorage(storage_STOKEY_SETTING,setting_DEFAULT_SETTING,KV_SETTING_KEY);(0,react.useEffect)(()=>{if(typeof(setting===null||setting===void 0?void 0:setting.darkMode)==="boolean"){update(currentSetting=>({...currentSetting,darkMode:currentSetting.darkMode?"dark":"light"}));}},[setting===null||setting===void 0?void 0:setting.darkMode,update]);(0,react.useEffect)(()=>{(async()=>{try{logger.setLevel(setting===null||setting===void 0?void 0:setting.logLevel);if(client_isExt){await msg_sendBgMsg(MSG_SET_LOGLEVEL,setting===null||setting===void 0?void 0:setting.logLevel);}}catch(error){logger.error("Failed to fetch log level, using default.",error);}})();},[setting]);const updateSetting=(0,react.useCallback)(objOrFn=>{update(objOrFn);debounceSyncMeta(KV_SETTING_KEY);},[update]);const updateChild=(0,react.useCallback)(key=>async obj=>{updateSetting(prev=>({...prev,[key]:{...((prev===null||prev===void 0?void 0:prev[key])||{}),...obj}}));},[updateSetting]);const value=(0,react.useMemo)(()=>({setting,updateSetting,updateChild,reloadSetting:reload}),[setting,updateSetting,updateChild,reload]);if(isLoading){return/*#__PURE__*/(0,jsx_runtime.jsx)(Loading,{});}if(!setting){/*#__PURE__*/(0,jsx_runtime.jsx)("center",{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Alert_Alert,{severity:"error",sx:{maxWidth:600,margin:"60px auto"},children:[/*#__PURE__*/(0,jsx_runtime.jsx)("p",{children:"\u6570\u636E\u52A0\u8F7D\u51FA\u9519\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u6216\u5378\u8F7D\u540E\u91CD\u65B0\u5B89\u88C5\u3002"}),/*#__PURE__*/(0,jsx_runtime.jsx)("p",{children:"Data loading error, please refresh the page or uninstall and reinstall."})]})});}return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingContext.Provider,{value:value,children:children});}/** * 设置 hook @@ -69628,7 +69634,8 @@ await syncAllSubRules(subrulesList);await putSync({subRulesSyncAt:now});}}catch( * @param {*} rules * @param {string} href * @returns - */const matchRule=async(href,_ref)=>{let{injectRules,subrulesList}=_ref;const rules=await getRulesWithDefault();if(injectRules){try{const selectedSub=subrulesList.find(item=>item.selected);if(selectedSub!==null&&selectedSub!==void 0&&selectedSub.url){const subRules=await loadOrFetchSubRules(selectedSub.url);rules.splice(-1,0,...subRules);}}catch(err){kissLog("load injectRules",err);}}const rule=rules.find(r=>r.pattern.split(",").some(p=>isMatch(href,p.trim())));const globalRule={...GLOBLA_RULE,...(rules.find(r=>r.pattern===GLOBAL_KEY)||{})};if(!rule){return globalRule;}["selector","keepSelector","rootsSelector","ignoreSelector","terms","aiTerms","termsStyle","highlightStyle","selectStyle","parentStyle","grandStyle","injectJs","injectCss",// "fixerSelector", + */const matchRule=async(href,_ref)=>{let{injectRules,subrulesList}=_ref;const rules=await getRulesWithDefault();if(injectRules){try{const selectedSub=subrulesList.find(item=>item.selected);if(selectedSub!==null&&selectedSub!==void 0&&selectedSub.url){const subRules=await loadOrFetchSubRules(selectedSub.url);rules.splice(-1,0,...subRules);}}catch(err){kissLog("load injectRules",err);}}const rule=rules.find(r=>r.pattern.split(",").some(p=>isMatch(href,p.trim())));const globalRule={...GLOBLA_RULE,...(rules.find(r=>r.pattern===GLOBAL_KEY)||{})};if(!rule){return globalRule;}["selector","keepSelector","rootsSelector","ignoreSelector","terms","aiTerms","termsStyle","highlightStyle","selectStyle","parentStyle","grandStyle","injectJs",// "injectCss", +// "fixerSelector", "transStartHook","transEndHook"// "transRemoveHook", ].forEach(key=>{var _rule$key;if(!((_rule$key=rule[key])!==null&&_rule$key!==void 0&&_rule$key.trim())){rule[key]=globalRule[key];}});["apiSlug","fromLang","toLang","transOpen","transOnly",// "transTiming", "autoScan","hasRichText","hasShadowroot","transTag","transTitle",// "detectRemote", @@ -69640,13 +69647,15 @@ if(!rule.textStyle||rule.textStyle===GLOBAL_KEY){rule.textStyle=globalRule.textS * 检查过滤rules * @param {*} rules * @returns - */const checkRules=rules=>{if(type(rules)==="string"){rules=JSON.parse(rules);}if(type(rules)!=="array"){throw new Error("data error");}const fromLangs=OPT_LANGS_FROM.map(item=>item[0]);const toLangs=OPT_LANGS_TO.map(item=>item[0]);const patternSet=new Set();rules=rules.filter(rule=>type(rule)==="object").filter(_ref2=>{let{pattern}=_ref2;if(type(pattern)!=="string"||patternSet.has(pattern.trim())){return false;}patternSet.add(pattern.trim());return true;}).map(_ref3=>{let{pattern,selector,keepSelector,rootsSelector,ignoreSelector,terms,aiTerms,termsStyle,highlightStyle,selectStyle,parentStyle,grandStyle,injectJs,injectCss,apiSlug,fromLang,toLang,textStyle,transOpen,bgColor,textDiyStyle,transOnly,autoScan,hasRichText,hasShadowroot,// transTiming, + */const checkRules=rules=>{if(type(rules)==="string"){rules=JSON.parse(rules);}if(type(rules)!=="array"){throw new Error("data error");}const fromLangs=OPT_LANGS_FROM.map(item=>item[0]);const toLangs=OPT_LANGS_TO.map(item=>item[0]);const patternSet=new Set();rules=rules.filter(rule=>type(rule)==="object").filter(_ref2=>{let{pattern}=_ref2;if(type(pattern)!=="string"||patternSet.has(pattern.trim())){return false;}patternSet.add(pattern.trim());return true;}).map(_ref3=>{let{pattern,selector,keepSelector,rootsSelector,ignoreSelector,terms,aiTerms,termsStyle,highlightStyle,selectStyle,parentStyle,grandStyle,injectJs,// injectCss, +apiSlug,fromLang,toLang,textStyle,transOpen,bgColor,textDiyStyle,transOnly,autoScan,hasRichText,hasShadowroot,// transTiming, transTag,transTitle,// detectRemote, // skipLangs, // fixerSelector, // fixerFunc, transStartHook,transEndHook,// transRemoveHook, -splitParagraph,splitLength,highlightWords}=_ref3;return{pattern:pattern.trim(),selector:type(selector)==="string"?selector:"",keepSelector:type(keepSelector)==="string"?keepSelector:"",rootsSelector:type(rootsSelector)==="string"?rootsSelector:"",ignoreSelector:type(ignoreSelector)==="string"?ignoreSelector:"",terms:type(terms)==="string"?terms:"",aiTerms:type(aiTerms)==="string"?aiTerms:"",termsStyle:type(termsStyle)==="string"?termsStyle:"",highlightStyle:type(highlightStyle)==="string"?highlightStyle:"",selectStyle:type(selectStyle)==="string"?selectStyle:"",parentStyle:type(parentStyle)==="string"?parentStyle:"",grandStyle:type(grandStyle)==="string"?grandStyle:"",injectJs:type(injectJs)==="string"?injectJs:"",injectCss:type(injectCss)==="string"?injectCss:"",bgColor:type(bgColor)==="string"?bgColor:"",textDiyStyle:type(textDiyStyle)==="string"?textDiyStyle:"",apiSlug:type(apiSlug)==="string"&&apiSlug.trim()!==""?apiSlug.trim():rules_GLOBAL_KEY,fromLang:matchValue([rules_GLOBAL_KEY,...fromLangs],fromLang),toLang:matchValue([rules_GLOBAL_KEY,...toLangs],toLang),textStyle:matchValue([rules_GLOBAL_KEY,...OPT_STYLE_ALL],textStyle),transOpen:matchValue([rules_GLOBAL_KEY,"true","false"],transOpen),transOnly:matchValue([rules_GLOBAL_KEY,"true","false"],transOnly),autoScan:matchValue([rules_GLOBAL_KEY,"true","false"],autoScan),hasRichText:matchValue([rules_GLOBAL_KEY,"true","false"],hasRichText),hasShadowroot:matchValue([rules_GLOBAL_KEY,"true","false"],hasShadowroot),// transTiming: matchValue([GLOBAL_KEY, ...OPT_TIMING_ALL], transTiming), +splitParagraph,splitLength,highlightWords}=_ref3;return{pattern:pattern.trim(),selector:type(selector)==="string"?selector:"",keepSelector:type(keepSelector)==="string"?keepSelector:"",rootsSelector:type(rootsSelector)==="string"?rootsSelector:"",ignoreSelector:type(ignoreSelector)==="string"?ignoreSelector:"",terms:type(terms)==="string"?terms:"",aiTerms:type(aiTerms)==="string"?aiTerms:"",termsStyle:type(termsStyle)==="string"?termsStyle:"",highlightStyle:type(highlightStyle)==="string"?highlightStyle:"",selectStyle:type(selectStyle)==="string"?selectStyle:"",parentStyle:type(parentStyle)==="string"?parentStyle:"",grandStyle:type(grandStyle)==="string"?grandStyle:"",injectJs:type(injectJs)==="string"?injectJs:"",// injectCss: type(injectCss) === "string" ? injectCss : "", +bgColor:type(bgColor)==="string"?bgColor:"",textDiyStyle:type(textDiyStyle)==="string"?textDiyStyle:"",apiSlug:type(apiSlug)==="string"&&apiSlug.trim()!==""?apiSlug.trim():rules_GLOBAL_KEY,fromLang:matchValue([rules_GLOBAL_KEY,...fromLangs],fromLang),toLang:matchValue([rules_GLOBAL_KEY,...toLangs],toLang),textStyle:matchValue([rules_GLOBAL_KEY,...OPT_STYLE_ALL],textStyle),transOpen:matchValue([rules_GLOBAL_KEY,"true","false"],transOpen),transOnly:matchValue([rules_GLOBAL_KEY,"true","false"],transOnly),autoScan:matchValue([rules_GLOBAL_KEY,"true","false"],autoScan),hasRichText:matchValue([rules_GLOBAL_KEY,"true","false"],hasRichText),hasShadowroot:matchValue([rules_GLOBAL_KEY,"true","false"],hasShadowroot),// transTiming: matchValue([GLOBAL_KEY, ...OPT_TIMING_ALL], transTiming), transTag:matchValue([rules_GLOBAL_KEY,"span","font"],transTag),transTitle:matchValue([rules_GLOBAL_KEY,"true","false"],transTitle),// detectRemote: matchValue([GLOBAL_KEY, "true", "false"], detectRemote), // skipLangs: type(skipLangs) === "array" ? skipLangs : [], // fixerSelector: type(fixerSelector) === "string" ? fixerSelector : "", @@ -69661,7 +69670,10 @@ splitParagraph:matchValue([rules_GLOBAL_KEY,...OPT_SPLIT_PARAGRAPH_ALL],splitPar /** * 规则 hook * @returns - */function useRules(){const{data:list=[],save:saveRules}=useStorage(storage_STOKEY_RULES,rules_DEFAULT_RULES,KV_RULES_KEY);const save=(0,react.useCallback)(objOrFn=>{saveRules(objOrFn);debounceSyncMeta(KV_RULES_KEY);},[saveRules]);const add=(0,react.useCallback)(rule=>{save(prev=>{if(rule.pattern==="*"||prev.some(item=>item.pattern===rule.pattern)){return prev;}return[rule,...prev];});},[save]);const del=(0,react.useCallback)(pattern=>{save(prev=>{if(pattern==="*"){return prev;}return prev.filter(item=>item.pattern!==pattern);});},[save]);const clear=(0,react.useCallback)(()=>{save(prev=>prev.filter(item=>item.pattern==="*"));},[save]);const put=(0,react.useCallback)((pattern,obj)=>{save(prev=>{if(pattern!==obj.pattern){return prev;}return prev.map(item=>item.pattern===pattern?{...item,...obj}:item);});},[save]);const merge=(0,react.useCallback)(rules=>{save(prev=>{const adds=checkRules(rules);if(adds.length===0){return prev;}// const map = new Map(); + */function useRules(){const{data:list=[],save:saveRules}=useStorage(storage_STOKEY_RULES,rules_DEFAULT_RULES,KV_RULES_KEY);const save=(0,react.useCallback)(objOrFn=>{saveRules(objOrFn);debounceSyncMeta(KV_RULES_KEY);},[saveRules]);const add=(0,react.useCallback)(rule=>{save(prev=>{if(rule.pattern==="*"||prev.some(item=>item.pattern===rule.pattern)){return prev;}return[rule,...prev];});},[save]);const del=(0,react.useCallback)(pattern=>{save(prev=>{if(pattern==="*"){return prev;}return prev.filter(item=>item.pattern!==pattern);});},[save]);const clear=(0,react.useCallback)(()=>{save(prev=>prev.filter(item=>item.pattern==="*"));},[save]);const put=(0,react.useCallback)((pattern,obj)=>{save(prev=>{// if (pattern !== obj.pattern) { +// return prev; +// } +return prev.map(item=>item.pattern===pattern?{...item,...obj}:item);});},[save]);const merge=(0,react.useCallback)(rules=>{save(prev=>{const adds=checkRules(rules);if(adds.length===0){return prev;}// const map = new Map(); // // 不进行深度合并 // // [...prev, ...adds].forEach((item) => { // // const k = item.pattern; @@ -73239,7 +73251,7 @@ const hooks_Alert_Alert=/*#__PURE__*/(0,react.forwardRef)(function Alert(props,r * 左下角提示,注入context后,方便全局调用 * @param {*} param0 * @returns - */function AlertProvider(_ref){let{children}=_ref;const vertical="top";const horizontal="center";const[open,setOpen]=(0,react.useState)(false);const[severity,setSeverity]=(0,react.useState)("info");const[message,setMessage]=(0,react.useState)(null);const showAlert=(0,react.useCallback)((msg,type)=>{setOpen(true);setMessage(msg);setSeverity(type);},[]);const handleClose=(0,react.useCallback)((_,reason)=>{if(reason==="clickaway"){return;}setOpen(false);},[]);const value=(0,react.useMemo)(()=>({error:msg=>showAlert(msg,"error"),warning:msg=>showAlert(msg,"warning"),info:msg=>showAlert(msg,"info"),success:msg=>showAlert(msg,"success")}),[showAlert]);return/*#__PURE__*/(0,jsx_runtime.jsxs)(AlertContext.Provider,{value:value,children:[children,/*#__PURE__*/(0,jsx_runtime.jsx)(Snackbar_Snackbar,{open:open,autoHideDuration:10000,onClose:handleClose,anchorOrigin:{vertical,horizontal},children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_Alert_Alert,{onClose:handleClose,severity:severity,sx:{width:"100%"},children:message})})]});}function useAlert(){return (0,react.useContext)(AlertContext);} + */function AlertProvider(_ref){let{children}=_ref;const vertical="top";const horizontal="center";const[open,setOpen]=(0,react.useState)(false);const[severity,setSeverity]=(0,react.useState)("info");const[message,setMessage]=(0,react.useState)(null);const showAlert=(0,react.useCallback)((msg,type)=>{setOpen(true);setMessage(msg);setSeverity(type);},[]);const handleClose=(0,react.useCallback)((_,reason)=>{if(reason==="clickaway"){return;}setOpen(false);},[]);const value=(0,react.useMemo)(()=>({error:msg=>showAlert(msg,"error"),warning:msg=>showAlert(msg,"warning"),info:msg=>showAlert(msg,"info"),success:msg=>showAlert(msg,"success")}),[showAlert]);return/*#__PURE__*/(0,jsx_runtime.jsxs)(AlertContext.Provider,{value:value,children:[children,/*#__PURE__*/(0,jsx_runtime.jsx)(Snackbar_Snackbar,{open:open,autoHideDuration:10000,onClose:handleClose,anchorOrigin:{vertical,horizontal},children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_Alert_Alert,{onClose:handleClose,severity:severity,sx:{minWidth:"300px",maxWidth:"80%"},children:message})})]});}function useAlert(){return (0,react.useContext)(AlertContext);} // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+icons-material@5.15.15_@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@1_1e29dcefa4691dc57f2acd9f73947cfd/node_modules/@mui/icons-material/ClearAll.js var ClearAll = __webpack_require__(1285); // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+icons-material@5.15.15_@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@1_1e29dcefa4691dc57f2acd9f73947cfd/node_modules/@mui/icons-material/Help.js @@ -75056,7 +75068,8 @@ var style_templateObject,style_templateObject2,style_templateObject3,style_templ [OPT_STYLE_DIY]:"\n".concat(textDiyStyle,"\n")};};const genTextClass=_ref=>{let{textDiyStyle,bgColor=DEFAULT_COLOR}=_ref;const styles=genStyles({textDiyStyle,bgColor});const textClass={};let textStyles="";Object.entries(styles).forEach(_ref2=>{let[k,v]=_ref2;textClass[k]=css(style_templateObject4||(style_templateObject4=_taggedTemplateLiteral(["\n ","\n "])),v);});Object.entries(styles).forEach(_ref3=>{let[k,v]=_ref3;textStyles+="\n .".concat(textClass[k]," {\n ").concat(v,"\n }\n ");});return[textClass,textStyles];};const defaultStyles=genStyles(); ;// CONCATENATED MODULE: ./src/views/Options/Rules.js // import OwSubRule from "./OwSubRule"; -const calculateInitialValues=rule=>{const base=(rule===null||rule===void 0?void 0:rule.pattern)==="*"?rules_GLOBLA_RULE:rules_DEFAULT_RULE;return{...base,...(rule||{})};};function RuleFields(_ref){let{rule,rules,setShow,setKeyword}=_ref;const editMode=(0,react.useMemo)(()=>!!rule,[rule]);const i18n=useI18n();const[disabled,setDisabled]=(0,react.useState)(editMode);const[errors,setErrors]=(0,react.useState)({});const[initialFormValues,setInitialFormValues]=(0,react.useState)(()=>calculateInitialValues(rule));const[formValues,setFormValues]=(0,react.useState)(initialFormValues);const[showMore,setShowMore]=(0,react.useState)(!rules);const{enabledApis}=useApiList();(0,react.useEffect)(()=>{const newInitialValues=calculateInitialValues(rule);setInitialFormValues(newInitialValues);setFormValues(newInitialValues);},[rule]);const{pattern,selector,keepSelector="",rootsSelector="",ignoreSelector="",terms="",aiTerms="",termsStyle="",highlightStyle="color: red;",selectStyle="",parentStyle="",grandStyle="",injectJs="",injectCss="",apiSlug,fromLang,toLang,textStyle,transOpen,bgColor,textDiyStyle,transOnly="false",autoScan="true",hasRichText="true",hasShadowroot="false",// transTiming = OPT_TIMING_PAGESCROLL, +const calculateInitialValues=rule=>{const base=(rule===null||rule===void 0?void 0:rule.pattern)==="*"?rules_GLOBLA_RULE:rules_DEFAULT_RULE;return{...base,...(rule||{})};};function RuleFields(_ref){let{rule,rules,setShow,setKeyword}=_ref;const editMode=(0,react.useMemo)(()=>!!rule,[rule]);const i18n=useI18n();const[disabled,setDisabled]=(0,react.useState)(editMode);const[errors,setErrors]=(0,react.useState)({});const[initialFormValues,setInitialFormValues]=(0,react.useState)(()=>calculateInitialValues(rule));const[formValues,setFormValues]=(0,react.useState)(initialFormValues);const[showMore,setShowMore]=(0,react.useState)(!rules);const{enabledApis}=useApiList();(0,react.useEffect)(()=>{const newInitialValues=calculateInitialValues(rule);setInitialFormValues(newInitialValues);setFormValues(newInitialValues);},[rule]);const{pattern,selector,keepSelector="",rootsSelector="",ignoreSelector="",terms="",aiTerms="",termsStyle="",highlightStyle="color: red;",selectStyle="",parentStyle="",grandStyle="",injectJs="",// injectCss = "", +apiSlug,fromLang,toLang,textStyle,transOpen,bgColor,textDiyStyle,transOnly="false",autoScan="true",hasRichText="true",hasShadowroot="false",// transTiming = OPT_TIMING_PAGESCROLL, transTag=DEFAULT_TRANS_TAG,transTitle="false",// detectRemote = "true", // skipLangs = [], // fixerSelector = "", @@ -75065,7 +75078,7 @@ transStartHook="",transEndHook="",// transRemoveHook = "", splitParagraph=OPT_SPLIT_PARAGRAPH_DISABLE,splitLength=0,highlightWords=OPT_HIGHLIGHT_WORDS_DISABLE}=formValues;const isModified=(0,react.useMemo)(()=>{return JSON.stringify(initialFormValues)!==JSON.stringify(formValues);},[initialFormValues,formValues]);const stylesExample=(0,react.useMemo)(()=>{return Object.entries(defaultStyles).filter(_ref2=>{let[_,v]=_ref2;return v;}).map(_ref3=>{let[k,v]=_ref3;return"".concat(i18n(k),":").concat(v);}).join("\n");},[i18n]);const hasSamePattern=str=>{for(const item of rules.list){if(item.pattern===str&&(rule===null||rule===void 0?void 0:rule.pattern)!==str){return true;}}return false;};const handleFocus=e=>{e.preventDefault();const{name}=e.target;setErrors(pre=>({...pre,[name]:""}));};const handlePatternChange=(0,react.useMemo)(()=>debounce(async patterns=>{setKeyword(patterns.trim());},500),[setKeyword]);const handleChange=e=>{e.preventDefault();const{name,value}=e.target;setFormValues(pre=>({...pre,[name]:value}));if(name==="pattern"&&!editMode){handlePatternChange(value);}};const handleCancel=e=>{e.preventDefault();if(editMode){setDisabled(true);}else{setShow(false);}setErrors({});setFormValues(initialFormValues);};const handleRestore=e=>{e.preventDefault();setFormValues(_ref4=>{let{pattern}=_ref4;return{...(pattern==="*"?rules_GLOBLA_RULE:rules_DEFAULT_RULE),pattern};});};const handleSubmit=e=>{e.preventDefault();const errors={};if(!pattern.trim()){errors.pattern=i18n("error_cant_be_blank");}if(hasSamePattern(pattern)){errors.pattern=i18n("error_duplicate_values");}if(pattern==="*"&&!errors.pattern&&!selector.trim()){errors.selector=i18n("error_cant_be_blank");}if(Object.keys(errors).length>0){setErrors(errors);return;}if(editMode){// 编辑 setDisabled(true);rules.put(rule.pattern,formValues);}else{// 添加 rules.add(formValues);setShow(false);setFormValues(initialFormValues);}};const GlobalItem=(rule===null||rule===void 0?void 0:rule.pattern)!=="*"&&/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:rules_GLOBAL_KEY,children:rules_GLOBAL_KEY},rules_GLOBAL_KEY);return/*#__PURE__*/(0,jsx_runtime.jsx)("form",{onSubmit:handleSubmit,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("pattern"),error:!!errors.pattern,helperText:errors.pattern||i18n("pattern_helper"),name:"pattern",value:pattern,disabled:(rule===null||rule===void 0?void 0:rule.pattern)==="*"||disabled,onChange:handleChange,onFocus:handleFocus,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("root_selector"),helperText:i18n("root_selector_helper"),name:"rootsSelector",value:rootsSelector,disabled:disabled,onChange:handleChange,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("ignore_selector"),helperText:i18n("ignore_selector_helper"),name:"ignoreSelector",value:ignoreSelector,disabled:disabled,onChange:handleChange,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("target_selector"),error:!!errors.selector,helperText:errors.selector||i18n("selector_helper"),name:"selector",value:selector,disabled:autoScan==="true"||disabled,onChange:handleChange,onFocus:handleFocus,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("keep_selector"),helperText:i18n("keep_selector_helper"),name:"keepSelector",value:keepSelector,disabled:disabled,onChange:handleChange,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"transOpen",value:transOpen,label:i18n("translate_switch"),disabled:disabled,onChange:handleChange,children:[GlobalItem,/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"true",children:i18n("default_enabled")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"false",children:i18n("default_disabled")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"apiSlug",value:apiSlug,label:i18n("translate_service"),disabled:disabled,onChange:handleChange,children:[GlobalItem,enabledApis.map(api=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:api.apiSlug,children:api.apiName},api.apiSlug))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"fromLang",value:fromLang,label:i18n("from_lang"),disabled:disabled,onChange:handleChange,children:[GlobalItem,OPT_LANGS_FROM.map(_ref5=>{let[lang,name]=_ref5;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"toLang",value:toLang,label:i18n("to_lang"),disabled:disabled,onChange:handleChange,children:[GlobalItem,OPT_LANGS_TO.map(_ref6=>{let[lang,name]=_ref6;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"autoScan",value:autoScan,label:i18n("auto_scan_page"),disabled:disabled,onChange:handleChange,children:[GlobalItem,/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"false",children:i18n("disable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"true",children:i18n("enable")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"hasRichText",value:hasRichText,label:i18n("has_rich_text"),disabled:disabled,onChange:handleChange,children:[GlobalItem,/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"false",children:i18n("disable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"true",children:i18n("enable")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"hasShadowroot",value:hasShadowroot,label:i18n("has_shadowroot"),disabled:disabled,onChange:handleChange,children:[GlobalItem,/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"false",children:i18n("disable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"true",children:i18n("enable")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"transOnly",value:transOnly,label:i18n("show_only_translations"),disabled:disabled,onChange:handleChange,children:[GlobalItem,/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"false",children:i18n("disable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"true",children:i18n("enable")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"splitParagraph",value:splitParagraph,label:i18n("split_paragraph"),disabled:disabled,onChange:handleChange,children:[GlobalItem,OPT_SPLIT_PARAGRAPH_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:i18n(item)},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("split_length"),type:"number",name:"splitLength",value:splitLength,disabled:disabled,onChange:handleChange,min:0,max:1000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"highlightWords",value:highlightWords,label:i18n("highlight_words"),disabled:disabled,onChange:handleChange,children:[GlobalItem,OPT_HIGHLIGHT_WORDS_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:i18n(item)},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"transTitle",value:transTitle,label:i18n("translate_page_title"),disabled:disabled,onChange:handleChange,children:[GlobalItem,/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"false",children:i18n("disable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"true",children:i18n("enable")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"transTag",value:transTag,label:i18n("translation_element_tag"),disabled:disabled,onChange:handleChange,children:[GlobalItem,/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"span",children:""}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"font",children:""})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"textStyle",value:textStyle,label:i18n("text_style"),disabled:disabled,onChange:handleChange,children:[GlobalItem,OPT_STYLE_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:i18n(item)},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",fullWidth:true,name:"bgColor",value:bgColor,label:i18n("bg_color"),disabled:disabled,onChange:handleChange})})]})}),textStyle===OPT_STYLE_DIY&&/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("diy_style"),FormHelperTextProps:{component:"div"},helperText:/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"div",children:i18n("default_styles_example")}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"pre",sx:{overflowX:"auto",height:200,resize:"vertical",minHeight:100,margin:0// border: "1px solid #ccc", -},children:stylesExample})]}),name:"textDiyStyle",value:textDiyStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),showMore&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("terms"),helperText:i18n("terms_helper"),name:"terms",value:terms,disabled:disabled,onChange:handleChange,multiline:true,maxRows:10}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("ai_terms"),helperText:i18n("ai_terms_helper"),name:"aiTerms",value:aiTerms,disabled:disabled,onChange:handleChange,multiline:true,maxRows:10}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("terms_style"),name:"termsStyle",value:termsStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("highlight_style"),name:"highlightStyle",value:highlightStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("selector_style"),name:"selectStyle",value:selectStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("selector_parent_style"),name:"parentStyle",value:parentStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("selector_grand_style"),name:"grandStyle",value:grandStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("translate_start_hook"),helperText:i18n("translate_start_hook_helper"),name:"transStartHook",value:transStartHook,disabled:disabled,onChange:handleChange,multiline:true,maxRows:10}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("translate_end_hook"),helperText:i18n("translate_end_hook_helper"),name:"transEndHook",value:transEndHook,disabled:disabled,onChange:handleChange,multiline:true,maxRows:10}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("inject_css"),helperText:i18n("inject_css_helper"),name:"injectCss",value:injectCss,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("inject_js"),helperText:i18n("inject_js_helper"),name:"injectJs",value:injectJs,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true})]}),rules&&(editMode?/*#__PURE__*/ // 编辑 +},children:stylesExample})]}),name:"textDiyStyle",value:textDiyStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),showMore&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("terms"),helperText:i18n("terms_helper"),name:"terms",value:terms,disabled:disabled,onChange:handleChange,multiline:true,maxRows:10}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("ai_terms"),helperText:i18n("ai_terms_helper"),name:"aiTerms",value:aiTerms,disabled:disabled,onChange:handleChange,multiline:true,maxRows:10}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("terms_style"),name:"termsStyle",value:termsStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("highlight_style"),name:"highlightStyle",value:highlightStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("selector_style"),name:"selectStyle",value:selectStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("selector_parent_style"),name:"parentStyle",value:parentStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("selector_grand_style"),name:"grandStyle",value:grandStyle,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("translate_start_hook"),helperText:i18n("translate_start_hook_helper"),name:"transStartHook",value:transStartHook,disabled:disabled,onChange:handleChange,multiline:true,maxRows:10}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("translate_end_hook"),helperText:i18n("translate_end_hook_helper"),name:"transEndHook",value:transEndHook,disabled:disabled,onChange:handleChange,multiline:true,maxRows:10}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("inject_js"),helperText:i18n("inject_js_helper"),name:"injectJs",value:injectJs,disabled:disabled,onChange:handleChange,maxRows:10,multiline:true})]}),rules&&(editMode?/*#__PURE__*/ // 编辑 (0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",spacing:2,children:[disabled?/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"contained",onClick:e=>{e.preventDefault();setDisabled(false);},startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Edit/* default */.Z,{}),children:i18n("edit")}),(rule===null||rule===void 0?void 0:rule.pattern)!=="*"&&/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",onClick:e=>{e.preventDefault();rules.del(rule.pattern);},startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Delete/* default */.Z,{}),children:i18n("delete")})]}):/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"contained",type:"submit",startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Save/* default */.Z,{}),disabled:!isModified,children:i18n("save")}),/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",onClick:handleCancel,startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Cancel/* default */.Z,{}),children:i18n("cancel")}),/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",onClick:handleRestore,children:i18n("restore_default")})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(ShowMoreButton,{showMore:showMore,onChange:setShowMore})]}):/*#__PURE__*/ // 添加 (0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"contained",type:"submit",startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Save/* default */.Z,{}),children:i18n("save")}),/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",onClick:handleCancel,startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Cancel/* default */.Z,{}),children:i18n("cancel")}),/*#__PURE__*/(0,jsx_runtime.jsx)(ShowMoreButton,{showMore:showMore,onChange:setShowMore})]}))]})});}function RuleAccordion(_ref7){let{rule,rules,isExpanded=false}=_ref7;const i18n=useI18n();const[expanded,setExpanded]=(0,react.useState)(isExpanded);const handleChange=e=>{setExpanded(pre=>!pre);};return/*#__PURE__*/(0,jsx_runtime.jsxs)(Accordion_Accordion,{expanded:expanded,onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(AccordionSummary_AccordionSummary,{expandIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(ExpandMore/* default */.Z,{}),children:/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{sx:{opacity:rules?1:0.5,overflowWrap:"anywhere"},children:rule.pattern===rules_GLOBAL_KEY?"[".concat(i18n("global_rule"),"] ").concat(rule.pattern):rule.pattern})}),/*#__PURE__*/(0,jsx_runtime.jsx)(AccordionDetails_AccordionDetails,{children:expanded&&/*#__PURE__*/(0,jsx_runtime.jsx)(RuleFields,{rule:rule,rules:rules})})]});}function ShareButton(_ref8){let{rules,injectRules,selectedUrl}=_ref8;const alert=useAlert();const i18n=useI18n();const handleClick=async()=>{try{const{syncType,syncUrl,syncKey}=await storage_getSyncWithDefault();if(syncType!==OPT_SYNCTYPE_WORKER||!syncUrl||!syncKey){alert.warning(i18n("error_sync_setting"));return;}const shareRules=[...rules.list];if(injectRules){const subRules=await subRules_loadOrFetchSubRules(selectedUrl);shareRules.splice(-1,0,...subRules);}const url=await syncShareRules({rules:shareRules,syncUrl,syncKey});window.open(url,"_blank");}catch(err){alert.warning(i18n("error_got_some_wrong"));log_kissLog("share rules",err);}};return/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",onClick:handleClick,startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Share/* default */.Z,{}),children:i18n("share")});}function UserRules(_ref9){let{subRules,rules}=_ref9;const i18n=useI18n();const[showAdd,setShowAdd]=(0,react.useState)(false);const{setting,updateSetting}=Setting_useSetting();const[keyword,setKeyword]=(0,react.useState)("");const confirm=useConfirm();const injectRules=!!(setting!==null&&setting!==void 0&&setting.injectRules);const{selectedUrl,selectedRules}=subRules;const handleImport=async data=>{try{await rules.merge(JSON.parse(data));}catch(err){log_kissLog("import rules",err);}};const handleInject=()=>{updateSetting({injectRules:!injectRules});};const handleClearAll=async()=>{const isConfirmed=await confirm({confirmText:i18n("confirm_title"),cancelText:i18n("cancel")});if(isConfirmed){rules.clear();}};(0,react.useEffect)(()=>{if(!showAdd){setKeyword("");}},[showAdd]);if(!rules.list){return;}return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",spacing:2,useFlexGap:true,flexWrap:"wrap",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"contained",disabled:showAdd,onClick:e=>{e.preventDefault();setShowAdd(true);},startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Add/* default */.Z,{}),children:i18n("add")}),/*#__PURE__*/(0,jsx_runtime.jsx)(UploadButton,{text:i18n("import"),handleImport:handleImport}),/*#__PURE__*/(0,jsx_runtime.jsx)(DownloadButton,{handleData:()=>JSON.stringify([...rules.list],null,2),text:i18n("export"),fileName:"kiss-rules_v2_".concat(Date.now(),".json")}),/*#__PURE__*/(0,jsx_runtime.jsx)(DownloadButton,{handleData:async()=>JSON.stringify(await getRulesOld(),null,2),text:i18n("export_old"),fileName:"kiss-rules_v1_".concat(Date.now(),".json")}),/*#__PURE__*/(0,jsx_runtime.jsx)(ShareButton,{rules:rules,injectRules:injectRules,selectedUrl:selectedUrl}),/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",onClick:handleClearAll,startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(ClearAll/* default */.Z,{}),children:i18n("clear_all")}),/*#__PURE__*/(0,jsx_runtime.jsx)(HelpButton,{url:URL_KISS_RULES_NEW_ISSUE}),/*#__PURE__*/(0,jsx_runtime.jsx)(FormControlLabel_FormControlLabel,{control:/*#__PURE__*/(0,jsx_runtime.jsx)(Switch_Switch,{size:"small",checked:injectRules,onChange:handleInject}),label:i18n("inject_rules")})]}),showAdd&&/*#__PURE__*/(0,jsx_runtime.jsx)(RuleFields,{rules:rules,setShow:setShowAdd,setKeyword:setKeyword}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:rules.list.filter(rule=>rule.pattern!=="*"&&(rule.pattern.includes(keyword)||keyword.includes(rule.pattern))).map(rule=>/*#__PURE__*/(0,jsx_runtime.jsx)(RuleAccordion,{rule:rule,rules:rules},rule.pattern))}),injectRules&&/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:selectedRules.filter(rule=>rule.pattern.includes(keyword)||keyword.includes(rule.pattern)).map(rule=>/*#__PURE__*/(0,jsx_runtime.jsx)(RuleAccordion,{rule:rule},rule.pattern))})]});}function SubRulesItem(_ref10){let{index,url,syncAt,selectedUrl,delSub,setSelectedRules,updateDataCache,deleteDataCache}=_ref10;const[loading,setLoading]=(0,react.useState)(false);const alert=useAlert();const handleDel=async()=>{try{await delSub(url);await delSubRules(url);await deleteDataCache(url);}catch(err){log_kissLog("del subrules",err);}};const handleSync=async()=>{try{setLoading(true);const rules=await syncSubRules(url);if(rules.length>0&&url===selectedUrl){setSelectedRules(rules);}await updateDataCache(url);}catch(err){log_kissLog("sync sub rules",err);alert.error(/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)("p",{children:"Sync Error:"}),/*#__PURE__*/(0,jsx_runtime.jsx)("pre",{children:err.message})]}));}finally{setLoading(false);}};return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(FormControlLabel_FormControlLabel,{value:url,control:/*#__PURE__*/(0,jsx_runtime.jsx)(Radio_Radio,{}),sx:{overflowWrap:"anywhere"},label:url}),syncAt&&/*#__PURE__*/(0,jsx_runtime.jsxs)("span",{style:{marginLeft:"0.5em",opacity:0.5},children:["[",new Date(syncAt).toLocaleString(),"]"]}),loading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",onClick:handleSync,children:/*#__PURE__*/(0,jsx_runtime.jsx)(Sync/* default */.Z,{fontSize:"small"})}),index!==0&&selectedUrl!==url&&/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{size:"small",onClick:handleDel,children:/*#__PURE__*/(0,jsx_runtime.jsx)(Delete/* default */.Z,{fontSize:"small"})})]});}function SubRulesEdit(_ref11){let{subList,addSub,updateDataCache}=_ref11;const i18n=useI18n();const[inputText,setInputText]=(0,react.useState)("");const[inputError,setInputError]=(0,react.useState)("");const[showInput,setShowInput]=(0,react.useState)(false);const[loading,setLoading]=(0,react.useState)(false);const handleCancel=e=>{e.preventDefault();setShowInput(false);setInputText("");setInputError("");};const handleSave=async e=>{e.preventDefault();const url=inputText.trim();if(!url){setInputError(i18n("error_cant_be_blank"));return;}if(subList.some(item=>item.url===url)){setInputError(i18n("error_duplicate_values"));return;}try{setLoading(true);const rules=await syncSubRules(url);if(rules.length===0){throw new Error("empty rules");}await addSub(url);await updateDataCache(url);setShowInput(false);setInputText("");}catch(err){log_kissLog("fetch rules",err);setInputError(i18n("error_fetch_url"));}finally{setLoading(false);}};const handleInput=e=>{e.preventDefault();setInputText(e.target.value);};const handleFocus=e=>{e.preventDefault();setInputError("");};return/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"contained",disabled:showInput,onClick:e=>{e.preventDefault();setShowInput(true);},startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Add/* default */.Z,{}),children:i18n("add")}),/*#__PURE__*/(0,jsx_runtime.jsx)(HelpButton,{url:URL_KISS_RULES_NEW_ISSUE})]}),showInput&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",value:inputText,error:!!inputError,helperText:inputError,onChange:handleInput,onFocus:handleFocus,label:i18n("subscribe_url")}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"contained",onClick:handleSave,disabled:loading,startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Save/* default */.Z,{}),children:i18n("save")}),/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",onClick:handleCancel,startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Cancel/* default */.Z,{}),children:i18n("cancel")})]})]})]});}function SubRules(_ref12){let{subRules}=_ref12;const{subList,selectSub,addSub,delSub,selectedUrl,selectedRules,setSelectedRules,loading}=subRules;const{dataCaches,updateDataCache,deleteDataCache,reloadSync}=useSyncCaches();const handleSelect=e=>{const url=e.target.value;selectSub(url);};(0,react.useEffect)(()=>{reloadSync();},[selectedRules,reloadSync]);return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(SubRulesEdit,{subList:subList,addSub:addSub,updateDataCache:updateDataCache}),/*#__PURE__*/(0,jsx_runtime.jsx)(RadioGroup_RadioGroup,{value:selectedUrl,onChange:handleSelect,children:subList.map((item,index)=>/*#__PURE__*/(0,jsx_runtime.jsx)(SubRulesItem,{url:item.url,syncAt:dataCaches[item.url],index:index,selectedUrl:selectedUrl,delSub:delSub,setSelectedRules:setSelectedRules,updateDataCache:updateDataCache,deleteDataCache:deleteDataCache},item.url))}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:loading?/*#__PURE__*/(0,jsx_runtime.jsx)("center",{children:/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{})}):selectedRules.map(rule=>/*#__PURE__*/(0,jsx_runtime.jsx)(RuleAccordion,{rule:rule},rule.pattern))})]});}function GlobalRule(_ref13){let{rules}=_ref13;const globalRule=(0,react.useMemo)(()=>rules.list[rules.list.length-1],[rules.list]);if(!globalRule){return;}return/*#__PURE__*/(0,jsx_runtime.jsx)(Stack_Stack,{spacing:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(RuleAccordion,{rule:globalRule,rules:rules,isExpanded:true},globalRule.pattern)});}function Rules(){const i18n=useI18n();const[activeTab,setActiveTab]=(0,react.useState)(0);const subRules=useSubRules();const rules=useRules();const handleTabChange=(e,newValue)=>{setActiveTab(newValue);};return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Alert_Alert,{severity:"info",children:[i18n("rules_warn_1"),/*#__PURE__*/(0,jsx_runtime.jsx)("br",{}),i18n("rules_warn_2"),/*#__PURE__*/(0,jsx_runtime.jsx)("br",{}),i18n("rules_warn_3")]}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{sx:{borderBottom:1,borderColor:"divider"},children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Tabs_Tabs,{value:activeTab,onChange:handleTabChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Tab_Tab,{label:i18n("global_rule")}),/*#__PURE__*/(0,jsx_runtime.jsx)(Tab_Tab,{label:i18n("personal_rules")}),/*#__PURE__*/(0,jsx_runtime.jsx)(Tab_Tab,{label:i18n("subscribe_rules")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)("div",{hidden:activeTab!==0,children:activeTab===0&&/*#__PURE__*/(0,jsx_runtime.jsx)(GlobalRule,{rules:rules})}),/*#__PURE__*/(0,jsx_runtime.jsx)("div",{hidden:activeTab!==1,children:activeTab===1&&/*#__PURE__*/(0,jsx_runtime.jsx)(UserRules,{subRules:subRules,rules:rules})}),/*#__PURE__*/(0,jsx_runtime.jsx)("div",{hidden:activeTab!==2,children:activeTab===2&&/*#__PURE__*/(0,jsx_runtime.jsx)(SubRules,{subRules:subRules})})]})});} ;// CONCATENATED MODULE: ./src/hooks/Shortcut.js @@ -75115,7 +75128,7 @@ const DEFAULT_FAB={};/** */function useFab(){const{data,update}=useStorage(storage_STOKEY_FAB,DEFAULT_FAB);return{fab:data,updateFab:update};} ;// CONCATENATED MODULE: ./src/views/Options/Setting.js function ShortcutItem(_ref){let{action,label}=_ref;const{shortcut,setShortcut}=useShortcut(action);return/*#__PURE__*/(0,jsx_runtime.jsx)(ShortcutInput,{value:shortcut,onChange:setShortcut,label:label});}function Settings(){const i18n=useI18n();const{setting,updateSetting}=Setting_useSetting();const alert=useAlert();const{fab,updateFab}=useFab();const handleChange=e=>{e.preventDefault();let{name,value}=e.target;switch(name){case"contextMenuType":client_isExt&&msg_sendBgMsg(MSG_CONTEXT_MENUS,value);break;case"csplist":client_isExt&&msg_sendBgMsg(MSG_UPDATE_CSP,{csplist:value});break;case"orilist":client_isExt&&msg_sendBgMsg(MSG_UPDATE_CSP,{orilist:value});break;default:}updateSetting({[name]:value});};const handleClearCache=()=>{try{caches.delete(storage_CACHE_NAME);alert.success(i18n("clear_success"));}catch(err){log_kissLog("clear cache",err);}};const handleImport=async data=>{try{updateSetting(JSON.parse(data));}catch(err){log_kissLog("import setting",err);}};const{uiLang,minLength,maxLength,clearCache,newlineLength=TRANS_NEWLINE_LENGTH,httpTimeout=DEFAULT_HTTP_TIMEOUT,contextMenuType=1,touchModes=[2],blacklist=DEFAULT_BLACKLIST.join(",\n"),csplist=DEFAULT_CSPLIST.join(",\n"),orilist=DEFAULT_ORILIST.join(",\n"),transInterval=100,langDetector="-",logLevel=1,preInit=true,skipLangs=[],// detectRemote = true, -transAllnow=false}=setting;const{isHide=false,fabClickAction=0}=fab||{};return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Alert_Alert,{severity:"info",children:i18n("setting_helper")}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",spacing:2,useFlexGap:true,flexWrap:"wrap",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(UploadButton,{text:i18n("import"),handleImport:handleImport}),/*#__PURE__*/(0,jsx_runtime.jsx)(DownloadButton,{handleData:()=>JSON.stringify(setting,null,2),text:i18n("export"),fileName:"kiss-setting_v2_".concat(Date.now(),".json")}),/*#__PURE__*/(0,jsx_runtime.jsx)(DownloadButton,{handleData:async()=>JSON.stringify(await getSettingOld(),null,2),text:i18n("export_old"),fileName:"kiss-setting_v1_".concat(Date.now(),".json")})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"uiLang",value:uiLang,label:i18n("ui_lang"),onChange:handleChange,children:UI_LANGS.map(_ref2=>{let[lang,name]=_ref2;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"preInit",value:preInit,label:i18n("if_pre_init"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("enable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("disable")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"isHide",value:isHide,label:i18n("hide_fab_button"),onChange:e=>{updateFab({isHide:e.target.value});},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("show")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("hide")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"fabClickAction",value:fabClickAction,label:i18n("fab_click_action"),onChange:e=>updateFab({fabClickAction:e.target.value}),children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:0,children:i18n("fab_click_menu")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:1,children:i18n("fab_click_translate")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("min_translate_length"),type:"number",name:"minLength",value:minLength,onChange:handleChange,min:1,max:100})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("max_translate_length"),type:"number",name:"maxLength",value:maxLength,onChange:handleChange,min:100,max:100000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("num_of_newline_characters"),type:"number",name:"newlineLength",value:newlineLength,onChange:handleChange,min:1,max:1000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("translate_interval"),type:"number",name:"transInterval",value:transInterval,onChange:handleChange,min:10,max:2000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("http_timeout"),type:"number",name:"httpTimeout",value:httpTimeout,onChange:handleChange,min:5000,max:60000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"touchModes",value:touchModes,label:i18n("touch_translate_shortcut"),onChange:handleChange,SelectProps:{multiple:true},children:[0,2,3,4,5,6,7].map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:i18n("touch_tap_".concat(item))},item))})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"contextMenuType",value:contextMenuType,label:i18n("context_menus"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:0,children:i18n("hide_context_menus")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:1,children:i18n("simple_context_menus")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:2,children:i18n("secondary_context_menus")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"transAllnow",value:transAllnow,label:i18n("trigger_mode"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("mk_pagescroll")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("mk_pageopen")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"langDetector",value:langDetector,label:i18n("detected_lang"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"-",children:i18n("disable")}),OPT_LANGDETECTOR_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:item},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"logLevel",value:logLevel,label:i18n("log_level"),onChange:handleChange,children:Object.values(LogLevel).map(_ref3=>{let{value,name}=_ref3;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:value,children:name},value);})})})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,size:"small",label:i18n("skip_langs"),helperText:i18n("skip_langs_helper"),name:"skipLangs",value:skipLangs,onChange:handleChange,SelectProps:{multiple:true},children:OPT_LANGS_TO.map(_ref4=>{let[langKey,langName]=_ref4;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:langKey,children:langName},langKey);})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("translate_blacklist"),helperText:i18n("pattern_helper"),name:"blacklist",value:blacklist,onChange:handleChange,maxRows:10,multiline:true}),client_isExt?/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"clearCache",value:clearCache,label:i18n("if_clear_cache"),onChange:handleChange,helperText:/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{component:"button",onClick:handleClearCache,children:i18n("clear_all_cache_now")}),children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("clear_cache_never")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("clear_cache_restart")})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("disabled_orilist"),helperText:i18n("pattern_helper"),name:"orilist",value:orilist,onChange:handleChange,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("disabled_csplist"),helperText:i18n("pattern_helper")+" "+i18n("disabled_csplist_helper"),name:"csplist",value:csplist,onChange:handleChange,multiline:true})]}):/*#__PURE__*/(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(ShortcutItem,{action:OPT_SHORTCUT_TRANSLATE,label:i18n("toggle_translate_shortcut")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(ShortcutItem,{action:OPT_SHORTCUT_STYLE,label:i18n("toggle_style_shortcut")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(ShortcutItem,{action:OPT_SHORTCUT_POPUP,label:i18n("toggle_popup_shortcut")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(ShortcutItem,{action:OPT_SHORTCUT_SETTING,label:i18n("open_setting_shortcut")})})]})})})]})});} +transAllnow=false,rootMargin=500}=setting;const{isHide=false,fabClickAction=0}=fab||{};return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Alert_Alert,{severity:"info",children:i18n("setting_helper")}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",spacing:2,useFlexGap:true,flexWrap:"wrap",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(UploadButton,{text:i18n("import"),handleImport:handleImport}),/*#__PURE__*/(0,jsx_runtime.jsx)(DownloadButton,{handleData:()=>JSON.stringify(setting,null,2),text:i18n("export"),fileName:"kiss-setting_v2_".concat(Date.now(),".json")}),/*#__PURE__*/(0,jsx_runtime.jsx)(DownloadButton,{handleData:async()=>JSON.stringify(await getSettingOld(),null,2),text:i18n("export_old"),fileName:"kiss-setting_v1_".concat(Date.now(),".json")})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"uiLang",value:uiLang,label:i18n("ui_lang"),onChange:handleChange,children:UI_LANGS.map(_ref2=>{let[lang,name]=_ref2;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"preInit",value:preInit,label:i18n("if_pre_init"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("enable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("disable")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"isHide",value:isHide,label:i18n("hide_fab_button"),onChange:e=>{updateFab({isHide:e.target.value});},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("show")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("hide")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"fabClickAction",value:fabClickAction,label:i18n("fab_click_action"),onChange:e=>updateFab({fabClickAction:e.target.value}),children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:0,children:i18n("fab_click_menu")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:1,children:i18n("fab_click_translate")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("min_translate_length"),type:"number",name:"minLength",value:minLength,onChange:handleChange,min:1,max:100})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("max_translate_length"),type:"number",name:"maxLength",value:maxLength,onChange:handleChange,min:100,max:100000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("num_of_newline_characters"),type:"number",name:"newlineLength",value:newlineLength,onChange:handleChange,min:1,max:1000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("translate_interval"),type:"number",name:"transInterval",value:transInterval,onChange:handleChange,min:10,max:2000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("http_timeout"),type:"number",name:"httpTimeout",value:httpTimeout,onChange:handleChange,min:5000,max:60000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"touchModes",value:touchModes,label:i18n("touch_translate_shortcut"),onChange:handleChange,SelectProps:{multiple:true},children:[0,2,3,4,5,6,7].map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:i18n("touch_tap_".concat(item))},item))})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"contextMenuType",value:contextMenuType,label:i18n("context_menus"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:0,children:i18n("hide_context_menus")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:1,children:i18n("simple_context_menus")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:2,children:i18n("secondary_context_menus")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"langDetector",value:langDetector,label:i18n("detected_lang"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"-",children:i18n("disable")}),OPT_LANGDETECTOR_ALL.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:item},item))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"transAllnow",value:transAllnow,label:i18n("trigger_mode"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("mk_pagescroll")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("mk_pageopen")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("pagescroll_root_margin"),type:"number",name:"rootMargin",value:rootMargin,onChange:handleChange,min:0,max:10000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"logLevel",value:logLevel,label:i18n("log_level"),onChange:handleChange,children:Object.values(LogLevel).map(_ref3=>{let{value,name}=_ref3;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:value,children:name},value);})})})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,size:"small",label:i18n("skip_langs"),helperText:i18n("skip_langs_helper"),name:"skipLangs",value:skipLangs,onChange:handleChange,SelectProps:{multiple:true},children:OPT_LANGS_TO.map(_ref4=>{let[langKey,langName]=_ref4;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:langKey,children:langName},langKey);})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("translate_blacklist"),helperText:i18n("pattern_helper"),name:"blacklist",value:blacklist,onChange:handleChange,maxRows:10,multiline:true}),client_isExt?/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"clearCache",value:clearCache,label:i18n("if_clear_cache"),onChange:handleChange,helperText:/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{component:"button",onClick:handleClearCache,children:i18n("clear_all_cache_now")}),children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("clear_cache_never")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("clear_cache_restart")})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("disabled_orilist"),helperText:i18n("pattern_helper"),name:"orilist",value:orilist,onChange:handleChange,multiline:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("disabled_csplist"),helperText:i18n("pattern_helper")+" "+i18n("disabled_csplist_helper"),name:"csplist",value:csplist,onChange:handleChange,multiline:true})]}):/*#__PURE__*/(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(ShortcutItem,{action:OPT_SHORTCUT_TRANSLATE,label:i18n("toggle_translate_shortcut")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(ShortcutItem,{action:OPT_SHORTCUT_STYLE,label:i18n("toggle_style_shortcut")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(ShortcutItem,{action:OPT_SHORTCUT_POPUP,label:i18n("toggle_popup_shortcut")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(ShortcutItem,{action:OPT_SHORTCUT_SETTING,label:i18n("open_setting_shortcut")})})]})})})]})});} // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+system@5.15.15_@emotion+react@11.11.1_@types+react@18.2.79_react@18.2.0__@emotion+_c57ab6d9ade3633fb3ee97c5c0a1d690/node_modules/@mui/system/esm/useThemeProps/getThemeProps.js var getThemeProps = __webpack_require__(929); // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+system@5.15.15_@emotion+react@11.11.1_@types+react@18.2.79_react@18.2.0__@emotion+_c57ab6d9ade3633fb3ee97c5c0a1d690/node_modules/@mui/system/esm/useThemeWithoutDefault.js @@ -76457,9 +76470,9 @@ var BrightnessAuto = __webpack_require__(5538); ;// CONCATENATED MODULE: ./src/views/Options/DarkModeButton.js function DarkModeButton(){const{darkMode,toggleDarkMode}=useDarkMode();return/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{sx:{ml:1},onClick:toggleDarkMode,color:"inherit",children:darkMode==="dark"?/*#__PURE__*/(0,jsx_runtime.jsx)(DarkMode/* default */.Z,{}):darkMode==="light"?/*#__PURE__*/(0,jsx_runtime.jsx)(LightMode/* default */.Z,{}):/*#__PURE__*/(0,jsx_runtime.jsx)(BrightnessAuto/* default */.Z,{})});} ;// CONCATENATED MODULE: ./src/views/Options/Header.js -function Header(props){const i18n=useI18n();const{onDrawerToggle}=props;return/*#__PURE__*/(0,jsx_runtime.jsx)(AppBar_AppBar,{color:"primary",position:"sticky",sx:{zIndex:1300},children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Toolbar_Toolbar,{variant:"dense",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{sx:{display:{sm:"none",xs:"block"}},children:/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{color:"inherit","aria-label":"open drawer",onClick:onDrawerToggle,edge:"start",children:/*#__PURE__*/(0,jsx_runtime.jsx)(icons_material_Menu/* default */.Z,{})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{component:"div",sx:{flexGrow:1,fontWeight:"bold"},children:/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{underline:"none",color:"inherit",href:"https://github.com/fishjar/kiss-translator",target:"_blank",children:"".concat(i18n("app_name")," v").concat("2.0.4")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(DarkModeButton,{})]})});}/* harmony default export */ const Options_Header = (Header); +function Header(props){const i18n=useI18n();const{onDrawerToggle}=props;return/*#__PURE__*/(0,jsx_runtime.jsx)(AppBar_AppBar,{color:"primary",position:"sticky",sx:{zIndex:1300},children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Toolbar_Toolbar,{variant:"dense",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{sx:{display:{sm:"none",xs:"block"}},children:/*#__PURE__*/(0,jsx_runtime.jsx)(IconButton_IconButton,{color:"inherit","aria-label":"open drawer",onClick:onDrawerToggle,edge:"start",children:/*#__PURE__*/(0,jsx_runtime.jsx)(icons_material_Menu/* default */.Z,{})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{component:"div",sx:{flexGrow:1,fontWeight:"bold"},children:/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{underline:"none",color:"inherit",href:"https://github.com/fishjar/kiss-translator",target:"_blank",children:"".concat(i18n("app_name")," v").concat("2.0.5")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(DarkModeButton,{})]})});}/* harmony default export */ const Options_Header = (Header); ;// CONCATENATED MODULE: ./src/views/Options/Layout.js -function Layout(){const navWidth=256;const location=dist_useLocation();const theme=useTheme_useTheme();const[open,setOpen]=(0,react.useState)(false);const isSm=useMediaQuery(theme.breakpoints.up("sm"));const handleDrawerToggle=()=>{setOpen(!open);};(0,react.useEffect)(()=>{setOpen(false);},[location]);return/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(CssBaseline_CssBaseline,{}),/*#__PURE__*/(0,jsx_runtime.jsx)(Options_Header,{onDrawerToggle:handleDrawerToggle}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{sx:{display:"flex"},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"nav",sx:{width:{sm:navWidth},flexShrink:{sm:0}},children:/*#__PURE__*/(0,jsx_runtime.jsx)(Navigator,{PaperProps:{style:{width:navWidth}},variant:isSm?"permanent":"temporary",open:isSm?true:open,onClose:handleDrawerToggle})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"main",sx:{flex:1,p:2},children:/*#__PURE__*/(0,jsx_runtime.jsx)(Outlet,{})})]})]});} +function Layout(){const navWidth=256;const location=dist_useLocation();const theme=useTheme_useTheme();const[open,setOpen]=(0,react.useState)(false);const isSm=useMediaQuery(theme.breakpoints.up("sm"));const handleDrawerToggle=()=>{setOpen(!open);};(0,react.useEffect)(()=>{setOpen(false);},[location]);return/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(CssBaseline_CssBaseline,{}),/*#__PURE__*/(0,jsx_runtime.jsx)(Options_Header,{onDrawerToggle:handleDrawerToggle}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{sx:{display:"flex"},children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"nav",sx:{width:{sm:navWidth},flexShrink:{sm:0}},children:/*#__PURE__*/(0,jsx_runtime.jsx)(Navigator,{PaperProps:{style:{width:navWidth}},variant:isSm?"permanent":"temporary",open:isSm?true:open,onClose:handleDrawerToggle})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"main",sx:{flex:1,p:2,width:"100%"},children:/*#__PURE__*/(0,jsx_runtime.jsx)(Outlet,{})})]})]});} // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+icons-material@5.15.15_@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@1_1e29dcefa4691dc57f2acd9f73947cfd/node_modules/@mui/icons-material/ContentCopy.js var ContentCopy = __webpack_require__(6409); // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+icons-material@5.15.15_@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@1_1e29dcefa4691dc57f2acd9f73947cfd/node_modules/@mui/icons-material/ContentPaste.js @@ -76634,7 +76647,7 @@ mediaQuery.addEventListener("change",handleChange);return()=>mediaQuery.removeEv const MSG_GM_xmlHttpRequest="xmlHttpRequest";const MSG_GM_setValue="setValue";const MSG_GM_getValue="getValue";const MSG_GM_deleteValue="deleteValue";const MSG_GM_info="info";/** * 注入页面的脚本,请求并接受GM接口信息 * @param {*} param0 - */const injectScript=ping=>{window.APP_INFO={name:"KISS Translator",version:"2.0.4",eventName:ping};};/** + */const injectScript=ping=>{window.APP_INFO={name:"KISS Translator",version:"2.0.5",eventName:ping};};/** * 适配GM脚本 */const adaptScript=ping=>{const promiseGM=function(action,args){let timeout=arguments.length>2&&arguments[2]!==undefined?arguments[2]:5000;return new Promise((resolve,reject)=>{const pong=genEventName();const handleEvent=e=>{window.removeEventListener(pong,handleEvent);const{data,error}=e.detail;if(error){reject(new Error(error));}else{resolve(data);}};window.addEventListener(pong,handleEvent);window.dispatchEvent(new CustomEvent(ping,{detail:{action,args,pong}}));setTimeout(()=>{window.removeEventListener(pong,handleEvent);reject(new Error("timeout"));},timeout);});};window.KISS_GM={fetch:(input,init)=>promiseGM(MSG_GM_xmlHttpRequest,{input,init}),setValue:(key,val)=>promiseGM(MSG_GM_setValue,{key,val}),getValue:key=>promiseGM(MSG_GM_getValue,{key}),deleteValue:key=>promiseGM(MSG_GM_deleteValue,{key}),getInfo:async()=>{if(!window.GM_info){window.GM_info=await promiseGM(MSG_GM_info);}return window.GM_info;}};};/** * 监听并回应页面对GM接口的请求 @@ -81110,9 +81123,9 @@ const Autocomplete = /*#__PURE__*/react.forwardRef(function Autocomplete(inProps * @param {Array} props.options - Autocomplete 的选项列表 */function ReusableAutocomplete(_ref){let{name,label,value,onChange,...rest}=_ref;const[inputValue,setInputValue]=(0,react.useState)(value||"");const isChangeCommitted=(0,react.useRef)(false);(0,react.useEffect)(()=>{setInputValue(value||"");},[value]);const triggerOnChange=newValue=>{if(onChange){const syntheticEvent={target:{name:name,value:newValue}};onChange(syntheticEvent);}};const handleBlur=()=>{if(isChangeCommitted.current){isChangeCommitted.current=false;return;}if(inputValue!==value){triggerOnChange(inputValue);}};const handleChange=(event,newValue)=>{isChangeCommitted.current=true;triggerOnChange(newValue);};const handleInputChange=(event,newInputValue)=>{isChangeCommitted.current=false;setInputValue(newInputValue);};return/*#__PURE__*/(0,jsx_runtime.jsx)(Autocomplete_Autocomplete,{value:value,onChange:handleChange,inputValue:inputValue,onInputChange:handleInputChange,onBlur:handleBlur,...rest,renderInput:params=>/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{...params,name:name,label:label})});} ;// CONCATENATED MODULE: ./src/views/Options/Apis.js -function TestButton(_ref){let{api}=_ref;const i18n=useI18n();const alert=useAlert();const[loading,setLoading]=(0,react.useState)(false);const handleApiTest=async()=>{try{setLoading(true);const[text]=await apiTranslate({text:"hello world",fromLang:"en",toLang:"zh-CN",apiSetting:{...api},useCache:false,usePool:false});if(!text){throw new Error("empty result");}alert.success(i18n("test_success"));}catch(err){// alert.error(`${i18n("test_failed")}: ${err.message}`); +function TestButton(_ref){let{api}=_ref;const i18n=useI18n();const alert=useAlert();const[loading,setLoading]=(0,react.useState)(false);const handleApiTest=async()=>{try{setLoading(true);const text="hello world";const{trText}=await apiTranslate({text,fromLang:"en",toLang:"zh-CN",apiSetting:{...api},useCache:false,usePool:false});if(!trText){throw new Error("empty result");}alert.success(/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)("div",{children:i18n("test_success")}),/*#__PURE__*/(0,jsx_runtime.jsx)("div",{children:text}),/*#__PURE__*/(0,jsx_runtime.jsx)("div",{children:trText})]}));}catch(err){// alert.error(`${i18n("test_failed")}: ${err.message}`); let msg=err.message;try{msg=JSON.stringify(JSON.parse(err.message),null,2);}catch(err){// skip -}alert.error(/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)("div",{children:i18n("test_failed")}),msg===err.message?/*#__PURE__*/(0,jsx_runtime.jsx)("div",{style:{maxWidth:400},children:msg}):/*#__PURE__*/(0,jsx_runtime.jsx)("pre",{style:{maxWidth:400,overflow:"auto"},children:msg})]}));}finally{setLoading(false);}};return/*#__PURE__*/(0,jsx_runtime.jsx)(LoadingButton_LoadingButton,{size:"small",variant:"outlined",onClick:handleApiTest,loading:loading,children:i18n("click_test")});}function ApiFields(_ref2){let{apiSlug,isUserApi,deleteApi}=_ref2;const{api,update,reset}=useApiItem(apiSlug);const i18n=useI18n();const[formData,setFormData]=(0,react.useState)({});const[isModified,setIsModified]=(0,react.useState)(false);const[showMore,setShowMore]=(0,react.useState)(false);const confirm=useConfirm();(0,react.useEffect)(()=>{if(api){setFormData(api);}},[api]);(0,react.useEffect)(()=>{if(!api)return;const hasChanged=JSON.stringify(api)!==JSON.stringify(formData);setIsModified(hasChanged);},[api,formData]);const handleChange=e=>{e.preventDefault();let{name,value,type,checked}=e.target;if(type==="checkbox"||type==="switch"){value=checked;}setFormData(prevData=>({...prevData,[name]:value}));};const handleSave=()=>{// 过滤掉 api 对象中不存在的字段 +}alert.error(/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)("div",{children:i18n("test_failed")}),msg===err.message?/*#__PURE__*/(0,jsx_runtime.jsx)("div",{children:msg}):/*#__PURE__*/(0,jsx_runtime.jsx)("pre",{children:msg})]}));}finally{setLoading(false);}};return/*#__PURE__*/(0,jsx_runtime.jsx)(LoadingButton_LoadingButton,{size:"small",variant:"outlined",onClick:handleApiTest,loading:loading,children:i18n("click_test")});}function ApiFields(_ref2){let{apiSlug,isUserApi,deleteApi}=_ref2;const{api,update,reset}=useApiItem(apiSlug);const i18n=useI18n();const[formData,setFormData]=(0,react.useState)({});const[isModified,setIsModified]=(0,react.useState)(false);const[showMore,setShowMore]=(0,react.useState)(false);const confirm=useConfirm();(0,react.useEffect)(()=>{if(api){setFormData(api);}},[api]);(0,react.useEffect)(()=>{if(!api)return;const hasChanged=JSON.stringify(api)!==JSON.stringify(formData);setIsModified(hasChanged);},[api,formData]);const handleChange=e=>{e.preventDefault();let{name,value,type,checked}=e.target;if(type==="checkbox"||type==="switch"){value=checked;}setFormData(prevData=>({...prevData,[name]:value}));};const handleSave=()=>{// 过滤掉 api 对象中不存在的字段 // const updatedFields = Object.keys(formData).reduce((acc, key) => { // if (api && Object.keys(api).includes(key)) { // acc[key] = formData[key]; @@ -81120,9 +81133,11 @@ let msg=err.message;try{msg=JSON.stringify(JSON.parse(err.message),null,2);}catc // return acc; // }, {}); // update(updatedFields); -update(formData);};const handleReset=()=>{reset();};const handleDelete=async()=>{const isConfirmed=await confirm({confirmText:i18n("delete"),cancelText:i18n("cancel")});if(isConfirmed){deleteApi(apiSlug);}};const{url="",key="",model="",apiType,systemPrompt="",subtitlePrompt="",// userPrompt = "", -customHeader="",customBody="",think=false,thinkIgnore="",fetchLimit=DEFAULT_FETCH_LIMIT,fetchInterval=DEFAULT_FETCH_INTERVAL,httpTimeout=DEFAULT_HTTP_TIMEOUT,dictNo="",memoryNo="",reqHook="",resHook="",temperature=0,maxTokens=256,apiName="",isDisabled=false,useBatchFetch=false,batchInterval=DEFAULT_BATCH_INTERVAL,batchSize=DEFAULT_BATCH_SIZE,batchLength=DEFAULT_BATCH_LENGTH,useContext=false,contextSize=DEFAULT_CONTEXT_SIZE,tone="neutral",placeholder=BUILTIN_PLACEHOLDERS[0],placetag=BUILTIN_PLACETAGS[0],region=""// aiTerms = false, -}=formData;const keyHelper=(0,react.useMemo)(()=>API_SPE_TYPES.mulkeys.has(apiType)?i18n("mulkeys_help"):"",[apiType,i18n]);return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("api_name"),name:"apiName",value:apiName,onChange:handleChange}),!API_SPE_TYPES.machine.has(apiType)&&apiType!==OPT_TRANS_BUILTINAI&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"URL",name:"url",value:url,onChange:handleChange,multiline:apiType===OPT_TRANS_DEEPLX,maxRows:10,helperText:apiType===OPT_TRANS_DEEPLX?i18n("mulkeys_help"):""}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"KEY",name:"key",value:key,onChange:handleChange,multiline:API_SPE_TYPES.mulkeys.has(apiType),maxRows:10,helperText:keyHelper})]}),apiType===OPT_TRANS_AZUREAI&&/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"Region",name:"region",value:region,onChange:handleChange}),(API_SPE_TYPES.ai.has(apiType)||apiType===api_OPT_TRANS_CUSTOMIZE)&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",fullWidth:true,label:"MODEL",name:"model",value:model,onChange:handleChange})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(ReusableAutocomplete,{freeSolo:true,size:"small",fullWidth:true,options:BUILTIN_STONES,name:"tone",label:i18n("translation_style"),value:tone,onChange:handleChange})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:"Temperature",type:"number",name:"temperature",value:temperature,onChange:handleChange,min:0.0,max:2.0,isFloat:true})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:"Max Tokens",type:"number",name:"maxTokens",value:maxTokens,onChange:handleChange,min:0,max:2**15})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"SYSTEM PROMPT",name:"systemPrompt",value:systemPrompt,onChange:handleChange,multiline:true,maxRows:10,helperText:i18n("system_prompt_helper")}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"SUBTITLE PROMPT",name:"subtitlePrompt",value:subtitlePrompt,onChange:handleChange,multiline:true,maxRows:10,helperText:i18n("system_prompt_helper")})]}),apiType===api_OPT_TRANS_OLLAMA&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",name:"think",value:think,label:i18n("if_think"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("nothink")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("think")})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("think_ignore"),name:"thinkIgnore",value:thinkIgnore,onChange:handleChange})]}),apiType===OPT_TRANS_NIUTRANS&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"DictNo",name:"dictNo",value:dictNo,onChange:handleChange}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"MemoryNo",name:"memoryNo",value:memoryNo,onChange:handleChange})]}),apiType===api_OPT_TRANS_CUSTOMIZE&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"Request Hook",name:"reqHook",value:reqHook,onChange:handleChange,multiline:true,maxRows:10,FormHelperTextProps:{component:"div"},helperText:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"pre",sx:{overflowX:"auto"},children:i18n("request_hook_helper")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"Response Hook",name:"resHook",value:resHook,onChange:handleChange,multiline:true,maxRows:10,FormHelperTextProps:{component:"div"},helperText:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"pre",sx:{overflowX:"auto"},children:i18n("response_hook_helper")})})]}),API_SPE_TYPES.batch.has(api.apiType)&&/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"useBatchFetch",value:useBatchFetch,label:i18n("use_batch_fetch"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("disable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("enable")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("batch_interval"),type:"number",name:"batchInterval",value:batchInterval,onChange:handleChange,min:100,max:10000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("batch_size"),type:"number",name:"batchSize",value:batchSize,onChange:handleChange,min:1,max:100})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("batch_length"),type:"number",name:"batchLength",value:batchLength,onChange:handleChange,min:1000,max:100000})})]})}),API_SPE_TYPES.context.has(api.apiType)&&/*#__PURE__*/(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:[" ",/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"useContext",value:useContext,label:i18n("use_context"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("disable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("enable")})]})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:[" ",/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",fullWidth:true,label:i18n("context_size"),type:"number",name:"contextSize",value:contextSize,onChange:handleChange,min:1,max:20})]})]})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("fetch_limit"),type:"number",name:"fetchLimit",value:fetchLimit,onChange:handleChange,min:1,max:100})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("fetch_interval"),type:"number",name:"fetchInterval",value:fetchInterval,onChange:handleChange,min:0,max:5000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("http_timeout"),type:"number",name:"httpTimeout",value:httpTimeout,onChange:handleChange,min:5000,max:60000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3})]})}),showMore&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"placeholder",value:placeholder,label:i18n("api_placeholder"),onChange:handleChange,children:BUILTIN_PLACEHOLDERS.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:item},item))})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"placetag",value:placetag,label:i18n("api_placetag"),onChange:handleChange,children:BUILTIN_PLACETAGS.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:"<".concat(item,">")},item))})})]})}),apiType!==OPT_TRANS_BUILTINAI&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[" ",/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("custom_header"),name:"customHeader",value:customHeader,onChange:handleChange,multiline:true,maxRows:10,helperText:i18n("custom_header_help")}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("custom_body"),name:"customBody",value:customBody,onChange:handleChange,multiline:true,maxRows:10,helperText:i18n("custom_body_help")})]}),apiType!==api_OPT_TRANS_CUSTOMIZE&&apiType!==OPT_TRANS_BUILTINAI&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"Request Hook",name:"reqHook",value:reqHook,onChange:handleChange,multiline:true,maxRows:10,FormHelperTextProps:{component:"div"},helperText:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"pre",sx:{overflowX:"auto"},children:i18n("request_hook_helper")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"Response Hook",name:"resHook",value:resHook,onChange:handleChange,multiline:true,maxRows:10,FormHelperTextProps:{component:"div"},helperText:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"pre",sx:{overflowX:"auto"},children:i18n("response_hook_helper")})})]})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",spacing:2,useFlexGap:true,flexWrap:"wrap",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"contained",onClick:handleSave,disabled:!isModified,children:i18n("save")}),/*#__PURE__*/(0,jsx_runtime.jsx)(TestButton,{api:formData}),/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",onClick:handleReset,children:i18n("restore_default")}),isUserApi&&/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",color:"error",onClick:handleDelete,children:i18n("delete")}),/*#__PURE__*/(0,jsx_runtime.jsx)(FormControlLabel_FormControlLabel,{control:/*#__PURE__*/(0,jsx_runtime.jsx)(Switch_Switch,{size:"small",name:"isDisabled",checked:isDisabled,onChange:handleChange}),label:i18n("is_disabled")}),/*#__PURE__*/(0,jsx_runtime.jsx)(ShowMoreButton,{showMore:showMore,onChange:setShowMore})]})]});}function ApiAccordion(_ref3){let{api,isUserApi,deleteApi}=_ref3;const[expanded,setExpanded]=(0,react.useState)(false);const handleChange=e=>{setExpanded(pre=>!pre);};return/*#__PURE__*/(0,jsx_runtime.jsxs)(Accordion_Accordion,{expanded:expanded,onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(AccordionSummary_AccordionSummary,{expandIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(ExpandMore/* default */.Z,{}),children:/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{sx:{opacity:api.isDisabled?0.5:1,overflowWrap:"anywhere"},children:"[".concat(api.apiType,"] ").concat(api.apiName)})}),/*#__PURE__*/(0,jsx_runtime.jsx)(AccordionDetails_AccordionDetails,{children:expanded&&/*#__PURE__*/(0,jsx_runtime.jsx)(ApiFields,{apiSlug:api.apiSlug,isUserApi:isUserApi,deleteApi:deleteApi})})]});}function Apis(){const i18n=useI18n();const{userApis,builtinApis,addApi,deleteApi}=useApiList();const apiTypes=(0,react.useMemo)(()=>OPT_ALL_TYPES.map(type=>({type,label:type})),[]);const[anchorEl,setAnchorEl]=(0,react.useState)(null);const open=Boolean(anchorEl);const handleClick=event=>{setAnchorEl(event.currentTarget);};const handleClose=()=>{setAnchorEl(null);};const handleMenuItemClick=apiType=>{addApi(apiType);handleClose();};return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Alert_Alert,{severity:"info",children:[i18n("about_api"),/*#__PURE__*/(0,jsx_runtime.jsx)("br",{}),i18n("about_api_2"),/*#__PURE__*/(0,jsx_runtime.jsx)("br",{}),i18n("about_api_3"),/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{href:"https://github.com/fishjar/kiss-translator/blob/master/custom-api_v2.md",target:"_blank",children:i18n("goto_custom_api_example")})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",id:"add-api-button",variant:"contained",onClick:handleClick,"aria-controls":open?"add-api-menu":undefined,"aria-haspopup":"true","aria-expanded":open?"true":undefined,endIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(KeyboardArrowDown/* default */.Z,{}),startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Add/* default */.Z,{}),children:i18n("add")}),/*#__PURE__*/(0,jsx_runtime.jsx)(Menu_Menu,{id:"add-api-menu",anchorEl:anchorEl,open:open,onClose:handleClose,MenuListProps:{"aria-labelledby":"add-api-button"},children:apiTypes.map(apiOption=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{onClick:()=>handleMenuItemClick(apiOption.type),children:apiOption.label},apiOption.type))})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:userApis.map(api=>/*#__PURE__*/(0,jsx_runtime.jsx)(ApiAccordion,{api:api,isUserApi:true,deleteApi:deleteApi},api.apiSlug))}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:builtinApis.map(api=>/*#__PURE__*/(0,jsx_runtime.jsx)(ApiAccordion,{api:api},api.apiSlug))})]})});} +update(formData);};const handleReset=()=>{reset();};const handleDelete=async()=>{const isConfirmed=await confirm({confirmText:i18n("delete"),cancelText:i18n("cancel")});if(isConfirmed){deleteApi(apiSlug);}};const{url="",key="",model="",apiType,systemPrompt="",nobatchPrompt=defaultNobatchPrompt,nobatchUserPrompt=defaultNobatchUserPrompt,subtitlePrompt="",// userPrompt = "", +customHeader="",customBody="",// think = false, +// thinkIgnore = "", +fetchLimit=DEFAULT_FETCH_LIMIT,fetchInterval=DEFAULT_FETCH_INTERVAL,httpTimeout=DEFAULT_HTTP_TIMEOUT,dictNo="",memoryNo="",reqHook="",resHook="",temperature=0,maxTokens=20480,apiName="",isDisabled=false,useBatchFetch=false,batchInterval=DEFAULT_BATCH_INTERVAL,batchSize=DEFAULT_BATCH_SIZE,batchLength=DEFAULT_BATCH_LENGTH,useContext=false,contextSize=DEFAULT_CONTEXT_SIZE,tone="neutral",placeholder=BUILTIN_PLACEHOLDERS[0],placetag=BUILTIN_PLACETAGS[0],region=""// aiTerms = false, +}=formData;const keyHelper=(0,react.useMemo)(()=>API_SPE_TYPES.mulkeys.has(apiType)?i18n("mulkeys_help"):"",[apiType,i18n]);return/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("api_name"),name:"apiName",value:apiName,onChange:handleChange}),!API_SPE_TYPES.machine.has(apiType)&&apiType!==OPT_TRANS_BUILTINAI&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"URL",name:"url",value:url,onChange:handleChange,multiline:apiType===OPT_TRANS_DEEPLX,maxRows:10,helperText:apiType===OPT_TRANS_DEEPLX?i18n("mulkeys_help"):""}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"KEY",name:"key",value:key,onChange:handleChange,multiline:API_SPE_TYPES.mulkeys.has(apiType),maxRows:10,helperText:keyHelper})]}),apiType===OPT_TRANS_AZUREAI&&/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"Region",name:"region",value:region,onChange:handleChange}),(API_SPE_TYPES.ai.has(apiType)||apiType===api_OPT_TRANS_CUSTOMIZE)&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",fullWidth:true,label:"MODEL",name:"model",value:model,onChange:handleChange})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(ReusableAutocomplete,{freeSolo:true,size:"small",fullWidth:true,options:BUILTIN_STONES,name:"tone",label:i18n("translation_style"),value:tone,onChange:handleChange})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:"Temperature",type:"number",name:"temperature",value:temperature,onChange:handleChange,min:0.0,max:2.0,isFloat:true})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:"Max Tokens (0-1000000)",type:"number",name:"maxTokens",value:maxTokens,onChange:handleChange,min:0,max:1000000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3})]})}),useBatchFetch?/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"BATCH SYSTEM PROMPT",name:"systemPrompt",value:systemPrompt,onChange:handleChange,multiline:true,maxRows:10,helperText:i18n("system_prompt_helper")}):/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"SYSTEM PROMPT",name:"nobatchPrompt",value:nobatchPrompt,onChange:handleChange,multiline:true,maxRows:10}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"USER PROMPT",name:"nobatchUserPrompt",value:nobatchUserPrompt,onChange:handleChange,multiline:true,maxRows:10})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"SUBTITLE PROMPT",name:"subtitlePrompt",value:subtitlePrompt,onChange:handleChange,multiline:true,maxRows:10,helperText:i18n("system_prompt_helper")})]}),apiType===OPT_TRANS_NIUTRANS&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"DictNo",name:"dictNo",value:dictNo,onChange:handleChange}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"MemoryNo",name:"memoryNo",value:memoryNo,onChange:handleChange})]}),apiType===api_OPT_TRANS_CUSTOMIZE&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"Request Hook",name:"reqHook",value:reqHook,onChange:handleChange,multiline:true,maxRows:10,FormHelperTextProps:{component:"div"},helperText:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"pre",sx:{overflowX:"auto"},children:i18n("request_hook_helper")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"Response Hook",name:"resHook",value:resHook,onChange:handleChange,multiline:true,maxRows:10,FormHelperTextProps:{component:"div"},helperText:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"pre",sx:{overflowX:"auto"},children:i18n("response_hook_helper")})})]}),API_SPE_TYPES.batch.has(api.apiType)&&/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"useBatchFetch",value:useBatchFetch,label:i18n("use_batch_fetch"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("disable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("enable")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("batch_interval"),type:"number",name:"batchInterval",value:batchInterval,onChange:handleChange,min:100,max:10000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("batch_size"),type:"number",name:"batchSize",value:batchSize,onChange:handleChange,min:1,max:100})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("batch_length"),type:"number",name:"batchLength",value:batchLength,onChange:handleChange,min:1000,max:100000})})]})}),API_SPE_TYPES.context.has(api.apiType)&&/*#__PURE__*/(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:[" ",/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,size:"small",fullWidth:true,name:"useContext",value:useContext,label:i18n("use_context"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("disable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("enable")})]})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:[" ",/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",fullWidth:true,label:i18n("context_size"),type:"number",name:"contextSize",value:contextSize,onChange:handleChange,min:1,max:20})]})]})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("fetch_limit"),type:"number",name:"fetchLimit",value:fetchLimit,onChange:handleChange,min:1,max:100})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("fetch_interval"),type:"number",name:"fetchInterval",value:fetchInterval,onChange:handleChange,min:0,max:5000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{size:"small",fullWidth:true,label:i18n("http_timeout"),type:"number",name:"httpTimeout",value:httpTimeout,onChange:handleChange,min:5000,max:60000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3})]})}),showMore&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"placeholder",value:placeholder,label:i18n("api_placeholder"),onChange:handleChange,children:BUILTIN_PLACEHOLDERS.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:item},item))})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"placetag",value:placetag,label:i18n("api_placetag"),onChange:handleChange,children:BUILTIN_PLACETAGS.map(item=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:item,children:"<".concat(item,">")},item))})})]})}),apiType!==OPT_TRANS_BUILTINAI&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[" ",/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("custom_header"),name:"customHeader",value:customHeader,onChange:handleChange,multiline:true,maxRows:10,helperText:i18n("custom_header_help")}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("custom_body"),name:"customBody",value:customBody,onChange:handleChange,multiline:true,maxRows:10,helperText:i18n("custom_body_help")})]}),apiType!==api_OPT_TRANS_CUSTOMIZE&&apiType!==OPT_TRANS_BUILTINAI&&/*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"Request Hook",name:"reqHook",value:reqHook,onChange:handleChange,multiline:true,maxRows:10,FormHelperTextProps:{component:"div"},helperText:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"pre",sx:{overflowX:"auto"},children:i18n("request_hook_helper")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"Response Hook",name:"resHook",value:resHook,onChange:handleChange,multiline:true,maxRows:10,FormHelperTextProps:{component:"div"},helperText:/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{component:"pre",sx:{overflowX:"auto"},children:i18n("response_hook_helper")})})]})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{direction:"row",alignItems:"center",spacing:2,useFlexGap:true,flexWrap:"wrap",children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"contained",onClick:handleSave,disabled:!isModified,children:i18n("save")}),/*#__PURE__*/(0,jsx_runtime.jsx)(TestButton,{api:formData}),/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",onClick:handleReset,children:i18n("restore_default")}),isUserApi&&/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",variant:"outlined",color:"error",onClick:handleDelete,children:i18n("delete")}),/*#__PURE__*/(0,jsx_runtime.jsx)(FormControlLabel_FormControlLabel,{control:/*#__PURE__*/(0,jsx_runtime.jsx)(Switch_Switch,{size:"small",name:"isDisabled",checked:isDisabled,onChange:handleChange}),label:i18n("is_disabled")}),/*#__PURE__*/(0,jsx_runtime.jsx)(ShowMoreButton,{showMore:showMore,onChange:setShowMore})]})]});}function ApiAccordion(_ref3){let{api,isUserApi,deleteApi}=_ref3;const[expanded,setExpanded]=(0,react.useState)(false);const handleChange=e=>{setExpanded(pre=>!pre);};return/*#__PURE__*/(0,jsx_runtime.jsxs)(Accordion_Accordion,{expanded:expanded,onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(AccordionSummary_AccordionSummary,{expandIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(ExpandMore/* default */.Z,{}),children:/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{sx:{opacity:api.isDisabled?0.5:1,overflowWrap:"anywhere"},children:"[".concat(api.apiType,"] ").concat(api.apiName)})}),/*#__PURE__*/(0,jsx_runtime.jsx)(AccordionDetails_AccordionDetails,{children:expanded&&/*#__PURE__*/(0,jsx_runtime.jsx)(ApiFields,{apiSlug:api.apiSlug,isUserApi:isUserApi,deleteApi:deleteApi})})]});}function Apis(){const i18n=useI18n();const{userApis,builtinApis,addApi,deleteApi}=useApiList();const apiTypes=(0,react.useMemo)(()=>OPT_ALL_TRANS_TYPES.map(type=>({type,label:type})),[]);const[anchorEl,setAnchorEl]=(0,react.useState)(null);const open=Boolean(anchorEl);const handleClick=event=>{setAnchorEl(event.currentTarget);};const handleClose=()=>{setAnchorEl(null);};const handleMenuItemClick=apiType=>{addApi(apiType);handleClose();};return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Alert_Alert,{severity:"info",children:[i18n("about_api"),/*#__PURE__*/(0,jsx_runtime.jsx)("br",{}),i18n("about_api_2"),/*#__PURE__*/(0,jsx_runtime.jsx)("br",{}),i18n("about_api_3"),/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{href:"https://github.com/fishjar/kiss-translator/blob/master/custom-api_v2.md",target:"_blank",children:i18n("goto_custom_api_example")})]}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Box_Box,{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Button_Button,{size:"small",id:"add-api-button",variant:"contained",onClick:handleClick,"aria-controls":open?"add-api-menu":undefined,"aria-haspopup":"true","aria-expanded":open?"true":undefined,endIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(KeyboardArrowDown/* default */.Z,{}),startIcon:/*#__PURE__*/(0,jsx_runtime.jsx)(Add/* default */.Z,{}),children:i18n("add")}),/*#__PURE__*/(0,jsx_runtime.jsx)(Menu_Menu,{id:"add-api-menu",anchorEl:anchorEl,open:open,onClose:handleClose,MenuListProps:{"aria-labelledby":"add-api-button"},children:apiTypes.map(apiOption=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{onClick:()=>handleMenuItemClick(apiOption.type),children:apiOption.label},apiOption.type))})]}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:userApis.map(api=>/*#__PURE__*/(0,jsx_runtime.jsx)(ApiAccordion,{api:api,isUserApi:true,deleteApi:deleteApi},api.apiSlug))}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:builtinApis.map(api=>/*#__PURE__*/(0,jsx_runtime.jsx)(ApiAccordion,{api:api},api.apiSlug))})]})});} ;// CONCATENATED MODULE: ./src/hooks/InputRule.js function useInputRule(){const{setting,updateChild}=Setting_useSetting();const inputRule=(setting===null||setting===void 0?void 0:setting.inputRule)||DEFAULT_INPUT_RULE;const updateInputRule=updateChild("inputRule");return{inputRule,updateInputRule};} ;// CONCATENATED MODULE: ./src/views/Options/InputSetting.js @@ -81171,7 +81186,7 @@ function FavAccordion(_ref){let{word,index}=_ref;const[expanded,setExpanded]=(0, // EXTERNAL MODULE: ./node_modules/.pnpm/@mui+icons-material@5.15.15_@mui+material@5.15.15_@emotion+react@11.11.1_@types+react@1_1e29dcefa4691dc57f2acd9f73947cfd/node_modules/@mui/icons-material/Done.js var Done = __webpack_require__(5813); ;// CONCATENATED MODULE: ./src/views/Selection/TranCont.js -function TranCont(_ref){let{text,fromLang,toLang,apiSlug,transApis,simpleStyle=false}=_ref;const i18n=useI18n();const[trText,setTrText]=(0,react.useState)("");const[loading,setLoading]=(0,react.useState)(false);const[error,setError]=(0,react.useState)("");const apiSetting=(0,react.useMemo)(()=>transApis.find(api=>api.apiSlug===apiSlug),[transApis,apiSlug]);(0,react.useEffect)(()=>{if(!(text!==null&&text!==void 0&&text.trim())||!apiSetting){return;}(async()=>{try{setLoading(true);setTrText("");setError("");const[trText]=await apiTranslate({text,fromLang,toLang,apiSetting});setTrText(trText);}catch(err){setError(err.message);}finally{setLoading(false);}})();},[text,fromLang,toLang,apiSetting]);if(simpleStyle){return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:error?/*#__PURE__*/(0,jsx_runtime.jsx)(Alert_Alert,{severity:"error",children:error}):loading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{style:{whiteSpace:"pre-line"},children:trText})});}return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"".concat(i18n("translated_text")," - ").concat(apiSetting.apiName)// disabled +function TranCont(_ref){let{text,fromLang,toLang,apiSlug,transApis,simpleStyle=false}=_ref;const i18n=useI18n();const[trText,setTrText]=(0,react.useState)("");const[loading,setLoading]=(0,react.useState)(false);const[error,setError]=(0,react.useState)("");const apiSetting=(0,react.useMemo)(()=>transApis.find(api=>api.apiSlug===apiSlug),[transApis,apiSlug]);(0,react.useEffect)(()=>{if(!(text!==null&&text!==void 0&&text.trim())||!apiSetting){return;}(async()=>{try{setLoading(true);setTrText("");setError("");const{trText}=await apiTranslate({text,fromLang,toLang,apiSetting});setTrText(trText);}catch(err){setError(err.message);}finally{setLoading(false);}})();},[text,fromLang,toLang,apiSetting]);if(simpleStyle){return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:error?/*#__PURE__*/(0,jsx_runtime.jsx)(Alert_Alert,{severity:"error",children:error}):loading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):/*#__PURE__*/(0,jsx_runtime.jsx)(Typography_Typography,{style:{whiteSpace:"pre-line"},children:trText})});}return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:"".concat(i18n("translated_text")," - ").concat(apiSetting.apiName)// disabled ,fullWidth:true,multiline:true,value:trText,helperText:error,InputProps:{startAdornment:loading?/*#__PURE__*/(0,jsx_runtime.jsx)(CircularProgress_CircularProgress,{size:16}):null,endAdornment:/*#__PURE__*/(0,jsx_runtime.jsx)(Stack_Stack,{direction:"row",sx:{position:"absolute",right:0,top:0},children:/*#__PURE__*/(0,jsx_runtime.jsx)(CopyBtn,{text:trText})})}})});} ;// CONCATENATED MODULE: ./src/libs/detect.js const langdetectFns={[OPT_TRANS_GOOGLE]:apiGoogleLangdetect,[OPT_TRANS_MICROSOFT]:apiMicrosoftLangdetect,[OPT_TRANS_BAIDU]:apiBaiduLangdetect,[OPT_TRANS_TENCENT]:apiTencentLangdetect,[OPT_TRANS_BUILTINAI]:apiBuiltinAIDetect};/** @@ -81193,13 +81208,13 @@ function MouseHoverSetting(){const i18n=useI18n();const{mouseHoverSetting,update ;// CONCATENATED MODULE: ./src/hooks/Subtitle.js function useSubtitle(){const{setting,updateChild}=Setting_useSetting();const subtitleSetting=(setting===null||setting===void 0?void 0:setting.subtitleSetting)||DEFAULT_SUBTITLE_SETTING;const updateSubtitle=updateChild("subtitleSetting");return{subtitleSetting,updateSubtitle};} ;// CONCATENATED MODULE: ./src/views/Options/Subtitle.js -function SubtitleSetting(){const i18n=useI18n();const{subtitleSetting,updateSubtitle}=useSubtitle();const{enabledApis,aiEnabledApis}=useApiList();const handleChange=e=>{e.preventDefault();let{name,value}=e.target;updateSubtitle({[name]:value});};const{enabled,apiSlug,segSlug,chunkLength,toLang,isBilingual,windowStyle,originStyle,translationStyle}=subtitleSetting;return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Alert_Alert,{severity:"info",children:[i18n("subtitle_helper_1"),/*#__PURE__*/(0,jsx_runtime.jsx)("br",{}),i18n("subtitle_helper_2"),/*#__PURE__*/(0,jsx_runtime.jsx)("br",{}),i18n("subtitle_helper_3")]}),/*#__PURE__*/(0,jsx_runtime.jsx)(FormControlLabel_FormControlLabel,{control:/*#__PURE__*/(0,jsx_runtime.jsx)(Switch_Switch,{size:"small",name:"enabled",checked:enabled,onChange:()=>{updateSubtitle({enabled:!enabled});}}),label:i18n("toggle_subtitle_translate"),sx:{width:"fit-content"}}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"apiSlug",value:apiSlug,label:i18n("translate_service"),onChange:handleChange,children:enabledApis.map(api=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:api.apiSlug,children:api.apiName},api.apiSlug))})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"segSlug",value:segSlug,label:i18n("ai_segmentation"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"-",children:i18n("disable")}),aiEnabledApis.map(api=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:api.apiSlug,children:api.apiName},api.apiSlug))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("ai_chunk_length"),type:"number",name:"chunkLength",value:chunkLength,onChange:handleChange,min:200,max:20000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{fullWidth:true,select:true,size:"small",name:"toLang",value:toLang,label:i18n("to_lang"),onChange:handleChange,children:OPT_LANGS_TO.map(_ref=>{let[lang,name]=_ref;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{fullWidth:true,select:true,size:"small",name:"isBilingual",value:isBilingual,label:i18n("is_bilingual_view"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("enable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("disable")})]})})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("origin_styles"),name:"originStyle",value:originStyle,onChange:handleChange,maxRows:10,multiline:true,fullWidth:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("translation_styles"),name:"translationStyle",value:translationStyle,onChange:handleChange,maxRows:10,multiline:true,fullWidth:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("background_styles"),name:"windowStyle",value:windowStyle,onChange:handleChange,maxRows:10,multiline:true,fullWidth:true})]})});} +function SubtitleSetting(){const i18n=useI18n();const{subtitleSetting,updateSubtitle}=useSubtitle();const{enabledApis,aiEnabledApis}=useApiList();const handleChange=e=>{e.preventDefault();let{name,value}=e.target;updateSubtitle({[name]:value});};const{enabled,apiSlug,segSlug,chunkLength,toLang,isBilingual,skipAd=false,windowStyle,originStyle,translationStyle}=subtitleSetting;return/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:3,children:[/*#__PURE__*/(0,jsx_runtime.jsxs)(Alert_Alert,{severity:"info",children:[i18n("subtitle_helper_1"),/*#__PURE__*/(0,jsx_runtime.jsx)("br",{}),i18n("subtitle_helper_2"),/*#__PURE__*/(0,jsx_runtime.jsx)("br",{}),i18n("subtitle_helper_3")]}),/*#__PURE__*/(0,jsx_runtime.jsx)(FormControlLabel_FormControlLabel,{control:/*#__PURE__*/(0,jsx_runtime.jsx)(Switch_Switch,{size:"small",name:"enabled",checked:enabled,onChange:()=>{updateSubtitle({enabled:!enabled});}}),label:i18n("toggle_subtitle_translate"),sx:{width:"fit-content"}}),/*#__PURE__*/(0,jsx_runtime.jsx)(Box_Box,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Grid_Grid,{container:true,spacing:2,columns:12,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"apiSlug",value:apiSlug,label:i18n("translate_service"),onChange:handleChange,children:enabledApis.map(api=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:api.apiSlug,children:api.apiName},api.apiSlug))})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{select:true,fullWidth:true,size:"small",name:"segSlug",value:segSlug,label:i18n("ai_segmentation"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:"-",children:i18n("disable")}),aiEnabledApis.map(api=>/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:api.apiSlug,children:api.apiName},api.apiSlug))]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(hooks_ValidationInput,{fullWidth:true,size:"small",label:i18n("ai_chunk_length"),type:"number",name:"chunkLength",value:chunkLength,onChange:handleChange,min:200,max:20000})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{fullWidth:true,select:true,size:"small",name:"toLang",value:toLang,label:i18n("to_lang"),onChange:handleChange,children:OPT_LANGS_TO.map(_ref=>{let[lang,name]=_ref;return/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:lang,children:name},lang);})})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{fullWidth:true,select:true,size:"small",name:"isBilingual",value:isBilingual,label:i18n("is_bilingual_view"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("enable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("disable")})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Grid_Grid,{item:true,xs:12,sm:12,md:6,lg:3,children:/*#__PURE__*/(0,jsx_runtime.jsxs)(TextField_TextField,{fullWidth:true,select:true,size:"small",name:"skipAd",value:skipAd,label:i18n("is_skip_ad"),onChange:handleChange,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:true,children:i18n("enable")}),/*#__PURE__*/(0,jsx_runtime.jsx)(MenuItem_MenuItem,{value:false,children:i18n("disable")})]})})]})}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("origin_styles"),name:"originStyle",value:originStyle,onChange:handleChange,maxRows:10,multiline:true,fullWidth:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("translation_styles"),name:"translationStyle",value:translationStyle,onChange:handleChange,maxRows:10,multiline:true,fullWidth:true}),/*#__PURE__*/(0,jsx_runtime.jsx)(TextField_TextField,{size:"small",label:i18n("background_styles"),name:"windowStyle",value:windowStyle,onChange:handleChange,maxRows:10,multiline:true,fullWidth:true})]})});} ;// CONCATENATED MODULE: ./src/views/Options/index.js function Options(){const[error,setError]=(0,react.useState)("");const[ready,setReady]=(0,react.useState)(false);(0,react.useEffect)(()=>{(async()=>{if(isGm){// 等待GM注入 let i=0;for(;;){var _window,_window$APP_INFO;if(((_window=window)===null||_window===void 0?void 0:(_window$APP_INFO=_window.APP_INFO)===null||_window$APP_INFO===void 0?void 0:_window$APP_INFO.name)==="KISS Translator"){const{version,eventName}=window.APP_INFO;// 检查版本是否一致 -if(version!=="2.0.4"){setError("The version of the local script(v".concat(version,") is not the latest version(v").concat("2.0.4","). \u672C\u5730\u811A\u672C\u4E4B\u7248\u672C(v").concat(version,")\u975E\u6700\u65B0\u7248(v").concat("2.0.4",")\u3002"));return;}if(eventName){// 注入GM接口 +if(version!=="2.0.5"){setError("The version of the local script(v".concat(version,") is not the latest version(v").concat("2.0.5","). \u672C\u5730\u811A\u672C\u4E4B\u7248\u672C(v").concat(version,")\u975E\u6700\u65B0\u7248(v").concat("2.0.5",")\u3002"));return;}if(eventName){// 注入GM接口 adaptScript(eventName);}break;}if(++i>8){setError("Time out. Please confirm whether to install or enable KISS Translator GreaseMonkey script? 连接超时,请检查是否安装或启用简约翻译油猴脚本。");return;}await sleep(1000);}}// 同步数据 -await trySyncSettingAndRules();setReady(true);})();},[]);if(error){return/*#__PURE__*/(0,jsx_runtime.jsxs)("center",{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{href:"https://github.com/fishjar/kiss-translator",children:"KISS Translator v".concat("2.0.4")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Alert_Alert,{severity:"error",children:error}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{href:"https://fishjar.github.io/kiss-translator/kiss-translator.user.js",children:"Install/Update Userscript for Tampermonkey/Violentmonkey"}),/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{href:"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js",children:"Install/Update Userscript for iOS Safari"})]})]});}if(!ready){return/*#__PURE__*/(0,jsx_runtime.jsx)(Loading,{});}return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Theme,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(AlertProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(ConfirmProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(HashRouter,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Routes,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Route,{path:"/",element:/*#__PURE__*/(0,jsx_runtime.jsx)(Layout,{}),children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{index:true,element:/*#__PURE__*/(0,jsx_runtime.jsx)(Settings,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"rules",element:/*#__PURE__*/(0,jsx_runtime.jsx)(Rules,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"input",element:/*#__PURE__*/(0,jsx_runtime.jsx)(InputSetting,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"tranbox",element:/*#__PURE__*/(0,jsx_runtime.jsx)(Tranbox,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"mousehover",element:/*#__PURE__*/(0,jsx_runtime.jsx)(MouseHoverSetting,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"subtitle",element:/*#__PURE__*/(0,jsx_runtime.jsx)(SubtitleSetting,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"apis",element:/*#__PURE__*/(0,jsx_runtime.jsx)(Apis,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"sync",element:/*#__PURE__*/(0,jsx_runtime.jsx)(SyncSetting,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"words",element:/*#__PURE__*/(0,jsx_runtime.jsx)(FavWords,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"playground",element:/*#__PURE__*/(0,jsx_runtime.jsx)(Playgound,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"about",element:/*#__PURE__*/(0,jsx_runtime.jsx)(About,{})})]})})})})})})});} +await trySyncSettingAndRules();setReady(true);})();},[]);if(error){return/*#__PURE__*/(0,jsx_runtime.jsxs)("center",{children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Divider_Divider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{href:"https://github.com/fishjar/kiss-translator",children:"KISS Translator v".concat("2.0.5")})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Alert_Alert,{severity:"error",children:error}),/*#__PURE__*/(0,jsx_runtime.jsxs)(Stack_Stack,{spacing:2,children:[/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{href:"https://fishjar.github.io/kiss-translator/kiss-translator.user.js",children:"Install/Update Userscript for Tampermonkey/Violentmonkey"}),/*#__PURE__*/(0,jsx_runtime.jsx)(material_Link_Link,{href:"https://fishjar.github.io/kiss-translator/kiss-translator-ios-safari.user.js",children:"Install/Update Userscript for iOS Safari"})]})]});}if(!ready){return/*#__PURE__*/(0,jsx_runtime.jsx)(Loading,{});}return/*#__PURE__*/(0,jsx_runtime.jsx)(SettingProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Theme,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(AlertProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(ConfirmProvider,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(HashRouter,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Routes,{children:/*#__PURE__*/(0,jsx_runtime.jsxs)(Route,{path:"/",element:/*#__PURE__*/(0,jsx_runtime.jsx)(Layout,{}),children:[/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{index:true,element:/*#__PURE__*/(0,jsx_runtime.jsx)(Settings,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"rules",element:/*#__PURE__*/(0,jsx_runtime.jsx)(Rules,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"input",element:/*#__PURE__*/(0,jsx_runtime.jsx)(InputSetting,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"tranbox",element:/*#__PURE__*/(0,jsx_runtime.jsx)(Tranbox,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"mousehover",element:/*#__PURE__*/(0,jsx_runtime.jsx)(MouseHoverSetting,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"subtitle",element:/*#__PURE__*/(0,jsx_runtime.jsx)(SubtitleSetting,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"apis",element:/*#__PURE__*/(0,jsx_runtime.jsx)(Apis,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"sync",element:/*#__PURE__*/(0,jsx_runtime.jsx)(SyncSetting,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"words",element:/*#__PURE__*/(0,jsx_runtime.jsx)(FavWords,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"playground",element:/*#__PURE__*/(0,jsx_runtime.jsx)(Playgound,{})}),/*#__PURE__*/(0,jsx_runtime.jsx)(Route,{path:"about",element:/*#__PURE__*/(0,jsx_runtime.jsx)(About,{})})]})})})})})})});} ;// CONCATENATED MODULE: ./src/options.js const options_root=client.createRoot(document.getElementById("root"));options_root.render(/*#__PURE__*/(0,jsx_runtime.jsx)(react.StrictMode,{children:/*#__PURE__*/(0,jsx_runtime.jsx)(Options,{})})); })(); diff --git a/version.txt b/version.txt index 26e3379..b9d2bdf 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -2.0.4 \ No newline at end of file +2.0.5 \ No newline at end of file