Astro 如何进行国际化 (i18n)

作者
Yan Thomas
Sarah Rainsberger

欢迎,世界。

“Astro 适合所有人”是我们团队常说的一句话。它最初只是一个帮助我们设计 API 并与用户建立联系的说法。但随着 Astro 的发展,这种可访问性的核心价值已不仅仅体现在功能开发中。

Astro 适合所有人

如果 Astro 真的要适合所有人,那么就必须把地球上不讲英语的大多数人(83%)也包括在内!18 个月前,我们决定认真对待并投资大修我们的文档,其中就包括一项重要的国际化 (i18n) 倡议。

如今,Astro 文档已正式翻译成 12 种不同的语言,总计翻译了 1000 多页。甚至我们完整的入门教程(共 32 页)也已翻译成六种不同的语言。这些语言覆盖了 50 多个国家/地区的数十亿人口,为许多原本难以可靠使用 Astro 的人打开了大门。

Astro docs homepage with the language picker drop down menu of available languages

我们的翻译几乎完全由全球志愿者提交的开源贡献组成。我们非常非常感谢迄今为止所有做出贡献的人。

今天是我们官方社区日庆祝活动,因此我们想分享 Astro 是如何构建这个国际化引擎的。我们很幸运拥有开源领域最优秀的社区之一,并希望在这篇文章中与您分享我们的一些成功——和挑战。

认可非代码贡献

通常,开源项目过于侧重代码贡献(问题、拉取请求、错误修复、新功能),而忽略了其他形式的支持。我们对 Astro 做出的最重要、最早的决定之一就是改变这一点,并从一开始就特别提出并认可非代码贡献。

这被明确写入了我们的 GOVERNANCE.md 文档,其中指出任何人都可以通过任何衡量和形式的贡献成为 Astro 的维护者,而不仅仅是代码行数。

如今,我们一些最优秀的新的维护者正是通过非代码贡献开始他们的工作。

  • 文档
  • 翻译
  • 支持
  • 社区建设与倡导

贡献者入职

成功完成您的第一个开源贡献有时是最难的部分。考虑到这一点,我们精心构建了我们的 i18n 贡献者旅程,力求尽可能减少摩擦和进入障碍。

并非所有潜在贡献者都熟悉 GitHub 的工作流程,包括 git、分支、合并冲突等。将非代码贡献者引入这样一个代码密集的“环境”可能看起来很奇怪。然而,由于我们的代码存储在 GitHub 上,我们可以将内容保留在一个开放平台上,同时也将翻译内容与文档站点的代码本身保持同步。

这意味着每位贡献者,无论贡献类型如何,都使用相同的平台并拥有相同的贡献体验。 国际化不再被视为“其他”事物,而是文档的一部分。我们的开放 PR 列表中包括翻译、内容更新和网站基础设施代码修复。

A selection of Astro docs open PRs on GitHub, showing translation PRs next to a PR to add new CMS guide content.

为了帮助人们轻松上手,并为他们提供清晰的入门指导,我们在常规的 CONTRIBUTING.md 之外,还创建了一份完整的 翻译指南。这份指南不仅包含我们翻译工作的技术细节,还为任何可能对贡献前景感到不知所措的初学者提供了建议和技巧。

沟通

我们的翻译人员不仅完全融入了我们的“文档即代码”流程,还参与了更广泛的社区讨论和决策制定。

我们的翻译人员在 Astro Discord 服务器上,在他们自己的 #docs-i18n 频道和专门的特定语言讨论串中进行协调和协作。这是一个特殊的地方,他们在进行翻译工作时可以自由地使用(或讨论)自己的语言。

同时,我们的翻译人员也是更广泛的 Astro 社区和讨论的活跃参与者,他们参与了通用或非主题的对话。您也经常会在 #dev#docs 等更具体的频道中找到他们,正是由于他们的参与和反馈,我们才能够为我们的文档和核心产品带来多项国际化改进。

当然,您也会发现他们在我们的 #support 讨论串中分享文档链接并回答问题,因为他们通过翻译对文档了如指掌

自动化和工具

知道如何开始是一回事。但是,翻译人员还需要知道从哪里开始!

在备受喜爱的 Astro 维护者 Hippo 的带领下,我们的文档团队构建了一个定制的 翻译跟踪器,这是我们 i18n 自动化的杰作!它按语言跟踪每个标记为“可翻译”的文档页面,并报告其当前状态:

  • 已完全翻译并保持最新;
  • 需要更新以匹配英文文档;
  • 或者,尚未翻译。
The Translation Tracker table, showing languages across the top, individual pages down the side, and various symbols in each cell, such as an X for missing content or a green check for up-to-date.

在内部,它使用 git 历史记录来比较语言之间的更改,通过一些检查定义每个页面的状态,并生成一个包含页面与英文版本同步所需的所有提交的 GitHub 链接。它由 GitHub Actions 提供支持,直接源自我们的文档仓库。

A small selection of the Translation Tracker's summary by language, showing one language expanded to list the translations needed for that language.

我们的翻译跟踪器还使用 GitHub 数据列出需要母语者审核的开放翻译 PR,这是一种无需自行创建 PR 即可轻松入门的好方法!

A list of open PRs needing reviews, for example 'i18n(ko) translate rss.mdx'

通过清晰了解我们的翻译需求,我们能够迅速欢迎和引导新的 i18n 贡献者,他们已经知道哪些贡献是需要的。

通过数据驱动决策

最初,我们仅根据社区的热情和可提供的帮助来做出翻译决策(例如,文档中支持哪些语言)。这在我们刚开始时被证明是一个不错的策略。但随着 Astro 文档的增长,我们需要做出更明智的决策。

我们早期必须做出的一个艰难决定是,确定我们将正式支持哪些语言的翻译。或者更确切地说,不支持哪些语言。正式支持一种语言是一项相当大的承诺,不幸的是,这意味着我们无法接受向我们提出的所有语言。我们的目标是在易于维护的语言和能产生最大影响的语言之间找到平衡。高质量信息和教育的获取并非处处平等——而我们作为拥有英语熟练特权的人,有能力解决这些不平等,并为最需要翻译的社区发声。

为了帮助我们做出这些艰难的决定,我们分析了多个数据点,例如我们 Discord 中每种语言的成员数量、每种语言的国家列表、多项开发者调查的人口统计数据以及 EF 的英语熟练度指数。通过从明确的目标开始,我们可以选择有助于我们专注于满足全球开发者社区需求的语言。

支持我们的贡献者

尤其是在过去几个月,我们一直致力于支持和认可我们的国际化团队所做的巨大工作。Astro 文档长期以来都在其仓库中展示所有贡献者的 GitHub 头像“面部堆栈”,而现在我们在每个翻译版本的网站上都展示一个专门的翻译者头像堆栈。我们受欢迎的社区 Astro 徽章现在也显示独特的 i18n 贡献,以表彰翻译和翻译审查。

Four Astro badges, displaying various achievement levels for community members, such as Universal Translator for merging 40 i18n PRs or Rosetta Stone for reviewing 40 i18n PRs

感谢 Astro 开源项目拥有如此多慷慨的赞助商和支持者,我们能够定期颁发社区奖金。截至发稿时,我们已将超过 4000 美元的 Open Collective 资金直接发放给我们的国际社区。其他形式的奖励包括 Astro 周边商店的限量版商品(所有收益直接回馈到我们的 Open Collective)、津贴和赞助。

展望未来

我们对我们有意识地专注于文档国际化 (i18n) 所取得的成果感到非常兴奋,并对我们收到的热情和赞赏感到谦卑和满足。我们深知任何开源项目的成功都取决于支持社区中的 *每* 一位成员。

这仅仅是个开始,我们非常高兴能与更广泛的开源社区分享更多关于我们国际化的故事!特别是,我们希望将我们自主开发的工具,如翻译跟踪器,进行通用化和打包,以便其他开源项目也能使用它们。所以请继续关注,并加入我们,共同开创开源国际化的新时代!