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::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<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
source§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 Bake for PluralCategory
impl Bake for PluralCategory
source§fn bake(&self, env: &CrateEnv) -> TokenStream
fn bake(&self, env: &CrateEnv) -> TokenStream
source§impl BakeSize for PluralCategory
impl BakeSize for PluralCategory
source§fn borrows_size(&self) -> usize
fn borrows_size(&self) -> usize
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<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl From<PluralCategory> for RawPluralCategory
impl From<PluralCategory> for RawPluralCategory
source§fn from(value: PluralCategory) -> Self
fn from(value: PluralCategory) -> Self
source§impl From<RawPluralCategory> for PluralCategory
impl From<RawPluralCategory> for PluralCategory
source§fn from(value: RawPluralCategory) -> Self
fn from(value: RawPluralCategory) -> Self
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 Serialize for PluralCategory
impl Serialize 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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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