ICU4X¶
本文件记录了使用 ICU4X 构建的过程。
启用 ICU4X¶
在 mozconfig 中添加
ac_add_options --enable-icu4x
。(这是默认设置)进行完整构建。
更新捆绑的 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::ICU4XDataProvider
的 icu_capi
。它可以在关闭之前返回有效数据。
从 Rust 访问数据提供程序¶
使用 compiled_data
特性。您无需考虑数据提供程序。
向 Gecko 添加新的 ICU4X 功能¶
为了减少构建时间和二进制文件大小,嵌入在 Gecko 中的 ICU4X 配置是最小的。如果您必须添加新功能,则必须更新一些文件。
在
js/src/rust/shared/Cargo.toml
中的icu_capi
条目中添加该功能。修改
intl/icu_capi/Cargo.toml
中的[features]
部分以启用添加的 crate 的compiled_data
特性。将
intl/icu_capi/Cargo.toml
的补丁文件修改到intl/icu4x-patches
中。(可选)如果要修改 ICU4X 烘焙数据,请修改
intl/update-icu4x.sh
以添加生成的 ICU4X 数据。