16 个版本 (9 个稳定版)
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.1.0 | 2020年10月15日 |
#48 in 国际化 (i18n)
397,617 每月下载量
在 252 个软件包中 使用 252 (直接使用 46 个)
1.5MB
20K SLoC
icu_provider
icu_provider
是 ICU4X
组件之一。
Unicode 在 ICU4X 的父项目 ICU4C 和 ICU4J 中的经验使团队意识到,数据管理是部署国际化的最关键方面,并且它需要对其嵌入的平台的高级别定制。因此,ICU4X 提供了一系列提供者,允许 ICU4X 自然地适应客户的各种商业和技术需求。
icu_provider
定义了用于通过 ICU4X 区域数据管道传输数据的特性和结构体。主要的特型是 DataProvider
。它由一个 KeyedDataMarker
参数化,该参数包含数据类型和一个 DataKey
。它有一个方法,DataProvider::load
,该方法将一个 DataRequest
转换为 DataResponse
。
DataKey
是数据类型的固定标识符,例如"plurals/cardinal@1"
。DataRequest
包含额外的注释以选择键的特定变体,例如区域。DataResponse
包含如果请求成功的数据。
此外,还有三个其他特型被广泛实现
AnyProvider
返回dyn Any
特型对象的数据。BufferProvider
返回[u8]
缓冲区作为数据。DynamicDataProvider
返回结构化数据,但不特定于某个键。
此包最常用的类型通过预导入包含
use icu_provider::prelude::*;
数据提供者的类型
所有非平凡的数据提供者都可以归入以下两个类别之一。
AnyProvider
:其数据源自结构化 Rust 对象的提供者BufferProvider
:其数据源自非结构化[u8]
缓冲区的提供者
✨关键见解:给定的数据提供者通常是 要么 AnyProvider
要么 BufferProvider
。哪种类型取决于数据源,通常无法将其转换为另一种类型。
另请参阅 crate::constructors。
AnyProvider
这些提供者能够返回转换为 dyn Any
特型对象的结構化数据。用户可以通过调用 as_downcasting
来通过向下转换特型对象获得实现 DataProvider
的对象。
AnyProvider 的示例
DatagenProvider
从 CLDR 源文件读取结构化数据,并返回 ICU4X 数据结构。AnyPayloadProvider
包装特定的数据结构并返回它。BakedDataProvider
直接在 Rust 源代码中编码结构化数据。
缓冲区提供者
这些提供者能够返回非结构化数据,通常表示为 serde
序列化的缓冲区。用户可以通过调用 as_deserializing()
通过 Serde 反序列化来获取一个实现 DataProvider
的对象。
缓冲区提供者的示例
FsDataProvider
从文件系统中读取单独的缓冲区。BlobDataProvider
从大内存 blob 中读取缓冲区。
提供者适配器
ICU4X 提供了几个内置模块,以有趣的方式组合提供者。这些可以在 icu_provider_adapters
包中找到。
测试提供者
此包还包含一个用于演示的具体提供者
HelloWorldProvider
返回多种语言中的 "hello world" 字符串。
类型和生命周期
与 Yokeable
兼容的类型可以通过数据提供者传递,前提是它们与实现 DataMarker
的标记类型相关联。
数据结构通常应有一个生命周期参数: 'data
。这个生命周期允许数据结构借用零拷贝数据。
数据生成 API
此功能通过 "datagen" Cargo 功能启用
datagen
模块包含几个用于数据生成的 API。请参阅 icu_datagen
以获取参考数据生成实现。
更多信息
有关开发、作者、贡献等信息,请访问 ICU4X 主页
。
依赖项
~0.6–1.4MB
~31K SLoC