ICU4X

本文件记录了使用 ICU4X 构建的过程。

启用 ICU4X

  1. 在 mozconfig 中添加 ac_add_options --enable-icu4x。(这是默认设置)

  2. 进行完整构建。

更新捆绑的 ICU4X 数据

ICU4X 数据作为带有 compiled_data 特性的 Rust crate 直接捆绑。

但是每个 icu_*_data crate 都包含所有语言环境数据,因此它可能包含不必要的数据。 icu_segmenter 在 Gecko 中使用自定义 crate,因为它包含不必要的数据,例如东亚的词典。

脚本 intl/update-icu4x.sh 可以生成和更新此二进制数据。如果要添加新的数据类型,请修改此脚本,然后运行它。

当使用 ICU4X 1.4.0 数据与最新硬编码的数据时,您需要运行以下命令。 icu_segmenter 的烘焙数据生成到 intl/icu_segmenter_data/data 中。

$ cd $(TOPSRCDIR)/intl
$ ./update-icu4x.sh https://github.com/unicode-org/icu4x.git [email protected] 44.0.0 release-74-1 1.4.0

更新 ICU4X

如果将 ICU4X crate 更新到 Gecko,则需要检查 Gecko 根目录中的 Cargo.toml。我们可能有一些技巧可以将 crate.io 版本替换为自定义版本。

C/C++ FFI

ICU4X 提供 icu_capi crate 用于 C/C++ FFI。 mozilla::intl::GetDataProvider 返回 capi::ICU4XDataProvidericu_capi。它可以在关闭之前返回有效数据。

从 Rust 访问数据提供程序

使用 compiled_data 特性。您无需考虑数据提供程序。

向 Gecko 添加新的 ICU4X 功能

为了减少构建时间和二进制文件大小,嵌入在 Gecko 中的 ICU4X 配置是最小的。如果您必须添加新功能,则必须更新一些文件。

  1. js/src/rust/shared/Cargo.toml 中的 icu_capi 条目中添加该功能。

  2. 修改 intl/icu_capi/Cargo.toml 中的 [features] 部分以启用添加的 crate 的 compiled_data 特性。

  3. intl/icu_capi/Cargo.toml 的补丁文件修改到 intl/icu4x-patches 中。

  4. (可选)如果要修改 ICU4X 烘焙数据,请修改 intl/update-icu4x.sh 以添加生成的 ICU4X 数据。