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:

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.


use icu::locid::extensions::unicode::{Key, Value};
use icu::locid::Locale;

let loc: Locale = "en-US-u-ca-buddhist-t-en-US-h0-hybrid-x-foo"
    .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));


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.


A map of extensions associated with a given Locale.


Defines the type of extension.