Codeberg Translate 到底是啥?3 分钟带你拆解这个「开源翻译神器」!

254 阅读12分钟

图片

 

图片

图片

想象一下:你兴冲冲地下载了一个超酷的开源游戏,结果界面全是「火星文」——不是英文,而是连 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. 1. 已有 Codeberg 账号?直接登录
    打开 translate.codeberg.org,右上角点击 Sign in with Codeberg,OAuth 授权一步到位,连密码都不用再输一遍。
  2. 2. 没有账号?30 秒搞定
    • • 点击 Register → 填写用户名、邮箱、密码
    • • 查收验证邮件,点一下链接 → 回到 Weblate 页面自动登录
    • • 全程无手机号、无验证码,欧盟服务器 GDPR 级隐私保护。
  3. 3. 申请翻译权限
    • • 在项目页面点  “Request access” (公开项目)
    • • 或加入项目组的 受限译者群(如 Veloren),管理员 24h 内批复,邮件通知直达。

⚡ 小贴士:把浏览器语言设成土耳其语,界面会自动切换,沉浸式体验拉满!


翻译界面拆解:字符串、上下文、术语库

区域作用必看亮点
源字符串原文高亮,支持 Markdown 预览鼠标悬停看变量含义,避免把 %s 翻成“百分之 s”
翻译框实时拼写检查 + 键盘快捷键Ctrl+Enter 保存并下一条,Ctrl+Shift+Enter 保存并留评论
上下文截图开发者上传的 UI 截图专治“这按钮到底在界面哪儿”的灵魂拷问
术语库项目级/全局级术语提示把  “repository”  统一成“代码仓库”,强迫症福音
机器翻译DeepL、Google、Amazon 三选一点一下就能“借脑”,再人工润色,效率翻倍
评论区@队友、贴链接、斗图都行遇到歧义直接开帖,比微信群还热闹

🎯 高阶操作
在  “Zen 模式”  里全屏翻译,背景自动暗色,深夜爆肝不伤眼。


审核与合并:如何确保翻译质量不掉线

  1. 1. 双重把关机制
    • • Suggest 模式:新人只能提建议,老司机审核后一键采纳。
    • • Review 标签:每条翻译至少 2 人 👍 才变绿,红色叹号代表“有争议”。
  2. 2. 自动质检
    • • 一致性检查:同一术语前后不一致,系统秒变黄牌警告。
    • • 占位符检测:漏翻 %d{username} 直接报错,防止程序崩溃。
    • • 长度限制:按钮文本超出像素宽度,实时提示“会炸 UI”。
  3. 3. 合并到主分支
    • • Weblate 自动推送到仓库的 l10n_main 分支 → CI 跑测试 → 无冲突则合并。
    • • 支持 Webhook,合并后立即触发 nightly 构建,第二天就能在软件里看到自己的母语。

🛡️ 防翻车秘籍
开启  “Squash commits” ,把 100 条翻译压成 1 个 commit,历史记录清爽得像刚理的发。


实战案例:3 个热门项目的翻译进度与参与方式

纸上谈兵不如真刀真枪。下面 3 个项目就像 3 条赛道:一条已经冲线、一条跑到一半、一条看似完赛却还在加圈。带上你的键盘,挑一条开跑!


FreeRCT:100% 完成,如何二次校对?

“100% 不代表 100% 完美”  —— 这是 FreeRCT 翻译组贴在公告栏的座右铭。

现状速览

  • • 483 条字符串 已全部译完,状态灯一片绿。
  • • 但 Weblate 仍倔强地挂着  “需要校对”  标签——机器翻译痕迹略重,术语不统一(比如 “queue” 一会儿译成“排队”一会儿译成“队列”)。

二次校对三步走

  1. 1. 锁定范围
    在 Weblate 里用过滤器 has:check 找出带警告的条目,优先啃硬骨头。
  2. 2. 术语表加持
    项目维护者上传了 Glossary 文件,遇到“Guest”、“Ride”等高频词直接一键替换,保证全文统一。
  3. 3. 投票机制
    每条翻译下方都有 👍 / 👎,3 票通过才标记为“已审核”。别害羞,点进去就是评委!

如何加入

    1. 注册 Codeberg →
    1. 进入 FreeRCT 翻译页 →
    1. 点击  “Request access”  →
    1. 备注写一句“想帮忙二次校对”,通常 24h 内通过

Veloren:55.1% 进行中,加入受限译者组攻略

2736 条字符串,还剩 1230 条空着,像一座待开垦的翻译金矿。

门槛说明

项目开启了  “Restricted translators”  模式,不是随便谁都能改。原因无他:Veloren 是大型 3D RPG,术语量大,怕新同学把 “mana” 翻译成“玛娜奶茶”。

闯关秘籍

  1. 1. 先潜水
    注册后把语言设为土耳其语,浏览已有翻译,熟悉风格。
  2. 2. 交作业
    挑 5–10 条  “Untranslated”  字符串,在本地译好,贴到 Veloren Discord 的 #translations 频道 求 review。
  3. 3. 拿绿卡
    管理员觉得 OK 后,会在 Weblate 把你拉进  “Turkish Translators”  组,从此自由编辑。

小彩蛋

每翻完 100 条,CI 机器人会在合并请求里给你发一个 🎉 emoji,攒够 5 个就能在 README 留名—— “Turkish Localization Hero”  称号等你拿!


yuki-iptv:100% 完成,为何仍在招募校对?

305 条字符串虽短,但 IPTV 专业术语密集,错一个“EPG”用户就抓狂。

已完成 ≠ 已发布

主程序采用  “先冻结,后发布”  策略:翻译 100% 后,还要跑一轮  “语言 QA”  才能进正式版。
目前卡在  “时区字符串”  和  “频道分组”  两块,土耳其语里时区表达和英语差异大,需要母语者确认。

如何贡献

  1. 1. 下载测试包
    项目 Release 页有 nightly 版本,装完把界面语言切到 Turkish。
  2. 2. 截图+标注
    发现任何“说人话但不像人话”的句子,截屏丢到 Issue #42。
  3. 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分支默认 mainWebhook 稍后配
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-uidocs-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

2. Weblate → Git 自动推送

  • • Component → Settings → Version control
    • • Repository push URLgit@codeberg.org:你的用户名/你的项目.git
    • • SSH key:把 Weblate 提供的公钥加到 Codeberg → Deploy Keys
    • • Commit age: 24h(或 0 立即推送)

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/widgets/项目名/-/svg-badge.svg)](https://translate.codeberg.org/engage/项目名/)
    访客一眼就能看到“100% 土耳其语已就绪”!

下一章预告:翻译冲突、术语表、骚扰举报……别慌,我们给你准备了“避坑指南”!


避坑指南:常见问题与社区支持

“翻译一时爽,合并火葬场?”
别担心,把坑都提前踩一遍,你就能优雅地在 translate.codeberg 上蹦迪。


翻译冲突与版本回退

冲突是怎么来的?

  1. 1. 两个人同时翻译同一条字符串
    Weblate 会提示“有人比你快 0.1 秒提交”,并给出 3 个选项:
    • • 保留我的
    • • 采用对方的
    • • 手动合并(点进 Diff 视图,像 Git 一样逐行解决)
  2. 2. 上游源码改了英文原文
    原文变动 → 旧翻译失效 → Weblate 自动把该条目标成  “需要编辑” (小铅笔图标)。
    这时别慌:
    • • 点进条目,右侧会显示  “源字符串变更历史” ,一键对比新旧英文。
    • • 改完后勾选  “已解决” ,系统会生成一次新的 commit。

一键回退姿势

  • • 在条目右上角  “历史”  → 找到想回退的版本 →  “Revert”
    相当于 Git 的 git revert,不会丢历史,只是再提交一次“撤销”。

术语一致性:如何建立团队词汇表

同一个词 5 个人译成 5 样,用户会以为软件精神分裂。

3 步打造“黄金词库”

  1. 1. 开启术语库组件
    项目设置 →  “术语”  → 新建一个名为 glossary 的组件,格式选 TSV(术语原文 \t 译文 \t 备注)

  2. 2. 译员实时调用
    翻译界面右侧会出现  “术语匹配”  面板,鼠标悬停即可看到统一译法。
    如果译员强行写新词,Weblate 会弹出 橙色警告:“该词在术语库中已存在”。

  3. 3. CI 自动检查
    在  “附加组件”  里启用  “glossary-check”  钩子,每次推送会跑脚本:

    # 伪代码示例
    if 新翻译 not in glossary:
        fail("请先在术语库添加该词")
    

    不通过就拒绝合并,彻底根治“自由发挥”。

小技巧

  • • 把术语库也开放翻译,让母语者投票决定最佳译法。
  • • 每月导出一次 CSV,放到项目 Wiki,方便外部贡献者查阅。

遇到骚扰怎么办?Codeberg 的反滥用机制解读

开源≠开喷。Codeberg 把  “安全屋”  三个字写进了章程。

立即止血:3 个按钮

  1. 1. 条目级屏蔽
    某条翻译下出现辱骂 → 右侧  “举报”  → 选  “仇恨言论” ,30 秒内管理员收到邮件。
  2. 2. 用户级限制
    如果同一人持续捣乱:
    • • 项目维护者 →  “用户管理”  → 把该账户设为  “只读”
    • • 严重者直接  “全局封禁” ,由 Codeberg eV 协会理事会投票决定。
  3. 3. 夜间模式紧急避难
    被刷屏骚扰时,右上角头像 →  “开启夜间模式”  可临时隐藏所有评论,先静心翻译,后集中处理。

事后复盘:公开透明的处理日志

  • • 所有封禁记录都会同步到 Codeberg Abuse Log(公开仓库),任何人可审计。
  • • 被误封?在  “申诉 Issue”  模板里填表单,72 小时内必有答复。

彩蛋:社区互助

  • •  #translate-help Matrix 频道 7×24 在线,老司机秒回。
  • • 每月最后一个周五  “翻译互助日” ,Zoom 语音房间开黑改翻译,边吐槽边进步。

记住:Codeberg Translate 不是冷冰冰的工具,而是一群想让软件说人话的疯子聚集地。
把这份避坑指南揣兜里,放心大胆地让开源世界说你的母语!