feat: 支持保持任意网站启用翻译的装药

This commit is contained in:
xkeyC 2025-05-08 22:24:03 +08:00
parent ebf6447507
commit 23f7df8400
10 changed files with 51 additions and 21 deletions

View File

@ -24,24 +24,42 @@ chrome.runtime.onInstalled.addListener(function () {
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
if (request.action === "_loadLocalizationData") {
_initLocalization(request.url).then(data => {
sendResponse({result: data});
let domain = getURLDomain(request.url);
let switchKey = `_translate_switch_${domain}`;
getLocalData(switchKey).then(enableManual => {
console.log("GET domain ===", domain, "enableManual === ", enableManual);
_initLocalization(request.url, enableManual).then(data => {
sendResponse({result: data});
});
})
} else if (request.action === "_setTranslateSwitch") {
let domain = getURLDomain(request.url);
let switchKey = `_translate_switch_${domain}`;
setLocalData(switchKey, request.enableManual).then(() => {
console.log("SET translate switch ===", domain, "enableManual === ", request.enableManual);
sendResponse({result: true});
});
return true;
}
return true;
});
function getURLDomain(url: string): string {
const urlObj = new URL(url);
return urlObj.hostname;
}
async function _checkVersion(): Promise<void> {
dataVersion = await _getJsonData("versions.json") as VersionData;
console.log("Localization Version ===", dataVersion);
}
async function _initLocalization(url: string): Promise<ReplaceWord[]> {
async function _initLocalization(url: string, enableManual: boolean): Promise<ReplaceWord[]> {
console.log("url ===" + url);
if (dataVersion == null) {
await _checkVersion();
return _initLocalization(url);
return _initLocalization(url, enableManual);
}
if (enableManual != null && !enableManual) return [];
let v = dataVersion
// TODO check version
let data: Record<string, any> = {};
@ -50,17 +68,17 @@ async function _initLocalization(url: string): Promise<ReplaceWord[]> {
data["zh-CN"] = await _getJsonData("zh-CN-rsi.json", {cacheKey: "zh-CN", version: v.rsi});
data["concierge"] = await _getJsonData("concierge.json", {cacheKey: "concierge", version: v.concierge});
data["orgs"] = await _getJsonData("orgs.json", {cacheKey: "orgs", version: v.orgs});
data["address"] = await _getJsonData("addresses.json", {cacheKey: "orgs", version: v.addresses});
data["address"] = await _getJsonData("addresses.json", {cacheKey: "addresses", version: v.addresses});
data["hangar"] = await _getJsonData("hangar.json", {cacheKey: "hangar", version: v.hangar});
} else if (url.includes("uexcorp.space")) {
data["UEX"] = await _getJsonData("zh-CN-uex.json", {cacheKey: "uex", version: v.uex});
} else if (url.includes("erkul.games")) {
data["DPS"] = await _getJsonData("zh-CN-dps.json", {cacheKey: "dps", version: v.dps});
} else if (url.includes("manual")) {
} else if (enableManual) {
data["zh-CN"] = await _getJsonData("zh-CN-rsi.json", {cacheKey: "zh-CN", version: v.rsi});
data["concierge"] = await _getJsonData("concierge.json", {cacheKey: "concierge", version: v.concierge});
data["orgs"] = await _getJsonData("orgs.json", {cacheKey: "orgs", version: v.orgs});
data["address"] = await _getJsonData("addresses.json", {cacheKey: "orgs", version: v.addresses});
data["address"] = await _getJsonData("addresses.json", {cacheKey: "address", version: v.addresses});
data["hangar"] = await _getJsonData("hangar.json", {cacheKey: "hangar", version: v.hangar});
data["UEX"] = await _getJsonData("zh-CN-uex.json", {cacheKey: "uex", version: v.uex});
data["DPS"] = await _getJsonData("zh-CN-dps.json", {cacheKey: "dps", version: v.dps});
@ -113,7 +131,7 @@ async function _initLocalization(url: string): Promise<ReplaceWord[]> {
addLocalizationResource("UEX");
} else if (url.includes("erkul.games")) {
addLocalizationResource("DPS");
} else if (url.includes("manual")) {
} else if (enableManual) {
addLocalizationResource("zh-CN");
replaceWords.push({"word": 'members', "replacement": '名成员'});
addLocalizationResource("orgs");
@ -155,7 +173,7 @@ interface JsonDataOptions {
}
async function _getJsonData(fileName: string, options: JsonDataOptions = {}): Promise<any> {
const { cacheKey = "", version = null } = options;
const {cacheKey = "", version = null} = options;
const url = "https://git.scbox.xkeyc.cn/SCToolBox/ScWeb_Chinese_Translate/raw/branch/main/json/locales/" + fileName;
if (cacheKey && cacheKey !== "") {
const localVersion = await getLocalData(`${cacheKey}_version`);
@ -181,7 +199,10 @@ function getLocalData(key: string): Promise<any> {
return new Promise((resolve) => {
chrome.storage.local.get([key], (result) => {
const data = result[key];
resolve(data || null);
if (data === undefined ){
return resolve(null);
}
resolve(data);
});
});
}
@ -211,9 +232,10 @@ chrome.contextMenus.onClicked.addListener((info, tab) => {
if (tab && tab.url && supportedSites.find(site => tab.url!.includes(site))) {
passedUrl = tab.url;
}
_initLocalization(passedUrl).then(data => {
_initLocalization(passedUrl, true).then(data => {
if (tab && tab.id !== undefined) {
chrome.tabs.sendMessage(tab.id, {action: "_toggleTranslation", data});
chrome.tabs.sendMessage(tab.id, {action: "_toggleTranslation", data}).then((_) => {
});
}
});
});

View File

@ -42,6 +42,12 @@ function LocalizationWatchUpdate() {
}
}
function _saveLocalizationSwitchStater(enable: boolean) {;
chrome.runtime.sendMessage({ action: "_setTranslateSwitch", url: window.location.href, enableManual: enable }, function (response) {
console.log("SET translate switch ===", window.location.href, "enableManual === ", enable);
});
}
function WebLocalizationUpdateReplaceWords(w: { word: string, replacement: string }[]) {
let replaceWords = w.sort(function (a, b) {
return b.word.length - a.word.length;
@ -257,12 +263,14 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (SCLocalizationTranslating) {
SCLocalizationTranslating = false;
undoTranslate();
_saveLocalizationSwitchStater(false)
return;
}
SCLocalizationTranslating = true;
SCLocalizationEnableSplitMode = true;
window.postMessage({ type: 'TOGGLED-SC-BOX-TRANSLATE', action: 'on' }, '*');
WebLocalizationUpdateReplaceWords(request.data);
_saveLocalizationSwitchStater(true)
}
});

View File

@ -1 +1 @@
(()=>{var e={},s={};function r(t){var n=s[t];if(void 0!==n)return n.exports;var a=s[t]={exports:{}};return e[t](a,a.exports,r),a.exports}r.rv=()=>"1.3.8",r.ruid="bundler=rspack@1.3.8";let t=null;async function n(){console.log("Localization Version ===",t=await o("versions.json"))}async function a(e){if(console.log("url ==="+e),null==t)return await n(),a(e);let s=t,r={};e.includes("robertsspaceindustries.com")?(r["zh-CN"]=await o("zh-CN-rsi.json",{cacheKey:"zh-CN",version:s.rsi}),r.concierge=await o("concierge.json",{cacheKey:"concierge",version:s.concierge}),r.orgs=await o("orgs.json",{cacheKey:"orgs",version:s.orgs}),r.address=await o("addresses.json",{cacheKey:"orgs",version:s.addresses}),r.hangar=await o("hangar.json",{cacheKey:"hangar",version:s.hangar})):e.includes("uexcorp.space")?r.UEX=await o("zh-CN-uex.json",{cacheKey:"uex",version:s.uex}):e.includes("erkul.games")?r.DPS=await o("zh-CN-dps.json",{cacheKey:"dps",version:s.dps}):e.includes("manual")&&(r["zh-CN"]=await o("zh-CN-rsi.json",{cacheKey:"zh-CN",version:s.rsi}),r.concierge=await o("concierge.json",{cacheKey:"concierge",version:s.concierge}),r.orgs=await o("orgs.json",{cacheKey:"orgs",version:s.orgs}),r.address=await o("addresses.json",{cacheKey:"orgs",version:s.addresses}),r.hangar=await o("hangar.json",{cacheKey:"hangar",version:s.hangar}),r.UEX=await o("zh-CN-uex.json",{cacheKey:"uex",version:s.uex}),r.DPS=await o("zh-CN-dps.json",{cacheKey:"dps",version:s.dps}));let c=[];function i(e){c.push(...function(e,s){let r=[],t=e[s];if("object"==typeof t)for(let[e,s]of Object.entries(t)){let t=e.toString().trim().toLowerCase().replace(/\xa0/g," ").replace(/\s{2,}/g," ");r.push({word:t,replacement:String(s)})}return r}(r,e))}if(e.includes("robertsspaceindustries.com")){if(e.startsWith("https://robertsspaceindustries.com/spectrum/community/"))return[];i("zh-CN"),(e.startsWith("https://robertsspaceindustries.com/orgs")||e.startsWith("https://robertsspaceindustries.com/citizens")||e.startsWith("https://robertsspaceindustries.com/account/organization"))&&(c.push({word:"members",replacement:"名成员"}),i("orgs")),e.startsWith("https://robertsspaceindustries.com/account/addresses")&&i("address"),e.startsWith("https://robertsspaceindustries.com/account/referral-program")&&c.push({word:"Total recruits: ",replacement:"总邀请数:"},{word:"Prospects ",replacement:"未完成的邀请"},{word:"Recruits",replacement:"已完成的邀请"}),e.startsWith("https://robertsspaceindustries.com/account/concierge")&&(c=[],i("concierge")),e.startsWith("https://robertsspaceindustries.com/account/pledges")&&i("hangar")}else e.includes("uexcorp.space")?i("UEX"):e.includes("erkul.games")?i("DPS"):e.includes("manual")&&(i("zh-CN"),c.push({word:"members",replacement:"名成员"}),i("orgs"),i("address"),c.push({word:"Total recruits: ",replacement:"总邀请数:"},{word:"Prospects ",replacement:"未完成的邀请"},{word:"Recruits",replacement:"已完成的邀请"}),i("concierge"),i("hangar"),i("UEX"),i("DPS"));return c}async function o(e,s={}){let{cacheKey:r="",version:t=null}=s;if(r&&""!==r){let e=await c(`${r}_version`),s=await c(r);if(s&&"object"==typeof s&&Object.keys(s).length>0&&e===t)return s}let n=new Date,a=await fetch("https://git.scbox.xkeyc.cn/SCToolBox/ScWeb_Chinese_Translate/raw/branch/main/json/locales/"+e,{method:"GET",mode:"cors"}),u=new Date,l=await a.json();if(r&&""!==r){let e=u.getTime()-n.getTime();console.log(`update ${r} v == ${t} time == ${e/1e3}s`),await i(r,l),await i(`${r}_version`,t)}return l}function c(e){return new Promise(s=>{chrome.storage.local.get([e],r=>{s(r[e]||null)})})}function i(e,s){return new Promise(r=>{let t={};t[e]=s,chrome.storage.local.set(t,()=>{r()})})}chrome.runtime.onInstalled.addListener(function(){n().then(e=>{}),console.log("SWTT init")}),chrome.runtime.onMessage.addListener(function(e,s,r){if("_loadLocalizationData"===e.action)return a(e.url).then(e=>{r({result:e})}),!0}),chrome.runtime.onInstalled.addListener(function(){chrome.contextMenus.create({id:"translate",title:"切换翻译",contexts:["all"]})}),chrome.contextMenus.onClicked.addListener((e,s)=>{console.log("contextMenus",e,s);let r="manual";s&&s.url&&["robertsspaceindustries.com","erkul.games","uexcorp.space"].find(e=>s.url.includes(e))&&(r=s.url),a(r).then(e=>{s&&void 0!==s.id&&chrome.tabs.sendMessage(s.id,{action:"_toggleTranslation",data:e})})})})();
(()=>{var e={},s={};function t(r){var n=s[r];if(void 0!==n)return n.exports;var a=s[r]={exports:{}};return e[r](a,a.exports,t),a.exports}t.rv=()=>"1.3.9",t.ruid="bundler=rspack@1.3.9";let r=null;function n(e){return new URL(e).hostname}async function a(){console.log("Localization Version ===",r=await c("versions.json"))}async function o(e,s){if(console.log("url ==="+e),null==r)return await a(),o(e,s);if(null!=s&&!s)return[];let t=r,n={};e.includes("robertsspaceindustries.com")?(n["zh-CN"]=await c("zh-CN-rsi.json",{cacheKey:"zh-CN",version:t.rsi}),n.concierge=await c("concierge.json",{cacheKey:"concierge",version:t.concierge}),n.orgs=await c("orgs.json",{cacheKey:"orgs",version:t.orgs}),n.address=await c("addresses.json",{cacheKey:"addresses",version:t.addresses}),n.hangar=await c("hangar.json",{cacheKey:"hangar",version:t.hangar})):e.includes("uexcorp.space")?n.UEX=await c("zh-CN-uex.json",{cacheKey:"uex",version:t.uex}):e.includes("erkul.games")?n.DPS=await c("zh-CN-dps.json",{cacheKey:"dps",version:t.dps}):s&&(n["zh-CN"]=await c("zh-CN-rsi.json",{cacheKey:"zh-CN",version:t.rsi}),n.concierge=await c("concierge.json",{cacheKey:"concierge",version:t.concierge}),n.orgs=await c("orgs.json",{cacheKey:"orgs",version:t.orgs}),n.address=await c("addresses.json",{cacheKey:"address",version:t.addresses}),n.hangar=await c("hangar.json",{cacheKey:"hangar",version:t.hangar}),n.UEX=await c("zh-CN-uex.json",{cacheKey:"uex",version:t.uex}),n.DPS=await c("zh-CN-dps.json",{cacheKey:"dps",version:t.dps}));let i=[];function l(e){i.push(...function(e,s){let t=[],r=e[s];if("object"==typeof r)for(let[e,s]of Object.entries(r)){let r=e.toString().trim().toLowerCase().replace(/\xa0/g," ").replace(/\s{2,}/g," ");t.push({word:r,replacement:String(s)})}return t}(n,e))}if(e.includes("robertsspaceindustries.com")){if(e.startsWith("https://robertsspaceindustries.com/spectrum/community/"))return[];l("zh-CN"),(e.startsWith("https://robertsspaceindustries.com/orgs")||e.startsWith("https://robertsspaceindustries.com/citizens")||e.startsWith("https://robertsspaceindustries.com/account/organization"))&&(i.push({word:"members",replacement:"名成员"}),l("orgs")),e.startsWith("https://robertsspaceindustries.com/account/addresses")&&l("address"),e.startsWith("https://robertsspaceindustries.com/account/referral-program")&&i.push({word:"Total recruits: ",replacement:"总邀请数:"},{word:"Prospects ",replacement:"未完成的邀请"},{word:"Recruits",replacement:"已完成的邀请"}),e.startsWith("https://robertsspaceindustries.com/account/concierge")&&(i=[],l("concierge")),e.startsWith("https://robertsspaceindustries.com/account/pledges")&&l("hangar")}else e.includes("uexcorp.space")?l("UEX"):e.includes("erkul.games")?l("DPS"):s&&(l("zh-CN"),i.push({word:"members",replacement:"名成员"}),l("orgs"),l("address"),i.push({word:"Total recruits: ",replacement:"总邀请数:"},{word:"Prospects ",replacement:"未完成的邀请"},{word:"Recruits",replacement:"已完成的邀请"}),l("concierge"),l("hangar"),l("UEX"),l("DPS"));return i}async function c(e,s={}){let{cacheKey:t="",version:r=null}=s;if(t&&""!==t){let e=await i(`${t}_version`),s=await i(t);if(s&&"object"==typeof s&&Object.keys(s).length>0&&e===r)return s}let n=new Date,a=await fetch("https://git.scbox.xkeyc.cn/SCToolBox/ScWeb_Chinese_Translate/raw/branch/main/json/locales/"+e,{method:"GET",mode:"cors"}),o=new Date,u=await a.json();if(t&&""!==t){let e=o.getTime()-n.getTime();console.log(`update ${t} v == ${r} time == ${e/1e3}s`),await l(t,u),await l(`${t}_version`,r)}return u}function i(e){return new Promise(s=>{chrome.storage.local.get([e],t=>{let r=t[e];if(void 0===r)return s(null);s(r)})})}function l(e,s){return new Promise(t=>{let r={};r[e]=s,chrome.storage.local.set(r,()=>{t()})})}chrome.runtime.onInstalled.addListener(function(){a().then(e=>{}),console.log("SWTT init")}),chrome.runtime.onMessage.addListener(function(e,s,t){if("_loadLocalizationData"===e.action){let s=n(e.url);i(`_translate_switch_${s}`).then(r=>{console.log("GET domain ===",s,"enableManual === ",r),o(e.url,r).then(e=>{t({result:e})})})}else if("_setTranslateSwitch"===e.action){let s=n(e.url);l(`_translate_switch_${s}`,e.enableManual).then(()=>{console.log("SET translate switch ===",s,"enableManual === ",e.enableManual),t({result:!0})})}return!0}),chrome.runtime.onInstalled.addListener(function(){chrome.contextMenus.create({id:"translate",title:"切换翻译",contexts:["all"]})}),chrome.contextMenus.onClicked.addListener((e,s)=>{console.log("contextMenus",e,s);let t="manual";s&&s.url&&["robertsspaceindustries.com","erkul.games","uexcorp.space"].find(e=>s.url.includes(e))&&(t=s.url),o(t,!0).then(e=>{s&&void 0!==s.id&&chrome.tabs.sendMessage(s.id,{action:"_toggleTranslation",data:e}).then(e=>{})})})})();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
(()=>{var e={},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.rv=()=>"1.3.8",r.ruid="bundler=rspack@1.3.8",function(){function e(t,r,n,o=100){let a=setInterval(()=>{let e=t.querySelector(r);e&&(clearInterval(a),n(e))},o)}function t(e){if(!e||e.parentNode.querySelector('a[data-cy-id="button"][href="/account/pledges"]'))return;let t=e.cloneNode(!0);t.href="/account/pledges";let r=t.querySelector('span[data-cy-id="button__text"]');r&&(r.innerText="My Hangar");let n=t.querySelector('i[data-cy-id="button__icon"]');n&&(n.className="a-button__icon a-icon -gridView"),e.parentNode.insertBefore(t,e)}e(document,"#sidePanel",r=>{new MutationObserver(r=>{for(let n of r)"childList"===n.type&&n.addedNodes.length>0&&n.addedNodes.forEach(r=>{1===r.nodeType&&e(r,'a[data-cy-id="button"][href="/account/settings"]',e=>{t(e)})})}).observe(r,{childList:!0,subtree:!0});let n=r.querySelector('a[data-cy-id="button"][href="/account/settings"]');n&&t(n)})}()})();
(()=>{var e={},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.rv=()=>"1.3.9",r.ruid="bundler=rspack@1.3.9",function(){function e(t,r,n,o=100){let a=setInterval(()=>{let e=t.querySelector(r);e&&(clearInterval(a),n(e))},o)}function t(e){if(!e||e.parentNode.querySelector('a[data-cy-id="button"][href="/account/pledges"]'))return;let t=e.cloneNode(!0);t.href="/account/pledges";let r=t.querySelector('span[data-cy-id="button__text"]');r&&(r.innerText="My Hangar");let n=t.querySelector('i[data-cy-id="button__icon"]');n&&(n.className="a-button__icon a-icon -gridView"),e.parentNode.insertBefore(t,e)}e(document,"#sidePanel",r=>{new MutationObserver(r=>{for(let n of r)"childList"===n.type&&n.addedNodes.length>0&&n.addedNodes.forEach(r=>{1===r.nodeType&&e(r,'a[data-cy-id="button"][href="/account/settings"]',e=>{t(e)})})}).observe(r,{childList:!0,subtree:!0});let n=r.querySelector('a[data-cy-id="button"][href="/account/settings"]');n&&t(n)})}()})();

View File

@ -1 +1 @@
(()=>{var e={},s={};function r(t){var n=s[t];if(void 0!==n)return n.exports;var a=s[t]={exports:{}};return e[t](a,a.exports,r),a.exports}r.rv=()=>"1.3.8",r.ruid="bundler=rspack@1.3.8";let t=null;async function n(){console.log("Localization Version ===",t=await o("versions.json"))}async function a(e){if(console.log("url ==="+e),null==t)return await n(),a(e);let s=t,r={};e.includes("robertsspaceindustries.com")?(r["zh-CN"]=await o("zh-CN-rsi.json",{cacheKey:"zh-CN",version:s.rsi}),r.concierge=await o("concierge.json",{cacheKey:"concierge",version:s.concierge}),r.orgs=await o("orgs.json",{cacheKey:"orgs",version:s.orgs}),r.address=await o("addresses.json",{cacheKey:"orgs",version:s.addresses}),r.hangar=await o("hangar.json",{cacheKey:"hangar",version:s.hangar})):e.includes("uexcorp.space")?r.UEX=await o("zh-CN-uex.json",{cacheKey:"uex",version:s.uex}):e.includes("erkul.games")?r.DPS=await o("zh-CN-dps.json",{cacheKey:"dps",version:s.dps}):e.includes("manual")&&(r["zh-CN"]=await o("zh-CN-rsi.json",{cacheKey:"zh-CN",version:s.rsi}),r.concierge=await o("concierge.json",{cacheKey:"concierge",version:s.concierge}),r.orgs=await o("orgs.json",{cacheKey:"orgs",version:s.orgs}),r.address=await o("addresses.json",{cacheKey:"orgs",version:s.addresses}),r.hangar=await o("hangar.json",{cacheKey:"hangar",version:s.hangar}),r.UEX=await o("zh-CN-uex.json",{cacheKey:"uex",version:s.uex}),r.DPS=await o("zh-CN-dps.json",{cacheKey:"dps",version:s.dps}));let c=[];function i(e){c.push(...function(e,s){let r=[],t=e[s];if("object"==typeof t)for(let[e,s]of Object.entries(t)){let t=e.toString().trim().toLowerCase().replace(/\xa0/g," ").replace(/\s{2,}/g," ");r.push({word:t,replacement:String(s)})}return r}(r,e))}if(e.includes("robertsspaceindustries.com")){if(e.startsWith("https://robertsspaceindustries.com/spectrum/community/"))return[];i("zh-CN"),(e.startsWith("https://robertsspaceindustries.com/orgs")||e.startsWith("https://robertsspaceindustries.com/citizens")||e.startsWith("https://robertsspaceindustries.com/account/organization"))&&(c.push({word:"members",replacement:"名成员"}),i("orgs")),e.startsWith("https://robertsspaceindustries.com/account/addresses")&&i("address"),e.startsWith("https://robertsspaceindustries.com/account/referral-program")&&c.push({word:"Total recruits: ",replacement:"总邀请数:"},{word:"Prospects ",replacement:"未完成的邀请"},{word:"Recruits",replacement:"已完成的邀请"}),e.startsWith("https://robertsspaceindustries.com/account/concierge")&&(c=[],i("concierge")),e.startsWith("https://robertsspaceindustries.com/account/pledges")&&i("hangar")}else e.includes("uexcorp.space")?i("UEX"):e.includes("erkul.games")?i("DPS"):e.includes("manual")&&(i("zh-CN"),c.push({word:"members",replacement:"名成员"}),i("orgs"),i("address"),c.push({word:"Total recruits: ",replacement:"总邀请数:"},{word:"Prospects ",replacement:"未完成的邀请"},{word:"Recruits",replacement:"已完成的邀请"}),i("concierge"),i("hangar"),i("UEX"),i("DPS"));return c}async function o(e,s={}){let{cacheKey:r="",version:t=null}=s;if(r&&""!==r){let e=await c(`${r}_version`),s=await c(r);if(s&&"object"==typeof s&&Object.keys(s).length>0&&e===t)return s}let n=new Date,a=await fetch("https://git.scbox.xkeyc.cn/SCToolBox/ScWeb_Chinese_Translate/raw/branch/main/json/locales/"+e,{method:"GET",mode:"cors"}),u=new Date,l=await a.json();if(r&&""!==r){let e=u.getTime()-n.getTime();console.log(`update ${r} v == ${t} time == ${e/1e3}s`),await i(r,l),await i(`${r}_version`,t)}return l}function c(e){return new Promise(s=>{chrome.storage.local.get([e],r=>{s(r[e]||null)})})}function i(e,s){return new Promise(r=>{let t={};t[e]=s,chrome.storage.local.set(t,()=>{r()})})}chrome.runtime.onInstalled.addListener(function(){n().then(e=>{}),console.log("SWTT init")}),chrome.runtime.onMessage.addListener(function(e,s,r){if("_loadLocalizationData"===e.action)return a(e.url).then(e=>{r({result:e})}),!0}),chrome.runtime.onInstalled.addListener(function(){chrome.contextMenus.create({id:"translate",title:"切换翻译",contexts:["all"]})}),chrome.contextMenus.onClicked.addListener((e,s)=>{console.log("contextMenus",e,s);let r="manual";s&&s.url&&["robertsspaceindustries.com","erkul.games","uexcorp.space"].find(e=>s.url.includes(e))&&(r=s.url),a(r).then(e=>{s&&void 0!==s.id&&chrome.tabs.sendMessage(s.id,{action:"_toggleTranslation",data:e})})})})();
(()=>{var e={},s={};function t(r){var n=s[r];if(void 0!==n)return n.exports;var a=s[r]={exports:{}};return e[r](a,a.exports,t),a.exports}t.rv=()=>"1.3.9",t.ruid="bundler=rspack@1.3.9";let r=null;function n(e){return new URL(e).hostname}async function a(){console.log("Localization Version ===",r=await c("versions.json"))}async function o(e,s){if(console.log("url ==="+e),null==r)return await a(),o(e,s);if(null!=s&&!s)return[];let t=r,n={};e.includes("robertsspaceindustries.com")?(n["zh-CN"]=await c("zh-CN-rsi.json",{cacheKey:"zh-CN",version:t.rsi}),n.concierge=await c("concierge.json",{cacheKey:"concierge",version:t.concierge}),n.orgs=await c("orgs.json",{cacheKey:"orgs",version:t.orgs}),n.address=await c("addresses.json",{cacheKey:"addresses",version:t.addresses}),n.hangar=await c("hangar.json",{cacheKey:"hangar",version:t.hangar})):e.includes("uexcorp.space")?n.UEX=await c("zh-CN-uex.json",{cacheKey:"uex",version:t.uex}):e.includes("erkul.games")?n.DPS=await c("zh-CN-dps.json",{cacheKey:"dps",version:t.dps}):s&&(n["zh-CN"]=await c("zh-CN-rsi.json",{cacheKey:"zh-CN",version:t.rsi}),n.concierge=await c("concierge.json",{cacheKey:"concierge",version:t.concierge}),n.orgs=await c("orgs.json",{cacheKey:"orgs",version:t.orgs}),n.address=await c("addresses.json",{cacheKey:"address",version:t.addresses}),n.hangar=await c("hangar.json",{cacheKey:"hangar",version:t.hangar}),n.UEX=await c("zh-CN-uex.json",{cacheKey:"uex",version:t.uex}),n.DPS=await c("zh-CN-dps.json",{cacheKey:"dps",version:t.dps}));let i=[];function l(e){i.push(...function(e,s){let t=[],r=e[s];if("object"==typeof r)for(let[e,s]of Object.entries(r)){let r=e.toString().trim().toLowerCase().replace(/\xa0/g," ").replace(/\s{2,}/g," ");t.push({word:r,replacement:String(s)})}return t}(n,e))}if(e.includes("robertsspaceindustries.com")){if(e.startsWith("https://robertsspaceindustries.com/spectrum/community/"))return[];l("zh-CN"),(e.startsWith("https://robertsspaceindustries.com/orgs")||e.startsWith("https://robertsspaceindustries.com/citizens")||e.startsWith("https://robertsspaceindustries.com/account/organization"))&&(i.push({word:"members",replacement:"名成员"}),l("orgs")),e.startsWith("https://robertsspaceindustries.com/account/addresses")&&l("address"),e.startsWith("https://robertsspaceindustries.com/account/referral-program")&&i.push({word:"Total recruits: ",replacement:"总邀请数:"},{word:"Prospects ",replacement:"未完成的邀请"},{word:"Recruits",replacement:"已完成的邀请"}),e.startsWith("https://robertsspaceindustries.com/account/concierge")&&(i=[],l("concierge")),e.startsWith("https://robertsspaceindustries.com/account/pledges")&&l("hangar")}else e.includes("uexcorp.space")?l("UEX"):e.includes("erkul.games")?l("DPS"):s&&(l("zh-CN"),i.push({word:"members",replacement:"名成员"}),l("orgs"),l("address"),i.push({word:"Total recruits: ",replacement:"总邀请数:"},{word:"Prospects ",replacement:"未完成的邀请"},{word:"Recruits",replacement:"已完成的邀请"}),l("concierge"),l("hangar"),l("UEX"),l("DPS"));return i}async function c(e,s={}){let{cacheKey:t="",version:r=null}=s;if(t&&""!==t){let e=await i(`${t}_version`),s=await i(t);if(s&&"object"==typeof s&&Object.keys(s).length>0&&e===r)return s}let n=new Date,a=await fetch("https://git.scbox.xkeyc.cn/SCToolBox/ScWeb_Chinese_Translate/raw/branch/main/json/locales/"+e,{method:"GET",mode:"cors"}),o=new Date,u=await a.json();if(t&&""!==t){let e=o.getTime()-n.getTime();console.log(`update ${t} v == ${r} time == ${e/1e3}s`),await l(t,u),await l(`${t}_version`,r)}return u}function i(e){return new Promise(s=>{chrome.storage.local.get([e],t=>{let r=t[e];if(void 0===r)return s(null);s(r)})})}function l(e,s){return new Promise(t=>{let r={};r[e]=s,chrome.storage.local.set(r,()=>{t()})})}chrome.runtime.onInstalled.addListener(function(){a().then(e=>{}),console.log("SWTT init")}),chrome.runtime.onMessage.addListener(function(e,s,t){if("_loadLocalizationData"===e.action){let s=n(e.url);i(`_translate_switch_${s}`).then(r=>{console.log("GET domain ===",s,"enableManual === ",r),o(e.url,r).then(e=>{t({result:e})})})}else if("_setTranslateSwitch"===e.action){let s=n(e.url);l(`_translate_switch_${s}`,e.enableManual).then(()=>{console.log("SET translate switch ===",s,"enableManual === ",e.enableManual),t({result:!0})})}return!0}),chrome.runtime.onInstalled.addListener(function(){chrome.contextMenus.create({id:"translate",title:"切换翻译",contexts:["all"]})}),chrome.contextMenus.onClicked.addListener((e,s)=>{console.log("contextMenus",e,s);let t="manual";s&&s.url&&["robertsspaceindustries.com","erkul.games","uexcorp.space"].find(e=>s.url.includes(e))&&(t=s.url),o(t,!0).then(e=>{s&&void 0!==s.id&&chrome.tabs.sendMessage(s.id,{action:"_toggleTranslation",data:e}).then(e=>{})})})})();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
(()=>{var e={},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.rv=()=>"1.3.8",r.ruid="bundler=rspack@1.3.8",function(){function e(t,r,n,o=100){let a=setInterval(()=>{let e=t.querySelector(r);e&&(clearInterval(a),n(e))},o)}function t(e){if(!e||e.parentNode.querySelector('a[data-cy-id="button"][href="/account/pledges"]'))return;let t=e.cloneNode(!0);t.href="/account/pledges";let r=t.querySelector('span[data-cy-id="button__text"]');r&&(r.innerText="My Hangar");let n=t.querySelector('i[data-cy-id="button__icon"]');n&&(n.className="a-button__icon a-icon -gridView"),e.parentNode.insertBefore(t,e)}e(document,"#sidePanel",r=>{new MutationObserver(r=>{for(let n of r)"childList"===n.type&&n.addedNodes.length>0&&n.addedNodes.forEach(r=>{1===r.nodeType&&e(r,'a[data-cy-id="button"][href="/account/settings"]',e=>{t(e)})})}).observe(r,{childList:!0,subtree:!0});let n=r.querySelector('a[data-cy-id="button"][href="/account/settings"]');n&&t(n)})}()})();
(()=>{var e={},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.rv=()=>"1.3.9",r.ruid="bundler=rspack@1.3.9",function(){function e(t,r,n,o=100){let a=setInterval(()=>{let e=t.querySelector(r);e&&(clearInterval(a),n(e))},o)}function t(e){if(!e||e.parentNode.querySelector('a[data-cy-id="button"][href="/account/pledges"]'))return;let t=e.cloneNode(!0);t.href="/account/pledges";let r=t.querySelector('span[data-cy-id="button__text"]');r&&(r.innerText="My Hangar");let n=t.querySelector('i[data-cy-id="button__icon"]');n&&(n.className="a-button__icon a-icon -gridView"),e.parentNode.insertBefore(t,e)}e(document,"#sidePanel",r=>{new MutationObserver(r=>{for(let n of r)"childList"===n.type&&n.addedNodes.length>0&&n.addedNodes.forEach(r=>{1===r.nodeType&&e(r,'a[data-cy-id="button"][href="/account/settings"]',e=>{t(e)})})}).observe(r,{childList:!0,subtree:!0});let n=r.querySelector('a[data-cy-id="button"][href="/account/settings"]');n&&t(n)})}()})();