参与翻译

以下内容比概述部分更深入,提供了有关参与翻译的有用信息。


源代码

翻译的主要源代码位于以下目录中

toolkit/components/translations [browser/components/translations]


架构

JSActors

翻译功能根据需要哪些访问权限分为不同的类。通常,这种划分是在ParentChild版本的JSWindowActors之间。

Parent actors 具有访问特权内容的权限,负责下载来自远程设置的模型、修改特权 UI 组件等。

Child actors 负责与页面本身上的内容交互,向Parent actors 请求内容,以及创建Workers来执行任务。


远程设置

机器学习模型和WASM二进制文件都托管在远程设置中,并在需要时下载/缓存。

管理仪表盘

为了在远程设置管理仪表盘中访问翻译内容,您需要在Bugzilla上的远程设置组件中请求访问权限。

一旦您有权访问远程设置中的翻译内容,您就可以在管理仪表盘中查看它。

开发环境

测试环境

生产环境管理访问

为了访问生产环境管理仪表盘,您还必须拥有能够查看仪表盘的 VPN 访问权限。要获得 VPN 访问权限,请按照远程设置文档中此页面上的步骤 3进行操作。

生产环境

从不同来源获取数据

运行 Firefox 时,您可以选择从开发环境测试环境生产环境中提取数据,方法是下载并安装最新的remote-settings-devtools Firefox 扩展。

版本控制

翻译通过version属性为其所有记录使用语义版本控制。

非破坏性更改

翻译代码将始终从远程设置中检索每个记录的最大兼容版本。如果两个记录存在不同的版本(例如1.01.1),则只会考虑版本1.1记录。

这使我们能够更新和发布新版本的模型,这些模型与当前的源代码和 wasm 运行时在向后兼容和向前兼容的方式中兼容。这些可以通过远程设置发布,独立于Firefox 发布计划

破坏性更改

翻译的破坏性更改有点棘手。这些是使旧版本记录与当前 Firefox 源代码和/或WASM运行时不兼容的更改。

虽然破坏性更改会导致 semver 数字发生变化(例如1.1 2.0),但这本身还不够。由于翻译始终尝试使用最大兼容版本,因此仅更改此数字会导致旧版本的 Firefox 尝试使用不再与 Firefox 源代码或WASM运行时兼容的新版本记录。

为了处理这些更改,翻译利用远程设置过滤器表达式使某些记录仅对特定版本的 Firefox 可用。这将允许翻译对不同版本的 Firefox 提供不同的远程设置记录集。

示例

假设 Firefox 108 到 Firefox 120 与1.*主版本范围内的翻译模型记录兼容,但 Firefox 121 及更高版本仅与2.*主版本范围内的模型记录兼容。

这将使我们能够使用以下过滤器表达式标记1.*主版本记录

"filter_expression": "env.version|versionCompare('108.a0') >= 0 && env.version|versionCompare('121.a0') < 0"

这意味着这些记录仅在 Firefox 版本大于或等于 108 且小于 121 时可用。

类似地,我们将能够使用此过滤器表达式标记所有2.*主版本记录

"filter_expression": "env.version|versionCompare('121.a0') >= 0"

这意味着这些记录仅在 Firefox 版本大于或等于 Firefox 121 时可用。

以这种方式将破坏性更改与版本绑定,使翻译能够进行大规模更改,例如完全切换编译源代码中的一个第三方库到另一个库,同时允许旧版本的 Firefox 继续使用旧库,并允许新版本的 Firefox 使用新库。


语言识别

翻译目前使用CLD2语言检测器。

我们之前尝试过使用fastText语言检测器,但我们选择使用CLD2,因为fastTextWASM运行时性能存在问题。CLD2语言检测器的优势在于它已经存在于 Firefox 源代码树中。将来,我们仍然希望探索迁移到更现代的语言检测器,例如CLD3,或者其他一些检测器。