🏠 Home 

战舰世界莱服网页汉化

一个将战舰世界莱服网页内容翻译为中文的插件


安装此脚本?
// ==UserScript==
// @name         战舰世界莱服网页汉化
// @namespace    https://github.com/windofxy
// @version      202503120820
// @description  一个将战舰世界莱服网页内容翻译为中文的插件
// @author       Windofxy
// @icon         https://gh-proxy.net/github.com/OpenKorabli/Korabli-InGameBrowser-L10n-CHS/blob/main/Tampermonkey%20Script/icon128.png
// @grant        none
// @license      MIT
// @run-at       document_idle
// @match        http://armory.korabli.su/*
// @match        https://armory.korabli.su/*
// @match        http://clans.korabli.su/*
// @match        https://clans.korabli.su/*
// @match        http://dockyard.korabli.su/*
// @match        https://dockyard.korabli.su/*
// @match        http://friends.korabli.su/*
// @match        https://friends.korabli.su/*
// @match        http://profile.korabli.su/*
// @match        https://profile.korabli.su/*
// @match        http://warehouse.korabli.su/*
// @match        https://warehouse.korabli.su/*
// 代码-框架
// @require      https://update.greasyfork.org/scripts/529413/1551061/%E6%88%98%E8%88%B0%E4%B8%96%E7%95%8C%E8%8E%B1%E6%9C%8D%E7%BD%91%E9%A1%B5%E6%B1%89%E5%8C%96-%E4%BB%A3%E7%A0%81-%E6%A1%86%E6%9E%B6.js
// 资源-兵工厂翻译
// @require      https://update.greasyfork.org/scripts/529395/1550983/%E6%88%98%E8%88%B0%E4%B8%96%E7%95%8C%E8%8E%B1%E6%9C%8D%E7%BD%91%E9%A1%B5%E6%B1%89%E5%8C%96-%E8%B5%84%E6%BA%90-%E5%85%B5%E5%B7%A5%E5%8E%82%E7%BF%BB%E8%AF%91.js
// 资源-军团翻译
// @require      https://update.greasyfork.org/scripts/529397/1550989/%E6%88%98%E8%88%B0%E4%B8%96%E7%95%8C%E8%8E%B1%E6%9C%8D%E7%BD%91%E9%A1%B5%E6%B1%89%E5%8C%96-%E8%B5%84%E6%BA%90-%E5%86%9B%E5%9B%A2%E7%BF%BB%E8%AF%91.js
// 资源-造船厂翻译
// @require      https://update.greasyfork.org/scripts/529398/1550991/%E6%88%98%E8%88%B0%E4%B8%96%E7%95%8C%E8%8E%B1%E6%9C%8D%E7%BD%91%E9%A1%B5%E6%B1%89%E5%8C%96-%E8%B5%84%E6%BA%90-%E9%80%A0%E8%88%B9%E5%8E%82%E7%BF%BB%E8%AF%91.js
// 资源-征募站翻译
// @require      https://update.greasyfork.org/scripts/529402/1551011/%E6%88%98%E8%88%B0%E4%B8%96%E7%95%8C%E8%8E%B1%E6%9C%8D%E7%BD%91%E9%A1%B5%E6%B1%89%E5%8C%96-%E8%B5%84%E6%BA%90-%E5%BE%81%E5%8B%9F%E7%AB%99%E7%BF%BB%E8%AF%91.js
// 资源-账号档案翻译
// @require      https://update.greasyfork.org/scripts/529405/1551022/%E6%88%98%E8%88%B0%E4%B8%96%E7%95%8C%E8%8E%B1%E6%9C%8D%E7%BD%91%E9%A1%B5%E6%B1%89%E5%8C%96-%E8%B5%84%E6%BA%90-%E8%B4%A6%E5%8F%B7%E6%A1%A3%E6%A1%88%E7%BF%BB%E8%AF%91.js
// 资源-仓库翻译
// @require      https://update.greasyfork.org/scripts/529406/1551020/%E6%88%98%E8%88%B0%E4%B8%96%E7%95%8C%E8%8E%B1%E6%9C%8D%E7%BD%91%E9%A1%B5%E6%B1%89%E5%8C%96-%E8%B5%84%E6%BA%90-%E4%BB%93%E5%BA%93%E7%BF%BB%E8%AF%91.js
// ==/UserScript==
(function() {
'use strict';
// Your code here...
if(!window.__localizer__)
{
window.__localizer__ = {};
}
if(!window.__localizer__.localizer_framework_loaded)
{
window.__localizer__.localizer_framework_loaded = true;
window.__localizer__.localizer_mode = { mode: "Polling", interval: 500 };
window.__localizer__.localizer_Debug = { showPerformanceData: false, showMutationTargetClassName: false };
window.__localizer__.localizer_Debug_Execute_Start_Time = 0;
window.__localizer__.localizer_Observe_ClassName_Now = "";
window.__localizer__.localizer_Observe_ClassName_Set = new Set();
window.__localizer__.localizer_MutationObserver_Config = { childList: true, subtree: true };
window.__localizer__.localizer_Pass_Element_Id_Set = new Set();
window.__localizer__.localizer_Pass_Element_ClassName_Set = new Set();
window.__localizer__.localizer_Detect_Elements_CssSelector_Set = new Set();
window.__localizer__.localizer_Detect_Elements_Override_Map = new Map();
window.__localizer__.localizer_Detect_Elements_Replace_Map = new Map();
window.__localizer__.localizer_Observe_ClassName_Set.add("navalBase");
window.__localizer__.localizer_Observe_ClassName_Set.add("tasks");
window.__localizer__.localizer_Observe_ClassName_Set.add("members");
window.__localizer__.localizer_Observe_ClassName_Set.add("search");
window.__localizer__.localizer_Observe_ClassName_Set.add("new-recommendations");
window.__localizer__.localizer_Observe_ClassName_Set.add("treasury");
window.__localizer__.localizer_Observe_ClassName_Set.add("clan-wars");
window.__localizer__.localizer_Pass_Element_Id_Set.add("app");
window.__localizer__.localizer_Pass_Element_Id_Set.add("wows-react-tooltip-body");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("wru__Tooltip__header");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("clan-wars");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("TotalBalance_wrapper_1sZcM");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("History_noTransactionsWrapper_2q7z-");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("we-asset__text we-widget__text");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("ViewClanStars_wrapper_18UHq");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("ViewTreasury_tabContent_2MpE4");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("ViewClanBattles_wrapper_1uPSF");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("ViewClanWars_blurable_GNk-j ");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("MyWarTab_content_1d_Lf");
window.__localizer__.localizer_Pass_Element_ClassName_Set.add(
"wru__Menu__toggle wru__Menu__isActive"
);
window.__localizer__.localizer_Pass_Element_ClassName_Set.add("LanguagesDialog_error_zZskG");
window.__localizer__.Localizer_Init = function () {
window.__localizer__.detect_elements.forEach((value, index, set) => {
let cssSelector = value[0];
let arg = value[1];
if (!cssSelector || !arg) return;
window.__localizer__.localizer_Detect_Elements_CssSelector_Set.add(cssSelector);
if (!arg.isReplace) {
let element_arg_list =
window.__localizer__.localizer_Detect_Elements_Override_Map.get(cssSelector);
if (!element_arg_list) {
window.__localizer__.localizer_Detect_Elements_Override_Map.set(cssSelector, new Set());
window.__localizer__.localizer_Detect_Elements_Override_Map.get(cssSelector).add(arg);
} else {
element_arg_list.add(arg);
}
} else {
let element_arg_list =
window.__localizer__.localizer_Detect_Elements_Replace_Map.get(cssSelector);
if (!element_arg_list) {
window.__localizer__.localizer_Detect_Elements_Replace_Map.set(cssSelector, new Set());
window.__localizer__.localizer_Detect_Elements_Replace_Map.get(cssSelector).add(arg);
} else {
element_arg_list.add(arg);
}
}
});
if(window.__localizer__.localizer_mode.mode === "Event")
{
window.__localizer__.Localizer_Start_Event_Mode();
}
else if(window.__localizer__.localizer_mode.mode === "Polling")
{
window.__localizer__.Localizer_Start_Polling_Mode();
}
};
window.__localizer__.Localizer_Start_Event_Mode = function() {
if(window.__localizer_Event_Mode_Observing__)
{
window.__localizer__.localizer_mutationObserver.disconnect();
window.__localizer__.localizer_mutationObserver.observe(
document.getRootNode(),
window.__localizer__.localizer_MutationObserver_Config
);
window.__localizer_Event_Mode_Observing__ = true;
}
else
{
window.__localizer__.localizer_mutationObserver.observe(
document.getRootNode(),
window.__localizer__.localizer_MutationObserver_Config
);
window.__localizer_Event_Mode_Observing__ = true;
}
};
window.__localizer__.Localizer_Start_Polling_Mode = function() {
if(window.__localizer_Polling_Mode_Interval_Num__)
{
clearInterval(window.__localizer_Polling_Mode_Interval_Num__);
window.__localizer_Polling_Mode_Interval_Num__ = setInterval(window.__localizer__.Localizer_Work_Polling_Mode, window.__localizer__.localizer_mode.interval);
}
else
{
window.__localizer_Polling_Mode_Interval_Num__ = setInterval(window.__localizer__.Localizer_Work_Polling_Mode, window.__localizer__.localizer_mode.interval);
}
};
window.__localizer__.Localizer_Work_Event_Mode = function (mutationList, observer) {
if (window.__localizer__.localizer_Debug.showPerformanceData) { window.__localizer__.localizer_Debug_Execute_Start_Time = performance.now(); }
for (let mutation of mutationList) {
if (mutation.type !== "childList") continue;
if (
mutation.target.className !== window.__localizer__.localizer_Observe_ClassName_Now &&
window.__localizer__.localizer_Observe_ClassName_Set.has(mutation.target.className)
) {
observer.disconnect();
observer.observe(mutation.target, window.__localizer__.localizer_MutationObserver_Config);
return;
}
if (window.__localizer__.localizer_Debug.showMutationTargetClassName) console.log(mutation.target.className);
if (
!window.__localizer__.localizer_Pass_Element_Id_Set.has(mutation.target.id) &&
!window.__localizer__.localizer_Pass_Element_ClassName_Set.has(mutation.target.className)
)
return;
window.__localizer__.localizer_Detect_Elements_CssSelector_Set.forEach(
(cssSelector, index, set) => {
let targetElementsList = document.querySelectorAll(cssSelector);
targetElementsList.forEach((element, index, list) => {
if (!element.innerText) return;
let override_arg_list =
window.__localizer__.localizer_Detect_Elements_Override_Map.get(cssSelector);
if (override_arg_list) {
override_arg_list.forEach((arg, index, list) => {
var temp_translated_str = window.__localizer__.translation.get(
arg.isReplaceHTML ? element.innerHTML : element.innerText
);
if (!temp_translated_str) return;
if (arg.isReplaceHTML) {
if (element.innerHTML === temp_translated_str) return;
element.innerHTML = temp_translated_str;
} else {
if (element.innerText === temp_translated_str) return;
element.innerText = temp_translated_str;
}
});
}
let replace_arg_list =
window.__localizer__.localizer_Detect_Elements_Replace_Map.get(cssSelector);
if (replace_arg_list) {
replace_arg_list.forEach((arg, index, list) => {
if (arg.isReplace !== true) return;
var temp_translated_str = arg.isReplaceHTML
? element.innerHTML
: element.innerText;
arg.translation.forEach((value, index, array) => {
temp_translated_str = temp_translated_str.replaceAll(
value[0],
value[1]
);
});
if (arg.isReplaceHTML) {
if (element.innerHTML === temp_translated_str) return;
element.innerHTML = temp_translated_str;
} else {
if (element.innerText === temp_translated_str) return;
element.innerText = temp_translated_str;
}
});
}
});
}
);
}
if (window.__localizer__.localizer_Debug.showPerformanceData) { console.log(`Localizer Work Time: ${ (performance.now() - window.__localizer__.localizer_Debug_Execute_Start_Time).toFixed(2)} ms`); }
};
window.__localizer__.Localizer_Work_Polling_Mode = function () {
if (window.__localizer__.localizer_Debug.showPerformanceData) { window.__localizer__.localizer_Debug_Execute_Start_Time = performance.now(); }
window.__localizer__.localizer_Detect_Elements_CssSelector_Set.forEach(
(cssSelector, index, set) => {
let targetElementsList = document.querySelectorAll(cssSelector);
targetElementsList.forEach((element, index, list) => {
if (!element.innerText) return;
let override_arg_list =
window.__localizer__.localizer_Detect_Elements_Override_Map.get(cssSelector);
if (override_arg_list) {
override_arg_list.forEach((arg, index, list) => {
var temp_translated_str = window.__localizer__.translation.get(
arg.isReplaceHTML ? element.innerHTML : element.innerText
);
if (!temp_translated_str) return;
if (arg.isReplaceHTML) {
if (element.innerHTML === temp_translated_str) return;
element.innerHTML = temp_translated_str;
} else {
if (element.innerText === temp_translated_str) return;
element.innerText = temp_translated_str;
}
});
}
let replace_arg_list =
window.__localizer__.localizer_Detect_Elements_Replace_Map.get(cssSelector);
if (replace_arg_list) {
replace_arg_list.forEach((arg, index, list) => {
if (arg.isReplace !== true) return;
var temp_translated_str = arg.isReplaceHTML
? element.innerHTML
: element.innerText;
arg.translation.forEach((value, index, array) => {
temp_translated_str = temp_translated_str.replaceAll(
value[0],
value[1]
);
});
if (arg.isReplaceHTML) {
if (element.innerHTML === temp_translated_str) return;
element.innerHTML = temp_translated_str;
} else {
if (element.innerText === temp_translated_str) return;
element.innerText = temp_translated_str;
}
});
}
});
}
);
if (window.__localizer__.localizer_Debug.showPerformanceData) { console.log(`Localizer Work Time: ${ (performance.now() - window.__localizer__.localizer_Debug_Execute_Start_Time).toFixed(2)} ms`); }
};
window.__localizer__.localizer_mutationObserver = new MutationObserver(
(mutationList, observer) => {
setTimeout(() => {
window.__localizer__.Localizer_Work_Event_Mode(mutationList, observer);
}, 100);
}
);
window.__localizer__.detect_elements = new Set();
window.__localizer__.translation = new Map();
}
})();