Greasy Fork

Greasy Fork is available in English.

CurseForge页面汉化

CurseForge汉化界面的部分菜单及内容,主要汉化Minecraft页面其他无汉化,需要模组名字和内容其余汉化需安装沉浸翻译插件,https://github.com/immersive-translate/immersive-translate/于23 年 7 月 22 日更新

当前为 2023-07-22 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        CurseForge页面汉化
// @namespace   none
// @match       https://www.curseforge.com/minecraft/*
// @match       https://legacy.curseforge.com/minecraft/*
// @match       https://www.curseforge.com/
// @match       https://www.curseforge.com/minecraft
// @grant       none
// @version     1.0
// @author      -
// @description CurseForge汉化界面的部分菜单及内容,主要汉化Minecraft页面其他无汉化,需要模组名字和内容其余汉化需安装沉浸翻译插件,https://github.com/immersive-translate/immersive-translate/于23 年 7 月 22 日更新
// @author      KHML
// @namespace
// @license MIT
// ==/UserScript==




(function() {
    'use strict';

    const i18n = new Map([

['Browse all', '浏览全部'],
['Browse', '浏览'],
['Created', '创建时间'],
['Create a Project', '创建项目'],
['Community', '社区'],
['Support', '支持'],
['All games', '所有游戏'],
['Games', '游戏'],
['Settings', '设置'],
['Login', '登录'],
['Get CurseForge App', '获取 CurseForge 应用'],
['Give us feedback', '给我们反馈'],
['Code interpreter', '代码解释器'],
['Total Downloads', '总下载量'],
['a world of endless gaming possibilities for modders and gamers alike.', '为模组开发者和游戏玩家带来无尽的游戏可能性。'],
['Download the best mods and addons!', '下载最好的模组和插件!'],
['Downloads', '下载量'],
['Download', '下载'],
['Install', '安装'],
['Description', '描述'],
['Comments', '评论'],
['Recent Files', '最近文件'],
['Files', '文件'],
['Images', '图片'],
['Install', '安装'],
['Updated', '最近更新'],
['Project ID', '项目 ID'],
['Licenses', '许可证'],
['License', '许可证'],
['Game Versions', '游戏版本'],
['Game Version', '游戏版本'],
['View all', '查看全部'],
['Mod Loaders', '模组加载器'],
['Categories', '分类'],
['Main File', '主文件'],
['Got it', '好的'],
['Legacy website', '旧版网站'],
['Home', '主页'],
['Source', '源代码'],
['Relations', '关联'],
['Issues', '问题'],
['About Project', '关于项目'],
['Filters', '筛选条件'],
['All rights reserved.', '版权所有'],
['View All', '查看全部'],
['Bukkit Plugins', 'Bukkit 插件'],
['Customization', '自定义'],
['Addons', '插件'],
['Latest Mods', '最新模组'],
['Mods', '模组'],
['Modpacks', '整合包'],
['Resource Packs', '资源包'],
['Worlds', '存档'],
['Sort by', '排序方式'],
['Latest update', '最新更新'],
['Relevancy', '相关性'],
['Popularity', '受欢迎程度'],
['Latest update', '最新更新'],
['Creation Date', '创建日期'],
['Show per page', '每页显示'],
['API and Library', 'API 和库'],
['Armor, Tools, and Weapons', '护甲、工具和武器'],
['Cosmetic', '装饰品'],
['Education', '教育'],
['Food', '食物'],
['Magic', '魔法'],
['Map and Information', '地图和信息'],
['Miscellaneous', '杂项'],
['Redstone', '红石'],
['Server Utility', '服务器工具'],
['Storage', '存储'],
['Technology', '技术'],
['Automation', '自动化'],
['Energy', '能源'],
['Energy, Fluid, and Item Transport', '能源、流体和物品传输'],
['Farming', '农业'],
['Genetics', '基因'],
['Player Transport', '玩家传送'],
['Processing', '加工'],
['Twitch Integration', 'Twitch 整合'],
['Utility & QoL', '实用性与生活品质'],
['World Generators', '世界生成器'],
['World Gen', '世界生成'],
['Adventure and RPG', '冒险和角色扮演'],
['NEW GAME', '新游戏'],
['MOD AUTHORS', '模组作者'],
['Start a project', '开始一个项目'],
['Project submission guide', '项目提交指南'],
['Authors Rewards Program', '作者奖励计划'],
['MODDING TOOL DEVELOPERS', '模组开发工具开发者'],
['Apply for an API key', '申请 API 密钥'],
['Documentation', '文档'],
['T&C', '条款与条件'],
['GAME DEVELOPERS', '游戏开发者'],
['Unlock modding for your game', '为您的游戏解锁模组功能'],
['COMMUNITY RESOURCES', '社区资源'],
['Roadmap', '路线图'],
['Sign up for our Newsletter!', '订阅我们的新闻简报!'],
['Ideas Portal', '创意门户'],
['SOCIAL', '社交媒体'],
['Bukkit Forums', 'Bukkit 论坛'],
['CurseForge Servers', 'CurseForge 服务器'],
['POPULAR GUIDES', '热门指南'],
['Getting started', '入门指南'],
['CurseForge app file indicators', 'CurseForge 应用文件指示'],
['Getting your CurseForge logs', '获取您的 CurseForge 日志'],
['TROUBLESHOOTING', '故障排除'],
['CurseForge troubleshooting', 'CurseForge 故障排除'],
['CurseForge known issues', 'CurseForge 已知问题'],
['Minecraft Troubleshooting', 'Minecraft 故障排除'],
['AUTHORS', '作者'],
['Exporting Minecraft modpacks', '导出 Minecraft 模组包'],
['CHECK OUT OUR HELP CENTER', '查看我们的帮助中心'],
['JOIN OUR COMMUNITY!', '加入我们的社区!'],
['Ores and Resources', '矿石与资源'],
['Thaumcraft', '神秘学'],
['Members', '成员'],
['Report', '举报'],
['Author Rewards Program', '作者奖励计划'],
['Modding Tool Developers', '模组开发工具开发者'],
['Apply for an API Key', '申请 API 密钥'],
['Newsletter', '新闻简报'],
['Feedback and News', '反馈与新闻'],
['News', '消息'],
['CF blog', 'CurseForge 博客'],
['Bukkit forums', 'Bukkit 论坛'],
['Knowledge base', '知识库'],
['Contact us', '联系我们'],
['CurseForge Brand', 'CurseForge 品牌'],
['CurseForge Brand Guidelines', 'CurseForge 品牌指南'],
['Companions', '合作伙伴'],
['CurseForge for Studios', 'CurseForge 工作室'],
['Terms of Service', '服务条款'],
['Privacy Policy', '隐私政策'],
['Donate', '捐赠'],
['Sign Up', '注册'],
['Go to the new website', '前往新版网站'],
['Name', '名称'],
['Size', '大小'],
['Uploaded by', '上传者'],
['Uploaded', '已上传'],
['Actions', '操作'],
['All Types', '全部类型'],
['All', '全部'],
['Type', '类型'],
['Changelog', '更新日志'],
['Filename', '文件名'],
['Enhanced search', '增强搜索'],
['Projects found', '项目'],
['Are these results relevant for your search?', '这些结果与您的搜索相关吗?'],
['Combat / PvP', '战斗 / PvP'],
['Exploration', '探险'],
['Extra Large', '超大型'],
['FTB Official Pack', 'FTB 官方模组包'],
['Hardcore', '困难模式'],
['Map Based', '基于地图'],
['Mini Game', '迷你游戏'],
['Multiplayer', '多人游戏'],
['Quests', '任务'],
['Sci-Fi', '科幻'],
['Skyblock', '天空岛'],
['Small / Light', '小型 / 轻量级'],
['Tech', '科技'],
['Vanilla+', '增强原版'],
['Adventure', '冒险'],
['Creation', '创造'],
['Game Map', '游戏地图'],
['Modded World', '模组世界'],
['Parkour', '跑酷'],
['Puzzle', '解谜'],
['解谜s', 'Puzzles'],
['Survival', '生存'],
['512x and Higher', '512x 及更高分辨率'],
['Animated', '动画'],
['Data Packs', '数据包'],
['Font Packs', '字体包'],
['Medieval', '中世纪'],
['Mod 支持', '模组支持'],
['Modern', '现代'],
['Photo Realistic', '照片级真实'],
['Steampunk', '蒸汽朋克'],
['Traditional', '传统'],
['Configuration', '配置'],
['FancyMenu', 'FancyMenu(高级菜单)'],
['Guidebook', '指南'],
['Scripts', '脚本'],
['Admin Tools', '管理员工具'],
['Anti-Griefing Tools', '防止破坏工具'],
['Chat Related', '聊天相关'],
['Developer Tools', '开发者工具'],
['Economy', '经济'],
['Fixes', '修复'],
['Fun', '娱乐'],
['General', '综合'],
['Informational', '信息'],
['Mechanics', '机制'],
['Role Playing', '角色扮演'],
['Teleportation', '传送'],
['Website Administration', '网站管理'],
['World Editing and Management', '世界编辑和管理'],
['Scenarios', '场景'],
['Discover the best Minecraft 模组 and 整合包 around', 'Discover the best Minecraft Mods and Modpacks around'],
['Minecraft 模组 on CurseForge - The 主页 for the Best Minecraft 模组', 'Minecraft Mods on CurseForge - The Home for the Best Minecraft Mods'],
['全部 the', 'All the'],
['the 模组', 'the Mods'],
['描述s', 'Descriptions'],

    ])

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