Crate icu_plurals[][src]

Expand description

icu_plurals is one of the ICU4X components.

This API provides functionality to determine the plural category appropriate for a given number in a given language.

For example in English language, when constructing a message such as { num } items, the user has to prepare two variants of the message:

  • 1 item
  • 0 items, 2 items, 5 items, 0.5 items etc.

The former variant is used when the placeholder variable has value 1, while the latter is used for all other values of the variable.

Unicode defines Language Plural Rules as a mechanism to codify those variants and provides data and algorithms to calculate appropriate Plural Category.


use icu::locid::macros::langid;
use icu::plurals::{PluralRules, PluralRuleType, PluralCategory};

let lid = langid!("en");

let provider = icu_testdata::get_provider();

let pr = PluralRules::try_new(lid, &provider, PluralRuleType::Cardinal)
    .expect("Failed to construct a PluralRules struct.");

assert_eq!(, PluralCategory::Other);

Plural Rules

The crate provides the main struct PluralRules which handles selection of the correct Plural Category for a given language and Plural Type.

Plural Category

Every number in every language belongs to a certain Plural Category. For example, Polish language uses four:

Plural Rule Type

Plural rules depend on the use case. This crate supports two types of plural rules:

  • Cardinal: 3 doors, 1 month, 10 dollars
  • Ordinal: 1st place, 10th day, 11th floor


Data provider struct definitions for this ICU4X component.

APIs and Data Structures for Plural Rules


A full plural operands representation of a number. See CLDR Plural Rules for complete operands description. Plural operands in compliance with CLDR Plural Rules.

A struct which provides an ability to retrieve an appropriate Plural Category for a given number.


The plural categories are used to format messages with numeric placeholders, expressed as decimal numbers.

A type of a plural rule which can be associated with the PluralRules struct.

A list of possible error outcomes for the PluralRules struct.