// ==UserScript==
// @name Lsposed 模块仓库汉化插件
// @namespace http://tampermonkey.net/
// @version 1.5.1
// @description Lsposed 模块仓库汉化插件,中文化界面。
// @author TC999
// @match https://modules.lsposed.org/*
// @grant none
// @license GPL-3.0
// @icon https://modules.lsposed.org/icons/icon-512x512.png
// @supportURL https://github.com/TC999/module-lsposed-chinese/issues
// ==/UserScript==
(function() {
'use strict';
// 如果页面 lang 属性为 "en",则将其更改为 "zh"
if (document.documentElement.lang === "en") {
document.documentElement.lang = "zh";
}
// 页面内容的词条替换表:左边为英文,右边为对应的中文
const translationMap = {
"Xposed Module Repository": "Xposed 模块仓库",
"Search": "搜索",
"No results found": "无结果",
// 左侧
"Browse": "浏览",
"Submission": "提交",
"Website": "网站",
"Source": "源码",
// 具体某个模块页面
"Package": "包名",
"Authors": "作者",
"Support / Discussion URL": "支持 / 讨论地址",
"源码 URL": "源码仓库",
"Release Type": "类型",
"Releases": "发行版",
"View all releases": "查看所有发行版",
"Downloads": "下载",
"Show older versions": "显示旧版",
// 提交页
"Submit Your Xposed Module": "提交您的 Xposed 模块",
"I'd like to": "操作:",
"Select": "选择",
"Submit a new package": "提交新模块",
"Transfer package ownership": "转让模块所有权",
"Appeal for package name/ownership": " 呼吁包名/所有权",
"Report an issue": "提交议题",
"Give some suggestions": "提供建议",
"Title": "标题",
"Description (Reason)": "描述(理由)",
"Describe it": "描述",
"Submit": "提交",
// 错误页
"try somewhere else": "未找到",
// 你可以继续添加其他词条及其对应的翻译
};
// 页面标题的词条替换表
const titleTranslationMap = {
"Browse Modules - Xposed Module Repository": "浏览 - Xposed 模块仓库",
"Submission - Xposed Module Repository": "提交 - Xposed 模块仓库",
"Not Found - Xposed Module Repository": "未找到 - Xposed 模块仓库",
"Xposed Module Repository": "Xposed 模块仓库",
// 其他标题词条可继续添加
};
// 替换页面中的文本
function replaceTextContent(node, map) {
for (const [enText, zhText] of Object.entries(map)) {
const regex = new RegExp(`\\b${enText}\\b(?=\\W|$)`, 'g');
node.textContent = node.textContent.replace(regex, zhText);
}
}
// 替换页面标题
function translateTitle() {
let title = document.title;
for (const [enTitle, zhTitle] of Object.entries(titleTranslationMap)) {
const regex = new RegExp(`\\b${enTitle}\\b(?=\\W|$)`, 'g');
title = title.replace(regex, zhTitle);
}
// 更新页面标题
if (document.title !== title) {
document.title = title;
}
}
// 遍历所有页面中的文本节点
function translatePage() {
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
let node;
while (node = walker.nextNode()) {
replaceTextContent(node, translationMap);
}
}
// 监听页面内容更新(例如动态加载内容)
const observer = new MutationObserver(translatePage);
observer.observe(document.body, { childList: true, subtree: true });
// 定时检查标题并翻译
setInterval(translateTitle, 1000); // 每秒检查一次标题
// 初始翻译页面内容和标题
translatePage();
translateTitle();
})();