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::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);

Implementations§

source§

impl PluralRules

source

pub fn try_new( locale: &DataLocale, rule_type: PluralRuleType ) -> Result<PluralRules, PluralsError>

Constructs a new PluralRules for a given locale and type using compiled data.

Enabled with the compiled_data Cargo feature.

📚 Help choosing a constructor

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.

📚 Help choosing a constructor

source

pub fn try_new_with_any_provider( provider: &(impl AnyProvider + ?Sized), locale: &DataLocale, rule_type: PluralRuleType ) -> Result<PluralRules, PluralsError>

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

📚 Help choosing a constructor

source

pub fn try_new_with_buffer_provider( provider: &(impl BufferProvider + ?Sized), locale: &DataLocale, rule_type: PluralRuleType ) -> Result<PluralRules, PluralsError>

A version of Self::try_new that uses custom data provided by a BufferProvider.

Enabled with the serde feature.

📚 Help choosing a constructor

source

pub fn try_new_unstable( provider: &(impl DataProvider<CardinalV1Marker> + DataProvider<OrdinalV1Marker> + ?Sized), locale: &DataLocale, rule_type: PluralRuleType ) -> Result<PluralRules, PluralsError>

A version of Self::try_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 fn try_new_cardinal( locale: &DataLocale ) -> Result<PluralRules, 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:

  • One: 1 day
  • Other: 0 days, 2 days, 10 days, 0.3 days

Enabled with the compiled_data Cargo feature.

📚 Help choosing a constructor

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.

📚 Help choosing a constructor

source

pub fn try_new_cardinal_with_any_provider( provider: &(impl AnyProvider + ?Sized), locale: &DataLocale ) -> Result<PluralRules, PluralsError>

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

📚 Help choosing a constructor

source

pub fn try_new_cardinal_with_buffer_provider( provider: &(impl BufferProvider + ?Sized), locale: &DataLocale ) -> Result<PluralRules, PluralsError>

A version of Self::try_new_cardinal that uses custom data provided by a BufferProvider.

Enabled with the serde feature.

📚 Help choosing a constructor

source

pub fn try_new_cardinal_unstable( provider: &(impl DataProvider<CardinalV1Marker> + ?Sized), locale: &DataLocale ) -> Result<PluralRules, PluralsError>

A version of Self::try_new_cardinal 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 try_new_ordinal(locale: &DataLocale) -> Result<PluralRules, 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.

📚 Help choosing a constructor

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.

📚 Help choosing a constructor

source

pub fn try_new_ordinal_with_any_provider( provider: &(impl AnyProvider + ?Sized), locale: &DataLocale ) -> Result<PluralRules, PluralsError>

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

📚 Help choosing a constructor

source

pub fn try_new_ordinal_with_buffer_provider( provider: &(impl BufferProvider + ?Sized), locale: &DataLocale ) -> Result<PluralRules, PluralsError>

A version of Self::try_new_ordinal that uses custom data provided by a BufferProvider.

Enabled with the serde feature.

📚 Help choosing a constructor

source

pub fn try_new_ordinal_unstable( provider: &(impl DataProvider<OrdinalV1Marker> + ?Sized), locale: &DataLocale ) -> Result<PluralRules, PluralsError>

A version of Self::try_new_ordinal 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 category_for<I>(&self, input: I) -> PluralCategorywhere I: Into<PluralOperands>,

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};
use std::convert::TryFrom;

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);
source

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);

Trait Implementations§

source§

impl AsRef<PluralRules> for PluralRules

source§

fn as_ref(&self) -> &PluralRules

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl Debug for PluralRules

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere 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 Twhere 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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.
§

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

source§

impl<T> MaybeSendSync for Twhere T: Send + Sync,