管理内置的 en-US 词典

Firefox 的 en-US 版本包含一个基于 SCOWL 数据集的内置 Hunspell 词典。本文档描述了向词典添加新单词或将其更新到当前上游版本的流程。

有关 Hunspell 或词缀文件格式的更多信息,您可以查看 Ubuntu 的 hunspell 手册页

请求添加新的单词到 en-US 词典

如果您想向词典添加新单词,您可以将您的请求添加到 此 Bug

  • 包括所有可能的词形,例如名词的复数和所有格形式,动词的不同时态。

  • 尝试提供有关您要添加的术语的信息,特别是确认术语用法的外部来源(例如 Merriam-Webster 或 Oxford 在线词典)。

注意

如果您正在修复存在具有待处理请求的 Bug,请确保 提交一个新的 Bug 并将别名 enus-dictionary(在“详细信息”部分)从旧的 Bug 移动到新的 Bug。

添加新的单词到 en-US 词典

本节描述了向词典添加新单词的流程。

  1. 获取 mozilla-central 的克隆(请参阅 Firefox 贡献者快速参考),如果您还没有,并确保您可以成功构建它。

  2. 使用以下命令进入词典源代码目录:cd extensions/spellcheck/locales/en-US/hunspell/dictionary-sources

  3. 通过检查文件 README_en_US.txt 来确定 SCOWL 的当前版本(在文件开头有一行类似于 Generated from SCOWL Version 2020.12.07,其中 2020.12.07 是 SCOWL 版本)。

  4. SCOWL 主页或 SourceForce 下载相同版本的词典作为 tarball (tag.gz) 并将其解压到工作目录中。将结果文件夹从 scowl-YYYY.MM.DD 重命名为 scowl

  5. 有一个用于编辑词典的特殊脚本。该脚本仅在您将环境变量 EDITOR 设置为编辑器程序的可执行文件时才有效;如果您没有设置它,您可以使用 EDITOR=vim sh edit-dictionary.sh 使用 vim 进行编辑(或者您可以用其他编辑器替换它),或者如果您已经指定了 EDITOR,则可以只键入 sh edit-dictionary.sh

    复制并粘贴完整的单词列表,然后保存并退出编辑器。无需按字母顺序排列单词,因为脚本会对其进行更正。

  6. 运行脚本 sh make-new-dict.sh 以生成一个新的词典并确保它能够无错误地运行。有关此脚本的更多详细信息,请参阅 make-new-dict.sh 部分。

  7. 对生成的词典文件 en_US-mozilla.dic 进行完整性检查。例如,确保其大小与原始词典大致相同(或略大)。

  8. 如果一切看起来都正确,请使用 sh install-new-dict.sh 将生成的文件复制到正确的位置。

  9. 构建 Firefox 并测试更新后的词典。一旦您满意,请使用 编写补丁 中描述的过程来创建补丁。

请注意,更新脚本将修改词典的 2 个版本,并且都需要提交。

  • en-US.dic:实际在构建中发布的词典,它使用 ISO-8859-1 编码。

  • utf8/en-US.dic:使用 UTF-8 编码的同一词典的版本。这用于解决 Phabricator 的问题,它允许在 diff 中显示实际的更改。

排除单词的建议

可以通过在 .dic 文件中定义的末尾添加词缀规则 ! 来完全排除单词的建议备选方案。例如

  • bum 将更改为 bum/!(请注意额外的正斜杠)。

  • bum/MS 将更改为 bum/MS!

要排除单词的建议,请按照 向 en-US 词典添加新单词 中提供的说明进行操作。不要运行 edit-dictionary.sh 脚本(第 5 点),而是使用文本编辑器直接编辑文件 en-US.dic,然后继续执行其余说明。

警告

确保使用正确的编码打开 en-US.dic。例如,Visual Studio Code 将尝试将其作为 UTF-8 打开,并且需要使用编码 Western (ISO 8859-1) 重新打开它。

将词典升级到新的上游 SCOWL 版本

mozilla-central 中提供的英语词典基于 SCOWL 词典。SCOWL 软件包中分发的某些脚本用于生成 en-US 词典的文件。

此流程的工作目录是 extensions/spellcheck/locales/en-US/hunspell/dictionary-sources

  1. SCOWL 主页或 SourceForce 下载最新版本的词典作为 tarball (tag.gz) 并将其解压到工作目录中。将结果文件夹从 scowl-YYYY.MM.DD 重命名为 scowl

  2. 运行脚本 sh make-new-dict.sh 以生成一个新的词典并确保它能够无错误地运行。有关此脚本的更多详细信息,请参阅 make-new-dict.sh 部分。

  3. 对生成的词典文件 en_US-mozilla.dic 进行完整性检查。例如,确保其大小与原始词典大致相同(或略大)。

  4. 如果一切看起来都正确,请使用 sh install-new-dict.sh 将生成的文件复制到正确的位置,并使用 编写补丁 中描述的过程来创建补丁。

文件结构信息

mozilla-specific.txt

此文件包含不应提交到上游的 Mozilla 特定单词。例如,Firefox 应该放在此文件中(请参阅 Bug 237921)。

请注意,文件 5-mozilla-specific.txt 是通过扩展 mozilla-specific.txt 生成的,不应直接编辑。

utf8 文件夹

dictionary-sources/utf8 用于存储词典文件的 UTF-8 编码副本。这用于解决 Phabricator 的限制,Phabricator 将 ISO-8859-1 文件视为二进制文件,并在更新它们时不会显示 diff。

包含的脚本信息

make-new-dict.sh

词典升级脚本 make-new-dict.sh 通过扩展(即“取消压缩”)词缀压缩词典来创建单词列表,并使用这些单词列表生成一个新的词典。

升级脚本期望当前上游版本保存在 orig 目录中。

该脚本将按以下顺序在 dictionary-sources/support_file 中创建一些文件。

  • 0-special.txt 包含从 SCOWL en.dic.supp 扩展的数字和序数。

  • 1-base.txt 包含从先前版本的 SCOWL(来自 orig 文件夹)中的 en_US-custom.dic 扩展的单词。

  • 2-mozilla.txt 包含从当前 Mozilla 词典扩展的单词。

  • 3-upstream.txt 包含从版本的 SCOWL(来自 scowl/speller 文件夹)中的 en_US-custom.dic 扩展的单词。

  • 2-mozilla-removed.txt 包含仅在 SCOWL 词典中可用的单词,即 Mozilla 删除的单词。

  • 2-mozilla-added.txt 包含仅在当前 Mozilla 词典中可用的单词,即 Mozilla 添加的单词。

  • 4-patched.txt 包含来自新 SCOWL 词典 (3-upstream.txt) 的单词,其中删除了来自 (2-mozilla-removed.txt) 的单词,并添加了单词 (2-mozilla-added.txt)。

  • 5-mozilla-specific.txt 是使用 Mozilla 词典中的当前词缀规则从 mozilla-specific.txt 扩展的。

  • 5-mozilla-removed.txt5-mozilla-added.txt 分别包含了 Mozilla 相比于**新的** SCOWL 版本删除和添加的单词。这些文件可用于提交上游更改,但包含在 5-mozilla-specific.txt 中的单词应从此列表中删除。

新的词典可作为 en_US-mozilla.dic 使用,应使用 install-new-dict.sh 脚本复制。

install-new-dict.sh

该脚本

  • 创建 orig 的副本为 support_files/orig-bk,并将新的上游版本复制到 orig

  • 将现有的 Mozilla 词典复制到 support_files/mozilla-bk

  • make-new-dict.sh 生成的词典 (.dic) 从 UTF-8 转换为 ISO-8859-1,并将其移动到父文件夹。

  • 将词缀文件 (.aff) 的 SET 设置为使用 ISO8859-1,而不是原始的 UTF-8,并删除 ICONV 模式(输入转换表)。