This commit is contained in:
the1812 2019-09-05 18:02:43 +08:00
parent c2a3563cc8
commit 7bfd07393c
11 changed files with 141 additions and 16 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -71,7 +71,7 @@
"i18n.en-US.min.js": "3881C855B9044CF350A66CA56E3C42A5CEAC32FF75C563450BBF3BFA60E446AC",
"i18n.ja-JP.min.js": "983B1F62E834C6B3B00006164E774042164E8068F188060A4433342CDF331A97",
"i18n.min.css": "6B6A1C2F3E222CF1B686BF94F939B494471C979CC6A5F53CFBAC2F4E32048DD4",
"i18n.min.js": "F36EB22410768DBDE22DE40674D764F86AF9021DE3592A4593C0C9D349D3B0A0",
"i18n.min.js": "7FCB933FD43C05A152B672D4BD721F3ECEBA6AD29648379947DAAFC403907B38",
"i18n.zh-TW.min.js": "803F67270809E3258E2B302ADE542B12EF222C83EDC67FB8C68301C5F4E3A1CC",
"icon.vue.min.js": "B6162958FC6475DC94798AB6325A3F9C1FC8E1D29D45C5BB52821B4A223328A5",
"icons.min.css": "CE45E84BCB125A434F3DE11F992BED59D39643B4A7314705809B285732615994",
@ -113,7 +113,7 @@
"settings-side-bar.min.js": "CC0E3477BF8574606720D3261C4A0202713E42B30CFE737403E629CBA97B2A98",
"settings-tooltip.en-US.min.js": "7831F2DA3138E8E4555347A7F5060D968A1D06DD239D5146217B30A08553C468",
"settings-tooltip.ja-JP.min.js": "F4158BB45CCD40EEEF9C0B9900C5A8D0C70B6EEB5F862F9CE1B77545CD07DE14",
"settings-tooltip.loader.min.js": "36A61614ECE1A0E0A8C5D77DAB02099F5ABA190322AAC32EDD8891CF5CBDE947",
"settings-tooltip.loader.min.js": "F9DFB09E32B8C814A61EE7E7D354C15A6FEF39BBBC22F476A930526DC26DA558",
"settings-tooltip.min.css": "0C138D5CF16B9068E73D173D229B2B458C15F50272DA73D6A580921C5A848845",
"settings-tooltip.min.js": "E9ABA72B3C29CA850342109E57B055B193F3356DD59876B202E8E908AE6247C9",
"settings-tooltip.zh-CN.min.js": "38D45D4908ECEA26CA3A9457E81B12ABF6DEBE690051ECA77CBA46D20E3399ED",

Binary file not shown.

2
min/i18n.min.js vendored
View File

@ -1 +1 @@
(()=>{return(e,t)=>{const s={"日本語":"ja-JP",English:"en-US",Deutsch:"de-DE"};class a{accepts(e){return e.nodeType===Node.ELEMENT_NODE}getValue(e){return e.nodeValue}setValue(e,t){e.nodeValue=t}getElement(e){return e}translate(e){let t=this.getValue(e);if(!t||typeof t!=="string"||t==="*"){return}t=t.trim();const s=a.map.get(t);if(s===undefined){const s=a.regex.find(([e])=>e.test(t));if(s){const[a,r]=s;this.setValue(e,t.replace(a,r))}}else if(typeof s==="string"){this.setValue(e,s)}else if(Array.isArray(s)){let t=null;for(const a of s){if(typeof a==="string"){t=a}else{const{text:s,selector:r,not:n}=a;if(this.getElement(e).matches(r)!==Boolean(n)){t=s}}}if(t!==null){this.setValue(e,t)}}else{const{text:t,selector:a,not:r}=s;if(this.getElement(e).matches(a)!==Boolean(r)){this.setValue(e,t)}}}static walk(e,t){const s=document.createTreeWalker(e,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null,false);let a=s.nextNode();while(a){t(a);a=s.nextNode()}}static translate(e){if(e.nodeType===Node.TEXT_NODE){a.textNode.translate(e);return}const t=e=>{for(const t of a.sensitiveTranslators){if(t.accepts(e)){t.translate(e)}}};t(e);a.walk(e,t)}static translateCssMatches(){const e=a.map.get("*");if(!e){return}for(const{selector:t,text:s}of e){const e=document.querySelector(t);if(e){[...e.childNodes].filter(e=>e.nodeType===Node.TEXT_NODE).forEach(e=>e.nodeValue=s)}}}}class r extends a{accepts(e){return e.nodeType===Node.TEXT_NODE}getElement(e){return e.parentElement}}class n extends a{getValue(e){return e.getAttribute("title")}setValue(e,t){e.setAttribute("title",t)}}class l extends a{getValue(e){return e.getAttribute("placeholder")}setValue(e,t){e.setAttribute("placeholder",t)}}class o extends a{accepts(e){return e instanceof HTMLInputElement&&e.hasAttribute("key")}getValue(e){return e.value}setValue(e,t){e.value=t}}a.textNode=new r;a.title=new n;a.placeholder=new l;a.settingsDropdown=new o;a.sensitiveTranslators=[a.textNode,a.title,a.placeholder];const i=async()=>{const r=s[e.i18nLanguage];const{map:n,regex:l}=await t.importAsync(`i18n.${r}.js`);document.documentElement.setAttribute("lang",r);a.map=n;a.regex=[...l.entries()];a.translate(document.body);a.translateCssMatches();Observer.observe("body",e=>{e.forEach(e=>{if(e.type==="childList"){if(e.addedNodes.length>0){a.translateCssMatches()}e.addedNodes.forEach(e=>{a.translate(e)})}else if(e.type==="characterData"){a.textNode.translate(e.target)}else if(e.type==="attributes"){if(e.attributeName==="title"){a.title.translate(e.target)}else if(e.attributeName==="placeholder"){a.placeholder.translate(e.target)}}})},{characterData:true,childList:true,subtree:true,attributes:true});const o=await SpinQuery.select(".gui-settings-icon-panel");o.addEventListener("be:load",()=>{a.walk(document.querySelector(".gui-settings-box"),e=>a.settingsDropdown.translate(e))},{once:true})};i();return{export:{Translator:a,TextNodeTranslator:r,TitleTranslator:n,PlaceholderTranslator:l},dropdown:{key:"i18nLanguage",items:[`日本語`]}}}})();
(()=>{return(e,t)=>{const s={"日本語":"ja-JP",English:"en-US",Deutsch:"de-DE"};class a{accepts(e){return e.nodeType===Node.ELEMENT_NODE}getValue(e){return e.nodeValue}setValue(e,t){e.nodeValue=t}getElement(e){return e}translate(e){let t=this.getValue(e);if(!t||typeof t!=="string"||t==="*"){return}t=t.trim();const s=a.map.get(t);if(s===undefined){const s=a.regex.find(([e])=>e.test(t));if(s){const[a,r]=s;this.setValue(e,t.replace(a,r))}}else if(typeof s==="string"){this.setValue(e,s)}else if(Array.isArray(s)){let t=null;for(const a of s){if(typeof a==="string"){t=a}else{const{text:s,selector:r,not:n}=a;if(this.getElement(e).matches(r)!==Boolean(n)){t=s}}}if(t!==null){this.setValue(e,t)}}else{const{text:t,selector:a,not:r}=s;if(this.getElement(e).matches(a)!==Boolean(r)){this.setValue(e,t)}}}static walk(e,t){const s=document.createTreeWalker(e,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null,false);let a=s.nextNode();while(a){t(a);a=s.nextNode()}}static translate(e){if(e.nodeType===Node.TEXT_NODE){a.textNode.translate(e);return}const t=e=>{for(const t of a.sensitiveTranslators){if(t.accepts(e)){t.translate(e)}}};t(e);a.walk(e,t)}static translateCssMatches(){const e=a.map.get("*");if(!e){return}for(const{selector:t,text:s}of e){const e=document.querySelector(t);if(e){[...e.childNodes].filter(e=>e.nodeType===Node.TEXT_NODE).forEach(e=>e.nodeValue=s)}}}}class r extends a{accepts(e){return e.nodeType===Node.TEXT_NODE}getElement(e){return e.parentElement}}class n extends a{getValue(e){return e.getAttribute("title")}setValue(e,t){e.setAttribute("title",t)}}class l extends a{getValue(e){return e.getAttribute("placeholder")}setValue(e,t){e.setAttribute("placeholder",t)}}class o extends a{accepts(e){return e instanceof HTMLInputElement&&e.hasAttribute("key")}getValue(e){return e.value}setValue(e,t){e.value=t}}a.textNode=new r;a.title=new n;a.placeholder=new l;a.settingsDropdown=new o;a.sensitiveTranslators=[a.textNode,a.title,a.placeholder];const i=async()=>{const r=s[e.i18nLanguage];const{map:n,regex:l}=await t.importAsync(`i18n.${r}`);document.documentElement.setAttribute("lang",r);a.map=n;a.regex=[...l.entries()];a.translate(document.body);a.translateCssMatches();Observer.observe("body",e=>{e.forEach(e=>{if(e.type==="childList"){if(e.addedNodes.length>0){a.translateCssMatches()}e.addedNodes.forEach(e=>{a.translate(e)})}else if(e.type==="characterData"){a.textNode.translate(e.target)}else if(e.type==="attributes"){if(e.attributeName==="title"){a.title.translate(e.target)}else if(e.attributeName==="placeholder"){a.placeholder.translate(e.target)}}})},{characterData:true,childList:true,subtree:true,attributes:true});const o=await SpinQuery.select(".gui-settings-icon-panel");o.addEventListener("be:load",()=>{a.walk(document.querySelector(".gui-settings-box"),e=>a.settingsDropdown.translate(e))},{once:true})};i();return{export:{Translator:a,TextNodeTranslator:r,TitleTranslator:n,PlaceholderTranslator:l},dropdown:{key:"i18nLanguage",items:[`日本語`]}}}})();

View File

@ -1 +1 @@
(()=>{return(t,e)=>{function n(t){const e=t.querySelector("input");if(e){return e.getAttribute("key")}return null}(async()=>{e.applyStyle("settingsTooltipStyle");const{toolTips:t}=await e.importAsync(`settings-tooltip.${getI18nKey()}.js`);const s=await SpinQuery.select(".gui-settings-tooltip");if(!s){return}document.querySelectorAll(".gui-settings-content>ul>li").forEach(e=>{e.addEventListener("mouseover",()=>{const i=n(e);if(i===null||t===null){return}const o=t.get(i);if(o!==undefined){s.innerHTML=o;s.classList.add("show")}});e.addEventListener("mouseout",()=>{s.classList.remove("show")})})})()}})();
(()=>{return(t,e)=>{function n(t){const e=t.querySelector("input");if(e){return e.getAttribute("key")}return null}(async()=>{e.applyStyle("settingsTooltipStyle");const{toolTips:t}=await e.importAsync(`settings-tooltip.${getI18nKey()}`);const s=await SpinQuery.select(".gui-settings-tooltip");if(!s){return}document.querySelectorAll(".gui-settings-content>ul>li").forEach(e=>{e.addEventListener("mouseover",()=>{const i=n(e);if(i===null||t===null){return}const o=t.get(i);if(o!==undefined){s.innerHTML=o;s.classList.add("show")}});e.addEventListener("mouseout",()=>{s.classList.remove("show")})})})()}})();

View File

@ -50,6 +50,15 @@ Resource.manifest = {
settingsTooltipStyle: {
path: 'settings-tooltip.min.css'
},
settingsTooltipJapanese: {
path: 'settings-tooltip.ja-JP.min.js'
},
settingsTooltipChinese: {
path: 'settings-tooltip.zh-CN.min.js'
},
settingsTooltipEnglish: {
path: 'settings-tooltip.en-US.min.js'
},
settingsTooltip: {
path: 'settings-tooltip.loader.min.js',
dependencies: [
@ -486,6 +495,22 @@ Resource.manifest = {
items: [`日本語`, `English`]
}
},
i18nEnglish: {
path: 'i18n.en-US.min.js',
alwaysPreview: true
},
i18nJapanese: {
path: 'i18n.ja-JP.min.js',
alwaysPreview: true
},
i18nTraditionalChinese: {
path: 'i18n.zh-TW.min.js',
alwaysPreview: true
},
i18nGerman: {
path: 'i18n.de-DE.min.js',
alwaysPreview: true
},
playerFocus: {
path: 'player-focus.min.js',
displayNames: {

View File

@ -10,7 +10,7 @@ function extractKey(listItem: Element)
(async () =>
{
resources.applyStyle("settingsTooltipStyle");
const { toolTips } = await import(`settings-tooltip.${getI18nKey()}.js`);
const { toolTips } = await import(`settings-tooltip.${getI18nKey()}`);
const tooltip = await SpinQuery.select(".gui-settings-tooltip");
if (!tooltip)
{

View File

@ -164,7 +164,7 @@ Translator.sensitiveTranslators = [Translator.textNode, Translator.title, Transl
const startTranslate = async () =>
{
const languageCode = languageCodeMap[settings.i18nLanguage];
const { map, regex } = await import(`./i18n.${languageCode}.js`);
const { map, regex } = await import(`./i18n.${languageCode}`);
document.documentElement.setAttribute("lang", languageCode);
Translator.map = map as Map<string, any>;
Translator.regex = [...regex.entries()] as Array<[RegExp, string]>;