国际化和本地化#
本节描述了为 JupyterLab 创建本地化字符串所涉及的各种元素。
JupyterLab 的国际化处理使用了四个元素:
language-packs 仓库:它包含源字符串、它们的翻译、语言包以及用于更新和发布翻译的 GitHub 工作流程。
Crowdin 项目:Crowdin 是基于云的解决方案,可简化 JupyterLab 的本地化管理。这是贡献者可以翻译 JupyterLab 字符串的地方。
jupyterlab-translate 仓库:一个 Python 库,定义了用于处理国际化(例如提取字符串)的辅助函数。
包模板 仓库:它定义了语言包的 Python 包模板。
“language-packs”仓库是主要入口点。它与 Crowdin 交互以发布更新的源字符串并获取最新翻译。它还创建和更新语言包,并最终发布它们。所有这些操作都是使用 jupyterlab-translate
中定义的辅助函数和包模板执行的。
工作流程#
接下来将按通常调用的顺序描述所涉及的工作流程。
注意
自动化任务通过 jupyterlab-bot 执行。为此,该 bot 可以访问 GitHub 仓库、Crowdin 项目以及 PyPI 上的所有语言包项目。
源字符串生成#
源字符串从 JupyterLab 和一组扩展中提取,版本定义在 language-packs 仓库的 repository-map.yaml 文件中。触发更新的工作流程如下:
编辑
repository-map.yaml
,添加新的仓库和/或更新目标版本。在拉取请求中推送更改。
拉取请求合并后,工作流程 更新源字符串 将自动触发。
该工作流程将打开一个新的拉取请求,用于更新源字符串和可选的 Crowdin 配置。
一旦该拉取请求合并,Crowdin 将自动上传新的源字符串。
如果用户界面中字符串的位置发生变化(或添加了新的界面组件),请考虑为 Crowdin 准备新的屏幕截图(见下文说明),并直接上传到 Crowdin(文件名应包含版本号),或者在 language-packs 仓库中提出问题。
注意
当没有足够的上下文信息时,在 Crowdin 上进行翻译可能很困难,特别是对于 Jupyter 特定的术语。虽然一些技术娴熟的翻译人员会导航到代码库以检查字符串的上下文,但这不是一个高效的工作流程,并且会阻止其他翻译人员做出贡献。为了让更多的翻译人员做出贡献并实现更高的翻译准确性,我们应该向翻译人员提供特定可翻译字符串相关用法的带注释屏幕截图(请参阅 Crowdin 屏幕截图指南)。
注意
Crowdin 使用为 jupyterlab-bot 的 Crowdin 帐户设置的 GitHub 集成 自动上传其源字符串。
此工作流程使用的脚本是 02_update_catalogs.py。
翻译更新#
新的和/或更新的翻译会自动推送到 language-packs 仓库。工作流程如下:
贡献者在 JupyterLab Crowdin 项目上更新翻译。
包含这些更改的新提交被推送到 language-packs 仓库中名为
l10n_master
的分支。如果该分支没有关联的拉取请求,则将打开一个新的拉取请求。
维护者需要合并该拉取请求。
警告
为了避免这些翻译更新拉取请求上的合并冲突,它们应该在任何 repository-map.yaml
拉取请求(因为它们会更新源字符串)之前合并。否则,更新源字符串的拉取请求需要关闭,以便 Crowdin 集成重新打开 PR。
语言包更新#
在发布包含来自 Crowdin 的新翻译的更新语言包之前,需要通过更新所有包的版本字符串来准备语言包。这是通过手动触发 准备发布语言包 工作流程来完成的。
有一个可选设置:
新版本格式为 X.Y.postZ 或 [hatch segment](https://hatch.pypa.io/latest/version/#supported-segments) - 默认为 rev,它将增加 post 号。

工作流程如下:
触发手动“准备发布语言包”工作流程。
该工作流程将打开一个包含语言包更改的新拉取请求。
验证工作流程 检查语言包版本 应该在该拉取请求上通过。
维护者需要合并该拉取请求。
注意
语言包的版本策略是遵循 JupyterLab 的主版本和次版本号,并为任何中间更新增加 post 号。所有语言包的版本相同,以方便维护。
此工作流程使用的脚本是 03_prepare_release.py。
语言包发布#
每次包版本修改时,创建发布并发布包 将自动触发。其步骤是:
检查所有语言包是否具有相同的版本。
启动一个作业矩阵(每个语言包一个)。
构建源和 wheel 构件。
创建带有标签 <locale>@v<version> 的 GitHub 发布。
将构件发布到 PyPI。
添加新的语言包#
这需要执行以下手动操作(按此顺序):
在 Crowdin 上添加语言。
执行 语言包更新 工作流程。
手动将包上传到 PyPI。
更新 PyPI 上的所有者,将 jupyterlab-bot 添加为维护者。
确认对 bot 的授权。
更新 github action 列表。
更新 conda-forge 变体列表。