Module icu_locale::extensions
Expand description
Unicode Extensions provide a mechanism to extend the LanguageIdentifier
with
additional bits of information - a combination of a LanguageIdentifier
and Extensions
is called Locale
.
There are four types of extensions:
Unicode Extensions
- marked asu
.Transform Extensions
- marked ast
.Private Use Extensions
- marked asx
.Other Extensions
- marked as anya-z
except ofu
,t
andx
.
One can think of extensions as a bag of extra information on top of basic 4 subtags
.
Notice: Other
extension type is currently not supported.
§Examples
use icu::locale::extensions::unicode::{Key, Value};
use icu::locale::Locale;
let loc: Locale = "en-US-u-ca-buddhist-t-en-us-h0-hybrid-x-foo"
.parse()
.expect("Failed to parse.");
assert_eq!(loc.id.language, "en".parse().unwrap());
assert_eq!(loc.id.script, None);
assert_eq!(loc.id.region, Some("US".parse().unwrap()));
assert_eq!(loc.id.variants.len(), 0);
let key: Key = "ca".parse().expect("Parsing key failed.");
let value: Value = "buddhist".parse().expect("Parsing value failed.");
assert_eq!(loc.extensions.unicode.keywords.get(&key), Some(&value));
§Syntactic vs Semantic Extension Handling
This module is useful when you need to work with Locale extensions at a syntactic level,
perhaps for parsing or generating locale identifiers that include any syntactically valid
extensions.
For handling and validating known CLDR values with semantic meaning, see the
crate::preferences::extensions
module.
Modules§
- Other Use Extensions is a list of extensions other than unicode, transform or private.
- Private Use Extensions is a list of extensions intended for private use.
- Transform Extensions provide information on content transformations in a given locale.
- Unicode Extensions provide information about user preferences in a given locale.
Structs§
- A map of extensions associated with a given
Locale
.
Enums§
- Defines the type of extension.