国际化和本地化#

本节介绍了用于创建 JupyterLab 本地化字符串的各种元素。

四个元素用于处理 JupyterLab 的国际化

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

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

  • jupyterlab-translate 仓库:定义了用于处理国际化的 Python 库(例如提取字符串)。

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

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

工作流程#

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

注意

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

源字符串生成#

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

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

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

  3. 拉取请求合并后,工作流程 更新源字符串 将自动触发。

  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. 包含这些更改的新提交被推送到 language-packs 存储库上的一个名为 l10n_master 的分支。

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

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

注意

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

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

警告

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

语言包更新#

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

有一个可选设置

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

工作流程是

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

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

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

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

注意

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

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

语言包发布#

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

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

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

    1. 构建源代码和 wheel 工件

    2. 使用标签 <locale>@v<version> 创建一个 GitHub 发布

    3. 将工件发布到 PyPI

注意

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

Conda 食谱 应该由 conda-forge 的自动标记机器人更新。

添加新的语言包#

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

  1. 在 Crowdin 上添加语言

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

  3. 手动将软件包上传到 PyPI

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

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

  6. 更新 github action 列表

  7. 更新 conda-forge 变体列表