9 stable releases

1.5.0 May 28, 2024
1.4.0 Nov 16, 2023
1.3.2 Oct 3, 2023
1.3.0 Sep 23, 2023
1.0.0-beta1 Aug 5, 2022

#28 in Internationalization (i18n)

Download history 21051/week @ 2024-03-14 20192/week @ 2024-03-21 18569/week @ 2024-03-28 19410/week @ 2024-04-04 20091/week @ 2024-04-11 21986/week @ 2024-04-18 19619/week @ 2024-04-25 21304/week @ 2024-05-02 20314/week @ 2024-05-09 19829/week @ 2024-05-16 26396/week @ 2024-05-23 23791/week @ 2024-05-30 275037/week @ 2024-06-06 575807/week @ 2024-06-13 245782/week @ 2024-06-20 151744/week @ 2024-06-27

1,252,195 downloads per month
Used in 81 crates (21 directly)

Unicode-3.0

1MB
21K SLoC

icu_locid_transform 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

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

let lc = LocaleCanonicalizer::new();

let mut locale: Locale = "ja-Latn-fonipa-hepburn-heploc"
    .parse()
    .expect("parse failed");
assert_eq!(lc.canonicalize(&mut locale), TransformResult::Modified);
assert_eq!(locale, "ja-Latn-alalc97-fonipa".parse::<Locale>().unwrap());
use icu::locid::locale;
use icu::locid_transform::{LocaleExpander, TransformResult};

let lc = LocaleExpander::new();

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

let mut locale = locale!("zh-Hant-TW");
assert_eq!(lc.maximize(&mut locale), TransformResult::Unmodified);
assert_eq!(locale, locale!("zh-Hant-TW"));
use icu::locid::locale;
use icu::locid_transform::{LocaleExpander, TransformResult};
use writeable::assert_writeable_eq;

let lc = LocaleExpander::new();

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

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

More Information

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

Dependencies

~0.8–1.4MB
~28K SLoC