#[repr(u8)]pub enum PluralCategory {
    Zero = 0,
    One = 1,
    Two = 2,
    Few = 3,
    Many = 4,
    Other = 5,
}Expand description
The plural categories are used to format messages with numeric placeholders, expressed as decimal numbers.
The fundamental rule for determining plural categories is the existence of minimal pairs: whenever two different numbers may require different versions of the same message, then the numbers have different plural categories.
All languages supported by ICU4X can match any number to one of the categories.
§Examples
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);Variants§
Zero = 0
CLDR “zero” plural category. Used in Arabic and Latvian, among others.
Examples of numbers having this category:
- 0 in Arabic (ar), Latvian (lv)
 - 10~20, 30, 40, 50, … in Latvian (lv)
 
One = 1
CLDR “one” plural category. Signifies the singular form in many languages.
Examples of numbers having this category:
- 0 in French (fr), Portuguese (pt), …
 - 1 in English (en) and most other languages
 - 2.1 in Filipino (fil), Croatian (hr), Latvian (lv), Serbian (sr)
 - 2, 3, 5, 7, 8, … in Filipino (fil)
 
Two = 2
CLDR “two” plural category. Used in Arabic, Hebrew, and Slovenian, among others.
Examples of numbers having this category:
- 2 in Arabic (ar), Hebrew (iw), Slovenian (sl)
 - 2.0 in Arabic (ar)
 
Few = 3
CLDR “few” plural category. Used in Romanian, Polish, Russian, and others.
Examples of numbers having this category:
- 0 in Romanian (ro)
 - 1.2 in Croatian (hr), Romanian (ro), Slovenian (sl), Serbian (sr)
 - 2 in Polish (pl), Russian (ru), Czech (cs), …
 - 5 in Arabic (ar), Lithuanian (lt), Romanian (ro)
 
Many = 4
CLDR “many” plural category. Used in Polish, Russian, Ukrainian, and others.
Examples of numbers having this category:
- 0 in Polish (pl)
 - 1.0 in Czech (cs), Slovak (sk)
 - 1.1 in Czech (cs), Lithuanian (lt), Slovak (sk)
 - 15 in Arabic (ar), Polish (pl), Russian (ru), Ukrainian (uk)
 
Other = 5
CLDR “other” plural category, used as a catch-all. Each language supports it, and it is also used as a fail safe result for in case no better match can be identified.
In some languages, such as Japanese, Chinese, Korean, and Thai, this is the only plural category.
Examples of numbers having this category:
- 0 in English (en), German (de), Spanish (es), …
 - 1 in Japanese (ja), Korean (ko), Chinese (zh), Thai (th), …
 - 2 in English (en), German (de), Spanish (es), …
 
Implementations§
Source§impl PluralCategory
 
impl PluralCategory
Sourcepub fn all() -> impl ExactSizeIterator
 
pub fn all() -> impl ExactSizeIterator
Returns an ordered iterator over variants of Plural Categories.
Categories are returned in alphabetical order.
§Examples
use icu::plurals::PluralCategory;
let mut categories = PluralCategory::all();
assert_eq!(categories.next(), Some(PluralCategory::Few));
assert_eq!(categories.next(), Some(PluralCategory::Many));
assert_eq!(categories.next(), Some(PluralCategory::One));
assert_eq!(categories.next(), Some(PluralCategory::Other));
assert_eq!(categories.next(), Some(PluralCategory::Two));
assert_eq!(categories.next(), Some(PluralCategory::Zero));
assert_eq!(categories.next(), None);Sourcepub fn get_for_cldr_string(category: &str) -> Option<PluralCategory>
 
pub fn get_for_cldr_string(category: &str) -> Option<PluralCategory>
Returns the PluralCategory corresponding to given TR35 string.
Sourcepub fn get_for_cldr_bytes(category: &[u8]) -> Option<PluralCategory>
 
pub fn get_for_cldr_bytes(category: &[u8]) -> Option<PluralCategory>
Returns the PluralCategory corresponding to given TR35 string as bytes
Trait Implementations§
Source§impl AsULE for PluralCategory
 
impl AsULE for PluralCategory
Source§type ULE = PluralCategoryULE
 
type ULE = PluralCategoryULE
Self. Read moreSource§fn to_unaligned(self) -> <PluralCategory as AsULE>::ULE
 
fn to_unaligned(self) -> <PluralCategory as AsULE>::ULE
Source§fn from_unaligned(other: <PluralCategory as AsULE>::ULE) -> PluralCategory
 
fn from_unaligned(other: <PluralCategory as AsULE>::ULE) -> PluralCategory
Source§impl Clone for PluralCategory
 
impl Clone for PluralCategory
Source§fn clone(&self) -> PluralCategory
 
fn clone(&self) -> PluralCategory
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PluralCategory
 
impl Debug for PluralCategory
Source§impl<'de> Deserialize<'de> for PluralCategory
 
impl<'de> Deserialize<'de> for PluralCategory
Source§fn deserialize<__D>(
    __deserializer: __D,
) -> Result<PluralCategory, <__D as Deserializer<'de>>::Error>where
    __D: Deserializer<'de>,
 
fn deserialize<__D>(
    __deserializer: __D,
) -> Result<PluralCategory, <__D as Deserializer<'de>>::Error>where
    __D: Deserializer<'de>,
Source§impl Hash for PluralCategory
 
impl Hash for PluralCategory
Source§impl Ord for PluralCategory
 
impl Ord for PluralCategory
Source§fn cmp(&self, other: &PluralCategory) -> Ordering
 
fn cmp(&self, other: &PluralCategory) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
    Self: Sized,
 
fn max(self, other: Self) -> Selfwhere
    Self: Sized,
Source§impl PartialEq for PluralCategory
 
impl PartialEq for PluralCategory
Source§impl PartialOrd for PluralCategory
 
impl PartialOrd for PluralCategory
Source§impl<'a> ZeroMapKV<'a> for PluralCategory
 
impl<'a> ZeroMapKV<'a> for PluralCategory
Source§type Container = ZeroVec<'a, PluralCategory>
 
type Container = ZeroVec<'a, PluralCategory>
ZeroVec or VarZeroVec.type Slice = ZeroSlice<PluralCategory>
Source§type GetType = PluralCategoryULE
 
type GetType = PluralCategoryULE
Container::get() Read moreSource§type OwnedType = PluralCategory
 
type OwnedType = PluralCategory
Container::replace() and Container::remove(),
also used during deserialization. If Self is human readable serialized,
deserializing to Self::OwnedType should produce the same value once
passed through Self::owned_as_self() Read moreimpl Copy for PluralCategory
impl Eq for PluralCategory
impl StructuralPartialEq for PluralCategory
Auto Trait Implementations§
impl Freeze for PluralCategory
impl RefUnwindSafe for PluralCategory
impl Send for PluralCategory
impl Sync for PluralCategory
impl Unpin for PluralCategory
impl UnwindSafe for PluralCategory
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
Source§impl<T> IntoEither for T
 
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
 
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more