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
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 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<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 From<PluralCategory> for Count
impl From<PluralCategory> for Count
source§fn from(other: PluralCategory) -> Count
fn from(other: PluralCategory) -> Count
source§impl From<PluralCategory> for RawPluralCategory
impl From<PluralCategory> for RawPluralCategory
source§fn from(value: PluralCategory) -> RawPluralCategory
fn from(value: PluralCategory) -> RawPluralCategory
source§impl From<RawPluralCategory> for PluralCategory
impl From<RawPluralCategory> for PluralCategory
source§fn from(value: RawPluralCategory) -> PluralCategory
fn from(value: RawPluralCategory) -> 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§impl PartialOrd for PluralCategory
impl PartialOrd for PluralCategory
source§impl Serialize for PluralCategory
impl Serialize for PluralCategory
source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
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