PTCG-SIM汉化

宝可梦卡牌模拟器PTCG-SIM(https://ptcgsim.online)的简单汉化工具

// ==UserScript==
// @name        PTCG-SIM汉化
// @match       *://*ptcgsim.online/*
// @grant       none
// @version     1.3.5
// @author      akatsukikyoko
// @description 宝可梦卡牌模拟器PTCG-SIM(https://ptcgsim.online)的简单汉化工具
// @license MIT
// @namespace Violentmonkey Scripts
// ==/UserScript==

  var allNodes = document.body.querySelectorAll('*')

  var allNodeArr = Array.from(allNodes)

  var textObj = {

    //功能
    "Attack": "招式",
    "Pass": "跳过",
    "Set Up": "开始",
    "Reset": "重开",
    "Set Up Both": "双方开始",
    "Reset Both": "双方重开",
    "+Turn":"+回合",
    "Coin":"硬币",
    "Options":"设置",
    "Online Multiplayer Mode":"在线多人模式",
    "Generate":"建房",
    " Join Room ":"加入房间",
    "Import":"导入",
    "Settings":"设置",
    "Dark mode":"深色模式",
    "Hide containers":"隐藏分区",
    "Watch Tutorial":"查看教程",
    "Upload File":"文件上传",
    "Change Card Back":"更换卡背",
    //介绍文本
    "Welcome to PTCG-sim!":"欢迎来到PTCG-sim!",
    //说明
    "Move card...":"移动卡牌",
    "to Hand ":"到手牌",
    "to Discard ":"到弃牌区",
    "to Bench ":"到备战区",
    "to Active ":"到战斗场",
    "to Stadium ":"到竞技场",
    "to Lost Zone ":"到放逐区",
    "to Prizes ":"到奖赏卡区",
    "to Board ":"到展示区",
    "to Deck (top) ":"到牌库(顶端)",
    "to Deck (bottom) ":"到牌库(底)",
    "to Deck (switch) ":"到牌库(任意)",
    "to Deck (shuffle)":"到牌库(洗牌)",
    "Shuffle deck":"洗切牌库",
    "View top card(s)":"看牌库顶",
    "View bottom card(s)":"看牌库底",
    "View":"查看",
    "Hand":"手牌",
    "Discard hand":"丢弃手牌",
    "Shuffle hand into deck ":"洗回牌库",
    "Shuffle hand to bottom ":"洗切手牌并放到牌库底",
    "Playboard":"玩家展示区",
    "Discard all":"丢弃全部",
    "Move all to hand":"全部加入手牌",
    "Shuffle all into deck":"全部洗回牌库",
    "Card actions":"卡牌操作",
    "Attach ":"附加",
    "Evolve ":"进化",
    "View ":"查看",
    "Toggle ability/Use stadium":"发动特性/使用竞技场",
    "Damage counter":"伤害指示物",
    "Increase ":"增加",
    "Decrease ":"减少",
    "Remove ":"移除",
    "Special condition":"特殊状态",
    "Add/Toggle":"增加/标记",
    "Remoce":"移除",
    "Rotate card(s)":"旋转卡片",
    "Rotate Pokémon BREAK ":"旋转宝可梦BREAK",
    "Look/cover card (only yourself)":"查看/覆盖卡牌(只有自己)",
    "Hide card (both players)":"覆盖卡牌(双方都看不到)",
    "Reveal card (both players)":"翻开卡牌(双方)",
    "Put face-down card in active":"将卡牌反面朝上移入战斗场",
    "Change type...":"改变类型",
    "to Tool ":"为道具",
    "to Energy ":"为能量",
    "to Pokémon ":"为宝可梦",
    "General ":"通用",
    "Set up ":"开始",
    "Reset ":"重开",
    "Start turn ":"回合开始",
    "Flip coin ":"硬币",
    "Flip board ":"换向",
    "Announce mulligan ":"重抽(开始阶段无基础)",
    "Close popups ":"关闭弹窗",
    "Toggle ability/effect":"使用特性/效果",
    "Reveal/hide card":"翻开/盖住卡牌",
    //二级菜单
    "Clear battle log":"清理战斗记录",
    "Export battle log":"导出战斗记录",
    "Confirm":"确认",
    "Undo":"撤销",
    "Cancel":"取消",
    "Save":"保存",
    "Shuffle deck":"洗牌",
    "Draw card(s)":"摸牌(复数)",
    "View top card(s)":"查看牌库顶的牌(复数)",
    "View bottom card(s)":"查看牌库底的牌(复数)",
    "Move card... ":"移动卡牌...",
    "to Hand":"到手牌",
    "to Discard":"到弃牌区",
    "to Bench":"到备战区",
    "to Active":"到战斗场",
    "to Stadium":"到竞技场",
    "to Lost Zone":"到放逐区",
    "to Prizes":"到奖赏卡区",
    "to Board":"到展示区",
    "to Deck (top)":"到牌库(顶端)",
    "to Deck (bottom)":"到牌库(底)",
    "to Deck (switch)":"到牌库(任意)",
    "to Deck (shuffle)":"到牌库(洗牌)",
    "Change type...\n":"改变类型",
    "to Energy":"能量",
    "to Tool":"道具",
    "to Pokémon":"宝可梦",
    "Hand":"手牌",
    "Prizes":"奖赏卡",
    "Deck":"牌库",
    "Playboard":"展示区",
    "Toggle ability/effect":"标记特性/效果使用",
    "Damage counter":"伤害指示物",
    "Shuffle prizes":"洗切奖赏卡",
    "Reveal/hide prizes":"展示/隐藏奖赏卡",
    "Look/cover prizes":"查看/盖上奖赏卡(自己)",
    "Move card...":"移动卡牌...",
    "Discard hand":"丢弃手牌",
    "Shuffle hand into deck":"手牌洗入牌库",
    "Shuffle hand to bottom":"手牌洗入牌堆底",
    "Reveal/hide hand":"展示/隐藏手牌",
    "Reveal/hide random card":"展示/隐藏随机卡牌",
    "Special condition":"特殊状态",
    "Add/Toggle ":"增加标记",
    "Rotate BREAK ":"旋转BREAK",
    "Undo ":"撤销",


    //Other
    "Shuffle":"洗牌",
    "Close":"关闭",
    "Shuffle all to Deck":"全部洗回牌库",
    "Sort":"排序",
    "Discard all":"全部丢弃",
    "Shuffle all":"全部洗回牌库",
    "Lost Zone all":"全部放逐",
    'Shuffle to bottom':'洗入牌堆底',
    "To Hand":"加入手牌",
    "Leave in play":"退出",
    "Looking at cards...":"查看卡牌",
    "Move attached cards":"移动附上的卡牌",
    "Alt (1P only)":"单人模式对手卡组",
    "Main":"主卡组",
    "Spectator mode":"观战模式",
    "Hide opponent's hand (1P mode)":"隐藏1p玩家手牌(1p模式)",

  }

  let chatboxContent;
  let chatboxContent_group;
  let intervalId = setInterval(function() {
    try{
    chatboxContent_group = document.querySelectorAll('p.self-text, p.announcement, p.opp-text');
    //console.log(chatboxContent_group);
    for (let i=0;i<chatboxContent_group.length;i++){
      if(i>chatboxContent_group.length-15){
        chatboxContent=chatboxContent_group[i].innerText;
        //简介
        chatboxContent = chatboxContent.replace('PTCG-sim is an', ' PTCG-sim是一个');
        chatboxContent = chatboxContent.replace('open-source', '开源');
        chatboxContent = chatboxContent.replace(' tool to simulate card games. It supports single player and online multiplayer.', '的卡牌游戏模拟工具,它支持单人模式或双人在线模式');
        chatboxContent = chatboxContent.replace('Import your decklist by clicking the “Import” tab above, then press “Set Up” to start a game.', '用 导入 菜单导入你的卡组,然后按 开始 来开始游戏');
        chatboxContent = chatboxContent.replace('Drag or use keybinds (hold ', ' 长按');
        chatboxContent = chatboxContent.replace(') to move cards. Happy testing!', '确认移动卡牌的快捷键,祝您测试愉快');

        //翻译
        chatboxContent = chatboxContent.replace(/ put/g, ' 将');
        chatboxContent = chatboxContent.replace(/ lost-zoned/g, ' 放逐了');
        chatboxContent = chatboxContent.replace(/ moved/g, ' 移动');
        chatboxContent = chatboxContent.replace(/ move/g, '  移动');
        chatboxContent = chatboxContent.replace(/ tails/g, ' 反面');
        chatboxContent = chatboxContent.replace(/ heads/g, ' 正面');
        chatboxContent = chatboxContent.replace(/ flipped/g, ' 投出了');
        chatboxContent = chatboxContent.replace(/ attacked/g, ' 使用招式');
        chatboxContent = chatboxContent.replace(/ passed/g, ' 回合结束');
        chatboxContent = chatboxContent.replace(/ deck/g, ' 牌库');
        chatboxContent = chatboxContent.replace(/ discard/g, ' 弃牌区');
        chatboxContent = chatboxContent.replace(/ stadium/g, ' 竞技场');
        chatboxContent = chatboxContent.replace(/ hand/g, ' 手牌');
        chatboxContent = chatboxContent.replace(/ in to/g, ' 到');
        chatboxContent = chatboxContent.replace(/ card(s)/g, ' 卡牌');
        chatboxContent = chatboxContent.replace(/ stopped/g, ' 停止');
        chatboxContent = chatboxContent.replace(/ card/g, ' 卡牌');
        chatboxContent = chatboxContent.replace(/ shuffled /g, ' 洗切');
        chatboxContent = chatboxContent.replace(/ lost zone/g, ' 放逐区');
        chatboxContent = chatboxContent.replace(/ prizes/g, ' 奖赏卡');
        chatboxContent = chatboxContent.replace(/ bench/g, ' 备战区');
        chatboxContent = chatboxContent.replace(/ board/g, ' 展示区');
        chatboxContent = chatboxContent.replace(/ drew for turn/g, ' 回合开始抽牌');
        chatboxContent = chatboxContent.replace(/ attached/g, ' 附上');
        chatboxContent = chatboxContent.replace(/ looked at /g, ' 查看了');
        chatboxContent = chatboxContent.replace(/ of /g, '');
        chatboxContent = chatboxContent.replace(/ card /g, ' 卡牌');
        chatboxContent = chatboxContent.replace(/ top /g, ' 在上方的');
        chatboxContent = chatboxContent.replace(/ in to /g, ' 加入');
        chatboxContent = chatboxContent.replace(/ setup/g, ' 开始');
        chatboxContent = chatboxContent.replace(/ hid /g, ' 隐藏了');
        chatboxContent = chatboxContent.replace(/ evolved/g, ' 进化');
        chatboxContent = chatboxContent.replace(/ drew/g, ' 抽');
        chatboxContent = chatboxContent.replace(/ bottom/g, ' 底下');
        chatboxContent = chatboxContent.replace(/ and/g, ' 并');
        chatboxContent = chatboxContent.replace(/ their/g, ' 他的');
        chatboxContent = chatboxContent.replace(/ used/g, ' 使用了');
        chatboxContent = chatboxContent.replace(/ ability/g, ' 特性');
        chatboxContent = chatboxContent.replace(/ into/g, ' 到');
        chatboxContent = chatboxContent.replace(/ revealed /g, ' 翻开');
        chatboxContent = chatboxContent.replace(/ in /g, ' 在');
        chatboxContent = chatboxContent.replace(/Blue /g, '蓝色方 ');
        chatboxContent = chatboxContent.replace(/Red /g, '红色方 ');
        chatboxContent = chatboxContent.replace(/ active/g, ' 战斗场');
        chatboxContent = chatboxContent.replace(/ to /g, '->');
        chatboxContent = chatboxContent.replace(/ took back /g, ' 撤回了 ');
        chatboxContent = chatboxContent.replace(/ last /g, ' 最后的 ');
        chatboxContent = chatboxContent.replace(/ imported/g, ' 导入了');
        chatboxContent = chatboxContent.replace(/ has no more /g, ' 没有更多的');
        chatboxContent = chatboxContent.replace(/ has an invalid /g, ' 无效');
        chatboxContent = chatboxContent.replace(/ is looking through/g, ' 在查看');
        chatboxContent = chatboxContent.replace(/ looking at/g, ' 查看');
        chatboxContent = chatboxContent.replace('from', ' | ');


        //二次润色
        chatboxContent = chatboxContent.replace(' 卡牌(s)', ' 张卡牌');
        chatboxContent = chatboxContent.replace(' 弃牌区ed', ' 丢弃了');
        chatboxContent = chatboxContent.replace('卡牌牌库', ' 牌库中的卡牌');
        chatboxContent = chatboxContent.replace('Blue的', '蓝色方的');
        chatboxContent = chatboxContent.replace('Red的', '红色方的');
        chatboxContent = chatboxContent.replace(' starting', ' 起始的');
        chatboxContent = chatboxContent.replace(' set', ' 设置');
        chatboxContent = chatboxContent.replace('底下牌库', '牌库底');
        chatboxContent = chatboxContent.replace('top ', '顶端的 ');
        chatboxContent = chatboxContent.replace('bottom ', '底端的 ');
        chatboxContent = chatboxContent.replace("'s", ' 的');
        chatboxContent = chatboxContent.replace('附上 张卡牌', '张附加的卡片');
        chatboxContent = chatboxContent.replace('洗切prizes', '洗切奖赏卡');

        chatboxContent_group[i].innerText = chatboxContent;
        }
    }
    }catch (error) {
         console.error('Error occurred while monitoring chatbox content:', error);
    }
  }, 2000); // 每2秒执行一次

  var excutNode = ['IMG','BR','HR','FORM','SELECT','OPTION','INPUT','SCRIPT','STYLE','ts']

  console.time('translate')
  allNodeArr.forEach(item=>{
      if (item.childNodes && !excutNode.includes(item.nodeName)) {
          item.childNodes.forEach(item => {
              if(item.nodeName === '#text'){
                  var text = textObj[item.data]
                  if(text){
                      item.data = text
                  }

              }
          })
      }
  })
console.timeEnd('translate');
try{
const settingsTogglesElement = document.getElementById('settingsToggles');
const linkElement = document.createElement('a');
linkElement.href = 'http://himesakazone.cc:4600/deck';
linkElement.textContent = '一键导入繁中、日版卡组'; // 你可以自定义这里的文本
// 将超链接添加到settingsTogglesElement中
settingsTogglesElement.appendChild(linkElement);
}catch{
}