参与翻译¶
以下内容比概述部分更深入,提供了有关参与翻译的有用信息。
源代码¶
翻译的主要源代码位于以下目录中
toolkit/components/translations [browser/components/translations]
架构¶
JSActors¶
翻译功能根据需要哪些访问权限分为不同的类。通常,这种划分是在Parent和Child版本的JSWindowActors之间。
Parent actors 具有访问特权内容的权限,负责下载来自远程设置的模型、修改特权 UI 组件等。
Child actors 负责与页面本身上的内容交互,向Parent actors 请求内容,以及创建Workers来执行任务。
远程设置¶
机器学习模型和WASM二进制文件都托管在远程设置中,并在需要时下载/缓存。
管理仪表盘¶
为了在远程设置管理仪表盘中访问翻译内容,您需要在Bugzilla上的远程设置组件中请求访问权限。
一旦您有权访问远程设置中的翻译内容,您就可以在管理仪表盘中查看它。
开发环境
测试环境
生产环境管理访问¶
为了访问生产环境管理仪表盘,您还必须拥有能够查看仪表盘的 VPN 访问权限。要获得 VPN 访问权限,请按照远程设置文档中此页面上的步骤 3进行操作。
生产环境
从不同来源获取数据¶
运行 Firefox 时,您可以选择从开发环境、测试环境或生产环境中提取数据,方法是下载并安装最新的remote-settings-devtools Firefox 扩展。
版本控制¶
翻译通过version
属性为其所有记录使用语义版本控制。
非破坏性更改¶
翻译代码将始终从远程设置中检索每个记录的最大兼容版本。如果两个记录存在不同的版本(例如1.0
和1.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,或者其他一些检测器。