pub struct LocaleCanonicalizer { /* private fields */ }
Expand description
LocaleCanonicalizer implementation.
The LocaleCanonicalizer provides methods to canonicalize Locales and
LanguageIdentifiers based upon CLDR
data.
It currently supports locale canonicalization based upon the canonicalization
algorithm from UTS #35: Unicode LDML 3. LocaleId Canonicalization
.
It also supports 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");
Implementations
sourceimpl LocaleCanonicalizer
impl LocaleCanonicalizer
sourcepub fn new<P>(provider: &P) -> Result<LocaleCanonicalizer, DataError> where
P: ResourceProvider<AliasesV1Marker> + ResourceProvider<LikelySubtagsV1Marker> + ?Sized,
pub fn new<P>(provider: &P) -> Result<LocaleCanonicalizer, DataError> where
P: ResourceProvider<AliasesV1Marker> + ResourceProvider<LikelySubtagsV1Marker> + ?Sized,
A constructor which takes a ResourceProvider
and creates a LocaleCanonicalizer
.
sourcepub fn canonicalize(&self, locale: &mut Locale) -> CanonicalizationResult
pub fn canonicalize(&self, locale: &mut Locale) -> CanonicalizationResult
The canonicalize method potentially updates a passed in locale in place depending up the results of running the canonicalization algorithm from http://unicode.org/reports/tr35/#LocaleId_Canonicalization.
Some BCP47 canonicalization data is not part of the CLDR json package. Because
of this, some canonicalizations are not performed, e.g. the canonicalization of
und-u-ca-islamicc
to und-u-ca-islamic-civil
. This will be fixed in a future
release once the missing data has been added to the CLDR json data.
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");
sourcepub fn maximize<T: AsMut<LanguageIdentifier>>(
&self,
langid: T
) -> CanonicalizationResult
pub fn maximize<T: AsMut<LanguageIdentifier>>(
&self,
langid: T
) -> CanonicalizationResult
The maximize method potentially updates a passed in locale in place depending up the results of running the ‘Add Likely Subtags’ algorithm from https://www.unicode.org/reports/tr35/#Likely_Subtags.
If the result of running the algorithm would result in a new locale, the
locale argument is updated in place to match the result, and the method
returns CanonicalizationResult::Modified
. Otherwise, the method
returns CanonicalizationResult::Unmodified
and the locale argument is
unchanged.
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 = "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");
sourcepub fn minimize<T: AsMut<LanguageIdentifier>>(
&self,
langid: T
) -> CanonicalizationResult
pub fn minimize<T: AsMut<LanguageIdentifier>>(
&self,
langid: T
) -> CanonicalizationResult
This returns a new Locale that is the result of running the ‘Remove Likely Subtags’ algorithm from https://www.unicode.org/reports/tr35/#Likely_Subtags.
If the result of running the algorithm would result in a new locale, the
locale argument is updated in place to match the result, and the method
returns CanonicalizationResult::Modified
. Otherwise, the method
returns CanonicalizationResult::Unmodified
and the locale argument is
unchanged.
Examples
use icu_locale_canonicalizer::{CanonicalizationResult, LocaleCanonicalizer};
use icu_locid::Locale;
let provider = icu_testdata::get_provider();
let lc = LocaleCanonicalizer::new(&provider)
.expect("creation 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");
Auto Trait Implementations
impl RefUnwindSafe for LocaleCanonicalizer
impl !Send for LocaleCanonicalizer
impl !Sync for LocaleCanonicalizer
impl Unpin for LocaleCanonicalizer
impl UnwindSafe for LocaleCanonicalizer
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more