#cldr #icu #unicode #localization #i18n #plurals


Unicode Plural Rules categorizer for numeric input

7 releases (breaking)

new 1.0.0-beta1 Aug 5, 2022
0.6.0 May 17, 2022
0.5.0 Jan 31, 2022
0.4.0 Nov 2, 2021
0.1.0 Oct 15, 2020

#149 in Internationalization (i18n)

Download history 69/week @ 2022-04-20 141/week @ 2022-04-27 230/week @ 2022-05-04 249/week @ 2022-05-11 1154/week @ 2022-05-18 551/week @ 2022-05-25 605/week @ 2022-06-01 1100/week @ 2022-06-08 2011/week @ 2022-06-15 1978/week @ 2022-06-22 2740/week @ 2022-06-29 2642/week @ 2022-07-06 2259/week @ 2022-07-13 2449/week @ 2022-07-20 4448/week @ 2022-07-27 3140/week @ 2022-08-03

12,880 downloads per month
Used in 10 crates (8 directly)


18K SLoC

icu_plurals crates.io

Determine the plural category appropriate for a given number in a given language.

This module is published as its own crate (icu_plural) and as part of the icu crate. See the latter for more details on the ICU4X project.

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::locale;
use icu::plurals::{PluralCategory, PluralRuleType, PluralRules};

let provider = icu_testdata::get_provider();

let pr = PluralRules::try_new_with_buffer_provider(&provider, &locale!("en").into(), PluralRuleType::Cardinal)
    .expect("Failed to construct a PluralRules struct.");

assert_eq!(pr.category_for(5_usize), 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

More Information

For more information on development, authorship, contributing etc. please visit ICU4X home page.