Struct icu_plurals::PluralRules
source · pub struct PluralRules(pub(crate) DataPayload<ErasedPluralRulesV1Marker>);
Expand description
A struct which provides an ability to retrieve an appropriate
Plural Category
for a given number.
§Examples
use icu::locid::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);
Tuple Fields§
§0: DataPayload<ErasedPluralRulesV1Marker>
Implementations§
source§impl PluralRules
impl PluralRules
sourcepub fn try_new(
locale: &DataLocale,
rule_type: PluralRuleType,
) -> Result<Self, PluralsError>
pub fn try_new( locale: &DataLocale, rule_type: PluralRuleType, ) -> Result<Self, PluralsError>
Constructs a new PluralRules
for a given locale and type using compiled data.
✨ Enabled with the compiled_data
Cargo feature.
§Examples
use icu::locid::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),
locale: &DataLocale,
rule_type: PluralRuleType,
) -> Result<Self, PluralsError>
pub fn try_new_with_any_provider( provider: &(impl AnyProvider + ?Sized), locale: &DataLocale, rule_type: PluralRuleType, ) -> Result<Self, PluralsError>
A version of Self::try_new
that uses custom data provided by an AnyProvider
.
sourcepub fn try_new_unstable(
provider: &(impl DataProvider<CardinalV1Marker> + DataProvider<OrdinalV1Marker> + ?Sized),
locale: &DataLocale,
rule_type: PluralRuleType,
) -> Result<Self, PluralsError>
pub fn try_new_unstable( provider: &(impl DataProvider<CardinalV1Marker> + DataProvider<OrdinalV1Marker> + ?Sized), locale: &DataLocale, rule_type: PluralRuleType, ) -> Result<Self, PluralsError>
A version of Self::try_new
that uses custom data provided by a DataProvider
.
sourcepub fn try_new_cardinal(locale: &DataLocale) -> Result<Self, PluralsError>
pub fn try_new_cardinal(locale: &DataLocale) -> Result<Self, PluralsError>
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:
✨ Enabled with the compiled_data
Cargo feature.
§Examples
use icu::locid::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),
locale: &DataLocale,
) -> Result<Self, PluralsError>
pub fn try_new_cardinal_with_any_provider( provider: &(impl AnyProvider + ?Sized), locale: &DataLocale, ) -> Result<Self, PluralsError>
A version of Self::try_new_cardinal
that uses custom data provided by an AnyProvider
.
sourcepub fn try_new_cardinal_unstable(
provider: &(impl DataProvider<CardinalV1Marker> + ?Sized),
locale: &DataLocale,
) -> Result<Self, PluralsError>
pub fn try_new_cardinal_unstable( provider: &(impl DataProvider<CardinalV1Marker> + ?Sized), locale: &DataLocale, ) -> Result<Self, PluralsError>
A version of Self::try_new_cardinal
that uses custom data provided by a DataProvider
.
sourcepub fn try_new_ordinal(locale: &DataLocale) -> Result<Self, PluralsError>
pub fn try_new_ordinal(locale: &DataLocale) -> Result<Self, PluralsError>
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
✨ Enabled with the compiled_data
Cargo feature.
§Examples
use icu::locid::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),
locale: &DataLocale,
) -> Result<Self, PluralsError>
pub fn try_new_ordinal_with_any_provider( provider: &(impl AnyProvider + ?Sized), locale: &DataLocale, ) -> Result<Self, PluralsError>
A version of Self::try_new_ordinal
that uses custom data provided by an AnyProvider
.
sourcepub fn try_new_ordinal_unstable(
provider: &(impl DataProvider<OrdinalV1Marker> + ?Sized),
locale: &DataLocale,
) -> Result<Self, PluralsError>
pub fn try_new_ordinal_unstable( provider: &(impl DataProvider<OrdinalV1Marker> + ?Sized), locale: &DataLocale, ) -> Result<Self, PluralsError>
A version of Self::try_new_ordinal
that uses custom data provided by a DataProvider
.
sourcepub fn category_for<I: Into<PluralOperands>>(&self, input: I) -> PluralCategory
pub fn category_for<I: Into<PluralOperands>>(&self, input: I) -> PluralCategory
Returns the Plural Category
appropriate for the given number.
§Examples
use icu::locid::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::locid::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::locid::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);