// ==UserScript== // @name Yagi Sim Auto Translater // @version 2021.06.05 // @description Yagi Sim 自动翻译 // @author 幸运的咸鱼 // @match http://yagi7mazu.webcrow.jp/compas-deck/ // @namespace https://greasyfork.org/users/757656 // @downloadURL none // ==/UserScript== //Auto translator for //やぎシミュ【戦闘摂理解析システム #コンパス マルチシミュレーター】 //Yagi Sim【战斗天赋解析系统 #COMPASS 多功能模拟器】 var replaceArry = [ //长句翻译 [/通常攻撃の射程が長い順/gi,'按正常射程排行'], [/通常の移動速度が早い順/gi,'按正常移动速度排序'], [/最大拡張ポータルでの蓄積時間/gi,'在最大扩张的据点上的积攒时间'], [/保存されたデッキが一覧で表示されます/gi,'已保存的卡组会显示在列表中'], [/記録しといたわ!/gi,'记录下来了!'], [/卡牌合わせ反射チェッカー/gi,'卡牌猜拳反应测试'], [/カノーネ設定:非破盾时でもアウト/gi,'反导炮设置:未破盾时也会被淘汰'], [/相手のデッキは設定したものをランダムで使う/gi,'对方的牌组是随机设置的'], [/カードを使うと0.5秒全てのカードが使えなくなる/gi,'当使用一张卡后,所有的卡都会在0.5秒内无法使用'], [/一度使ったカードは他のカードを使わないと使えなくなる/gi,'一旦你使用了一张卡,在你使用另一张卡之前,你不能再使用它'], [/全カードは3秒で効果が切れる/gi,'所有的卡都会在3秒内失效'], [/やぎシャドウは使っても何も起こらない/gi,'使用远毒的话,什么事都不会发生'], [/チェック開始/gi,'测试开始'], //这里是英雄,按网页顺序排列 [/十文字アタリ/gi,'十文字 雅达利'], [/ジャスティス ハンコック/gi,'正义 汉考克'], [/リリカ/gi,'莉莉卡'], [/双挽乃保/gi,'双挽乃保'], [/桜華忠臣/gi,'樱华忠臣'], [/ジャンヌ ダルク/gi,'圣女贞德'], [/マルコス/gi,'马尔克斯'], [/ルチアーノ/gi,'卢西安诺'], [/Voidoll/gi,'Voidoll'], [/ボイドール/gi,'Voidoll'], [/深川まとい/gi,'深川缠'], [/ソル=バッドガイ/gi,'索尔=巴得凯'], [/ディズィー/gi,'蒂姬'], [/グスタフ ハイドリヒ/gi,'古斯塔夫 海德里希'], [/ニコラ テスラ/gi,'尼古拉 特斯拉'], [/ミク/gi,'初音未来'], [/ヴィオレッタ ノワール/gi,'薇欧莉特 诺瓦露'], [/コクリコット ブランシュ/gi,'可可莉柯特 布兰琪'], [/リュウ/gi,'隆'], [/春麗/gi,'春丽'], [/マリア=S=レオンブルク/gi,'玛丽亚=S=莱昂布尔'], [/アダム=ユーリエフ/gi,'亚当=尤里耶夫'], [/サーティーン/gi,'13 Thirteen'], [/かけだし勇者/gi,'新手勇者'], [/エミリア/gi,'爱蜜莉雅'], [/レム/gi,'蕾姆'], [/カイ=キスク/gi,'Ky Kiske'], [/メグメグ/gi,'梅古梅古'], [/イスタカ/gi,'伊斯塔卡'], [/ザック/gi,'扎克'], [/レイチェル/gi,'瑞吉尔'], [/輝龍院きらら/gi,'辉龙院 绮罗'], [/モノクマ/gi,'黑白熊'], [/ポロロッチョ/gi,'维纳斯 波罗罗乔'], [/アクア/gi,'阿库娅'], [/めぐみん/gi,'惠惠'], [/ソーン=ユーリエフ/gi,'索恩=尤里耶夫'], [/リヴァイ/gi,'利威尔'], [/デビルミント鬼龍 デルミン/gi,'薄荷恶魔鬼龙 黛露敏'], [/トマス/gi,'托马斯'], [/猫宮ひなた/gi,'猫宫日向'], [/岡部 倫太郎/gi,'冈部伦太郎'], [/零夜/gi,'零夜'], [/セイバーオルタ/gi,'Saber Alter'], [/ギルガメッシュ/gi,'吉尔伽美什'], [/ルルカ/gi,'露露卡'], [/ピエール77世/gi,'皮埃尔77世'], [/佐藤四郎兵衛忠信/gi,'左藤四郎兵卫忠信'], [/アイズ・ヴァレンシュタイン/gi,'艾丝・华伦斯坦'], [/狐ヶ咲 甘色/gi,'狐咲甘色'], [/ノクティス/gi,'诺克提斯'], [/ニーズヘッグ/gi,'HM-WA100'], [/中島 敦/gi,'中岛敦'], [/芥川 龍之介/gi,'芥川龙之介'], [/ゲームバズーカガール/gi,'GBG'], [/ライザリン・シュタウト/gi,'莱莎琳·斯托特'], [/アリス/gi,'爱丽丝'], //GBG -> Game Bazooka Girl //HM-WA100 -> 尼德霍格 //加载页面 [/データ整形中/gi,'数据生成中'], //筛选 [/ソートのリセット/gi,'重置'], [/ソートの全解除/gi,'全不选'], [/カード/gi,'卡牌'], [/ランク/gi,'Rank'], [/コラボ/gi,'联动'], [/文豪ストレイドッグス/gi,'文豪野犬'], [/ファイナルファンタジー/gi,'最终幻想'], [/ダンまち/gi,'地错'], [/超歌舞伎×千本桜/gi,'超歌舞伎×千本樱'], [/進撃の巨人/gi,'进击的巨人'], [/この素晴らしい世界に祝福を/gi,'为美好的世界献上祝福'], [/ダンガンロンパ/gi,'弹丸论破'], [/殺戮の天使/gi,'杀戮天使'], [/鏡音リン・レン/gi,'镜音铃・连'], [/ギルティギア/gi,'罪恶装备'], [/Re:ゼロから始める異世界生活/gi,'Re:从零开始的异世界生活'], [/ストリートファイター/gi,'街头霸王'], [/ハッカドール/gi,'骇客娃娃'], [/ライザのアトリエ/gi,'莱莎的炼金工房'], //角色数据 [/キャラクター/gi,'角色'], [/キャラ/gi,'角色'], [/データ/gi,'数据'], [/タメ/gi,'蓄力'], [/ヒーロースキル/gi,'必杀技'], [/ヒーローアクション/gi,'蓄力技'], [/アビリティ/gi,'被动技'], [/マス/gi,'格'], [/ロール/gi,'英雄'], [/ランキング/gi,'排行'], [/デッキ/gi,'卡组'], [/デッキ/gi,'卡组'], [/ダッシュ/gi,'冲刺'], [/アタック/gi,'攻击'], [/プッシュ/gi,'推动'], [/ブラスト/gi,'爆炸'], [/放物線/gi,'抛物线'], [/リスポーン/gi,'复活'], [/タンク/gi,'盾职'], [/ダメージ/gi,'伤害'], [/ブレイク時/gi,'破盾时'], [/ガード/gi,'护盾'], [/ブレイク/gi,'破坏'], [/バフ/gi,'Buff'], [/キャンセル/gi,'取消'], [/ms単位/gi,'单位:毫秒'], [/クールタイム/gi,'冷却时间'], [/サイレント/gi,'沉默'], [/スタン/gi,'眩晕'], [/フラッシュ/gi,'闪光'], //卡牌详情 [/プッシュ/gi,'推动'], [/タイプ/gi,'类型'], [/ノックバック/gi,'击退'], [/ダウン/gi,'击倒'], [/カット/gi,'减少'], [/ランチ/gi,'发射'], [/吹き飛ばし/gi,'击飞'], [/打ち上げ/gi,'发射'], [/ポータル/gi,'据点'], [/エリア/gi,'领域'], [/ライフ/gi,'生命'], //作战简报部分,btw因为猜拳测试全部都是长句所以放在开头了 [/ブリーフィング設定/gi,'作战简报 设定'], [/ブリーフィングを開始します/gi,'开始 作战简报'], [/キャラクター選択/gi,'角色选择'], [/マップ選択/gi,'地图选择'], [/ストリート/gi,'街道'], [/スターパーク/gi,'绮丽星公园'], [/ケルパーズの散歩道/gi,'凯尔帕斯的散步道'], [/立体交差のある風景/gi,'魔幻森林'], [/ライブステージ/gi,'演唱会'], [/おいでやす鳥居通り/gi,'欢迎来到鸟居大道'], [/グレートウォール/gi,'长城'], [/つっぺる工事現場/gi,'危险的施工现场'], [/ちゅら島リゾート/gi,'美丽岛度假村'], [/東西たかさん広場/gi,'东西高塔广场'], [/モード切り替え/gi,'模式切换'], [/設定に戻る/gi,'返回设置'], [/アイコンモード/gi,'图标模式'], [/ベクトルモード/gi,'箭头模式'], //这块基本上没动,因为我根本没用过这玩意儿 [/ダメージカリキュレーター/gi,'伤害计算器'], [/チームレベル/gi,'Team level'], [/サイド/gi,'side'], [/チーム/gi,'team'], [/アニメーション計測/gi,'动画测量'], //这俩简直是毒瘤,什么词都能插进去,所以放在最后面 [/リン/gi,'镜音铃'], [/レン/gi,'镜音连'], ]; var numTerms = replaceArry.length; //-- 5 times/second; Plenty fast. var transTimer = setInterval (translateTermsOnPage, 222); function translateTermsOnPage () { /*--- Replace text on the page without busting links or javascript functionality. */ var txtWalker = document.createTreeWalker ( document.body, NodeFilter.SHOW_TEXT, { acceptNode: function (node) { //-- Skip whitespace-only nodes if (node.nodeValue.trim() ) { if (node.tmWasProcessed) return NodeFilter.FILTER_SKIP; else return NodeFilter.FILTER_ACCEPT; } return NodeFilter.FILTER_SKIP; } }, false ); var txtNode = null; while (txtNode = txtWalker.nextNode () ) { txtNode.nodeValue = replaceAllTerms (txtNode.nodeValue); txtNode.tmWasProcessed = true; } // //--- Now replace user-visible attributes. // var placeholderNodes = document.querySelectorAll ("[placeholder]"); replaceManyAttributeTexts (placeholderNodes, "placeholder"); var titleNodes = document.querySelectorAll ("[title]"); replaceManyAttributeTexts (titleNodes, "title"); } function replaceAllTerms (oldTxt) { for (var J = 0; J < numTerms; J++) { oldTxt = oldTxt.replace (replaceArry[J][0], replaceArry[J][1]); } return oldTxt; } function replaceManyAttributeTexts (nodeList, attributeName) { for (var J = nodeList.length - 1; J >= 0; --J) { var node = nodeList[J]; var oldText = node.getAttribute (attributeName); if (oldText) { oldText = replaceAllTerms (oldText); node.setAttribute (attributeName, oldText); } else throw "attributeName does not match nodeList in replaceManyAttributeTexts"; } }