Struct unic_langid::LanguageIdentifier
source · [−]pub struct LanguageIdentifier {
pub language: Language,
pub script: Option<Script>,
pub region: Option<Region>,
/* private fields */
}
Expand description
LanguageIdentifier
is a core struct representing a Unicode Language Identifier.
Examples
use unic_langid_impl::LanguageIdentifier;
let li: LanguageIdentifier = "en-US".parse()
.expect("Failed to parse.");
assert_eq!(li.language, "en");
assert_eq!(li.script, None);
assert_eq!(li.region.as_ref().map(Into::into), Some("US"));
assert_eq!(li.variants().len(), 0);
Parsing
Unicode recognizes three levels of standard conformance for any language identifier:
- 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_langid_impl::LanguageIdentifier;
let li: LanguageIdentifier = "eN_latn_Us-Valencia".parse()
.expect("Failed to parse.");
assert_eq!(li.language, "en");
assert_eq!(li.script.as_ref().map(Into::into), Some("Latn"));
assert_eq!(li.region.as_ref().map(Into::into), Some("US"));
assert_eq!(li.variants().map(|v| v.as_str()).collect::<Vec<_>>(), &["valencia"]);
Fields
language: Language
script: Option<Script>
region: Option<Region>
Implementations
sourceimpl LanguageIdentifier
impl LanguageIdentifier
sourcepub fn from_bytes(
v: &[u8]
) -> Result<LanguageIdentifier, LanguageIdentifierError>
pub fn from_bytes(
v: &[u8]
) -> Result<LanguageIdentifier, LanguageIdentifierError>
A constructor which takes a utf8 slice, parses it and
produces a well-formed LanguageIdentifier
.
Examples
use unic_langid_impl::LanguageIdentifier;
let li = LanguageIdentifier::from_bytes("en-US".as_bytes())
.expect("Parsing failed.");
assert_eq!(li.to_string(), "en-US");
sourcepub fn from_parts(
language: Language,
script: Option<Script>,
region: Option<Region>,
variants: &[Variant]
) -> LanguageIdentifier
pub fn from_parts(
language: Language,
script: Option<Script>,
region: Option<Region>,
variants: &[Variant]
) -> LanguageIdentifier
A constructor which takes optional subtags as AsRef<[u8]>
, parses them and
produces a well-formed LanguageIdentifier
.
Examples
use unic_langid_impl::LanguageIdentifier;
let li = LanguageIdentifier::from_parts(
"fr".parse().expect("Parsing failed."),
None,
Some("CA".parse().expect("Parsing failed.")),
&[]
);
assert_eq!(li.to_string(), "fr-CA");
sourcepub const fn from_raw_parts_unchecked(
language: Language,
script: Option<Script>,
region: Option<Region>,
variants: Option<Box<[Variant], Global>>
) -> LanguageIdentifier
pub const fn from_raw_parts_unchecked(
language: Language,
script: Option<Script>,
region: Option<Region>,
variants: Option<Box<[Variant], Global>>
) -> LanguageIdentifier
Unchecked
This function accepts subtags expecting variants to be deduplicated and ordered.
sourcepub fn into_parts(
self
) -> (Language, Option<Script>, Option<Region>, Vec<Variant, Global>)
pub fn into_parts(
self
) -> (Language, Option<Script>, Option<Region>, Vec<Variant, Global>)
Consumes LanguageIdentifier
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_langid_impl::LanguageIdentifier;
use tinystr::{TinyStr8, TinyStr4};
let li: LanguageIdentifier = "en-US".parse()
.expect("Parsing failed.");
let (lang, script, region, variants) = li.into_parts();
// let li2 = LanguageIdentifier::from_raw_parts_unchecked(
// lang.map(|l| unsafe { TinyStr8::new_unchecked(l) }),
// script.map(|s| unsafe { TinyStr4::new_unchecked(s) }),
// region.map(|r| unsafe { TinyStr4::new_unchecked(r) }),
// variants.map(|v| v.into_iter().map(|v| unsafe { TinyStr8::new_unchecked(*v) }).collect()),
//);
//assert_eq!(li2.to_string(), "en-US");
sourcepub fn matches<O>(
&self,
other: &O,
self_as_range: bool,
other_as_range: bool
) -> boolwhere
O: AsRef<LanguageIdentifier>,
pub fn matches<O>(
&self,
other: &O,
self_as_range: bool,
other_as_range: bool
) -> boolwhere
O: AsRef<LanguageIdentifier>,
Compares a LanguageIdentifier
to another AsRef<LanguageIdentifier
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_langid_impl::LanguageIdentifier;
let li1: LanguageIdentifier = "en".parse()
.expect("Parsing failed.");
let li2: LanguageIdentifier = "en-US".parse()
.expect("Parsing failed.");
assert_ne!(li1, li2); // "en" != "en-US"
assert_ne!(li1.to_string(), li2.to_string()); // "en" != "en-US"
assert_eq!(li1.matches(&li2, false, false), false); // "en" != "en-US"
assert_eq!(li1.matches(&li2, true, false), true); // "en-*-*-*" == "en-US"
assert_eq!(li1.matches(&li2, false, true), false); // "en" != "en-*-US-*"
assert_eq!(li1.matches(&li2, true, true), true); // "en-*-*-*" == "en-*-US-*"
sourcepub fn variants(&self) -> impl ExactSizeIterator
pub fn variants(&self) -> impl ExactSizeIterator
Returns a vector of variants subtags of the LanguageIdentifier
.
Examples
use unic_langid_impl::LanguageIdentifier;
let li1: LanguageIdentifier = "ca-ES-valencia".parse()
.expect("Parsing failed.");
assert_eq!(li1.variants().map(|v| v.as_str()).collect::<Vec<_>>(), &["valencia"]);
let li2: LanguageIdentifier = "de".parse()
.expect("Parsing failed.");
assert_eq!(li2.variants().len(), 0);
sourcepub fn set_variants(&mut self, variants: &[Variant])
pub fn set_variants(&mut self, variants: &[Variant])
Sets variant subtags of the LanguageIdentifier
.
Examples
use unic_langid_impl::LanguageIdentifier;
let mut li: LanguageIdentifier = "ca-ES".parse()
.expect("Parsing failed.");
li.set_variants(&["valencia".parse().expect("Parsing failed.")]);
assert_eq!(li.to_string(), "ca-ES-valencia");
sourcepub fn has_variant(&self, variant: Variant) -> bool
pub fn has_variant(&self, variant: Variant) -> bool
Tests if a variant subtag is present in the LanguageIdentifier
.
Examples
use unic_langid_impl::LanguageIdentifier;
let mut li: LanguageIdentifier = "ca-ES-macos".parse()
.expect("Parsing failed.");
assert_eq!(li.has_variant("valencia".parse().unwrap()), false);
assert_eq!(li.has_variant("macos".parse().unwrap()), true);
sourcepub fn clear_variants(&mut self)
pub fn clear_variants(&mut self)
Clears variant subtags of the LanguageIdentifier
.
Examples
use unic_langid_impl::LanguageIdentifier;
let mut li: LanguageIdentifier = "ca-ES-valencia".parse()
.expect("Parsing failed.");
li.clear_variants();
assert_eq!(li.to_string(), "ca-ES");
sourcepub fn character_direction(&self) -> CharacterDirection
pub fn character_direction(&self) -> CharacterDirection
Returns character direction of the LanguageIdentifier
.
Examples
use unic_langid_impl::{LanguageIdentifier, CharacterDirection};
let li1: LanguageIdentifier = "es-AR".parse()
.expect("Parsing failed.");
let li2: LanguageIdentifier = "fa".parse()
.expect("Parsing failed.");
assert_eq!(li1.character_direction(), CharacterDirection::LTR);
assert_eq!(li2.character_direction(), CharacterDirection::RTL);
Trait Implementations
sourceimpl AsRef<LanguageIdentifier> for LanguageIdentifier
impl AsRef<LanguageIdentifier> for LanguageIdentifier
sourcefn as_ref(&self) -> &LanguageIdentifier
fn as_ref(&self) -> &LanguageIdentifier
sourceimpl Clone for LanguageIdentifier
impl Clone for LanguageIdentifier
sourcefn clone(&self) -> LanguageIdentifier
fn clone(&self) -> LanguageIdentifier
1.0.0 · sourceconst fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
source
. Read moresourceimpl Debug for LanguageIdentifier
impl Debug for LanguageIdentifier
sourceimpl Default for LanguageIdentifier
impl Default for LanguageIdentifier
sourcefn default() -> LanguageIdentifier
fn default() -> LanguageIdentifier
sourceimpl Display for LanguageIdentifier
impl Display for LanguageIdentifier
sourceimpl FromStr for LanguageIdentifier
impl FromStr for LanguageIdentifier
type Err = LanguageIdentifierError
type Err = LanguageIdentifierError
sourcefn from_str(
source: &str
) -> Result<LanguageIdentifier, <LanguageIdentifier as FromStr>::Err>
fn from_str(
source: &str
) -> Result<LanguageIdentifier, <LanguageIdentifier as FromStr>::Err>
s
to return a value of this type. Read moresourceimpl Hash for LanguageIdentifier
impl Hash for LanguageIdentifier
sourceimpl Ord for LanguageIdentifier
impl Ord for LanguageIdentifier
sourcefn cmp(&self, other: &LanguageIdentifier) -> Ordering
fn cmp(&self, other: &LanguageIdentifier) -> Ordering
1.21.0 · sourceconst fn max(self, other: Self) -> Self
const fn max(self, other: Self) -> Self
1.21.0 · sourceconst fn min(self, other: Self) -> Self
const fn min(self, other: Self) -> Self
1.50.0 · sourceconst fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: PartialOrd<Self>,
const fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: PartialOrd<Self>,
sourceimpl PartialEq<LanguageIdentifier> for LanguageIdentifier
impl PartialEq<LanguageIdentifier> for LanguageIdentifier
sourcefn eq(&self, other: &LanguageIdentifier) -> bool
fn eq(&self, other: &LanguageIdentifier) -> bool
sourceimpl PartialOrd<LanguageIdentifier> for LanguageIdentifier
impl PartialOrd<LanguageIdentifier> for LanguageIdentifier
sourcefn partial_cmp(&self, other: &LanguageIdentifier) -> Option<Ordering>
fn partial_cmp(&self, other: &LanguageIdentifier) -> Option<Ordering>
1.0.0 · sourceconst fn le(&self, other: &Rhs) -> bool
const fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more