iculocidtransform crates.io

Canonicalization of locale identifiers based on [CLDR] data.

This module is published as its own crate (icu_locid_transform) and as part of the icu crate. See the latter for more details on the ICU4X project.

It currently supports locale canonicalization based upon the canonicalization algorithm from [UTS #35: Unicode LDML 3. LocaleId Canonicalization], as well as the minimize and maximize likely subtags algorithms as described in [UTS #35: Unicode LDML 3. Likely Subtags].

The maximize method potentially updates a passed in locale in place depending up the results of running the 'Add Likely Subtags' algorithm from [UTS #35: Unicode LDML 3. Likely Subtags].

This minimize method returns a new Locale that is the result of running the 'Remove Likely Subtags' algorithm from [UTS #35: Unicode LDML 3. Likely Subtags].

Examples

```rust use icu::locid::Locale; use icu::locid_transform::{LocaleCanonicalizer, TransformResult};

let lc = LocaleCanonicalizer::trynewunstable(&icu_testdata::unstable()) .expect("create failed");

let mut locale: Locale = "ja-Latn-fonipa-hepburn-heploc" .parse() .expect("parse failed"); asserteq!(lc.canonicalize(&mut locale), TransformResult::Modified); asserteq!(locale, "ja-Latn-alalc97-fonipa".parse::().unwrap()); ```

```rust use icu::locid::locale; use icu::locid_transform::{LocaleExpander, TransformResult};

let lc = LocaleExpander::trynewunstable(&icu_testdata::unstable()) .expect("create failed");

let mut locale = locale!("zh-CN"); asserteq!(lc.maximize(&mut locale), TransformResult::Modified); asserteq!(locale, locale!("zh-Hans-CN"));

let mut locale = locale!("zh-Hant-TW"); asserteq!(lc.maximize(&mut locale), TransformResult::Unmodified); asserteq!(locale, locale!("zh-Hant-TW")); ```

```rust use icu::locid::locale; use icu::locidtransform::{LocaleExpander, TransformResult}; use writeable::assertwriteable_eq;

let lc = LocaleExpander::trynewunstable(&icu_testdata::unstable()) .expect("create failed");

let mut locale = locale!("zh-Hans-CN"); asserteq!(lc.minimize(&mut locale), TransformResult::Modified); asserteq!(locale, locale!("zh"));

let mut locale = locale!("zh"); asserteq!(lc.minimize(&mut locale), TransformResult::Unmodified); asserteq!(locale, locale!("zh")); ```

More Information

For more information on development, authorship, contributing etc. please visit ICU4X home page.