Enum icu_plurals::PluralCategory
source · #[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::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);
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(crate) fn new_from_u8(value: u8) -> Option<Self>
pub(crate) fn new_from_u8(value: u8) -> Option<Self>
Attempt to construct the value from its corresponding integer,
returning None
if not possible
source§impl PluralCategory
impl PluralCategory
sourcepub fn all() -> impl ExactSizeIterator<Item = Self>
pub fn all() -> impl ExactSizeIterator<Item = Self>
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
§type ULE = PluralCategoryULE
type ULE = PluralCategoryULE
Self
. Read moresource§fn to_unaligned(self) -> Self::ULE
fn to_unaligned(self) -> Self::ULE
source§fn from_unaligned(other: Self::ULE) -> Self
fn from_unaligned(other: Self::ULE) -> Self
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 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§fn eq(&self, other: &PluralCategory) -> bool
fn eq(&self, other: &PluralCategory) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PartialOrd for PluralCategory
impl PartialOrd for PluralCategory
source§fn partial_cmp(&self, other: &PluralCategory) -> Option<Ordering>
fn partial_cmp(&self, other: &PluralCategory) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl<'a> ZeroMapKV<'a> for PluralCategory
impl<'a> ZeroMapKV<'a> for PluralCategory
§type Container = ZeroVec<'a, PluralCategory>
type Container = ZeroVec<'a, PluralCategory>
ZeroVec
or VarZeroVec
.type Slice = ZeroSlice<PluralCategory>
§type GetType = PluralCategoryULE
type GetType = PluralCategoryULE
Container::get()
Read more§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 more