#icu #unicode #i18n

icu_plurals

Unicode Plural Rules categorizer for numeric input

2 unstable releases

0.2.0 Apr 29, 2021
0.1.0 Oct 15, 2020

#94 in Internationalization (i18n)

27 downloads per month
Used in 5 crates (4 directly)

Custom license

305KB
4.5K SLoC

icu_plurals crates.io

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.

Examples

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!(pr.select(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.

Dependencies

~180–375KB