13 releases (6 stable)

1.4.0 Nov 16, 2023
1.3.0 Sep 23, 2023
1.2.0 Apr 14, 2023
1.1.0 Jan 26, 2023
0.1.0 Oct 15, 2020

#279 in Internationalization (i18n)

Download history 4080/week @ 2023-12-14 3034/week @ 2023-12-21 2847/week @ 2023-12-28 3392/week @ 2024-01-04 3743/week @ 2024-01-11 4498/week @ 2024-01-18 4600/week @ 2024-01-25 6450/week @ 2024-02-01 6035/week @ 2024-02-08 4977/week @ 2024-02-15 4962/week @ 2024-02-22 5380/week @ 2024-02-29 5826/week @ 2024-03-07 5568/week @ 2024-03-14 4621/week @ 2024-03-21 4636/week @ 2024-03-28

21,642 downloads per month
Used in 36 crates (13 directly)

Custom license

1.5MB
22K 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_plurals) and as part of the icu crate. See the latter for more details on the ICU4X project.

For example in English, 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 PluralCategory.

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

Plural Rules

The crate provides the main struct PluralRules which handles selection of the correct PluralCategory for a given language and PluralRuleType.

Plural Category

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

PluralRuleType

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

~0.9–1.5MB
~31K SLoC