From af26646c41d1e1b48bf8ae9acf6d2bad0c61cc22 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Mon, 24 Feb 2025 10:52:04 +0100 Subject: [PATCH] Upgrade ICU4X crates to 0.15 --- Cargo.lock | 191 ++++++++++++++++++---------------- Cargo.toml | 2 +- crates/axum-utils/Cargo.toml | 2 +- crates/i18n/Cargo.toml | 17 ++- crates/i18n/src/translator.rs | 86 +-------------- 5 files changed, 118 insertions(+), 180 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5a32e7ff2..a0bb31d0a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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 = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_pattern" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3744fecc0df9ce19999cdaf1f9f3a48c253431ce1d67ef499128fe9d0b607ab" +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" diff --git a/Cargo.toml b/Cargo.toml index 5bd8153fb..cd351db2e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" diff --git a/crates/axum-utils/Cargo.toml b/crates/axum-utils/Cargo.toml index a7b967fb1..bc2777658 100644 --- a/crates/axum-utils/Cargo.toml +++ b/crates/axum-utils/Cargo.toml @@ -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 diff --git a/crates/i18n/Cargo.toml b/crates/i18n/Cargo.toml index c6cfa66db..b0360909f 100644 --- a/crates/i18n/Cargo.toml +++ b/crates/i18n/Cargo.toml @@ -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" diff --git a/crates/i18n/src/translator.rs b/crates/i18n/src/translator.rs index 63182727c..2b87eba4f 100644 --- a/crates/i18n/src/translator.rs +++ b/crates/i18n/src/translator.rs @@ -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, plural_provider: LocaleFallbackProvider, - list_provider: LocaleFallbackProvider, 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 + Clone + 'a>( - &'a self, - locale: &DataLocale, - items: I, - ) -> Result { - 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 + Clone + 'a>( - &'a self, - locale: &DataLocale, - items: I, - ) -> Result { - 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 { + ) -> Result { // 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"); - } }