国际化和本地化#

本节描述了为JupyterLab创建本地化字符串所涉及的各种元素。

JupyterLab 的国际化处理使用了四个元素:

  • language-packs 仓库:它包含 源字符串、它们的翻译、语言包以及用于 更新和发布翻译的 GitHub 工作流。

  • Crowdin项目: Crowdin 是一个基于云的解决方案,用于简化 JupyterLab 的本地化管理。这是贡献者可以翻译 JupyterLab 字符串的地方。

  • jupyterlab-translate 仓库: 定义帮助程序以处理国际化(例如提取字符串)的Python库。

  • Package template 仓库:它定义了一个语言包的 Python 包模板。

language-packs 仓库是主要的入口点。它与 Crowdin 交互以发布新的源字符串并获取最新的翻译。它还创建并更新语言包。最后,它发布这些语言包。所有这些操作都是使用在 jupyterlab-translate 和包模板中定义的助手来执行的。

工作流程#

接下来将按照通常调用的顺序描述工作流程。

注意

自动任务通过jupyterlab-bot执行。为此,该机器人可以访问GitHub仓库、Crowdin项目以及PyPI上的所有语言包项目。

源字符串生成#

源字符串是为JupyterLab和一系列扩展提取的,这些扩展的版本在language-packs仓库中的repository-map.yaml文件中定义。触发更新的工作流程如下:

  1. 编辑 repository-map.yaml,通过添加新的仓库和/或更新目标版本。

  2. 在拉取请求中推送更改。

  3. 一旦拉取请求被合并,工作流 Update source strings 将自动触发。

  4. 该工作流将打开一个新的拉取请求,该请求将更新源字符串,并可选择更新Crowdin配置。

  5. 一旦该拉取请求被合并,Crowdin 将自动上传新的源字符串。

  6. 如果用户界面中的字符串位置发生了变化(或添加了新的界面组件),请考虑为Crowdin准备新的截图(见下面的注释),并直接将其上传到Crowdin(文件名应包含版本号),或在language-packs仓库中打开一个问题。

注意

在Crowdin上进行翻译可能会很困难,尤其是在没有足够的上下文信息时,特别是对于Jupyter特定的术语。 虽然一些技术熟练的翻译者会导航到代码库以检查字符串的上下文,但这并不是一个高效的工作流程, 并且阻止了其他翻译者的贡献。为了让更多的翻译者能够贡献,并实现更高的翻译准确性, 我们应该为翻译者提供特定可翻译字符串相关使用的带注释的截图 (参见Crowdin指南中的截图部分)。

注意

Crowdin 正在使用 GitHub 集成自动上传其源字符串,该集成已与 jupyterlab-bot 的 Crowdin 账户设置好。

用于此工作流的脚本是02_update_catalogs.py

翻译更新#

新的和/或更新的翻译会自动推送到language-packs仓库。 工作流程如下:

  1. 贡献者在JupyterLab Crowdin项目上更新翻译

  2. 包含这些更改的新提交被推送到名为 l10n_master 分支上的 language-packs 仓库。

  3. 如果没有与该分支关联的拉取请求,将打开一个新的拉取请求。

  4. 维护者需要合并该拉取请求。

注意

Crowdin 正在使用 GitHub 集成 自动上传翻译,该集成已与 jupyterlab-bot 的 Crowdin 账户设置好。因此,提交和拉取请求归功于该机器人。

如果分支被删除,它将被重新创建。

警告

为了避免在那些翻译更新的拉取请求上发生合并冲突,它们应该在任何repository-map.yaml拉取请求之前合并,因为这些请求会更新源字符串。如果不这样做,更新源字符串的拉取请求需要被关闭,以便Crowdin集成重新打开PR。

语言包更新#

在发布包含来自Crowdin的新翻译的更新语言包之前,需要通过更新所有包的版本字符串来准备语言包。 这是通过手动触发Prepare language packs for release工作流来完成的。

有一个可选的设置:

The "Prepare language packs for release" workflow on GitHub Actions.

工作流程是:

  1. 触发手动准备语言包发布工作流程

  2. 该工作流将打开一个新的拉取请求,包含对语言包的更改

  3. 验证工作流 检查语言包版本 应该通过该拉取请求

  4. 维护者需要合并拉取请求

注意

语言包的版本策略是遵循JupyterLab的主版本号和次版本号,并在任何中间更新时增加修订号。所有语言包的版本号相同,以便于维护。

用于此工作流的脚本是03_prepare_release.py

语言包发布#

每次修改包版本时,创建发布并发布包将自动触发。其步骤如下:

  1. 检查所有语言包是否具有相同的版本

  2. 启动一个工作矩阵(每种语言包一个)

    1. 构建源代码和轮子工件

    2. 使用标签 @v 创建一个GitHub发布

    3. 将工件发布到PyPI

注意

发布是使用 jupyterlab-bot 凭证在所有 PyPI 项目上完成的。

Conda recipe 应该由 conda-forge 的自动打勾机器人更新。

添加新的语言包#

这需要执行以下手动操作(按此顺序):

  1. 在Crowdin上添加语言

  2. 执行语言包更新工作流程

  3. 手动上传包到PyPI

  4. 更新PyPI上的所有者,添加jupyterlab-bot为维护者

  5. 确认授予机器人的权限

  6. 更新 github action list

  7. 更新 conda-forge 变体列表