Nautobot演示汉化

Nautobo演示汉化,过度汉化必然有坑,请勿用于正式用途

// ==UserScript==
// @name        Nautobot演示汉化
// @namespace   Violentmonkey Scripts
// @match       https://demo.nautobot.com/*
// @grant       none
// @version     0.0.7
// @author      -
// @description Nautobo演示汉化,过度汉化必然有坑,请勿用于正式用途
// @author      -
// @namespace
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    const i18n = new Map([


['Nautobot Demo','Nautobot 演示'], 
['Location Types','位置类型'], 
['Location Floor Plans','位置平面图'], 
['Racks','机架'], 
['Rack Groups','机架组'], 
['Reservations','保留'], 
['Elevations','立面图'], 
['Tenancy','租赁'], 
['Tenants','租户'], 
['Tenant Groups','租户组'], 
['Tags','标签'], 
['Statuses','状态'], 
['Roles','角色'], 
['Dynamic Groups','动态组'], 
['Devices','设备'], 
['Platforms','平台'], 
['Virtual Chassis','虚拟机箱'], 
['Device Redundancy Groups','设备冗余组'], 
['Interface Redundancy Groups','接口冗余组'], 
['Device Types','设备类型'], 
['Manufacturers','制造商'], 
['Cables','线缆'], 
['Console Connections','控制台连接'], 
['Power Connections','电源连接'], 
['Interface Connections','接口连接'], 
['Device Components','设备组件'], 
['Interfaces','接口'], 
['Front Ports','前端口'], 
['Rear Ports','后端口'], 
['Console Ports','Console端口'], 
['Console Server Ports','Console服务器端口'], 
['Power Ports','电源端口'], 
['Power Outlets','电源插座'], 
['Device Bays','设备托架'], 
['Inventory Items','清单项目'], 
['IPAM','IPAM'], 
['IP Addresses','IP 地址'], 
['IP Address Assignments','IP 地址分配'], 
['Prefixes','前缀'], 
['RIRs','RIR'], 
['VRFs','VRF'], 
['Namespaces','命名空间'], 
['Route Targets','路由目标'], 
['VLANs','VLAN'], 
['VLAN Groups','VLAN 组'], 
['Services','服务'], 
['BGP - Global','BGP - 全局'], 
['Autonomous Systems','自治系统'], 
['Peer Group Templates','对等组模板'], 
['BGP - Instances','BGP - 实例'], 
['Routing Instances','路由实例'], 
['Peer Groups','对等组'], 
['Peer Group Address-families','对等组地址族'], 
['BGP - Peerings','BGP - 对等'], 
['Peerings','对等端点'], 
['Peer Endpoint Address-families','对等端点地址族'], 
['Address-families','地址族'], 
['Virtualization','虚拟化'], 
['Virtual Machines','虚拟机'], 
['Cluster Types','群集类型'], 
['Cluster Groups','群集组'], 
['Circuits','网路'], 
['Circuit Types','网路类型'], 
['Providers','提供商'], 
['Provider Networks','提供商网络'], 
['Circuit Maintenance App','网路维护App'], 
['Dashboard','仪表板'], 
['Circuit Maintenances','网路维护'], 
['Notifications','通知'], 
['Notification Sources','通知源'], 
['Power Feeds','电源'], 
['Power Panels','电源面板'], 
['Power','电源'], 
['Device Lifecycle','设备生命周期'], 
['Hardware Notices','硬件注意事项'], 
['Software Lifecycle','软件生命周期'], 
['Software Image','软件镜像'], 
['Validated Software','已验证软件'], 
['CVE','CVE'], 
['Vulnerability','漏洞'], 
['Contracts','合同'], 
['Vendors','供应商'], 
['POC','POC'], 
['Device Software Validation - Report','设备软件验证 - 报告'], 
['Device Software Validation - List','设备软件验证 - 列表'], 
['Inventory Item Software Validation - Report','清单项目软件验证 - 报告'], 
['Inventory Item Software Validation - List','清单项目软件验证 - 列表'], 
['Reports','报告'], 
['Secret Groups','机密组'], 
['Secrets','机密'], 
['Job Approval Queue','作业审批队列'], 
['Scheduled Jobs','计划作业'], 
['Job Results','作业结果'], 
['Job Hooks','作业钩子'], 
['Job Buttons','作业按钮'], 
['Jobs','作业'], 
['Extensibility','扩展'], 
['Logging','日志记录'], 
['Change Log','更改日志'], 
['Data Sources','数据源'], 
['Git Repositories','Git 仓库'], 
['Data Validation Engine','数据验证引擎'], 
['Min/Max Rules','最小/最大规则'], 
['Regex Rules','正则表达式规则'], 
['Required Rules','必填规则'], 
['Unique Rules','唯一规则'], 
['Data Compliance','数据合规性'], 
['Data Management','数据管理'], 
['GraphQL Queries','GraphQL 查询'], 
['Relationships','关系'], 
['Notes','备注'], 
['Automation','自动化'], 
['Config Contexts','配置上下文'], 
['Config Context Schemas','配置上下文模式'], 
['Export Templates','导出模板'], 
['External Integrations','外部集成'], 
['Webhooks','网络钩子'], 
['Miscellaneous','杂项'], 
['Computed Fields','计算字段'], 
['Custom Fields','自定义字段'], 
['Custom Links','自定义链接'], 
['Manage','管理'], 
['Config Overview','配置概述'], 
['Config Compliance','配置合规性'], 
['Compliance Report','合规性报告'], 
['Config Plans','配置计划'], 
['Setup','设置'], 
['Compliance Rules','合规规则'], 
['Compliance Features','合规性功能'], 
['Config Removals','配置删除'], 
['Config Replacements','配置替换'], 
['Remediation Settings','修复设置'], 
['Golden Config Settings','黄金配置设置'], 
['Golden Config','黄金配置'], 
['FQDNs','FQDN'], 
['IP Ranges','IP 范围'], 
['Address Objects','地址对象'], 
['Address Object Groups','地址对象组'], 
['Applications','应用程序'], 
['Application Groups','应用程序组'], 
['Service Objects','服务对象'], 
['Service Object Groups','服务对象组'], 
['User Objects','用户对象'], 
['User Object Groups','用户对象组'], 
['Zones','安全域'], 
['Zone','安全域'], 
['Policy Rules','策略规则'], 
['NAT Policy Rules','NAT 策略规则'], 
['NAT Policy','NAT 策略'], 
['NAT Policies','NAT 策略'], 
['Capirca','Capirca'], 
['Capirca Policy Rules','Capirca 策略规则'], 
['Installed Plugins','已安装插件'], 
['Plugins','插件'], 
['General','常规'], 
['Single Source of Truth','单一事实源'], 
['Logs','日志'], 
['Welcome Wizard','欢迎向导'], 
['Admin','管理'], 
['Profile','用户配置文件'], 
['Log out','退出登录'], 
['Nautobot ChatOps','ChatOps'], 
['Access Grants','访问授权'], 
['Command Usage Records','命令使用记录'], 
['Device Onboarding','设备载入'], 
['Onboarding Tasks','载入任务'], 
['Hierarchical geographic locations','多级地理位置'], 
['Customers or departments','客户或部门'], 
['NAT Rules','NAT规则'], 
['Firewall Policies','防火墙策略'], 
['Security Rules','安全规则'], 
['Equipment racks, optionally organized by group','设备机架,可分组'], 
['Physical hardware models by manufacturer','按制造商划分的物理硬件型号'], 
['Rack-mounted network equipment, servers, and other devices','机架式网络设备、服务器和其他设备'], 
['Represents a set of devices which share a common control plane','代表一组共用控制平面的设备'], 
['Represents a set of devices which operate in a failover/HA group','代表在故障转移/HA 组中运行的一组设备'], 
['Represents a set of interfaces which operate in a failover/HA group','代表在故障转移/HA 组中运行的一组接口'], 
['Electrical circuits delivering power from panels','从面板供电的电路'], 
['Electrical panels receiving utility power','接收市电的配电板'], 
['Virtual routing and forwarding tables','虚拟路由和转发表'], 
['IPv4 and IPv6 network assignments','IPv4 和 IPv6 网络分配'], 
['Layer two domains, identified by VLAN ID','由 VLAN ID 标识的二层域'], 
['Organizations which provide circuit connectivity','提供网路连接的组织'], 
['Communication links for Internet transit, peering, and other services','用于互联网转接、对等互联和其他服务的通信链路'], 
['Clusters of physical hosts in which VMs reside','虚拟机所在的物理主机集群'], 
['Virtual compute instances running inside clusters','集群内运行的虚拟计算实例'], 
['Job history','作业历史'], 
['Collections of data and/or job files','数据和/或作业文件的集合'], 
['View All Changes','查看所有更改'], 
['Software version','软件版本'], 
['Local Config Context Data','本地配置上下文数据'], 
['Local config context schema','本地配置上下文模式'], 
['Enter context data in','输入配置上下文数据使用'], 
['Move up','上移'], 
['Move Down','下移'], 
['Select all','全选'], 
['Create and Add Another','创建并再加一项'], 
['Find and Merge Duplicate IPs','查找和合并重复IP'], 
['NAT (Inside)','NAT (内侧)'], 
['Serial number','序列号'], 
['Asset tag','资产标签'], 
['Outer dimensions','外部尺寸'], 
['A comma-separated list of tags','以逗号分隔的标签列表'], 
['syntax is supported, as well as','语法可用,也可使用'], 
['Permitted object types','允许的对象类型'], 
['Configure tables','配置表格'], 
['Table Configuration','表格配置'], 
['Location type','位置类型'], 
['Time zone','时区'], 
['Physical address','物理地址'], 
['Shipping Address','发货地址'], 
['Latitude','纬度'], 
['Nestable','可嵌套'], 
['Longtitude','经度'], 
['Contact name','联系人姓名'], 
['Contact phone','联系电话'], 
['Contact E-mail','联系电子邮件'], 
['Type of Site','站点类型'], 
['Autonomous Sytem','自主系统'], 
['Add filters','添加过滤器'], 
['Change log','更改日志'], 
['Rack group','机架组'], 
['Facility ID','设施 ID'], 
['Manufacturer','制造商'], 
['Device type','设备类型'], 
['Rack face','机架面'], 
['VRF Assignment','VRF 分配'], 
['Management','管理'], 
['Namespace','命名空间'], 
['Status','状态'], 
['Parent','父级'], 
['Subtree','子树'], 
['Tenant','租户'], 
['Description','描述'], 
['Facility','设施'], 
['Edit','编辑'], 
['Delete','删除'], 
['Configure','配置'], 
['Save','保存'], 
['Reset','重置'], 
['Columns','列'], 
['Comments','评论'], 
['Create','创建'], 
['Cancel','取消'], 
['Filter','筛选'], 
['Import','导入'], 
['Export','导出'], 
['Location','位置'], 
['Role','角色'], 
['Height','高度'], 
['Space','空间'], 
['Search','搜索'], 
['Device','设备'], 
['Locations','位置'], 
['Software','软件'], 
['Routing','路由'], 
['Connections','连接'], 
['Address','地址'], 
['Password','口令'], 
['Log in','登入'], 
['Username','用户名'], 
['User','用户'], 
['Organization','组织'], 
['Clusters','集群'], 
['Service','服务'], 
['History','历史'], 
['Security','安全'], 
['Theme','主题'], 
['Docs','文档'], 
['Code','代码'], 
['Help','帮助'], 
['Policies','策略'], 
['Policy','策略'], 


    ])

    replaceText(document.body)
//   |

    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
    }
})();