Struct LanguageIdentifier
struct LanguageIdentifier { ... }
A core struct representing a Unicode BCP47 Language Identifier.
Ordering
This type deliberately does not implement Ord or PartialOrd because there are
multiple possible orderings. Depending on your use case, two orderings are available:
- A string ordering, suitable for stable serialization:
LanguageIdentifier::strict_cmp - A struct ordering, suitable for use with a BTreeSet:
LanguageIdentifier::total_cmp
See issue: https://github.com/unicode-org/icu4x/issues/1215
Parsing
Unicode recognizes three levels of standard conformance for any language identifier:
- well-formed - syntactically correct
- valid - well-formed and only uses registered language, region, script and variant subtags...
- 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 syntactically invalid subtags will cause the parsing to fail with an error.
This operation normalizes syntax to be well-formed. No legacy subtag replacements is performed.
For validation and canonicalization, see LocaleCanonicalizer.
Examples
Simple example:
use ;
let li = langid!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
More complex example:
use ;
let li = langid!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
Fields
language: LanguageLanguage subtag of the language identifier.
script: Option<Script>Script subtag of the language identifier.
region: Option<Region>Region subtag of the language identifier.
variants: VariantsVariant subtags of the language identifier.
Implementations
impl LanguageIdentifier
impl LanguageIdentifier
const fn is_unknown(self: &Self) -> boolWhether this
LanguageIdentifierequalsLanguageIdentifier::UNKNOWN.fn strict_cmp(self: &Self, other: &[u8]) -> OrderingCompare this
LanguageIdentifierwith BCP-47 bytes.The return value is equivalent to what would happen if you first converted this
LanguageIdentifierto a BCP-47 string and then performed a byte comparison.This function is case-sensitive and results in a total order, so it is appropriate for binary search. The only argument producing
Ordering::Equalisself.to_string().Examples
Sorting a list of langids with this method requires converting one of them to a string:
use LanguageIdentifier; use Ordering; use Writeable; // Random input order: let bcp47_strings: & = &; let mut langids = bcp47_strings .iter .map .; langids.sort_by; let strict_cmp_strings = langids .iter .map .; // Output ordering, sorted alphabetically let expected_ordering: & = &; assert_eq!;fn total_cmp(self: &Self, other: &Self) -> OrderingCompare this
LanguageIdentifierwith anotherLanguageIdentifierfield-by-field. The result is a total ordering sufficient for use in aBTreeSet.Unlike
LanguageIdentifier::strict_cmp, the ordering may or may not be equivalent to string ordering, and it may or may not be stable across ICU4X releases.Examples
This method returns a nonsensical ordering derived from the fields of the struct:
use LanguageIdentifier; use Ordering; // Input strings, sorted alphabetically let bcp47_strings: & = &; assert!; let mut langids = bcp47_strings .iter .map .; langids.sort_by; let total_cmp_strings = langids .iter .map .; // Output ordering, sorted arbitrarily let expected_ordering: & = &; assert_eq!;Use a wrapper to add a
LanguageIdentifierto aBTreeSet:use icu::locale::LanguageIdentifier; use std::cmp::Ordering; use std::collections::BTreeSet; #[derive(PartialEq, Eq)] struct LanguageIdentifierTotalOrd(LanguageIdentifier); impl Ord for LanguageIdentifierTotalOrd { fn cmp(&self, other: &Self) -> Ordering { self.0.total_cmp(&other.0) } } impl PartialOrd for LanguageIdentifierTotalOrd { fn partial_cmp(&self, other: &Self) -> Option<Ordering> { Some(self.cmp(other)) } } let _: BTreeSet<LanguageIdentifierTotalOrd> = unimplemented!();fn normalizing_eq(self: &Self, other: &str) -> boolCompare this
LanguageIdentifierwith a potentially unnormalized BCP-47 string.The return value is equivalent to what would happen if you first parsed the BCP-47 string to a
LanguageIdentifierand then performed a structural comparison.Examples
use LanguageIdentifier; let bcp47_strings: & = &; for a in bcp47_strings
impl Clone for LanguageIdentifier
fn clone(self: &Self) -> LanguageIdentifier
impl Debug for LanguageIdentifier
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl Display for LanguageIdentifier
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl Eq for LanguageIdentifier
impl Freeze for LanguageIdentifier
impl From for LanguageIdentifier
fn from(loc: Locale) -> Self
impl From for LanguageIdentifier
fn from(region: Option<Region>) -> Self
impl From for LanguageIdentifier
fn from(script: Option<Script>) -> Self
impl From for LanguageIdentifier
fn from(language: Language) -> Self
impl From for LanguageIdentifier
fn from(lsr: (Language, Option<Script>, Option<Region>)) -> Self
impl Hash for LanguageIdentifier
fn hash<__H: $crate::hash::Hasher>(self: &Self, state: &mut __H)
impl PartialEq for LanguageIdentifier
fn eq(self: &Self, other: &LanguageIdentifier) -> bool
impl RefUnwindSafe for LanguageIdentifier
impl Send for LanguageIdentifier
impl StructuralPartialEq for LanguageIdentifier
impl Sync for LanguageIdentifier
impl Unpin for LanguageIdentifier
impl UnsafeUnpin for LanguageIdentifier
impl UnwindSafe for LanguageIdentifier
impl Writeable for LanguageIdentifier
fn write_to<W: core::fmt::Write + ?Sized>(self: &Self, sink: &mut W) -> Resultfn writeable_length_hint(self: &Self) -> LengthHint
impl<T> Any for LanguageIdentifier
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for LanguageIdentifier
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for LanguageIdentifier
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for LanguageIdentifier
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> ErasedDestructor for LanguageIdentifier
impl<T> From for LanguageIdentifier
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for LanguageIdentifier
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T> ToString for LanguageIdentifier
fn to_string(self: &Self) -> String
impl<T, U> Into for LanguageIdentifier
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for LanguageIdentifier
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for LanguageIdentifier
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>