[][src]Struct unic_locale::Locale

pub struct Locale {
    pub id: LanguageIdentifier,
    pub extensions: ExtensionsMap,
}

Locale is a core struct representing a Unicode Locale Identifier.

A locale is made of two parts:

  • id - Unicode Language Identifier
  • extensions - A set of Unicode Extensions

Locale exposes all of the same methods as LanguageIdentifier, and on top of that is able to parse, manipulate and serialize unicode extension fields.

Examples

use unic_locale_impl::Locale;

let loc: Locale = "en-US-u-ca-buddhist".parse()
    .expect("Failed to parse.");

assert_eq!(loc.id.language, "en");
assert_eq!(loc.id.script, None);
assert_eq!(loc.id.region, Some("US".parse().unwrap()));
assert_eq!(loc.id.variants().len(), 0);
assert_eq!(loc.extensions.unicode.keyword("ca")
    .expect("Getting keyword failed.")
    .collect::<Vec<_>>(),
    &["buddhist"]);

Parsing

Unicode recognizes three levels of standard conformance for a locale:

  • well-formed - syntactically correct
  • valid - well-formed and only uses registered language subtags, extensions, keywords, types...
  • canonical - valid and no deprecated codes or structure.

At the moment parsing normalizes a well-formed language identifier converting _ separators to - and adjusting casing to conform to the Unicode standard.

Any bogus subtags will cause the parsing to fail with an error. No subtag validation is performed.

Examples:

use unic_locale_impl::Locale;

let loc: Locale = "eN_latn_Us-Valencia_u-hC-H12".parse()
    .expect("Failed to parse.");

assert_eq!(loc.id.language, "en");
assert_eq!(loc.id.script, Some("Latn".parse().unwrap()));
assert_eq!(loc.id.region, Some("US".parse().unwrap()));
assert_eq!(loc.id.variants().collect::<Vec<_>>(), &["valencia"]);

Fields

id: LanguageIdentifierextensions: ExtensionsMap

Methods

impl Locale[src]

pub fn from_bytes(v: &[u8]) -> Result<Locale, LocaleError>[src]

A constructor which takes a utf8 slice, parses it and produces a well-formed Locale.

Examples

use unic_locale_impl::Locale;

let loc = Locale::from_bytes("en-US-u-hc-h12".as_bytes())
    .expect("Parsing failed.");

assert_eq!(loc.to_string(), "en-US-u-hc-h12");

pub fn from_parts(
    language: Language,
    script: Option<Script>,
    region: Option<Region>,
    variants: &[Variant],
    extensions: Option<ExtensionsMap>
) -> Locale
[src]

A constructor which takes optional subtags as AsRef<[u8]>, parses them and produces a well-formed Locale.

Examples

use unic_locale_impl::Locale;

let loc = Locale::from_parts("fr".parse().unwrap(), None, Some("CA".parse().unwrap()), &[], None);

assert_eq!(loc.to_string(), "fr-CA");

pub const unsafe fn from_raw_parts_unchecked(
    language: Language,
    script: Option<Script>,
    region: Option<Region>,
    variants: Option<Box<[Variant]>>,
    extensions: ExtensionsMap
) -> Locale
[src]

Safety

This function accepts subtags expecting variants to be deduplicated and ordered.

pub fn into_parts(
    self
) -> (Language, Option<Script>, Option<Region>, Vec<Variant>, String)
[src]

Consumes Locale and produces raw internal representations of all subtags in form of u64/u32.

Primarily used for storing internal representation and restoring via from_raw_parts_unchecked.

Examples

use unic_locale_impl::Locale;
use tinystr::{TinyStr8, TinyStr4};

let loc: Locale = "en-US".parse()
    .expect("Parsing failed.");

let (lang, script, region, variants, extensions) = loc.into_parts();

let loc2 = Locale::from_parts(
    lang,
    script,
    region,
    &variants,
    Some(extensions.parse().unwrap())
);

assert_eq!(loc2.to_string(), "en-US");

pub fn matches<O>(
    &self,
    other: &O,
    self_as_range: bool,
    other_as_range: bool
) -> bool where
    O: AsRef<Locale>, 
[src]

Compares a Locale to another AsRef<Locale allowing for either side to use the missing fields as wildcards.

This allows for matching between en (treated as en-*-*-*) and en-US.

Examples

use unic_locale_impl::Locale;

let loc1: Locale = "en".parse()
    .expect("Parsing failed.");

let loc2: Locale = "en-US".parse()
    .expect("Parsing failed.");

assert_ne!(loc1, loc2); // "en" != "en-US"
assert_ne!(loc1.to_string(), loc2.to_string()); // "en" != "en-US"

assert_eq!(loc1.matches(&loc2, false, false), false); // "en" != "en-US"
assert_eq!(loc1.matches(&loc2, true, false), true); // "en-*-*-*" == "en-US"
assert_eq!(loc1.matches(&loc2, false, true), false); // "en" != "en-*-US-*"
assert_eq!(loc1.matches(&loc2, true, true), true); // "en-*-*-*" == "en-*-US-*"

Trait Implementations

impl AsRef<LanguageIdentifier> for Locale[src]

impl AsRef<Locale> for Locale[src]

impl Clone for Locale[src]

impl Debug for Locale[src]

impl Default for Locale[src]

impl Display for Locale[src]

impl Eq for Locale[src]

impl From<LanguageIdentifier> for Locale[src]

impl FromStr for Locale[src]

type Err = LocaleError

The associated error which can be returned from parsing.

impl Hash for Locale[src]

impl Into<LanguageIdentifier> for Locale[src]

impl Ord for Locale[src]

impl PartialEq<Locale> for Locale[src]

impl PartialOrd<Locale> for Locale[src]

impl StructuralEq for Locale[src]

impl StructuralPartialEq for Locale[src]

Auto Trait Implementations

impl RefUnwindSafe for Locale

impl Send for Locale

impl Sync for Locale

impl Unpin for Locale

impl UnwindSafe for Locale

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.