15 个版本 (7 个稳定版)

1.5.0 2024年5月28日
1.4.0 2023年11月16日
1.3.2 2023年10月3日
1.2.0 2023年4月14日
0.0.1 2020年4月17日

国际化 (i18n) 中排名第 5

Download history 2988/week @ 2024-05-03 3519/week @ 2024-05-10 2923/week @ 2024-05-17 3695/week @ 2024-05-24 3579/week @ 2024-05-31 3468/week @ 2024-06-07 2554/week @ 2024-06-14 2912/week @ 2024-06-21 2663/week @ 2024-06-28 3131/week @ 2024-07-05 4155/week @ 2024-07-12 5539/week @ 2024-07-19 4786/week @ 2024-07-26 4896/week @ 2024-08-02 6922/week @ 2024-08-09 4562/week @ 2024-08-16

每月下载量 21,804
15 包中使用 15 个 (11 个直接使用)

Unicode-3.0

6MB
78K SLoC

icu crates.io

icuICU4X 项目的主体元包。

它提供了在 Unicode 国际组件 中以其规范配置找到的全面功能选择,旨在使软件具有国际化能力。

此包存在是为了将用户最重要的功能集中在一个地方。它不带来任何独特功能,而是重新导出相关包作为模块。与每个模块对应的导出包也可以独立使用,即作为 icu::list 使用。

数据管理

大多数国际化算法都是基于对区域专家的调查的数据驱动。ICU4X 提供多种方式来管理区域数据:许多客户端可以通过使用库中编译的广泛数据开始,而有额外要求的用户可以使用 DataProvider 显式提供数据。

编译数据

编译数据通过诸如 newtry_new 的惯用 Rust 构造函数公开

use icu::datetime::DateTimeFormatter;
use icu::locid::locale;

let dtf = DateTimeFormatter::try_new(
    &locale!("es-US").into(),
    Default::default(),
)
.expect("compiled data should include 'es-US'");

使用编译数据的客户端可以从简单的代码和最佳的无成本数据加载中受益。此外,ICU4X 的 API 设计得如此之好,以至于可以优化掉未使用的编译数据。

默认情况下,大多数在CLDR中可用的数据都包含在内。用户可以通过使用icu4x-datagen工具(带有--format mod标志)来自定义数据,例如选择一组较小的区域设置,然后通过ICU4X_DATA_DIR变量编译。

显式数据

使用DataProvider,可以通过特殊构造函数将其传递给ICU4X API,实现强大的数据管理。

use icu::datetime::DateTimeFormatter;
use icu::locid::locale;
use icu_provider_adapters::fallback::LocaleFallbackProvider;
use icu_provider_blob::BlobDataProvider;

let data: Box<[u8]> = todo!();

let provider = BlobDataProvider::try_new_from_blob(data)
    .expect("data should be valid");

let provider =
    LocaleFallbackProvider::try_new_with_buffer_provider(provider)
        .expect("provider should include fallback data");

let dtf = DateTimeFormatter::try_new_with_buffer_provider(
    &provider,
    &locale!("es-US").into(),
    Default::default(),
)
.expect("data should include 'es-US', 'es', or 'und'");

如果编译数据的构造函数过于限制,可以使用显式数据管理。

  • 无回退访问数据
  • 基于操作系统等来源的DataProvider支持自定义
  • 从I/O懒加载或更新数据
  • 从不同来源组合数据提供者
  • 手动包含/排除数据
  • 等等。请参阅我们的数据管理教程

以下DataProvider在不同的crate中可用

  • BlobDataProvider:从内存中的blob反序列化数据,可以在运行时更新。
  • BakedDataProvider:一个直接在Rust代码中包含数据的代码生成的提供者。这是编译数据内部使用的相同提供者。
  • FsDataProvider:使用Serde文件的文件系统树。这主要用于开发,由于性能原因,不建议在生产环境中使用。
  • icu_provider_adapters:这个crate包含提供者适配器,用于组合提供者,提供额外的功能,如区域回退等。

这些提供者(在BakedDataProvider的情况下,提供者本身)可以使用icu4x-datagen工具生成和自定义。

功能

ICU4X组件共享一组常见的Cargo功能,用于控制是否编译核心功能的功能组件。这些功能包括

  • compiled_data(默认):是否包含编译后的数据。如果没有此标志,则只有具有显式provider参数的构造函数可用。
  • std:是否包含std支持。如果没有此Cargo功能,则icu#[no_std]兼容。
  • sync:使大多数ICU4X对象实现Send + Sync。当与非静态数据一起使用时,会有轻微的性能影响。
  • logging:通过log crate启用日志记录。
  • serde:为核心库类型(如Locale)以及用于显式数据管理的*_with_buffer_provider构造函数激活serde实现。

以下Cargo功能仅在单个crate中可用,而不在此元crate中

  • datagen:是否实现仅在数据生成期间需要的功能。
  • bench:是否启用全面基准测试。这可以在运行 cargo bench 时在单个crate中启用。

实验性模块

实验性、不稳定的功能可以在 icu::experimental crate 中找到。该crate中的模块最终将稳定到这个crate中。

更多信息

有关开发、作者、贡献等方面的更多信息,请访问 ICU4X 主页

依赖关系

约7MB
约110K SLoC