Struct icu::plurals::PluralRules
source · pub struct PluralRules(/* private fields */);
Expand description
A struct which provides an ability to retrieve an appropriate
Plural Category
for a given number.
§Examples
use icu::locale::locale;
use icu::plurals::{PluralCategory, PluralRuleType, PluralRules};
let pr =
PluralRules::try_new(locale!("en").into(), PluralRuleType::Cardinal)
.expect("locale should be present");
assert_eq!(pr.category_for(5_usize), PluralCategory::Other);
Implementations§
source§impl PluralRules
impl PluralRules
sourcepub fn try_new(
prefs: PluralRulesPreferences,
rule_type: PluralRuleType,
) -> Result<PluralRules, DataError>
pub fn try_new( prefs: PluralRulesPreferences, rule_type: PluralRuleType, ) -> Result<PluralRules, DataError>
Constructs a new PluralRules
for a given locale and type using compiled data.
§Examples
use icu::locale::locale;
use icu::plurals::{PluralRuleType, PluralRules};
let _ = PluralRules::try_new(
locale!("en").into(),
PluralRuleType::Cardinal,
).expect("locale should be present");
✨ Enabled with the compiled_data
Cargo feature.
sourcepub fn try_new_with_any_provider(
provider: &(impl AnyProvider + ?Sized),
prefs: PluralRulesPreferences,
rule_type: PluralRuleType,
) -> Result<PluralRules, DataError>
pub fn try_new_with_any_provider( provider: &(impl AnyProvider + ?Sized), prefs: PluralRulesPreferences, rule_type: PluralRuleType, ) -> Result<PluralRules, DataError>
A version of [Self :: try_new
] that uses custom data provided by an AnyProvider
.
sourcepub fn try_new_with_buffer_provider(
provider: &(impl BufferProvider + ?Sized),
prefs: PluralRulesPreferences,
rule_type: PluralRuleType,
) -> Result<PluralRules, DataError>
pub fn try_new_with_buffer_provider( provider: &(impl BufferProvider + ?Sized), prefs: PluralRulesPreferences, rule_type: PluralRuleType, ) -> Result<PluralRules, DataError>
A version of [Self :: try_new
] that uses custom data provided by a BufferProvider
.
✨ Enabled with the serde
feature.
sourcepub fn try_new_unstable(
provider: &(impl DataProvider<CardinalV1Marker> + DataProvider<OrdinalV1Marker> + ?Sized),
prefs: PluralRulesPreferences,
rule_type: PluralRuleType,
) -> Result<PluralRules, DataError>
pub fn try_new_unstable( provider: &(impl DataProvider<CardinalV1Marker> + DataProvider<OrdinalV1Marker> + ?Sized), prefs: PluralRulesPreferences, rule_type: PluralRuleType, ) -> Result<PluralRules, DataError>
A version of Self::try_new
that uses custom data provided by a DataProvider
.
sourcepub fn try_new_cardinal(
prefs: PluralRulesPreferences,
) -> Result<PluralRules, DataError>
pub fn try_new_cardinal( prefs: PluralRulesPreferences, ) -> Result<PluralRules, DataError>
Constructs a new PluralRules
for a given locale for cardinal numbers using compiled data.
Cardinal plural forms express quantities of units such as time, currency or distance, used in conjunction with a number expressed in decimal digits (i.e. “2”, not “two”).
For example, English has two forms for cardinals:
§Examples
use icu::locale::locale;
use icu::plurals::{PluralCategory, PluralRules};
let rules = PluralRules::try_new_cardinal(locale!("ru").into()).expect("locale should be present");
assert_eq!(rules.category_for(2_usize), PluralCategory::Few);
✨ Enabled with the compiled_data
Cargo feature.
sourcepub fn try_new_cardinal_with_any_provider(
provider: &(impl AnyProvider + ?Sized),
prefs: PluralRulesPreferences,
) -> Result<PluralRules, DataError>
pub fn try_new_cardinal_with_any_provider( provider: &(impl AnyProvider + ?Sized), prefs: PluralRulesPreferences, ) -> Result<PluralRules, DataError>
A version of [Self :: try_new_cardinal
] that uses custom data provided by an AnyProvider
.
sourcepub fn try_new_cardinal_with_buffer_provider(
provider: &(impl BufferProvider + ?Sized),
prefs: PluralRulesPreferences,
) -> Result<PluralRules, DataError>
pub fn try_new_cardinal_with_buffer_provider( provider: &(impl BufferProvider + ?Sized), prefs: PluralRulesPreferences, ) -> Result<PluralRules, DataError>
A version of [Self :: try_new_cardinal
] that uses custom data provided by a BufferProvider
.
✨ Enabled with the serde
feature.
sourcepub fn try_new_cardinal_unstable(
provider: &(impl DataProvider<CardinalV1Marker> + ?Sized),
prefs: PluralRulesPreferences,
) -> Result<PluralRules, DataError>
pub fn try_new_cardinal_unstable( provider: &(impl DataProvider<CardinalV1Marker> + ?Sized), prefs: PluralRulesPreferences, ) -> Result<PluralRules, DataError>
A version of Self::try_new_cardinal
that uses custom data provided by a DataProvider
.
sourcepub fn try_new_ordinal(
prefs: PluralRulesPreferences,
) -> Result<PluralRules, DataError>
pub fn try_new_ordinal( prefs: PluralRulesPreferences, ) -> Result<PluralRules, DataError>
Constructs a new PluralRules
for a given locale for ordinal numbers using compiled data.
Ordinal plural forms denote the order of items in a set and are always integers.
For example, English has four forms for ordinals:
One
:1st floor
,21st floor
,101st floor
Two
:2nd floor
,22nd floor
,102nd floor
Few
:3rd floor
,23rd floor
,103rd floor
Other
:4th floor
,11th floor
,96th floor
§Examples
use icu::locale::locale;
use icu::plurals::{PluralCategory, PluralRules};
let rules = PluralRules::try_new_ordinal(
locale!("ru").into(),
)
.expect("locale should be present");
assert_eq!(rules.category_for(2_usize), PluralCategory::Other);
✨ Enabled with the compiled_data
Cargo feature.
sourcepub fn try_new_ordinal_with_any_provider(
provider: &(impl AnyProvider + ?Sized),
prefs: PluralRulesPreferences,
) -> Result<PluralRules, DataError>
pub fn try_new_ordinal_with_any_provider( provider: &(impl AnyProvider + ?Sized), prefs: PluralRulesPreferences, ) -> Result<PluralRules, DataError>
A version of [Self :: try_new_ordinal
] that uses custom data provided by an AnyProvider
.
sourcepub fn try_new_ordinal_with_buffer_provider(
provider: &(impl BufferProvider + ?Sized),
prefs: PluralRulesPreferences,
) -> Result<PluralRules, DataError>
pub fn try_new_ordinal_with_buffer_provider( provider: &(impl BufferProvider + ?Sized), prefs: PluralRulesPreferences, ) -> Result<PluralRules, DataError>
A version of [Self :: try_new_ordinal
] that uses custom data provided by a BufferProvider
.
✨ Enabled with the serde
feature.
sourcepub fn try_new_ordinal_unstable(
provider: &(impl DataProvider<OrdinalV1Marker> + ?Sized),
prefs: PluralRulesPreferences,
) -> Result<PluralRules, DataError>
pub fn try_new_ordinal_unstable( provider: &(impl DataProvider<OrdinalV1Marker> + ?Sized), prefs: PluralRulesPreferences, ) -> Result<PluralRules, DataError>
A version of Self::try_new_ordinal
that uses custom data provided by a DataProvider
.
sourcepub fn category_for<I>(&self, input: I) -> PluralCategorywhere
I: Into<PluralOperands>,
pub fn category_for<I>(&self, input: I) -> PluralCategorywhere
I: Into<PluralOperands>,
Returns the Plural Category
appropriate for the given number.
§Examples
use icu::locale::locale;
use icu::plurals::{PluralCategory, PluralRuleType, PluralRules};
let pr =
PluralRules::try_new(locale!("en").into(), PluralRuleType::Cardinal)
.expect("locale should be present");
match pr.category_for(1_usize) {
PluralCategory::One => "One item",
PluralCategory::Other => "Many items",
_ => unreachable!(),
};
The method accepts any input that can be calculated into Plural Operands
.
All unsigned primitive number types can infallibly be converted so they can be
used as an input.
For signed numbers and strings, Plural Operands
implement TryFrom
and FromStr
, which should be used before passing the result to
category_for()
.
§Examples
use icu::locale::locale;
use icu::plurals::{PluralCategory, PluralOperands};
use icu::plurals::{PluralRuleType, PluralRules};
let operands = PluralOperands::try_from(-5).expect("Failed to parse to operands.");
let operands2: PluralOperands = "5.10".parse().expect("Failed to parse to operands.");
assert_eq!(pr.category_for(operands), PluralCategory::Other);
assert_eq!(pr.category_for(operands2), PluralCategory::Other);
sourcepub fn categories(&self) -> impl Iterator<Item = PluralCategory>
pub fn categories(&self) -> impl Iterator<Item = PluralCategory>
Returns all Plural Categories
appropriate for a PluralRules
object
based on the LanguageIdentifier
and PluralRuleType
.
The Plural Categories
are returned in UTS 35 sorted order.
The category PluralCategory::Other
is always included.
§Examples
use icu::locale::locale;
use icu::plurals::{PluralCategory, PluralRuleType, PluralRules};
let pr =
PluralRules::try_new(locale!("fr").into(), PluralRuleType::Cardinal)
.expect("locale should be present");
let mut categories = pr.categories();
assert_eq!(categories.next(), Some(PluralCategory::One));
assert_eq!(categories.next(), Some(PluralCategory::Many));
assert_eq!(categories.next(), Some(PluralCategory::Other));
assert_eq!(categories.next(), None);
Trait Implementations§
source§impl AsRef<PluralRules> for PluralRules
impl AsRef<PluralRules> for PluralRules
source§fn as_ref(&self) -> &PluralRules
fn as_ref(&self) -> &PluralRules
Auto Trait Implementations§
impl Freeze for PluralRules
impl RefUnwindSafe for PluralRules
impl Send for PluralRules
impl Sync for PluralRules
impl Unpin for PluralRules
impl UnwindSafe for PluralRules
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