vjudge 汉化

vjudge 汉化脚本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         vjudge 汉化
// @namespace    http://vjudge.net/
// @version      0.1
// @description  vjudge 汉化脚本
// @license      MIT
// @author       xiezheyuan
// @match        https://vjudge.net/*
// @match        https://vjudge.net.cn/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=vjudge.net
// @grant        none
// ==/UserScript==

const vjudge_chinese = (function () {
    'use strict';
    const $$ = (selector) => document.querySelector(selector);
    const update = (selector, content) => {
        let data = document.querySelectorAll(selector);
        for (let i = 0; i < data.length; i++) {
            data[i].innerHTML = content;
        }
    };

    const translate = (selector, replacement, value) => {
        const elements = document.querySelectorAll(selector);
        elements.forEach(element => {
            // 深度优先搜索所有子节点
            function dfs(node) {
                if (node.nodeType === Node.TEXT_NODE) {
                    // 如果是文本节点,则替换文本
                    node.textContent = node.textContent.replace(new RegExp(replacement, 'g'), value);
                } else if (node.nodeType === Node.ELEMENT_NODE) {
                    // 如果是元素节点,则递归处理其子节点
                    Array.from(node.childNodes).forEach(dfs);
                }
            }

            // 从当前元素开始深度优先搜索
            dfs(element);
        });
    };

    // 顶部导航栏
    // Home
    translate("#navbarResponsive > a", "Home", "主页");
    // Problem
    update("#nav-problem > a", "题目");
    // Status
    update("#nav-status > a", "状态");
    // Contest
    update("#nav-contest > a", "比赛");
    // Workbook
    update("#nav-workbook > a", "题单");
    // User
    update("#nav-user > a", "用户");
    // Group
    update("#nav-group > a", "团队");
    // Forum
    update("#nav-comment > a", "论坛"); // pay attention to "comment"
    // Logout
    update("a.logout", "登出");
    // Login
    update("a.login", "登录");
    // Register
    update("a.register", "注册");
    // Profile
    update("#navbarResponsive > ul > li.nav-item.dropdown.float-xs-right > div > a:nth-child(1)", "个人信息");
    // Update
    update("#navbarResponsive > ul > li.nav-item.dropdown.float-xs-right > div > a:nth-child(2)", "修改信息");
    // Message
    update("#navbarResponsive > ul > li.nav-item.dropdown.float-xs-right > div > a:nth-child(3)", "私信");

    // 登录界面

    // Login
    translate("#loginModalLabel", "Login", "登录");
    // Forget Password
    translate("#btn-forget-password", "Forget Password", "忘记密码");
    // Login
    translate("#btn-login", "Login", "登录");
    // Username or Email
    if($$("#login-username") != null){
        $$("#login-username").setAttribute("placeholder", "用户名或邮箱");
    }
    // Password
    if($$("#login-password") != null){
        $$("#login-password").setAttribute("placeholder", "密码");
    }

    // 主页面 vjudge 介绍
    update("#index-intro > div > div.col-md-8 > p", "Virtual Judge 不是传统的 OJ,而是从其他传统 OJ 中抓取题目,然后模拟提交这些题目。这主要用于在不具备数据的情况下举办比赛。<br/><br/>现在,Virtual Judge 支持以下 OJ 平台:");

    // 主页面 Service Status
    translate("#ojs > div:nth-child(3) > a", "Service status", "服务器状态");

    // 所有界面的 Feedback
    $$("#img-support").setAttribute("title", "反馈");

    // 题目检索页面的左侧菜单栏
    // All
    translate("#prob-category > a:nth-child(1)", "All", "全部");
    // Solved
    translate("#prob-category > a:nth-child(2)", "Solved", "已通过");
    // Attempted
    translate("#prob-category > a:nth-child(3)", "Attempted", "尝试过");
    // Favorites
    translate("#prob-category > a:nth-child(4)", "Favorites", "收藏夹");

    // 题目检索页面的分页
    // Previous
    // update("#listProblem_previous > a", "上一页");
    // // Next
    // update("#listProblem_next > a", "下一页");
    // Filter
    if (document.getElementById("filter") != null) {
        $$("#filter").setAttribute("value", "筛选");
    }
    // Reset
    if (document.getElementById("reset") != null) {
        $$("#reset").setAttribute("value", "重置");
    }

    // 比赛页面的进度
    // Start
    update("#time-info > div:nth-child(1) > div.col-xs-3.text-xs-left > b", "开始时间");
    // End
    update("#time-info > div:nth-child(1) > div.col-xs-3.text-xs-right > b", "结束时间");
    // Remaining
    translate("#info-remaining > b", "Remaining", "剩余时间");

    // 比赛页面的标签页
    // Overview
    translate("#contest-tabs > li:nth-child(1) > a", "Overview", "概述");
    // Problem
    translate("#contest-tabs > li:nth-child(2) > a", "Problem", "题目");
    // Status
    translate("#contest-tabs > li:nth-child(3) > a", "Status", "状态");
    // Rank
    translate("#contest-tabs > li:nth-child(4) > a", "Rank", "排名");
    // Comments
    translate("#contest-tabs > li:nth-child(5) > a", "Comments", "评论");
    // Setting
    translate("#btn-setting", "Setting", "设置");

    // 题目通用的 tag
    // Solved
    translate("span.tag-success", "Solved", "已通过");
    // Attempted
    translate("span.tag-warning", "Attempted", "尝试过");

    // 题目通用的提交相关
    // Submit
    translate("#problem-submit", "Submit", "提交");
    // Status
    translate("#btn-contest-status", "Status", "状态");
    // My Status
    translate("#btn-contest-my-status", "My Status", "我的状态");
    // Translate
    translate("#btn-contest-translate", "Translate", "Google 翻译");
    // Time limit
    translate("dt.col-sm-4", "Time limit", "时间限制");
    // Mem limit
    translate("dt.col-sm-4", "Mem limit", "内存限制");
    // Problem
    translate("#prob-2 > label", "Problem", "题目");
    // Problem
    translate("#prob-1 > label", "Problem", "题目");
    // Open
    translate("#open-row > label", "Open", "公开");
    // Submit by
    translate("#submitter-type-row > label", "Submit by", "提交方式");
    // My Account
    translate("#submitter-type > label.btn.btn-secondary", "My Account", "我的账号");
    // Archive
    translate("#submitter-type > label.btn.btn-secondary", "Archive", "归档");
    // Account
    translate("#my-account-row > label", "Account", "账号");
    // Update
    translate("#my-account-row > div > a", "Update", "更新");
    // Language
    translate("#language-row > label", "Language", "语言");
    // Solution
    translate("#solution-row > label", "Solution", "代码");
    // Cancel
    translate("button.btn.btn-secondary", "Cancel", "取消");
    // Submit
    translate("#btn-submit", "Submit", "提交");
    // Submit
    translate("#submitModalLabel", "Submit", "提交");
    // Verify My Account
    translate("#confirm-title", "Verify My Account", "验证账号");
    // Confirm
    translate("#btn-confirm", "Confirm", "确认");
    // Type
    translate("#confirm-body > table > thead > tr > th:nth-child(1)", "Type", "类型");
    // Domain
    translate("#confirm-body > table > thead > tr > th:nth-child(2)", "Domain", "域名");
    // Name
    translate("#confirm-body > table > thead > tr > th:nth-child(3)", "Name", "名称");
    // Value
    translate("#confirm-body > table > thead > tr > th:nth-child(4)", "Value", "值");
    // More tips
    translate("#confirm-body > div > a:nth-child(6)", "More tips", "更多提示 (English)");
    // More tips
    translate("#my-account-tip > a:nth-child(8)", "More tips", "更多提示 (English)");
    // Source code should contain 20 characters at least
    translate("#submit-alert", "Source code should contain 20 characters at least", "代码至少包含 20 个字符");
    // At least 20 characters
    if ($$("#submit-solution") != null) {
        $$("#submit-solution").setAttribute("placeholder", "至少 20 个字符");
    }

    // 题目左侧控制面板

    // Submissions
    translate("#prob-operation > div > div:nth-child(2) > div:nth-child(1) > a", "Submissions", "提交记录");
    // Leaderboard
    translate("#btn-leader-board", "Leaderboard", "排行榜");
    // Recrawl
    translate("#prob-operation > div > div:nth-child(3) > div:nth-child(1) > a", "Recrawl", "重新爬取");
    // Translation
    translate("#prob-operation > div > div:nth-child(3) > div:nth-child(2) > a", "Translation", "ChatGPT 翻译");
    // Source
    translate("dt.col-sm-4", "Source", "来源");
    // Author
    translate("dt.col-sm-4", "Author", "作者");
    // Tags
    translate("dt.col-sm-4", "Tags", "标签");
    // Difficulty
    translate("dt.col-sm-4", "Difficulty", "难度");
    // Spoilers
    translate("dt.col-sm-4", "Spoilers", "剧透");
    // Input file
    translate("dt.col-sm-4", "Input file", "输入文件");
    // Output file
    translate("dt.col-sm-4", "Output file", "输出文件");
    // Editorial
    translate("dt.col-sm-4", "Editorial", "题解");
    // Users
    translate("dt.col-sm-4", "Users", "用户");
    // Hide
    translate("a.toggle-problem-spoiler", "Hide", "隐藏");
    // Show
    translate("a.toggle-problem-spoiler", "Show", "显示");
    // System Crawler
    translate("a.author", "System Crawler", "系统爬虫");
    // GPT Translation
    translate("#gptTranslateModal > div > div > div.modal-header > h4", "GPT Translation", "ChatGPT 翻译");

    // GPT Translation

    // Language
    translate("#gpt-translate-target-lang > label", "Language", "语言");
    // Translate
    translate("#btn-request-translate", "Translate", "翻译");
    // Problem
    translate("th", "Problem", "题目");
    // Language
    translate("th", "Language", "语言");
    // Requested
    translate("th", "Requested", "请求时间");
    // Cost
    translate("th", "Cost", "耗时");
    // Status
    translate("th", "Status", "状态");
    // Already in target language
    translate("#gpt-translate-message", "Already in target language", "原题面即为目标语言");
    // Translation complete.
    translate("#gpt-translate-message", "Translation complete.", "翻译完成。");
    // Take a look
    translate("#gpt-translate-message > a", "Take a look", "查看结果");
    // Translation requested. Please stand by.
    translate("#gpt-translate-message", "Translation requested. Please stand by.", "翻译请求已发送,请稍候。");

    // Leaderboard 对话框

    // Rank
    translate("th", "Rank", "排名");
    // Username
    translate("th", "Username", "用户名");
    translate("th", "User name", "用户名");
    // User
    translate("th", "User", "用户");
    // Update Time
    translate("th", "Update Time", "更新时间");
    // Begin Time
    translate("th", "Begin Time", "开始时间");
    // Source
    translate("th", "Source", "来源");
    // Solved
    translate("th", "Solved", "通过");
    // Title
    translate("th", "Title", "名称");
    // No matching records found
    translate("td.dataTables_empty", "No matching records found", "没有找到匹配的记录");
    // Submit Time
    translate("th", "Submit Time", "提交时间");
    // Time
    translate("th", "Time", "耗时");
    // Memory
    translate("th", "Memory", "内存");
    // Mem
    translate("th", "Mem", "内存");
    // Length
    if (window.location.href.includes("contest")) {
        translate("th", "Length", "时长");
    }
    else {
        translate("th", "Length", "长度");
    }
    // Leaderboard
    translate("#leaderBoardModalLabel", "Leaderboard", "排行榜");
    // // Previous
    // translate("#leaderboard_table_previous", "Previous", "上一页");
    // // Next
    // translate("#leaderboard_table_next", "Next", "下一页");

    // 提交记录

    // Lang
    translate("th", "Lang", "语言");
    // Result
    translate("th", "Result", "结果");
    // Prob
    translate("th", "Prob", "题目");
    // // Previous
    // translate("#listStatus_previous", "Previous", "上一页");
    // // Next
    // translate("#listStatus_next", "Next", "下一页");
    // All
    translate("#status-owner > a.list-group-item", "All", "全部");
    // Mine
    translate("#status-owner > a.list-group-item", "Mine", "我的");
    // Followed
    translate("#status-owner > a.list-group-item", "Followed", "关注");

    // 提交记录展示对话框

    // Submitted
    translate("th", "Submitted", "提交时间");
    // RemoteRunId
    translate("th", "RemoteRunId", "远程 OJ 返回编号");

    // 通用评论组件

    document.querySelectorAll("div.comment-edit > textarea").forEach((ele) => {
        ele.setAttribute("placeholder", "支持 Markdown 语法");
    });

    // Preview
    translate("div.comment-edit > div.preview > span", "Preview", "预览");
    // Clear
    translate("div.comment-edit > div.preview > div.buttons > button.btn.btn-secondary.cancel", "Clear", "清空");
    // Post
    translate("div.comment-edit > div.preview > div.buttons > button.btn.btn-secondary.post", "Post", "发布");
    // Save
    translate("div.comment-edit > div.preview > div.buttons > button.btn.btn-primary.save", "Save", "保存");
    // Post & Broadcast
    translate("div.comment-edit > div.preview > div.buttons > button.btn.btn-primary.post.broadcast", "Post & Broadcast", "发布并广播");

    // 比赛页面

    // // Previous
    // translate("#listContest_previous", "Previous", "上一页");
    // // Next
    // translate("#listContest_next", "Next", "下一页");
    // Statistic
    translate("#btn-statistic", "Statistic", "统计");
    // Create Contest
    if ($$("#btn-create") != null) {
        $$("#btn-create").setAttribute("value", "创建比赛");
    }
    // Owner
    translate("th", "Owner", "创建者");
    // Password
    translate("#contest-login-form > div > div > div.modal-body > div > label", "Password", "密码");
    // Login
    translate("#btn-contest-login", "Login", "登录");
    // Password is not correct!
    translate("#contest-login-alert", "Password is not correct!", "密码错误!");
    // Please login with your account first
    translate("#contest-login-alert", "Please login with your account first", "请先登录!");
    // Elapsed
    translate("#info-elapsed > b", "Elapsed", "已用时");
    // Running
    translate("#info-running", "Running", "进行中");
    // Ended
    translate("#info-running", "Ended", "已结束");
    // All
    translate("body > div.container-fluid > div > div.col-xs-12.col-lg-2 > div.contest-running.list-group.col-xs-4.col-lg-12 > a:nth-child(1)", "All", "全部");
    // Scheduled
    translate("body > div.container-fluid > div > div.col-xs-12.col-lg-2 > div.contest-running.list-group.col-xs-4.col-lg-12 > a:nth-child(2)", "Scheduled", "计划中");
    // Running
    translate("body > div.container-fluid > div > div.col-xs-12.col-lg-2 > div.contest-running.list-group.col-xs-4.col-lg-12 > a:nth-child(3)", "Running", "进行中");
    // Ended
    translate("body > div.container-fluid > div > div.col-xs-12.col-lg-2 > div.contest-running.list-group.col-xs-4.col-lg-12 > a:nth-child(4)", "Ended", "已结束");
    // All Contests
    translate("#my-contest-panel > a:nth-child(1)", "All Contests", "全部比赛");
    // Public Contests
    translate("#my-contest-panel > a:nth-child(2)", "Public Contests", "公开比赛");
    // My Contests
    translate("#my-contest-panel > a:nth-child(3)", "My Contests", "我的比赛");
    // My Participation
    translate("#my-contest-panel > a:nth-child(4)", "My Participation", "我参与的");
    // My Arrangement
    translate("#my-contest-panel > a:nth-child(5)", "My Arrangement", "我安排的");
    // My Group
    translate("#my-contest-panel > a:nth-child(6)", "My Group", "我团队的");
    // My Favorites
    translate("#my-contest-panel > a:nth-child(7)", "My Favorites", "我收藏的");
    // My Follow
    translate("#my-contest-panel > a:nth-child(8)", "My Follow", "我关注的");
    // Classical
    translate("body > div.container-fluid > div > div.col-xs-12.col-lg-2 > div:nth-child(3) > a:nth-child(1)", "Classical", "经典赛事");
    // Group
    translate("body > div.container-fluid > div > div.col-xs-12.col-lg-2 > div:nth-child(3) > a:nth-child(2)", "Group", "团队赛事");
    // Replay
    translate("body > div.container-fluid > div > div.col-xs-12.col-lg-2 > div:nth-child(3) > a:nth-child(3)", "Replay", "重现赛事");
    // Private
    translate("#contest-manager > span", "Private", "私有赛事");
    // Run ID
    translate("th", "Run ID", "提交编号");

    // 个人信息

    // 24 hours
    translate("th", "24 hours", "24 小时");
    // 7 days
    translate("th", "7 days", "7 天");
    // 30 days
    translate("th", "30 days", "30 天");
    // Overall solved
    translate("th", "Overall solved", "总解决");
    // Overall attempted
    translate("th", "Overall attempted", "总尝试");
    // Detail
    translate("th", "Detail", "详情");
    // Export
    translate("th", "Export", "导出");
    // Toggle
    translate("a.toggle-detail", "Toggle", "隐藏 / 显示");
    // Attempted
    translate("th", "Attempted", "尝试");
    // Register
    translate(".user-info > dt.col-sm-3", "Register", "注册时间");
    // Last seen
    translate(".user-info > dt.col-sm-3", "Last seen", "最后登录");
    // School
    translate(".user-info > dt.col-sm-3", "School", "学校");
    // Email
    translate(".user-info > dt.col-sm-3", "Email", "邮箱");
    // View
    translate("th", "View", "访问");
    // Like
    translate("th", "Like", "点赞");
    // Date
    translate("th", "Date", "日期");
    // Articles
    translate("body > div.container > div:nth-child(7) > div > div > h5", "Articles", "文章");

    // 用户信息修改

    // Update
    translate("#updateModalLabel", "Update", "修改信息");
    // Username
    translate("#update-form > div > div:nth-child(1) > div:nth-child(1) > label", "Username", "用户名");
    // Original Password
    translate("#update-form > div > div:nth-child(1) > div:nth-child(2) > label", "Original", "原");
    translate("#update-form > div > div:nth-child(1) > div:nth-child(2) > label", "Password", "密码");
    // Password
    translate("#update-form > div > div:nth-child(1) > div:nth-child(3) > label", "Password", "新密码");
    // Repeat Password
    translate("#update-form > div > div:nth-child(1) > div:nth-child(4) > label", "Repeat Password", "重复新密码");
    // Nickname
    translate("#update-form > div > div:nth-child(1) > div:nth-child(5) > label", "Nickname", "昵称");
    // School
    translate("#update-form > div > div:nth-child(1) > div:nth-child(6) > label", "School", "学校");
    // Email
    translate("#update-form > div > div:nth-child(1) > div:nth-child(8) > label", "Email", "邮箱");
    // Captcha
    translate("#update-form > div > div:nth-child(1) > div:nth-child(9) > label", "Captcha", "验证码");
    // Introduction
    translate("#update-form > div > div:nth-child(2) > div > label", "Introduction", "简介");
    // Update
    translate("#btn-update-profile", "Update", "修改");

    // 私信
    // Show older
    translate(".show-older-conversation", "Show older", "显示更多");

    // Please compose in Markdown. Be polite, and don't discuss sensitive content, including password, politics, etc.
    if($$("#reply-content") != null){
        $$("#reply-content").setAttribute("placeholder", "可以使用 Markdown 语法,请保持文明,不要讨论敏感内容,如密码,正治等。");
    }

    // Send
    translate("body > div.container-fluid > div > div.col-md-9 > table > tbody > tr > td.send", "Send", "发送");

    // 注册界面
    // Register
    translate("#registerModalLabel", "Register", "注册");
    // Username
    translate("#register-form > div:nth-child(1) > label", "Username", "用户名");
    // Password
    translate("#register-form > div:nth-child(2) > label", "Password", "密码");
    // Repeat Pass
    translate("#register-form > div:nth-child(3) > label", "Repeat Pass", "重复密码");
    // Nickname
    translate("#register-form > div:nth-child(4) > label", "Nickname", "昵称");
    // School
    translate("#register-form > div:nth-child(5) > label", "School", "学校");
    // Email
    translate("#register-form > div:nth-child(7) > label", "Email", "邮箱");
    // Captcha
    translate("#register-form > div:nth-child(8) > label", "Captcha", "验证码");
    // Introduction
    translate("#register-form > div:nth-child(9) > label", "Introduction", "简介");
    // Register
    translate("#btn-register", "Register", "注册");
    // Repeat password above
    if($$("#register-repeat-password") != null){
        $$("#register-repeat-password").setAttribute("placeholder", "重复上面的密码");
    }
    // Invisible to others. Please fill a real one. You need it after you forget the password.
    if($$("#register-email") != null){
        $$("#register-email").setAttribute("placeholder", "邮箱对其他用户不可见。请填写一个真实邮箱,以帮助您找回密码。");
    }
    // Your brief introduction in Markdown
    if($$("#register-introduction") != null){
        $$("#register-introduction").setAttribute("placeholder", "使用 Markdown 语法介绍自己。");
    }

    // Workbook

    // I Joined
    translate("#prob-category > a:nth-child(2)", "I Joined", "我加入的");
    // I Created
    translate("#prob-category > a:nth-child(3)", "I Created", "我创建的");
    // Active
    translate("th", "Active", "活跃");
    // Joined
    translate("th", "Joined", "参加");
    // Author
    translate("th", "Author", "作者");
    // Create
    if(window.location.href.includes("workbook")){
        translate("#btn-create", "Create", "创建");
    }

    if($$("#article-title") != null){
        $$("#article-title").setAttribute("placeholder", "文章标题");
    }
    // Private
    translate("#edit-article-form > div:nth-child(1) > div:nth-child(2) > div > label:nth-child(1)", "Private", "私有");
    // Unlistable
    translate("#edit-article-form > div:nth-child(1) > div:nth-child(2) > div > label:nth-child(2)", "Unlistable", "列表不显示");
    // Unlistabale (注意这里有一个typo)
    translate("#edit-article-form > div:nth-child(1) > div:nth-child(2) > div > label", "Unlistabale", "列表不显示");
    // Broadcast
    translate("#edit-article-form > div:nth-child(1) > div:nth-child(2) > div > label:nth-child(3)", "Broadcast", "广播");
    // Title mustn't be blank
    translate("#edit-article-alert", "Title mustn't be blank", "标题不能为空");
    // Confirm
    translate("#confirm-title", "Confirm", "确认");
    // Are you sure to delete this article ?
    translate("#confirm-body", "Are you sure to delete this article ?", "确定删除此文章?");
    // workbook
    translate(".workbook-tag", "workbook", "题单");
    // Unlistable
    translate(".unlistable-tag", "Unlistable", "列表不显示");
    // Private
    translate(".private-tag", "Private", "私有");
    // Broadcast
    translate(".broadcast-tag", "Broadcast", "广播");
    // Tag View
    translate("#article-container > div > div.right-panel.col-md-9 > div:nth-child(1) > div:nth-child(1) > span:nth-child(6) > div > label:nth-child(1)", "Tag View", "标签视图");
    // Mixed View
    translate("#article-container > div > div.right-panel.col-md-9 > div:nth-child(1) > div:nth-child(1) > span:nth-child(6) > div > label:nth-child(2)", "Mixed View", "混合视图");
    // Table View
    translate("#article-container > div > div.right-panel.col-md-9 > div:nth-child(1) > div:nth-child(1) > span:nth-child(6) > div > label:nth-child(3)", "Table View", "表格视图");
    // Leave
    translate(".btn-leave", "Leave", "退出");
    // Origin
    translate("th", "Origin", "原题号");
    // Note
    translate("th", "Note", "备注");
    // Active Participants
    translate("#article-container > div > div.left-panel.col-md-3 > div.list-group.hidden-sm-down.member-category > a:nth-child(1)", "Active Participants", "活跃参与者");
    // All Participants
    translate("#article-container > div > div.left-panel.col-md-3 > div.list-group.hidden-sm-down.member-category > a:nth-child(2)", "All Participants", "所有参与者");
    // Myself
    translate("#article-container > div > div.left-panel.col-md-3 > div.list-group.hidden-sm-down.member-category > a:nth-child(3)", "Myself", "我自己");
    // Followed
    translate("#article-container > div > div.left-panel.col-md-3 > div.list-group.hidden-sm-down.member-category > a:nth-child(4)", "Followed", "我关注的");
    // Search
    translate("#DataTables_Table_0_filter > label", "Search", "搜索");
    // Join
    translate(".btn-join", "Join", "加入");
    // Previous
    translate(".previous.paginate_button", "Previous", "上一页");
    // Next
    translate(".next.paginate_button", "Next", "下一页");
    // Update time
    translate("th", "Update time", "更新时间");
    // Show
    translate(".dataTables_length", "Show", "展示");
    // entries
    translate(".dataTables_length", "entries", "项");

    // 用户
    // Nickname
    translate("th", "Nickname", "昵称");
    // School
    translate("th", "School", "学校");
    // Att
    translate("th", "Att", "尝试");
    // All
    translate("#left-panel > div > a:nth-child(1)", "All", "全部");
    // Followed
    translate("#left-panel > div > a:nth-child(2)", "Followed", "我关注的");

    // Grouop
    
    // My Invitation
    translate("#my-invitations-li", "My Invitation", "我的邀请");
    // My Group
    translate("#group-tabs > li:nth-child(2)", "My Groups", "我的团队");
    // Explore
    translate("#group-tabs > li:nth-child(3)", "Explore", "发现");
    // Create Group
    translate("#btn-create-group", "Create Group", "创建团队");
    if($$("#search-group-name") != null){
        $$("#search-group-name").setAttribute("placeholder", "通过团队名称搜索");
    }
    // Search
    translate("#btn-search-group", "Search", "搜索");
    // Apply join
    translate("#group-oprts > div > a", "Apply join", "申请加入");
    // Contests
    translate("#contests-anchor", "Contests", "比赛");
    // Members
    translate("#members-anchor", "Members", "成员");
    // Leader
    translate(".tag-warning", "Leader", "团主");
    // Manager
    translate(".tag-info", "Manager", "管理员");
    // Member
    translate(".tag-default", "Member", "成员");
    // Join
    translate("th", "Join", "加入");
    // Nick name
    translate("th", "Nick name", "昵称");
    // Role
    translate("th", "Role", "角色");
    // Visibility
    translate("li.list-group-item", "Visibility", "可见性");
    // Public
    translate("li.list-group-item", "Public", "公开");
    // Private
    translate("li.list-group-item", "Private", "私有");
    // Join policy
    translate("li.list-group-item", "Join policy", "加入策略");
    // Invitation & Application
    translate("li.list-group-item", "Invitation & Application", "邀请或申请");
    // Invitation only
    translate("li.list-group-item", "Invitation only", "仅邀请");
    // Free join
    translate("li.list-group-item", "Free join", "自由加入");
    // Leader
    translate("li.list-group-item", "Leader", "团主");
    // Manager
    translate("li.list-group-item", "Managers", "管理员");
    // Members
    translate("li.list-group-item", "Members", "成员");
    // Contests
    translate("li.list-group-item", "Contests", "比赛");
    // Create Time
    translate("li.list-group-item", "Create Time", "创建时间");
    // My name
    translate("li.list-group-item", "My name", "我的昵称");
    // Featured Articles
    translate("#featured-articles-anchor", "Featured Articles", "精选文章");
    // Leave
    translate(".btn-danger.kick-out", "Leave", "退出");
    // Change you name
    translate("#confirm-title", "Change you name", "修改你的昵称");
    // Your new name in group
    translate("#confirm-body", "Your new name in group", "你的新昵称");
    // Invite
    translate("a.invite", "Invite", "邀请");
    // Update
    translate("a.update-group", "Update", "更新");
    // Arrange Contest
    translate("a.create-group-contest", "Arrange Contest", "安排比赛");
    // Invite
    translate("#confirm-title", "Invite", "邀请");
    // Input userNames of invitees. Separate by white spaces
    if($$("#invitees") != null){
        $$("#invitees").setAttribute("placeholder", "输入邀请对象,用空格分隔");
    }
    // Update group
    translate("#createGroupModalLabel", "Update group", "更新团队");
    // Create Group
    translate("#createGroupModalLabel", "Create Group", "创建团队");
    // Group name
    translate("#create-group-form > div:nth-child(1) > label", "Group name", "团队名称");
    // Short name
    translate("#create-group-form > div:nth-child(2) > label", "Short name", "简称");
    // Visibility
    translate("#create-group-form > div:nth-child(3) > label", "Visibility", "可见性");
    // Join policy
    translate("#create-group-form > div:nth-child(4) > label", "Join policy", "加入策略");
    // Contest coordinator
    translate("#create-group-form > div:nth-child(5) > label", "Contest coordinator", "比赛管理员");
    // Brief
    translate("#create-group-form > div:nth-child(6) > label", "Brief", "简介");
    // Introduction
    translate("#create-group-form > div:nth-child(7) > label", "Introduction", "介绍");
    // Private
    translate("#group-visibility > label.btn.btn-secondary", "Private", "私有");
    // Public
    translate("#group-visibility > label.btn.btn-secondary", "Public", "公开");
    // Invite only
    translate("#group-join-policy > label.btn.btn-secondary", "Invite only", "仅邀请");
    // Apply & Approve
    translate("#group-join-policy > label.btn.btn-secondary", "Apply & Approve", "申请 & 审批");
    // Free
    translate("#group-join-policy > label.btn.btn-secondary", "Free", "自由加入");
    // All members
    translate("#group-arrange-contest-policy > label", "All members", "所有成员");
    // Leader & Managers
    translate("#group-arrange-contest-policy > label", "Leader & Managers", "团主 & 管理员");
    // Leader
    translate("#group-arrange-contest-policy > label", "Leader", "团主");
    // Plain
    translate("#group-intro-format > label:nth-child(3)", "Plain", "纯文本");
    // Join now
    translate("a.join", "Join now", "立即加入");
    // Statistics
    translate("group-contest-stat", "Statistics", "统计");
    // Stat
    translate("th", "Stat", "统计");
    // New groups
    translate("#explore-groups > div:nth-child(3) > div > h4", "New groups", "新团队");
    // Edit
    translate("a.edit-articles", "Edit", "编辑");
    // Featured Articles
    translate("#confirm-title", "Featured Articles", "精选文章");
    // Input ID of featured articles. Separate by white spaces
    if($$("#article-ids") != null){
        $$("#article-ids").setAttribute("placeholder", "输入精选文章ID,用空格分隔");
    }


    // 比赛相关
    // Solve
    translate("th", "Solve", "解决");
    // Penalty
    translate("th", "Penalty", "罚时");
    // Contest Ids (you can use any separator)
    if($$("body > form > textarea[name=cids]") != null && window.location.href.includes("statistic")){
        $$("body > form > textarea[name=cids]").setAttribute("placeholder", "输入比赛ID,可用任何分隔符分隔");
    }
    // Create Contest
    translate("#editContestModalLabel", "Create Contest", "创建比赛");
    // Basic Info
    translate("#panel-info", "Basic Info", "基本信息");
    // Wgt.
    translate("th", "Wgt.", "权重");
    // Alias
    translate("th", "Alias", "别名");
    // Type
    translate("#editContestModal > div > div > div.modal-body > div:nth-child(2) > div:nth-child(1) > label", "Type", "类型");
    // Openness
    translate("#contest-openness-group > label", "Openness", "开放性");
    // Title
    translate("#editContestModal > div > div > div.modal-body > div:nth-child(2) > div:nth-child(5) > label", "Title", "标题");
    // Begin Time
    translate("#editContestModal > div > div > div.modal-body > div:nth-child(2) > div:nth-child(6) > label", "Begin Time", "开始时间");
    // Length
    translate("#editContestModal > div > div > div.modal-body > div:nth-child(2) > div:nth-child(7) > label", "Length", "时长");
    // History Rank
    translate("#contest-time-machine-group > label", "History Rank", "历史排名");
    // Rank Rule
    translate("#contest-rank-rule-group > label", "Rank Rule", "排名规则");
    // Total penalty
    translate("#contest-sum-time-group > label", "Total penalty", "总罚时");
    // Penalty
    translate("#editContestModal > div > div > div.modal-body > div:nth-child(2) > div.rank-rule > div:nth-child(2) > label", "Penalty", "罚时");
    // Partial Score
    translate("#contest-partial-score-group > label", "Partial Score", "部分分");
    // Peer Status
    translate("#contest-show-peers-group > label", "Peer Status", "成员状态");
    // Personal Account
    translate("#contest-manual-submit-group > label", "Personal Account", "个人账号");
    // Announcement
    translate("#editContestModal > div > div > div.modal-body > div:nth-child(2) > div:nth-child(13) > label", "Announcement", "公告");
    // Description
    translate("#editContestModal > div > div > div.modal-body > div:nth-child(2) > div:nth-child(14) > label", "Description", "描述");
    // Problem Set
    translate("#panel-problems", "Problem Set", "题目");
    // Classical Contest
    translate("#contest-type > label.btn.btn-secondary", "Classical Contest", "传统赛事");
    // Group Contest
    translate("#contest-type > label.btn.btn-secondary", "Group Contest", "团队赛事");
    // Replay
    translate("#contest-type > label.btn.btn-secondary", "Replay", "重放赛事");
    // Public - any one can see and submit
    translate("#contest-openness > option:nth-child(1)", "Public - any one can see and submit", "公开 - 任意用户可查看和提交");
    // Protected - any one can see, but only users knowing contest password can submit
    translate("#contest-openness > option:nth-child(2)", "Protected - any one can see, but only users knowing contest password can submit", "保护 - 任意用户可查看,但只有知道密码的用户可提交");
    // Private - only users knowing contest password can see and submit
    translate("#contest-openness > option:nth-child(3)", "Private - only users knowing contest password can see and submit", "私有 - 只有知道密码的用户可查看和提交");
    // Password
    translate("#contest-password-group > label", "Password", "密码");
    // Group
    translate("#contest-group-group > label", "Group", "团队");
    // Public - any one can see and submit
    translate("#contest-openness > option:nth-child(1)", "Public - any one can see and submit", "公开 - 任意用户可查看和提交");
    // Protected - any one can see, but only group members can submit
    translate("#contest-openness > option:nth-child(2)", "Protected - any one can see, but only group members can submit", "保护 - 任意用户可查看,但只有团队成员可提交");
    // Private - only group members can see and submit
    translate("#contest-openness > option:nth-child(3)", "Private - only group members can see and submit", "私有 - 只有团队成员可查看和提交");
    // Add a problem
    translate("#addBtn > i", "Add a problem", "添加题目");
    // No such problem
    translate("#addTable > tbody > tr.cp_row.real > td:nth-child(7) > span", "No such problem", "没有该题目");
    // Select OJ
    translate(".modal-title", "Select OJ", "选择 OJ");
    // Clone
    translate("#btn-clone", "Clone", "克隆");
    // Update
    translate("#btn-update", "Update", "更新");
    // Delete
    translate("#btn-delete", "Delete", "删除");
    // Display
    translate("#contest-time-machine > label.btn.btn-secondary", "Display", "显示");
    // Hide until contest ends
    translate("#contest-time-machine > label.btn.btn-secondary", "Hide until contest ends", "隐藏直到比赛结束");
    // Standard ICPC
    translate("#contest-rank-rule > label.btn.btn-secondary", "Standard ICPC", "标准 ICPC 赛制");
    // Customized
    translate("#contest-rank-rule > label.btn.btn-secondary", "Customized", "自定义");
    // Latest
    translate("#contest-sum-time > label", "Latest", "最新");
    // Sum
    translate("#contest-sum-time > label", "Sum", "总和");
    // Disable
    translate("#contest-partial-score > label.btn.btn-secondary", "Disable", "禁用");
    // Enable
    translate("#contest-partial-score > label.btn.btn-secondary", "Enable", "启用");
    // Hide
    translate("#contest-show-peers > label.btn.btn-secondary", "Hide", "隐藏");
    // Display
    translate("#contest-show-peers > label.btn.btn-secondary", "Display", "显示");
    // Allow If Necessary
    translate("#contest-manual-submit > label.btn.btn-secondary", "Allow If Necessary", "必要时允许");
    // Free Usage
    translate("#contest-manual-submit > label.btn.btn-secondary", "Free Usage", "自由使用");
    // Replay Info
    translate("#panel-replay", "Replay Info", "重放信息");
    // Clone Contest
    translate("#editContestModalLabel", "Clone Contest", "克隆赛事");
    // Open
    translate("th", "Open", "公开");
    // Share text
    translate("th", "Share text", "共享代码");
    // Link
    translate(".share-text > a", "Link", "链接");

    // 论坛
    // Comments
    translate("th", "Comments", "评论");
    // Last by
    translate("th", "Last by", "最后动态");
    // New Discuss
    translate("#btn-post", "New Discuss", "新讨论");
    // All
    translate("#comment_category > div:nth-child(1) > a.list-group-item", "All", "全部");
    // Article
    translate("#comment_category > div:nth-child(1) > a.list-group-item", "Article", "文章");
    // Problem
    translate("#comment_category > div:nth-child(1) > a.list-group-item", "Problem", "题目");
    // Source
    translate("#comment_category > div:nth-child(1) > a.list-group-item", "Source", "来源");
    // Contest
    translate("#comment_category > div:nth-child(1) > a.list-group-item", "Contest", "赛事");
    // Starred
    translate("#comment_category > div:nth-child(2) > a:nth-child(1)", "Starred", "收藏");
    // Involved
    translate("#comment_category > div:nth-child(2) > a:nth-child(2)", "Involved", "参与");
    // Adhoc
    translate("#comment_category > div:nth-child(2) > a:nth-child(3)", "Adhoc", "自选");
    // Google Group
    translate("#comment_category > div:nth-child(2) > a:nth-child(4)", "Google Group", "Google 群组");
    // Top
    translate(".tag-default", "Top", "置顶");
    // Edit
    translate("a.edit", "Edit", "编辑");
    // Delete
    translate("a.delete", "Delete", "删除");
    // Reply
    translate("a.reply", "Reply", "回复");
    // Spam
    translate("a.toggle-spam", "Spam", "标记为垃圾");
});

// 页面加载后执行
window.onload = vjudge_chinese;
// 定时执行
setInterval(vjudge_chinese, 1000);