Expand description
icu
is the main meta-crate of the ICU4X
project.
It provides a comprehensive selection of Unicode Internationalization Components in their canonical configurations intended to enable software internationalization capabilities.
This crate does not bring any unique functionality. Each module is also
available as a stand-alone crate, i.e. icu::list
as icu_list
.
Data Management
Most functionality relies on data which clients have to provide to the APIs.
ICU4X
uses the concept of a DataProvider
to separate data from logic.
Data providers come in many different forms; the following providers are provided
by ICU4X
in separate crates:
BlobDataProvider
: uses an in-memory serde-serialized blob. This is the most flexible provider, and data can be updated at runtime.BakedDataProvider
: a code-generated provider that contains the data directly in Rust code. This is the most efficient provider as it’s serialization-free, and allows for compile-time optimizations.FsDataProvider
: uses a file system tree of Serde files. This is mostly useful for development and not recommended in production for performance reasons.icu_provider_adapters
: this crate contains APIs to combine providers or provide additional functionality such as locale fallback.
The data that is required by these providers (in BakedDataProvider
’s case, the provider itself) can be
generated and customized using the icu_datagen
crate.
The following example uses the icu_testdata
crate, which contains prepackaged data providers
for a small set of locales.
Example
use icu::datetime::{mock::parse_gregorian_from_str, options::length, TypedDateTimeFormatter};
use icu::locid::locale;
let provider = icu_testdata::get_provider();
let options =
length::Bag::from_date_time_style(length::Date::Long, length::Time::Medium).into();
let dtf = TypedDateTimeFormatter::try_new_with_buffer_provider(&provider, &locale!("es").into(), options)
.expect("Failed to create TypedDateTimeFormatter instance.");
let date = parse_gregorian_from_str("2020-09-12T12:35:00").expect("Failed to parse date.");
let formatted_date = dtf.format(&date);
assert_eq!(
formatted_date.to_string(),
"12 de septiembre de 2020, 12:35:00"
);
Features
ICU4X components share a set of common features that control whether core pieces of functionality are compiled. These features are:
std
: Whether to includestd
support. Without this feature,icu
is#[no_std]
-compatibleserde
: Whether to includeserde::Deserialize
implementations for data structs, such asSymbolsV1
, andserde::{Serialize, Deserialize}
implementations for core libary types, such asLocale
. These are required withserde
-backed providers likeBlobDataProvider
1.experimental
: Whether to enable experimental preview features. Modules enabled with this feature may not be production-ready and could change at any time.
The following features are only available on the individual crates, but not on this meta-crate:
datagen
: Whether to implementserde::Serialize
and functionality that is only required during data generation.bench
: Whether to enable exhaustive benchmarks. This can be enabled on individual crates when runningcargo bench
.
FsDataProvider
also requires theserde_human
feature if JSON is used, as that data is less preprocessed. ↩
Modules
Types for dealing with dates, times, and custom calendars.
Comparing strings according to language-dependent conventions.
Collections of API for use in ICU.
Formatting date and time.
Formatting basic decimal numbers.
Formatting lists in a locale-sensitive way.
Canonicalization of locale identifiers based on CLDR
data.
Parsing, manipulating, and serializing Unicode Language and Locale Identifiers.
Normalizing text into Unicode Normalization Forms.
Determine the plural category appropriate for a given number in a given language.
Definitions of Unicode Properties and APIs for retrieving property data in an appropriate data structure.
[Experimental] Segment strings by lines, graphemes, word, and sentences.
Types for resolving and manipulating timezones