Struct icu_locale::LocaleDirectionality
source · pub struct LocaleDirectionality<Expander = LocaleExpander> { /* private fields */ }
Expand description
Provides methods to determine the direction of a locale.
The Expander
generic parameter wraps a LocaleExpander
.
§Examples
use icu::locale::{langid, Direction, LocaleDirectionality};
let ld = LocaleDirectionality::new();
assert_eq!(ld.get(&langid!("en")), Some(Direction::LeftToRight));
Implementations§
source§impl LocaleDirectionality<LocaleExpander>
impl LocaleDirectionality<LocaleExpander>
sourcepub const fn new() -> Self
pub const fn new() -> Self
Creates a LocaleDirectionality
from compiled data.
This includes limited likely subtags data, see LocaleExpander::new()
.
sourcepub fn try_new_with_any_provider(
provider: &(impl AnyProvider + ?Sized),
) -> Result<Self, DataError>
pub fn try_new_with_any_provider( provider: &(impl AnyProvider + ?Sized), ) -> Result<Self, DataError>
A version of Self::new
that uses custom data provided by an AnyProvider
.
sourcepub fn try_new_with_buffer_provider(
provider: &(impl BufferProvider + ?Sized),
) -> Result<Self, DataError>
pub fn try_new_with_buffer_provider( provider: &(impl BufferProvider + ?Sized), ) -> Result<Self, DataError>
A version of Self::new
that uses custom data provided by a BufferProvider
.
✨ Enabled with the serde
feature.
sourcepub fn try_new_unstable<P>(
provider: &P,
) -> Result<LocaleDirectionality, DataError>where
P: DataProvider<ScriptDirectionV1Marker> + DataProvider<LikelySubtagsForLanguageV1Marker> + DataProvider<LikelySubtagsForScriptRegionV1Marker> + ?Sized,
pub fn try_new_unstable<P>(
provider: &P,
) -> Result<LocaleDirectionality, DataError>where
P: DataProvider<ScriptDirectionV1Marker> + DataProvider<LikelySubtagsForLanguageV1Marker> + DataProvider<LikelySubtagsForScriptRegionV1Marker> + ?Sized,
A version of Self::new
that uses custom data provided by a DataProvider
.
source§impl<Expander: AsRef<LocaleExpander>> LocaleDirectionality<Expander>
impl<Expander: AsRef<LocaleExpander>> LocaleDirectionality<Expander>
sourcepub const fn new_with_expander(expander: Expander) -> Self
pub const fn new_with_expander(expander: Expander) -> 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::locale::{
langid, Direction, LocaleDirectionality, LocaleExpander,
};
let ld_default = LocaleDirectionality::new();
assert_eq!(ld_default.get(&langid!("jbn")), None);
let expander = LocaleExpander::new_extended();
let ld_extended = LocaleDirectionality::new_with_expander(expander);
assert_eq!(
ld_extended.get(&langid!("jbn")),
Some(Direction::RightToLeft)
);
sourcepub fn try_new_with_expander_unstable<P>(
provider: &P,
expander: Expander,
) -> Result<Self, DataError>where
P: DataProvider<ScriptDirectionV1Marker> + ?Sized,
pub fn try_new_with_expander_unstable<P>(
provider: &P,
expander: Expander,
) -> Result<Self, DataError>where
P: DataProvider<ScriptDirectionV1Marker> + ?Sized,
A version of Self::new_with_expander
that uses custom data provided by a DataProvider
.
sourcepub fn get(&self, langid: &LanguageIdentifier) -> Option<Direction>
pub fn get(&self, langid: &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::locale::{langid, Direction, LocaleDirectionality};
let ld = LocaleDirectionality::new();
assert_eq!(ld.get(&langid!("en-US")), Some(Direction::LeftToRight));
assert_eq!(ld.get(&langid!("ar")), Some(Direction::RightToLeft));
assert_eq!(ld.get(&langid!("en-Arab")), Some(Direction::RightToLeft));
assert_eq!(ld.get(&langid!("foo")), None);
Using a script directly:
use icu::locale::subtags::script;
use icu::locale::{Direction, LanguageIdentifier, LocaleDirectionality};
let ld = LocaleDirectionality::new();
assert_eq!(
ld.get(&LanguageIdentifier::from(Some(script!("Latn")))),
Some(Direction::LeftToRight)
);
sourcepub fn is_right_to_left(&self, langid: &LanguageIdentifier) -> bool
pub fn is_right_to_left(&self, langid: &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.
sourcepub fn is_left_to_right(&self, langid: &LanguageIdentifier) -> bool
pub fn is_left_to_right(&self, langid: &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<Expander: Debug> Debug for LocaleDirectionality<Expander>
impl<Expander: Debug> Debug for LocaleDirectionality<Expander>
source§impl Default for LocaleDirectionality<LocaleExpander>
impl Default for LocaleDirectionality<LocaleExpander>
Auto Trait Implementations§
impl<Expander> Freeze for LocaleDirectionality<Expander>where
Expander: Freeze,
impl<Expander> RefUnwindSafe for LocaleDirectionality<Expander>where
Expander: RefUnwindSafe,
impl<Expander> Send for LocaleDirectionality<Expander>where
Expander: Send,
impl<Expander> Sync for LocaleDirectionality<Expander>where
Expander: Sync,
impl<Expander> Unpin for LocaleDirectionality<Expander>where
Expander: Unpin,
impl<Expander> UnwindSafe for LocaleDirectionality<Expander>where
Expander: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more