图片
想象一下:你兴冲冲地下载了一个超酷的开源游戏,结果界面全是「火星文」——不是英文,而是连 Google 翻译都翻不出人话的字符串。你抓狂、摔键盘、怀疑人生,最后只能含泪卸载。
别急,这不是你一个人的噩梦。全球 80% 的开源项目默认只有英文界面,非英语用户就像被挡在「语言结界」外的 NPC,只能干瞪眼。更惨的是,开发者们也头疼:他们想拥抱世界,但不会 100 种语言,请专业翻译又贵到肉疼。于是,一个史诗级痛点诞生了——开源软件的「语言鸿沟」。
Weblate + Codeberg:天生一对的本地化组合
如果把开源项目比作一座城市,Weblate 就是「翻译高铁站」,Codeberg 则是「免费地皮 + 物业」。
- • Weblate 负责技术:字符串拆分、版本对比、术语高亮、机器翻译建议,一条龙服务。
- • Codeberg 负责氛围:非营利、社区自治、欧盟服务器隐私保护,连极右翼骚扰都能一键拉黑(参考 2025 年 2 月事件)。
这对 CP 的化学反应有多强?举个栗子:
Veloren 这款体素 RPG 有 2736 条待翻译文本,55.1% 的进度全靠全球志愿者在 Codeberg Translate 上「用爱发电」。没有这对组合,开发者得手动合并 500+ 份 Excel,想想就头皮发麻。
一张图看懂 translate.codeberg 在开源生态中的位置
(脑内小剧场版)
- • 最上层:用户(你)→ 打开土耳其语界面的 FreeRCT,惊呼「终于不是天书了!」
- • 中间层:translate.codeberg → 像 GitHub 的 Pull Request,但专供翻译。志愿者提交「把 ‘Save Game’ 翻成 ‘Oyunu Kaydet’」,审核后自动合并进主仓库。
- • 底层:Codeberg 托管 + Forgejo 仓库 → 每次翻译通过 Webhook 触发 CI/CD,10 分钟后新语言包就打包进 nightly 版本。
简单说,它把「翻译」从边缘杂活变成了开源流水线的一环,让每一次 commit 都能让地球另一端的人笑出声。
图片
核心功能速览:注册、翻译、合并一条龙
30 秒注册流程:从 Codeberg ID 到翻译权限
“比泡一杯速溶咖啡还快” ——这是社区里流传最广的评价。
- 1. 已有 Codeberg 账号?直接登录
打开 translate.codeberg.org,右上角点击 Sign in with Codeberg,OAuth 授权一步到位,连密码都不用再输一遍。 - 2. 没有账号?30 秒搞定
-
- • 点击 Register → 填写用户名、邮箱、密码
- • 查收验证邮件,点一下链接 → 回到 Weblate 页面自动登录
- • 全程无手机号、无验证码,欧盟服务器 GDPR 级隐私保护。
- 3. 申请翻译权限
-
- • 在项目页面点 “Request access” (公开项目)
- • 或加入项目组的 受限译者群(如 Veloren),管理员 24h 内批复,邮件通知直达。
⚡ 小贴士:把浏览器语言设成土耳其语,界面会自动切换,沉浸式体验拉满!
翻译界面拆解:字符串、上下文、术语库
| 区域 | 作用 | 必看亮点 |
|---|---|---|
| 源字符串 | 原文高亮,支持 Markdown 预览 | 鼠标悬停看变量含义,避免把 %s 翻成“百分之 s” |
| 翻译框 | 实时拼写检查 + 键盘快捷键 | Ctrl+Enter 保存并下一条,Ctrl+Shift+Enter 保存并留评论 |
| 上下文截图 | 开发者上传的 UI 截图 | 专治“这按钮到底在界面哪儿”的灵魂拷问 |
| 术语库 | 项目级/全局级术语提示 | 把 “repository” 统一成“代码仓库”,强迫症福音 |
| 机器翻译 | DeepL、Google、Amazon 三选一 | 点一下就能“借脑”,再人工润色,效率翻倍 |
| 评论区 | @队友、贴链接、斗图都行 | 遇到歧义直接开帖,比微信群还热闹 |
🎯 高阶操作:
在 “Zen 模式” 里全屏翻译,背景自动暗色,深夜爆肝不伤眼。
审核与合并:如何确保翻译质量不掉线
- 1. 双重把关机制
-
- • Suggest 模式:新人只能提建议,老司机审核后一键采纳。
- • Review 标签:每条翻译至少 2 人 👍 才变绿,红色叹号代表“有争议”。
- 2. 自动质检
-
- • 一致性检查:同一术语前后不一致,系统秒变黄牌警告。
- • 占位符检测:漏翻
%d、{username}直接报错,防止程序崩溃。 - • 长度限制:按钮文本超出像素宽度,实时提示“会炸 UI”。
- 3. 合并到主分支
-
- • Weblate 自动推送到仓库的
l10n_main分支 → CI 跑测试 → 无冲突则合并。 - • 支持 Webhook,合并后立即触发 nightly 构建,第二天就能在软件里看到自己的母语。
- • Weblate 自动推送到仓库的
🛡️ 防翻车秘籍:
开启 “Squash commits” ,把 100 条翻译压成 1 个 commit,历史记录清爽得像刚理的发。
实战案例:3 个热门项目的翻译进度与参与方式
纸上谈兵不如真刀真枪。下面 3 个项目就像 3 条赛道:一条已经冲线、一条跑到一半、一条看似完赛却还在加圈。带上你的键盘,挑一条开跑!
FreeRCT:100% 完成,如何二次校对?
“100% 不代表 100% 完美” —— 这是 FreeRCT 翻译组贴在公告栏的座右铭。
现状速览
- • 483 条字符串 已全部译完,状态灯一片绿。
- • 但 Weblate 仍倔强地挂着 “需要校对” 标签——机器翻译痕迹略重,术语不统一(比如 “queue” 一会儿译成“排队”一会儿译成“队列”)。
二次校对三步走
- 1. 锁定范围
在 Weblate 里用过滤器has:check找出带警告的条目,优先啃硬骨头。 - 2. 术语表加持
项目维护者上传了 Glossary 文件,遇到“Guest”、“Ride”等高频词直接一键替换,保证全文统一。 - 3. 投票机制
每条翻译下方都有 👍 / 👎,3 票通过才标记为“已审核”。别害羞,点进去就是评委!
如何加入
-
- 注册 Codeberg →
-
- 进入 FreeRCT 翻译页 →
-
- 点击 “Request access” →
-
- 备注写一句“想帮忙二次校对”,通常 24h 内通过。
Veloren:55.1% 进行中,加入受限译者组攻略
2736 条字符串,还剩 1230 条空着,像一座待开垦的翻译金矿。
门槛说明
项目开启了 “Restricted translators” 模式,不是随便谁都能改。原因无他:Veloren 是大型 3D RPG,术语量大,怕新同学把 “mana” 翻译成“玛娜奶茶”。
闯关秘籍
- 1. 先潜水
注册后把语言设为土耳其语,浏览已有翻译,熟悉风格。 - 2. 交作业
挑 5–10 条 “Untranslated” 字符串,在本地译好,贴到 Veloren Discord 的 #translations 频道 求 review。 - 3. 拿绿卡
管理员觉得 OK 后,会在 Weblate 把你拉进 “Turkish Translators” 组,从此自由编辑。
小彩蛋
每翻完 100 条,CI 机器人会在合并请求里给你发一个 🎉 emoji,攒够 5 个就能在 README 留名—— “Turkish Localization Hero” 称号等你拿!
yuki-iptv:100% 完成,为何仍在招募校对?
305 条字符串虽短,但 IPTV 专业术语密集,错一个“EPG”用户就抓狂。
已完成 ≠ 已发布
主程序采用 “先冻结,后发布” 策略:翻译 100% 后,还要跑一轮 “语言 QA” 才能进正式版。
目前卡在 “时区字符串” 和 “频道分组” 两块,土耳其语里时区表达和英语差异大,需要母语者确认。
如何贡献
- 1. 下载测试包
项目 Release 页有 nightly 版本,装完把界面语言切到 Turkish。 - 2. 截图+标注
发现任何“说人话但不像人话”的句子,截屏丢到 Issue #42。 - 3. 拿 commit 权
连续提交 3 个被采纳的校对,维护者会直接给你 Weblate 的 Review 权限,下次改完无需再等审核。
隐藏福利
项目作者承诺:下一个大版本更新日志里会 @ 所有土耳其语贡献者,并在 About 页面放你的 Codeberg 头像——开源社死(划掉)高光时刻预定!
一句话总结
100% 是起点,55% 是机会,0% 也能开坑。
带上你的土耳其语技能,冲进 translate.codeberg,让世界听见更多 “Merhaba, açık kaynak!”
进阶玩法:用 Weblate 托管你自己的项目翻译
恭喜你,已经从小白进阶到“我要自己开坑”阶段!接下来 10 分钟,你就能把自家项目挂上 Codeberg Translate,让全球志愿者帮你把“Hello World”翻译成 30 多种语言的“你好,世界”。
创建项目与组件:软件 vs 文档的最佳实践
| 步骤 | 操作 | 小贴士 |
|---|---|---|
| 1. 登录后台 | 打开 translate.codeberg.org → 右上角 Add new project | 项目名用 kebab-case,别带空格,方便 URL |
| 2. 选类型 | 在 Project 里填:名称、网址、说明;Component 选「Software」或「Documentation」 | 软件选 GNU gettext PO,文档选 Sphinx/MD |
| 3. 绑定仓库 | Repository URL 填 https://codeberg.org/你的用户名/你的项目.git | 分支默认 main,Webhook 稍后配 |
| 4. 文件路径 | 软件:locale/<lang>/LC_MESSAGES/app.po 文档:docs/locale/<lang>/LC_MESSAGES/index.po | 提前把空模板推上去,Weblate 会自动扫描 |
| 5. 一键创建 | 点击 Save & continue → Start translation | 首次同步可能 30 秒,别急 |
最佳实践
- • 软件:把翻译文件放在
locale/目录,保持与源码同仓库,方便 CI 打包。- • 文档:用 Sphinx-intl 生成 PO,再推到
docs/locale/,保持目录干净。- • 命名:组件名用
app-ui、docs-user-guide,后期拆分不头疼。
权限管理:公开、半公开、私有翻译组
| 模式 | 适用场景 | 设置路径 | 权限粒度 |
|---|---|---|---|
| 公开 | 欢迎所有人贡献,比如开源游戏 | Project → Settings → Access → Public | 任何人可翻译、建议 |
| 半公开 | 核心团队审核,防止机翻 | Project → Settings → Access → Protected | 需申请加入 Translators 组 |
| 私有 | 商业项目、内部文档 | Project → Settings → Access → Private | 仅指定用户可见,完全隔离 |
小技巧
- • 用 Teams 功能把译者分等级:
Reviewers只能审核,Translators可提交。- • 在 Glossary 里建术语表,防止把 “commit” 翻译成“承诺” 😂。
自动化集成:Git 提交、CI/CD、Webhook 全链路
不想每天手动点“合并”?让机器人帮你打工!
1. Git 提交 → Weblate 自动拉取
- • Push webhook:在 Codeberg 仓库 → Settings → Webhooks → Add Webhook
-
- • URL:
https://translate.codeberg.org/hooks/update/你的项目/ - • Secret: 留空
- • 事件:Push events
- • URL:
2. Weblate → Git 自动推送
- • Component → Settings → Version control
-
- • Repository push URL:
git@codeberg.org:你的用户名/你的项目.git - • SSH key:把 Weblate 提供的公钥加到 Codeberg → Deploy Keys
- • Commit age: 24h(或 0 立即推送)
- • Repository push URL:
3. CI/CD 打包多语言
# .woodpecker.yml 示例
pipeline:
build:
image:python:3.11
commands:
-pipinstall-rrequirements.txt
-sphinx-build-bhtmldocsbuild
-sphinx-intlbuild
-pythonsetup.py bdist_wheel
4. 一键回滚
- • 如果翻译翻车 → Component → Repository maintenance → Reset
-
- • 选择 Hard reset 回退到上次稳定提交,不会丢翻译,Weblate 会自动重同步。
彩蛋
- • 把 Weblate badge 贴在 README:
[](https://translate.codeberg.org/engage/项目名/)
访客一眼就能看到“100% 土耳其语已就绪”!
下一章预告:翻译冲突、术语表、骚扰举报……别慌,我们给你准备了“避坑指南”!
避坑指南:常见问题与社区支持
“翻译一时爽,合并火葬场?”
别担心,把坑都提前踩一遍,你就能优雅地在 translate.codeberg 上蹦迪。
翻译冲突与版本回退
冲突是怎么来的?
- 1. 两个人同时翻译同一条字符串
Weblate 会提示“有人比你快 0.1 秒提交”,并给出 3 个选项: -
- • 保留我的
- • 采用对方的
- • 手动合并(点进 Diff 视图,像 Git 一样逐行解决)
- 2. 上游源码改了英文原文
原文变动 → 旧翻译失效 → Weblate 自动把该条目标成 “需要编辑” (小铅笔图标)。
这时别慌: -
- • 点进条目,右侧会显示 “源字符串变更历史” ,一键对比新旧英文。
- • 改完后勾选 “已解决” ,系统会生成一次新的 commit。
一键回退姿势
- • 在条目右上角 “历史” → 找到想回退的版本 → “Revert”
相当于 Git 的git revert,不会丢历史,只是再提交一次“撤销”。
术语一致性:如何建立团队词汇表
同一个词 5 个人译成 5 样,用户会以为软件精神分裂。
3 步打造“黄金词库”
-
1. 开启术语库组件
项目设置 → “术语” → 新建一个名为glossary的组件,格式选 TSV(术语原文 \t 译文 \t 备注) 。 -
2. 译员实时调用
翻译界面右侧会出现 “术语匹配” 面板,鼠标悬停即可看到统一译法。
如果译员强行写新词,Weblate 会弹出 橙色警告:“该词在术语库中已存在”。 -
3. CI 自动检查
在 “附加组件” 里启用 “glossary-check” 钩子,每次推送会跑脚本:# 伪代码示例 if 新翻译 not in glossary: fail("请先在术语库添加该词")不通过就拒绝合并,彻底根治“自由发挥”。
小技巧
- • 把术语库也开放翻译,让母语者投票决定最佳译法。
- • 每月导出一次 CSV,放到项目 Wiki,方便外部贡献者查阅。
遇到骚扰怎么办?Codeberg 的反滥用机制解读
开源≠开喷。Codeberg 把 “安全屋” 三个字写进了章程。
立即止血:3 个按钮
- 1. 条目级屏蔽
某条翻译下出现辱骂 → 右侧 “举报” → 选 “仇恨言论” ,30 秒内管理员收到邮件。 - 2. 用户级限制
如果同一人持续捣乱: -
- • 项目维护者 → “用户管理” → 把该账户设为 “只读” 。
- • 严重者直接 “全局封禁” ,由 Codeberg eV 协会理事会投票决定。
- 3. 夜间模式紧急避难
被刷屏骚扰时,右上角头像 → “开启夜间模式” 可临时隐藏所有评论,先静心翻译,后集中处理。
事后复盘:公开透明的处理日志
- • 所有封禁记录都会同步到 Codeberg Abuse Log(公开仓库),任何人可审计。
- • 被误封?在 “申诉 Issue” 模板里填表单,72 小时内必有答复。
彩蛋:社区互助
- • #translate-help Matrix 频道 7×24 在线,老司机秒回。
- • 每月最后一个周五 “翻译互助日” ,Zoom 语音房间开黑改翻译,边吐槽边进步。
记住:Codeberg Translate 不是冷冰冰的工具,而是一群想让软件说人话的疯子聚集地。
把这份避坑指南揣兜里,放心大胆地让开源世界说你的母语!