pub struct LocaleDirectionality {
script_direction: DataPayload<ScriptDirectionV1Marker>,
expander: LocaleExpander,
}
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));
Fields§
§script_direction: DataPayload<ScriptDirectionV1Marker>
§expander: LocaleExpander
Implementations§
source§impl LocaleDirectionality
impl LocaleDirectionality
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<LocaleDirectionality, LocaleTransformError>
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
.
sourcepub fn try_new_unstable<P>(
provider: &P,
) -> Result<LocaleDirectionality, LocaleTransformError>
pub fn try_new_unstable<P>( provider: &P, ) -> Result<LocaleDirectionality, LocaleTransformError>
A version of Self::new
that uses custom data provided by a DataProvider
.
sourcepub const fn new_with_expander(expander: LocaleExpander) -> Self
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)
);
sourcepub fn try_new_with_expander_unstable<P>(
provider: &P,
expander: LocaleExpander,
) -> Result<LocaleDirectionality, LocaleTransformError>
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
.
sourcepub fn get(&self, locale: impl AsRef<LanguageIdentifier>) -> Option<Direction>
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)
);
sourcepub fn is_right_to_left(&self, locale: impl AsRef<LanguageIdentifier>) -> bool
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.
sourcepub fn is_left_to_right(&self, locale: impl AsRef<LanguageIdentifier>) -> bool
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.