LocaleDirectionality

Struct LocaleDirectionality 

Source
pub struct LocaleDirectionality { /* private fields */ }
Expand description

Provides methods to determine the direction of a locale.

§Examples

use icu::locid::locale;
use icu::locid_transform::{Direction, LocaleDirectionality};

let ld = LocaleDirectionality::new();

assert_eq!(ld.get(&locale!("en")), Some(Direction::LeftToRight));

Implementations§

Source§

impl LocaleDirectionality

Source

pub const fn new() -> Self

Creates a LocaleDirectionality from compiled data.

This includes limited likely subtags data, see LocaleExpander::new().

Source

pub fn try_new_with_any_provider( provider: &(impl AnyProvider + ?Sized), ) -> Result<LocaleDirectionality, LocaleTransformError>

A version of Self::new that uses custom data provided by an AnyProvider.

📚 Help choosing a constructor

Source

pub fn try_new_unstable<P>( provider: &P, ) -> Result<LocaleDirectionality, LocaleTransformError>

A version of Self::new that uses custom data provided by a DataProvider.

📚 Help choosing a constructor

⚠️ The bounds on provider may change over time, including in SemVer minor releases.
Source

pub const fn new_with_expander(expander: LocaleExpander) -> Self

Creates a LocaleDirectionality with a custom LocaleExpander and compiled data.

This allows using LocaleExpander::new_extended() with data for all locales.

§Examples
use icu::locid::locale;
use icu::locid_transform::{
    Direction, LocaleDirectionality, LocaleExpander,
};

let ld_default = LocaleDirectionality::new();

assert_eq!(ld_default.get(&locale!("jbn")), None);

let expander = LocaleExpander::new_extended();
let ld_extended = LocaleDirectionality::new_with_expander(expander);

assert_eq!(
    ld_extended.get(&locale!("jbn")),
    Some(Direction::RightToLeft)
);
Source

pub fn try_new_with_expander_unstable<P>( provider: &P, expander: LocaleExpander, ) -> Result<LocaleDirectionality, LocaleTransformError>

A version of Self::new_with_expander that uses custom data provided by a DataProvider.

📚 Help choosing a constructor

⚠️ The bounds on provider may change over time, including in SemVer minor releases.
Source

pub fn get(&self, locale: impl AsRef<LanguageIdentifier>) -> Option<Direction>

Returns the script direction of the given locale.

Note that the direction is a property of the script of a locale, not of the language. As such, when given a locale without an associated script tag (i.e., locale!("en") vs. locale!("en-Latn")), this method first tries to infer the script using the language and region before returning its direction.

If you already have a script struct and want to get its direction, you should use Locale::from(Some(my_script)) and call this method.

This method will return None if either a locale’s script cannot be determined, or there is no information for the script.

§Examples

Using an existing locale:

use icu::locid::locale;
use icu::locid_transform::{Direction, LocaleDirectionality};

let ld = LocaleDirectionality::new();

assert_eq!(ld.get(&locale!("en-US")), Some(Direction::LeftToRight));

assert_eq!(ld.get(&locale!("ar")), Some(Direction::RightToLeft));

assert_eq!(ld.get(&locale!("en-Arab")), Some(Direction::RightToLeft));

assert_eq!(ld.get(&locale!("foo")), None);

Using a script directly:

use icu::locid::subtags::script;
use icu::locid::Locale;
use icu::locid_transform::{Direction, LocaleDirectionality};

let ld = LocaleDirectionality::new();

assert_eq!(
    ld.get(&Locale::from(Some(script!("Latn")))),
    Some(Direction::LeftToRight)
);
Source

pub fn is_right_to_left(&self, locale: impl AsRef<LanguageIdentifier>) -> bool

Returns whether the given locale is right-to-left.

Note that if this method returns false, the locale is either left-to-right or the LocaleDirectionality does not include data for the locale. You should use LocaleDirectionality::get if you need to differentiate between these cases.

See LocaleDirectionality::get for more information.

Source

pub fn is_left_to_right(&self, locale: impl AsRef<LanguageIdentifier>) -> bool

Returns whether the given locale is left-to-right.

Note that if this method returns false, the locale is either right-to-left or the LocaleDirectionality does not include data for the locale. You should use LocaleDirectionality::get if you need to differentiate between these cases.

See LocaleDirectionality::get for more information.

Trait Implementations§

Source§

impl Debug for LocaleDirectionality

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for LocaleDirectionality

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 680 bytes