GitHub 中文界面是怎么实现的?拆解一个汉化脚本的翻译机制
【免费下载链接】github-chineseGitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese)项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese
GitHub 中文化插件(github-chinese)是一个浏览器脚本,安装后能把 GitHub 的菜单、按钮、提示和绝大多数页面文案实时翻译成中文。它不修改 GitHub 上的任何数据,只在你本地把界面"翻译"一遍。这篇文章不讲怎么装(那真的很快),而是想拆开看看它到底怎么工作,以及你能拿它玩出什么花样。
安装 GitHub 中文脚本:装好管理器、点一下安装、刷新页面
先交代安装,一笔带过:
- 浏览器里先有一个脚本管理器。Chrome / Edge / Firefox 可以用 Tampermonkey(篡改猴),开源替代品是 Violentmonkey;Safari 可以用 Tampermonkey,也有 Macaque、Stay 等选择。
- 拿到
main.user.js之后,脚本管理器会弹出安装确认页,点确认即可。 - 刷新 GitHub 页面,界面就换成中文了。
值得多说一句的是,脚本声明在document-start阶段运行,也就是页面还没渲染完就开始介入,所以你基本看不到"先闪英文、再变中文"的跳变,切换是干脆的。
GitHub 汉化效果对照:同一页面中英文差在哪里
以仓库页为例:顶栏的 "Code / Issues / Pull Requests" 会变成"代码 / 问题 / 拉取请求",仓库描述、文件列表里的操作按钮、分支下拉框都会跟着翻译。容易被忽视的角落——Issues 筛选器、通知页、设置页、组织页——也都有对应的词条覆盖。
至于深色主题,脚本用 CSS 变量加prefers-color-scheme媒体查询适配,暗色模式下同样完整中文化,不会出现文字糊在背景上的情况。
GitHub 中文化脚本的原理:locals.js 词库和按页面匹配规则
翻译不是硬编码在脚本里的,核心是一份庞大的词库文件locals.js。它差不多有三万行,主要包含三类内容:
- 页面匹配正则(
rePagePath、rePagePathRepo、rePagePathOrg等):先用正则判断当前 URL 属于登录页、仓库、组织、搜索还是趋势页,再套用对应页面的翻译规则。 - 词条对照:英文原文到中文译文的映射,比如 "Star" → "星标"、"Fork" → "复刻"。
- 忽略规则(
ignoreSelectors):代码、文件树、diff 区域这类不该动的内容会被明确跳过。这个设计很关键——如果词库命中了一段真实代码里的单词,翻译出来反而是灾难,所以"不翻译哪里"和"翻译哪里"同等重要。
正是因为每个页面都有自己的精细化规则,"Settings"这种词在仓库设置页和个人设置页里才能分别得到贴合语境的处理。
动态内容即时翻译:GitHub 汉化怎么跟上异步加载
GitHub 现在大量使用异步加载(pjax / Turbo 时代的遗产,加上近年的 React 化),页面里很多东西是滚动、点击之后才出现的,静态翻译根本来不及。
脚本的做法是用MutationObserver持续监听 DOM 变化,一旦发现新增节点,就对新出现的内容重新跑一遍匹配;对部分页面还启用了字符级别的监测,连文本节点内部的变化也能捕捉到。另一个贴心细节是时间元素本地化——"3 hours ago"会显示成"3 小时前"这样的相对时间。
顺带一提,这个项目一直在跟 GitHub 前端的变化拉扯。更新日志里最近的几版,就是在处理 GitHub 引入 React 之后头部搜索框消失、导航弹层翻译失效的问题。这种"持续修兼容"的状态,说明汉化这种事的难点不在翻译本身,而在跟进平台不停改版。
自定义 GitHub 翻译词库:从改词条到本地调试
词库不只是拿来用的,也是可以改的:
- 本地调试:把
locals.js下载到本地,在脚本管理器中把@require的引用路径从远程改成file:///指向本地文件,刷新页面即可生效。官方文档里还给了 Tampermonkey 高级设置中"允许脚本访问本地文件"的开启方法,遇到不生效时按那几步排查就行。 - 定制译法:比如你的团队有内部术语,希望在界面上统一显示为某个固定说法,直接在词库里加一条词条就能实现。
- 仓库描述翻译:脚本在仓库页提供了一个"翻译"按钮,调用在线翻译引擎把项目简介译成中文——这个功能可以单独使用,不影响整站词库翻译。
开发者模式:收集没翻译到的词条,顺便参与项目共建
脚本里有个全局配置常量CONFIG,把CONFIG.DEV改成true就能开启开发者模式。开启后会出现"未命中词条"相关菜单:
- 翻译时没在词库里匹配到的英文文本会被记录下来;
- 可以统计数量、一键清空、导出成 JSON;
- 导出的清单里包含词条原文和所在页面路径,直接就能拿来补词库。
这个功能原本是作者自己查漏补缺的内部工具,开放给所有用户之后,等于让每个使用者都变成了词库维护者——你逛 GitHub 时顺手导出一份未命中清单提交回去,就是对项目最直接的贡献。
开发版与稳定版:汉化脚本的更新节奏
项目采用双版本策略:开发版实时更新,每周五自动更新词库;稳定版每周一同步开发版词库,更稳妥。想尝鲜用开发版,追求稳定就装在 GreasyFork 托管的稳定版上。
参与的入口也很简单:编辑locals.js完善词条、提 issue 报告问题、改进脚本逻辑,任选其一。项目以 GPL-3.0 开源,从早期的 github-hans 一路维护至今,翻译词条的准确性就是这样靠社区一点一点磨出来的。
如果你也经常泡在 GitHub 上,与其被界面上的英文分散注意力,不如花几分钟装一个汉化脚本,然后把它当成一个"可以自己改的翻译工具"来用。翻译覆盖再全,终究是长期维护出来的结果,而这份词库,恰恰是每个人都能往里添一笔的。
【免费下载链接】github-chineseGitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese)项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考