#cldr #icu #locale #unicode #localization

icu_locale_canonicalizer

API for Unicode Language and Locale Identifiers canonicalization

3 releases (breaking)

0.4.0 Nov 2, 2021
0.3.0 Aug 2, 2021
0.2.0 Apr 29, 2021

#98 in Internationalization (i18n)

Download history 97/week @ 2021-10-01 7/week @ 2021-10-08 43/week @ 2021-10-15 32/week @ 2021-10-22 16/week @ 2021-10-29 13/week @ 2021-11-05 7/week @ 2021-11-19 21/week @ 2021-11-26 51/week @ 2021-12-03 37/week @ 2021-12-10 26/week @ 2021-12-17 26/week @ 2021-12-24 12/week @ 2021-12-31 41/week @ 2022-01-07 30/week @ 2022-01-14

109 downloads per month
Used in 4 crates (2 directly)

Custom license

315KB
4.5K SLoC

icu_locale_canonicalizer crates.io

icu_locale_canonicalizer is one of the ICU4X components.

This API provides functionality to canonicalize locale identifiers based upon CLDR data.

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_locale_canonicalizer::{CanonicalizationResult, LocaleCanonicalizer};
use icu_locid::Locale;

let provider = icu_testdata::get_provider();
let lc = LocaleCanonicalizer::new(&provider)
    .expect("create failed");

let mut locale : Locale = "ja-Latn-fonipa-hepburn-heploc".parse()
    .expect("parse failed");
assert_eq!(lc.canonicalize(&mut locale), CanonicalizationResult::Modified);
assert_eq!(locale.to_string(), "ja-Latn-alalc97-fonipa");
use icu_locale_canonicalizer::{CanonicalizationResult, LocaleCanonicalizer};
use icu_locid::Locale;

let provider = icu_testdata::get_provider();
let lc = LocaleCanonicalizer::new(&provider)
    .expect("create failed");

let mut locale : Locale = "zh-CN".parse()
    .expect("parse failed");
assert_eq!(lc.maximize(&mut locale), CanonicalizationResult::Modified);
assert_eq!(locale.to_string(), "zh-Hans-CN");

let mut locale : Locale = "zh-Hant-TW".parse()
    .expect("parse failed");
assert_eq!(lc.maximize(&mut locale), CanonicalizationResult::Unmodified);
assert_eq!(locale.to_string(), "zh-Hant-TW");
use icu_locale_canonicalizer::{CanonicalizationResult, LocaleCanonicalizer};
use icu_locid::Locale;

let provider = icu_testdata::get_provider();
let lc = LocaleCanonicalizer::new(&provider)
    .expect("create failed");

let mut locale : Locale = "zh-Hans-CN".parse()
    .expect("parse failed");
assert_eq!(lc.minimize(&mut locale), CanonicalizationResult::Modified);
assert_eq!(locale.to_string(), "zh");

let mut locale : Locale = "zh".parse()
    .expect("parse failed");
assert_eq!(lc.minimize(&mut locale), CanonicalizationResult::Unmodified);
assert_eq!(locale.to_string(), "zh");

More Information

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

Dependencies

~0.7–1.2MB
~26K SLoC

a