File: README.md

package info (click to toggle)
chromium 135.0.7049.95-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 5,959,392 kB
  • sloc: cpp: 34,198,526; ansic: 7,100,035; javascript: 3,985,800; python: 1,395,489; asm: 896,754; xml: 722,891; pascal: 180,504; sh: 94,909; perl: 88,388; objc: 79,739; sql: 53,020; cs: 41,358; fortran: 24,137; makefile: 22,501; php: 13,699; tcl: 10,142; yacc: 8,822; ruby: 7,350; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; awk: 197; sed: 36
file content (64 lines) | stat: -rw-r--r-- 2,270 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# icu_plurals [![crates.io](https://img.shields.io/crates/v/icu_plurals)](https://crates.io/crates/icu_plurals)

<!-- cargo-rdme start -->

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

This module is published as its own crate ([`icu_plurals`](https://docs.rs/icu_plurals/latest/icu_plurals/))
and as part of the [`icu`](https://docs.rs/icu/latest/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

```rust
use icu::locale::locale;
use icu::plurals::{PluralCategory, PluralRules};

let pr = PluralRules::try_new(locale!("en").into(), Default::default())
    .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:

* [`One`](PluralCategory::One): `1 miesiąc`
* [`Few`](PluralCategory::Few): `2 miesiące`
* [`Many`](PluralCategory::Many): `5 miesięcy`
* [`Other`](PluralCategory::Other): `1.5 miesiąca`

### `PluralRuleType`

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

* [`Cardinal`](PluralRuleType::Cardinal): `3 doors`, `1 month`, `10 dollars`
* [`Ordinal`](PluralRuleType::Ordinal): `1st place`, `10th day`, `11th floor`

[Language Plural Rules]: https://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules

<!-- cargo-rdme end -->

## More Information

For more information on development, authorship, contributing etc. please visit [`ICU4X home page`](https://github.com/unicode-org/icu4x).