Greasy Fork

来自缓存

vjudge 汉化

vjudge 汉化脚本

// ==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);