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
impl LanguageIdentifier
impl LanguageIdentifier
pub 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");
pub 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");
pub 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.
pub 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");
pub fn matches<O>(
&self,
other: &O,
self_as_range: bool,
other_as_range: bool
) -> bool where
O: AsRef<LanguageIdentifier>,
pub fn matches<O>(
&self,
other: &O,
self_as_range: bool,
other_as_range: bool
) -> bool where
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-*"
pub 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);
pub 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");
pub 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);
pub 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");
pub 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
impl AsRef<LanguageIdentifier> for LanguageIdentifier
impl AsRef<LanguageIdentifier> for LanguageIdentifier
fn as_ref(&self) -> &LanguageIdentifier
fn as_ref(&self) -> &LanguageIdentifier
Converts this type into a shared reference of the (usually inferred) input type.
impl Clone for LanguageIdentifier
impl Clone for LanguageIdentifier
fn clone(&self) -> LanguageIdentifier
fn clone(&self) -> LanguageIdentifier
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
impl Debug for LanguageIdentifier
impl Debug for LanguageIdentifier
impl Default for LanguageIdentifier
impl Default for LanguageIdentifier
fn default() -> LanguageIdentifier
fn default() -> LanguageIdentifier
Returns the “default value” for a type. Read more
impl Display for LanguageIdentifier
impl Display for LanguageIdentifier
impl FromStr for LanguageIdentifier
impl FromStr for LanguageIdentifier
type Err = LanguageIdentifierError
type Err = LanguageIdentifierError
The associated error which can be returned from parsing.
fn from_str(
source: &str
) -> Result<LanguageIdentifier, <LanguageIdentifier as FromStr>::Err>
fn from_str(
source: &str
) -> Result<LanguageIdentifier, <LanguageIdentifier as FromStr>::Err>
Parses a string s
to return a value of this type. Read more
impl Hash for LanguageIdentifier
impl Hash for LanguageIdentifier
impl Ord for LanguageIdentifier
impl Ord for LanguageIdentifier
impl<'_> PartialEq<&'_ str> for LanguageIdentifier
impl<'_> PartialEq<&'_ str> for LanguageIdentifier
impl PartialEq<LanguageIdentifier> for LanguageIdentifier
impl PartialEq<LanguageIdentifier> for LanguageIdentifier
fn eq(&self, other: &LanguageIdentifier) -> bool
fn eq(&self, other: &LanguageIdentifier) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
fn ne(&self, other: &LanguageIdentifier) -> bool
fn ne(&self, other: &LanguageIdentifier) -> bool
This method tests for !=
.
impl PartialOrd<LanguageIdentifier> for LanguageIdentifier
impl PartialOrd<LanguageIdentifier> for LanguageIdentifier
fn partial_cmp(&self, other: &LanguageIdentifier) -> Option<Ordering>
fn partial_cmp(&self, other: &LanguageIdentifier) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl Eq for LanguageIdentifier
impl StructuralEq for LanguageIdentifier
impl StructuralPartialEq for LanguageIdentifier
Auto Trait Implementations
impl RefUnwindSafe for LanguageIdentifier
impl Send for LanguageIdentifier
impl Sync for LanguageIdentifier
impl Unpin for LanguageIdentifier
impl UnwindSafe for LanguageIdentifier
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
sourceimpl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcefn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to key
and return true
if they are equal.
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
fn into_collection<A>(self) -> SmallVec<A> where
A: Array<Item = T>,
fn into_collection<A>(self) -> SmallVec<A> where
A: Array<Item = T>,
Converts self
into a collection.
fn mapped<U, F, A>(self, f: F) -> SmallVec<A> where
F: FnMut(T) -> U,
A: Array<Item = U>,
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more