pub struct PluralRules(_);
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_unstable(
    &icu_testdata::unstable(),
    &locale!("en").into(),
    PluralRuleType::Cardinal,
)
.expect("Failed to construct a PluralRules struct.");

assert_eq!(pr.category_for(5_usize), PluralCategory::Other);

Implementations

Constructs a new PluralRules for a given locale, type and data provider.

This constructor will fail if the Data Provider does not have the data.

📚 Help choosing a constructor

⚠️ The bounds on this function may change over time, including in SemVer minor releases.
Examples
use icu::locid::locale;
use icu::plurals::{PluralRuleType, PluralRules};

let _ = PluralRules::try_new_unstable(
    &icu_testdata::unstable(),
    &locale!("en").into(),
    PluralRuleType::Cardinal,
);

Creates a new instance using an AnyProvider.

For details on the behavior of this function, see: Self::try_new_unstable

📚 Help choosing a constructor

Enabled with the "serde" feature.

Creates a new instance using a BufferProvider.

For details on the behavior of this function, see: Self::try_new_unstable

📚 Help choosing a constructor

Constructs a new PluralRules for a given locale for cardinal numbers.

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

📚 Help choosing a constructor

⚠️ The bounds on this function may change over time, including in SemVer minor releases.
Examples
use icu::locid::locale;
use icu::plurals::{PluralCategory, PluralRules};

let rules = PluralRules::try_new_cardinal_unstable(
    &icu_testdata::unstable(),
    &locale!("ru").into(),
)
.expect("Data should be present");

assert_eq!(rules.category_for(2_usize), PluralCategory::Few);

Creates a new instance using an AnyProvider.

For details on the behavior of this function, see: Self::try_new_cardinal_unstable

📚 Help choosing a constructor

Enabled with the "serde" feature.

Creates a new instance using a BufferProvider.

For details on the behavior of this function, see: Self::try_new_cardinal_unstable

📚 Help choosing a constructor

Constructs a new PluralRules for a given locale for ordinal numbers.

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

📚 Help choosing a constructor

⚠️ The bounds on this function may change over time, including in SemVer minor releases.
Examples
use icu::locid::locale;
use icu::plurals::{PluralCategory, PluralRules};

let rules = PluralRules::try_new_ordinal_unstable(
    &icu_testdata::unstable(),
    &locale!("ru").into(),
)
.expect("Data should be present");

assert_eq!(rules.category_for(2_usize), PluralCategory::Other);

Creates a new instance using an AnyProvider.

For details on the behavior of this function, see: Self::try_new_ordinal_unstable

📚 Help choosing a constructor

Enabled with the "serde" feature.

Creates a new instance using a BufferProvider.

For details on the behavior of this function, see: Self::try_new_ordinal_unstable

📚 Help choosing a constructor

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_unstable(
    &icu_testdata::unstable(),
    &locale!("en").into(),
    PluralRuleType::Cardinal,
)
.expect("Failed to construct a PluralRules struct.");

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

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_unstable(
    &icu_testdata::unstable(),
    &locale!("fr").into(),
    PluralRuleType::Cardinal,
)
.expect("Failed to construct a PluralRules struct.");

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

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.