汉化duckyci.com

汉化界面的部分菜单及内容

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        汉化duckyci.com
// @namespace   Violentmonkey Scripts
// @match       https://*.duckyci.com/*
// @version     1.0
// @author      -
// @description 汉化界面的部分菜单及内容
// @grant       none
// @author       sec
// @license MIT
// @namespace    https://t.me/KingRan_qun
// ==/UserScript==



(function() {
    'use strict';

    const i18n = new Map([

['Free', '免费'],
['Donate', '捐赠'],
['Paid', '付费'],
['Capacity', '容量'],

['Telegram', '电报'],
['Contact', '联系我们'],
['Report Abuse', '举报滥用'],
['Account', '账户'],
['Login', '登录'],
['Register', '注册'],
['VPS comes with 共享 IPv4 and Dedicated IPv6', 'VPS 附带共享 IPv4 和专用 IPv6'],
['CREATE VPS', '创建 VPS'],
['Name', '名称'],
['Point', '点'],
['Detail', '详细内容'],
['On-demand', '按需'],
['Preemptible', '可抢占'],
['Price', '价格'],
 ['Refresh', '刷新'],
 ['Show', '显示'],
['Running', '运行'],
['Stopped', '停止运行'],
['Pending', '待处理'],
['Other', '其他'],
['System Load', '系统负载'],
['Cpu Usage', 'CPU 使用率'],

['Compute Status', '计算状态'],
['Issue', '问题'],
['Our Cloud Infrastructure in US - Sanjose ', '我们在美国 Sanjose 的云计算基础设施 '],
['US - Sanjose', '美国 - Sanjose'],
['experienced service outage', '出现服务中断'],
['users may not be able to use compute service in this', '用户可能无法使用该数据中心的计算服务。'],
['datacenter', '数据中心'],
['We apologize for any inconvenience and are working hard to fix it. ', '我们对造成的不便深表歉意,并正在努力修复。'],
['Please follow the channel for more notifications', '请关注该频道以获取更多通知'],
['You are using a Always 免费 账户', '您正在使用 Always 账户 免费'],
['To upgrade to a paid account, pay ', '要升级到付费帐户,请支付 0.5 美元或更多'],
['Recharge', '充值'],
['Amount ', '金额 '],
['The payment amount must be a multiple of ', '支付金额必须是 0.5 美元的倍数'],
['and the maximum amount is', '最高金额为 20 美元'],
['Method', '使用方法'],
['Always 免费 Resources', '始终免费 资源'],
['付费 Resources', '付费资源'],
['Limit', '限制'],
['Used', '已使用'],
['Remain', '剩余'],
['Note', '备注'],



['Database Cluster', '数据库集群'],
      ['instances are good for full-duty workloads where consistent performance is important.', '实例适合对性能要求较高的全负荷工作。'],








      ['with your bank or credit card.', '.'],

    ])

    replaceText(document.body)
//   |
//  ₘₙⁿ
// ▏n
// █▏ 、⺍             所以,不要停下來啊(指加入词条
// █▏ ⺰ʷʷィ
// █◣▄██◣
// ◥██████▋
//  ◥████ █▎
//   ███▉ █▎
//  ◢████◣⌠ₘ℩
//   ██◥█◣\≫
//   ██ ◥█◣
//   █▉  █▊
//   █▊  █▊
//   █▊  █▋
//    █▏  █▙
//    █ ​
    const bodyObserver = new MutationObserver(mutations => {
      mutations.forEach(mutation => {
        mutation.addedNodes.forEach(addedNode => replaceText(addedNode))
      })
    })
    bodyObserver.observe(document.body, { childList: true, subtree: true })

    function replaceText(node) {
      nodeForEach(node).forEach(htmlnode => {
        i18n.forEach((value, index) => {
          // includes可直接使用 === 以提高匹配精度
          const textReg = new RegExp(index, 'g')
          if (htmlnode instanceof Text && htmlnode.nodeValue.includes(index))
            htmlnode.nodeValue = htmlnode.nodeValue.replace(textReg, value)
          else if (htmlnode instanceof HTMLInputElement && htmlnode.value.includes(index))
            htmlnode.value = htmlnode.value.replace(textReg, value)
        })
      })
    }

    function nodeForEach(node) {
      const list = []
      if (node.childNodes.length === 0) list.push(node)
      else {
        node.childNodes.forEach(child => {
          if (child.childNodes.length === 0) list.push(child)
          else list.push(...nodeForEach(child))
        })
      }
      return list
    }
})();