EduarteXD ebf6447507
feat: 为chrome拓展添加手动调用翻译的功能 (#3)
* feat: 为chrome拓展添加手动调用翻译的功能

* feat: add SC-BOX-TRANSLATE-API-AVAILABLE message

* refactor: move content script logic to core.js

* feat: add context menu for translating pages

* chore: 🤖 使用extension.js

* chore: update package metadata

* chore: ensure context menu creation on extension install

* feat: add toggle translation functionality

* feat: add support for dynamic localization based on tab URL

* feat: add Chinese translation for Star Citizen browser extension

* docs: update README with new API usage instructions

* refactor: update translation logic to append original values

* typescript support

* feat: add manual URL handling for localization

* feat: add postMessage for toggling SC-BOX translate

* feat: add translation toggle event to postMessage

* feat: add translation status and message handling

* refactor: optimize localization version logging
2025-05-08 19:56:41 +08:00

1 line
4.3 KiB
JavaScript

(()=>{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})})})})();