Skip to content

Instantly share code, notes, and snippets.

@Arathi
Last active January 7, 2019 09:09
Show Gist options
  • Save Arathi/5c7b33cc07a938c75b4fc090edd5078b to your computer and use it in GitHub Desktop.
Save Arathi/5c7b33cc07a938c75b4fc090edd5078b to your computer and use it in GitHub Desktop.
Wicurio的FGO Wiki翻译
// ==UserScript==
// @name Wicurio的FGO Wiki翻译
// @namespace http://fgoutils.undsf.com/
// @version 0.0.4
// @description 替换Wicurio的Wiki上的各种从者、怪物名称为中文
// @author Arathi of Nebnizlla
// @match https://grand_order.wicurio.com/index.php?*
// @grant none
// ==/UserScript==
function loadDictionary() {
let json = {
"キメラ": "奇美拉",
"ホワイトキメラ": "白色奇美拉",
"女海賊": "女海盗",
"アマゾネス": "亚马逊人",
"アマゾネスリーダー": "亚马逊队长",
"飼育されている獣": "被饲育的兽",
"飼われている獣": "被豢养的兽",
"ワイバーン": "双足飞龙",
"ワイバーンドレッド": "恐惧飞龙",
"ワイバーンエビル": "恶魔飞龙",
"ゴーレム": "魔偶",
"ストーンゴーレム": "石魔偶",
"アイアンゴーレム": "金属魔偶",
"スプリガン": "守护者",
"ソウルイーター": "噬魂者",
"ラミア": "蛇女",
"ナーガ": "那伽",
"ヒュドラ": "许德拉",
"舞い踊る平目": "舞动的比目鱼",
"魔猪": "X",
"巨大魔猪": "X",
"翅刃虫": "X",
"翅刃群虫": "X",
"酷吏": "X",
"アストルフォ": "阿斯托尔福",
"デオン": "迪昂",
"レジスタンスのライダー": "反抗军的Rider",
"ダユー": "达尤",
"海賊公女ダユー": "海盗公女达尤",
"不夜城のアサシン": "不夜城的Assassin",
"不夜城のキャスター": "不夜城的Caster",
"シェヘラザード": "山鲁佐德",
"メガロス": "巨英雄",
"エルドラドのバーサーカー": "黄金国的Berserker",
"ペンテシレイア": "彭忒西勒亚",
"コロンブス": "哥伦布",
"魔神フェニクス": "魔神菲尼克斯",
};
let dict = new Map();
for (let key of Object.keys(json))
{
dict.set(key, json[key]);
}
return dict;
}
function translateMonsterNames(nameDict) {
'use strict';
let $ = window.jQuery;
let tdElements = $("table.style_table.table_align_center tr td.style_td br.spacer").parent();
let transNotYetNames = {};
let patternMonsterInfo = /^(.*?)([A-Z]{0,1})[\s]{0,1}(Lv(\d+)){0,1}[\s]{0,1}\((.*):([\d,]+)\)$/;
tdElements.each(function(index, value){
// 不替换超链接
let tagName = value.firstElementChild.tagName;
if (tagName == 'A') return;
// 正则表达式匹配
let content = value.textContent;
let matcher = patternMonsterInfo.exec(content);
if (matcher) {
let name = matcher[1];
let suffix = matcher[2];
if (nameDict.has(name)) {
let cnName = nameDict.get(name);
if (cnName != "________" && cnName != "X") {
let html = value.innerHTML.replace(name + suffix, cnName + suffix);
value.innerHTML = html;
}
}
else {
transNotYetNames[name] = "________";
}
}
});
console.log("发现未翻译怪物名称" + Object.keys(transNotYetNames).length + "个,如下:");
console.log(JSON.stringify(transNotYetNames));
}
function translateServantNames(nameDict) {
'use strict';
let $ = window.jQuery;
let linkElements = $("tr td.style_td a[href][title]");
linkElements.each(function(index, value) {
let name = value.innerText;
if (nameDict.has(name)) {
let cnName = nameDict.get(name);
if (cnName != "________" && cnName != "X") {
let html = value.innerHTML.replace(name, cnName);
value.innerHTML = html;
}
}
});
}
(function() {
let nameDict = loadDictionary();
translateMonsterNames(nameDict);
translateServantNames(nameDict);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment