Upgrade ICU4X crates to 0.15

This commit is contained in:
Quentin Gliech
2025-02-24 10:52:04 +01:00
parent 4925bbad29
commit 7167e970b0
5 changed files with 118 additions and 180 deletions

191
Cargo.lock generated
View File

@@ -2380,9 +2380,9 @@ dependencies = [
[[package]]
name = "icu_calendar"
version = "1.4.0"
version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7eb932a690c92f87955e923106181ee0d5682e688ff37fb5c7b296e1fe806edb"
checksum = "7265b2137f9a36f7634a308d91f984574bbdba8cfd95ceffe1c345552275a8ff"
dependencies = [
"calendrical_calculations",
"displaydoc",
@@ -2397,15 +2397,15 @@ dependencies = [
[[package]]
name = "icu_calendar_data"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22aec7d032735d9acb256eeef72adcac43c3b7572f19b51576a63d664b524ca2"
checksum = "8e009b7f0151ee6fb28c40b1283594397e0b7183820793e9ace3dcd13db126d0"
[[package]]
name = "icu_collections"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "137d96353afc8544d437e8a99eceb10ab291352699573b0de5b08bda38c78c60"
checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
dependencies = [
"displaydoc",
"yoke",
@@ -2415,9 +2415,9 @@ dependencies = [
[[package]]
name = "icu_datetime"
version = "1.4.0"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1508c7ed627cc0b031c81203eb98f34433e24b32b39d5b2c0238e4962a00957d"
checksum = "d115efb85e08df3fd77e77f52e7e087545a783fffba8be80bfa2102f306b1780"
dependencies = [
"displaydoc",
"either",
@@ -2438,20 +2438,19 @@ dependencies = [
[[package]]
name = "icu_datetime_data"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6abc569cb4ee80b30707566f05c5c9ed4bed765f91ce41e7f5a37c5e6a75b3f"
checksum = "2ba7e7f7a01269b9afb0a39eff4f8676f693b55f509b3120e43a0350a9f88bea"
[[package]]
name = "icu_decimal"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf994f9ed8061c17bb313f28fba6cffc736f0a16c7fab827efc9b73fd3f7778"
checksum = "fb8fd98f86ec0448d85e1edf8884e4e318bb2e121bd733ec929a05c0a5e8b0eb"
dependencies = [
"displaydoc",
"fixed_decimal",
"icu_decimal_data",
"icu_locid",
"icu_locid_transform",
"icu_provider",
"writeable",
@@ -2459,35 +2458,51 @@ dependencies = [
[[package]]
name = "icu_decimal_data"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df2de3548316b697c70f30dec1395c9212db09df1d86a27624ee24872b71326c"
checksum = "8d424c994071c6f5644f999925fc868c85fec82295326e75ad5017bc94b41523"
[[package]]
name = "icu_list"
version = "1.4.0"
name = "icu_experimental"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe6c04ec71ad1bacdbfb47164d4801f80a0533d9340f94f1a880f521eff59f54"
checksum = "844ad7b682a165c758065d694bc4d74ac67f176da1c499a04d85d492c0f193b7"
dependencies = [
"displaydoc",
"icu_list_data",
"fixed_decimal",
"icu_collections",
"icu_decimal",
"icu_experimental_data",
"icu_locid",
"icu_locid_transform",
"icu_normalizer",
"icu_pattern",
"icu_plurals",
"icu_properties",
"icu_provider",
"regex-automata 0.2.0",
"litemap",
"num-bigint",
"num-rational",
"num-traits",
"smallvec",
"tinystr",
"writeable",
"zerofrom",
"zerotrie",
"zerovec",
]
[[package]]
name = "icu_list_data"
version = "1.4.0"
name = "icu_experimental_data"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f6afcf7a9a7fedece70b7f17d7a7ecdfb8df145d37ae46d0277cd1e3932532"
checksum = "9c178b9a34083fca5bd70d61f647575335e9c197d0f30c38e8ccd187babc69d0"
[[package]]
name = "icu_locid"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c0aa2536adc14c07e2a521e95512b75ed8ef832f0fdf9299d4a0a45d2be2a9d"
checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
dependencies = [
"displaydoc",
"litemap",
@@ -2498,9 +2513,9 @@ dependencies = [
[[package]]
name = "icu_locid_transform"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c17d8f6524fdca4471101dd71f0a132eb6382b5d6d7f2970441cb25f6f435a"
checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
dependencies = [
"displaydoc",
"icu_locid",
@@ -2512,15 +2527,15 @@ dependencies = [
[[package]]
name = "icu_locid_transform_data"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "545c6c3e8bf9580e2dafee8de6f9ec14826aaf359787789c7724f1f85f47d3dc"
checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
[[package]]
name = "icu_normalizer"
version = "1.4.3"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accb85c5b2e76f8dade22978b3795ae1e550198c6cfc7e915144e17cd6e2ab56"
checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
dependencies = [
"displaydoc",
"icu_collections",
@@ -2536,19 +2551,31 @@ dependencies = [
[[package]]
name = "icu_normalizer_data"
version = "1.4.1"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3744fecc0df9ce19999cdaf1f9f3a48c253431ce1d67ef499128fe9d0b607ab"
checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
[[package]]
name = "icu_pattern"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb7f36aafd098d6717de34e668a8120822275c1fba22b936e757b7de8a2fd7e4"
dependencies = [
"displaydoc",
"either",
"writeable",
"yoke",
"zerofrom",
]
[[package]]
name = "icu_plurals"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37d807b123eb2a9ae8f12080fb8cce479f5c8a761fba0bb5ab52da6dd5e31a03"
checksum = "ba5a70e7c025dbd5c501b0a5c188cd11666a424f0dadcd4f0a95b7dafde3b114"
dependencies = [
"displaydoc",
"fixed_decimal",
"icu_locid",
"icu_locid_transform",
"icu_plurals_data",
"icu_provider",
@@ -2557,15 +2584,15 @@ dependencies = [
[[package]]
name = "icu_plurals_data"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3acd5f1f2f988ed2dae9316c3d3560dfe4e03a7516d142b4b89b92252ada41a"
checksum = "9e3e8f775b215d45838814a090a2227247a7431d74e9156407d9c37f6ef0f208"
[[package]]
name = "icu_properties"
version = "1.4.3"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db9e559598096627aeca8cdfb98138a70eb4078025f8d1d5f2416a361241f756"
checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
dependencies = [
"displaydoc",
"icu_collections",
@@ -2578,15 +2605,15 @@ dependencies = [
[[package]]
name = "icu_properties_data"
version = "1.4.1"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e70a8b51ee5dd4ff8f20ee9b1dd1bc07afc110886a3747b1fec04cc6e5a15815"
checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
[[package]]
name = "icu_provider"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba58e782287eb6950247abbf11719f83f5d4e4a5c1f2cd490d30a334bc47c2f4"
checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
dependencies = [
"displaydoc",
"icu_locid",
@@ -2601,9 +2628,9 @@ dependencies = [
[[package]]
name = "icu_provider_adapters"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a229f978260da7c3aabb68cb7dc7316589936680570fe55e50fdd3f97711a4dd"
checksum = "d6324dfd08348a8e0374a447ebd334044d766b1839bb8d5ccf2482a99a77c0bc"
dependencies = [
"icu_locid",
"icu_locid_transform",
@@ -2614,47 +2641,23 @@ dependencies = [
[[package]]
name = "icu_provider_macros"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2abdd3a62551e8337af119c5899e600ca0c88ec8f23a46c60ba216c803dcf1a"
checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "icu_relativetime"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47825312a5eb0790bad7b718fa8d41a8ea1e0ba597b4f7bb84bcfe97d7fc5aba"
dependencies = [
"displaydoc",
"fixed_decimal",
"icu_decimal",
"icu_locid_transform",
"icu_plurals",
"icu_provider",
"icu_relativetime_data",
"writeable",
"zerovec",
]
[[package]]
name = "icu_relativetime_data"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05b55cc15ea8981fbba78e9347d0c4003d4490c85f76e9adc7f270290046cae8"
[[package]]
name = "icu_timezone"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b35aabe571a7c653c0f543ff1512b8a1b2ad481cfa24b3d25115298d2ff3b50f"
checksum = "aa91ba6a585939a020c787235daa8aee856d9bceebd6355e283c0c310bc6de96"
dependencies = [
"displaydoc",
"icu_calendar",
"icu_locid",
"icu_provider",
"icu_timezone_data",
"tinystr",
@@ -2664,9 +2667,9 @@ dependencies = [
[[package]]
name = "icu_timezone_data"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ceee21e181cce2ab44e95923da6b3418df75369f570df82264c29c51ca398d4"
checksum = "c588878c508a3e2ace333b3c50296053e6483c6a7541251b546cc59dcd6ced8e"
[[package]]
name = "id-arena"
@@ -3338,13 +3341,12 @@ dependencies = [
"camino",
"icu_calendar",
"icu_datetime",
"icu_list",
"icu_experimental",
"icu_locid",
"icu_locid_transform",
"icu_plurals",
"icu_provider",
"icu_provider_adapters",
"icu_relativetime",
"pad",
"pest",
"pest_derive",
@@ -3856,6 +3858,16 @@ dependencies = [
"winapi",
]
[[package]]
name = "num-bigint"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
dependencies = [
"num-integer",
"num-traits",
]
[[package]]
name = "num-bigint-dig"
version = "0.8.4"
@@ -3899,6 +3911,17 @@ dependencies = [
"num-traits",
]
[[package]]
name = "num-rational"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
dependencies = [
"num-bigint",
"num-integer",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.19"
@@ -4861,15 +4884,6 @@ dependencies = [
"regex-syntax 0.6.29",
]
[[package]]
name = "regex-automata"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9368763f5a9b804326f3af749e16f9abf378d227bcdee7634b13d8f17793782"
dependencies = [
"memchr",
]
[[package]]
name = "regex-automata"
version = "0.4.9"
@@ -7522,6 +7536,9 @@ name = "writeable"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
dependencies = [
"either",
]
[[package]]
name = "yansi"

View File

@@ -1,7 +1,7 @@
[workspace]
default-members = ["crates/cli"]
members = ["crates/*"]
resolver = "3"
resolver = "2"
# Updated in the CI with a `sed` command
package.version = "0.14.1"

View File

@@ -18,7 +18,7 @@ chrono.workspace = true
data-encoding = "2.8.0"
headers.workspace = true
http.workspace = true
icu_locid = "1.4.0"
icu_locid = "1.5.0"
mime = "0.3.17"
rand.workspace = true
reqwest.workspace = true

View File

@@ -13,15 +13,14 @@ workspace = true
[dependencies]
camino.workspace = true
icu_calendar = { version = "1.4.0", features = ["compiled_data", "std"] }
icu_datetime = { version = "1.4.0", features = ["compiled_data", "std"] }
icu_list = { version = "1.4.0", features = ["compiled_data", "std"] }
icu_locid = { version = "1.4.0", features = ["std"] }
icu_locid_transform = { version = "1.4.0", features = ["compiled_data", "std"] }
icu_plurals = { version = "1.4.0", features = ["compiled_data", "std"] }
icu_provider = { version = "1.4.0", features = ["std", "sync"] }
icu_provider_adapters = { version = "1.4.0", features = ["std"] }
icu_relativetime = { version = "0.1.4", features = ["compiled_data", "std"] }
icu_calendar = { version = "1.5.2", features = ["compiled_data", "std"] }
icu_datetime = { version = "1.5.1", features = ["compiled_data", "std"] }
icu_locid = { version = "1.5.0", features = ["std"] }
icu_locid_transform = { version = "1.5.0", features = ["compiled_data", "std"] }
icu_plurals = { version = "1.5.0", features = ["compiled_data", "std"] }
icu_provider = { version = "1.5.0", features = ["std", "sync"] }
icu_provider_adapters = { version = "1.5.0", features = ["std"] }
icu_experimental = { version = "0.1.0", features = ["compiled_data", "std"] }
pad = "0.1.6"
pest = "2.7.15"
pest_derive = "2.7.15"

View File

@@ -7,7 +7,9 @@
use std::{collections::HashMap, fs::File, io::BufReader, str::FromStr};
use camino::{Utf8Path, Utf8PathBuf};
use icu_list::{ListError, ListFormatter, ListLength};
use icu_experimental::relativetime::{
RelativeTimeFormatter, RelativeTimeFormatterOptions, options::Numeric,
};
use icu_locid::{Locale, ParserError};
use icu_locid_transform::fallback::{
LocaleFallbackPriority, LocaleFallbackSupplement, LocaleFallbacker, LocaleFallbackerWithConfig,
@@ -18,7 +20,6 @@ use icu_provider::{
fallback::LocaleFallbackConfig,
};
use icu_provider_adapters::fallback::LocaleFallbackProvider;
use icu_relativetime::{RelativeTimeFormatter, RelativeTimeFormatterOptions, options::Numeric};
use thiserror::Error;
use writeable::Writeable;
@@ -74,7 +75,6 @@ pub enum LoadError {
pub struct Translator {
translations: HashMap<DataLocale, TranslationTree>,
plural_provider: LocaleFallbackProvider<icu_plurals::provider::Baked>,
list_provider: LocaleFallbackProvider<icu_list::provider::Baked>,
default_locale: DataLocale,
}
@@ -87,13 +87,10 @@ impl Translator {
icu_plurals::provider::Baked,
fallbacker.clone(),
);
let list_provider =
LocaleFallbackProvider::new_with_fallbacker(icu_list::provider::Baked, fallbacker);
Self {
translations,
plural_provider,
list_provider,
// TODO: make this configurable
default_locale: icu_locid::locale!("en").into(),
}
@@ -293,56 +290,6 @@ impl Translator {
Ok(message)
}
/// Format a list of items with the "and" conjunction.
///
/// # Parameters
///
/// * `locale` - The locale to use.
/// * `items` - The items to format.
///
/// # Errors
///
/// Returns an error if the requested locale is not found.
pub fn and_list<'a, W: Writeable + 'a, I: Iterator<Item = W> + Clone + 'a>(
&'a self,
locale: &DataLocale,
items: I,
) -> Result<String, ListError> {
let formatter = ListFormatter::try_new_and_with_length_unstable(
&self.list_provider,
locale,
ListLength::Wide,
)?;
let list = formatter.format_to_string(items);
Ok(list)
}
/// Format a list of items with the "or" conjunction.
///
/// # Parameters
///
/// * `locale` - The locale to use.
/// * `items` - The items to format.
///
/// # Errors
///
/// Returns an error if the requested locale is not found.
pub fn or_list<'a, W: Writeable + 'a, I: Iterator<Item = W> + Clone + 'a>(
&'a self,
locale: &DataLocale,
items: I,
) -> Result<String, ListError> {
let formatter = ListFormatter::try_new_or_with_length_unstable(
&self.list_provider,
locale,
ListLength::Wide,
)?;
let list = formatter.format_to_string(items);
Ok(list)
}
/// Format a relative date
///
/// # Parameters
@@ -358,7 +305,7 @@ impl Translator {
&self,
locale: &DataLocale,
days: i64,
) -> Result<String, icu_relativetime::RelativeTimeError> {
) -> Result<String, icu_experimental::relativetime::RelativeTimeError> {
// TODO: this is not using the fallbacker
let formatter = RelativeTimeFormatter::try_new_long_day(
locale,
@@ -529,29 +476,4 @@ mod tests {
assert_eq!(formatted, "1 active session.");
assert_eq!(locale, locale!("en").into());
}
#[test]
fn test_list() {
let translator = translator();
let list = translator
.and_list(&locale!("en").into(), ["one", "two", "three"].iter())
.unwrap();
assert_eq!(list, "one, two, and three");
let list = translator
.and_list(&locale!("fr").into(), ["un", "deux", "trois"].iter())
.unwrap();
assert_eq!(list, "un, deux et trois");
let list = translator
.or_list(&locale!("en").into(), ["one", "two", "three"].iter())
.unwrap();
assert_eq!(list, "one, two, or three");
let list = translator
.or_list(&locale!("fr").into(), ["un", "deux", "trois"].iter())
.unwrap();
assert_eq!(list, "un, deux ou trois");
}
}