Compare commits

..

4 commits
0.1.1 ... main

Author SHA1 Message Date
yggverse
81bd06eee8 update version 2025-01-28 17:49:07 +02:00
yggverse
5aeb139caa implement trait for usize, rename ns to plurify 2025-01-28 17:41:53 +02:00
yggverse
89675db0e8 update readme 2024-12-21 20:31:37 +02:00
yggverse
b73a94fc3c update version 2024-12-18 13:57:39 +02:00
4 changed files with 67 additions and 25 deletions

View file

@ -1,6 +1,6 @@
[package]
name = "plurify"
version = "0.1.1"
version = "0.2.1"
edition = "2021"
license = "MIT"

View file

@ -1,6 +1,8 @@
# plurify
![Build](https://github.com/YGGverse/plurify/actions/workflows/build.yml/badge.svg)
[![Documentation](https://docs.rs/plurify/badge.svg)](https://docs.rs/plurify)
[![crates.io](https://img.shields.io/crates/v/plurify.svg)](https://crates.io/crates/plurify)
Pluralize words in different locales
@ -15,16 +17,16 @@ cargo add plurify
## Usage
``` rust
use plurify::ns;
use plurify::*;
let en = &["cat", "cats", "cats"];
let uk = &["кіт", "кота", "котів"];
assert_eq!(ns(1, en), "cat");
assert_eq!(ns(2, en), "cats");
assert_eq!(ns(5, en), "cats");
assert_eq!(1.plurify(en), "cat");
assert_eq!(2.plurify(en), "cats");
assert_eq!(5.plurify(en), "cats");
assert_eq!(ns(1, uk), "кіт");
assert_eq!(ns(2, uk), "кота");
assert_eq!(ns(5, uk), "котів");
assert_eq!(1.plurify(uk), "кіт");
assert_eq!(2.plurify(uk), "кота");
assert_eq!(5.plurify(uk), "котів");
```

View file

@ -1,24 +1,55 @@
/// Get plural string `s` match number `n`
// Functions
/// Get plural string `s` for number `n`
///
/// ## Example
/// ``` rust
/// use plurify::ns;
/// use plurify::*;
///
/// let en = &["cat", "cats", "cats"];
/// let uk = &["кіт", "кота", "котів"];
///
/// assert_eq!(ns(1, en), "cat");
/// assert_eq!(ns(2, en), "cats");
/// assert_eq!(ns(5, en), "cats");
/// assert_eq!(plurify(1, en), "cat");
/// assert_eq!(plurify(2, en), "cats");
/// assert_eq!(plurify(5, en), "cats");
///
/// assert_eq!(ns(1, uk), "кіт");
/// assert_eq!(ns(2, uk), "кота");
/// assert_eq!(ns(5, uk), "котів");
/// assert_eq!(plurify(1, uk), "кіт");
/// assert_eq!(plurify(2, uk), "кота");
/// assert_eq!(plurify(5, uk), "котів");
/// ```
pub fn ns<'a>(n: usize, s: &[&'a str]) -> &'a str {
pub fn plurify<'a>(n: usize, s: &[&'a str]) -> &'a str {
s[if n % 100 > 4 && n % 100 < 20 {
2
} else {
[2, 0, 1, 1, 1, 2][usize::min(n % 10, 5)]
}]
}
// Traits
pub trait Plurify {
fn plurify<'a>(self, s: &[&'a str]) -> &'a str;
}
impl Plurify for usize {
/// Get plural string for `usize` value
///
/// ## Example
/// ``` rust
/// use plurify::*;
///
/// let en = &["cat", "cats", "cats"];
/// let uk = &["кіт", "кота", "котів"];
///
/// assert_eq!(1.plurify(en), "cat");
/// assert_eq!(2.plurify(en), "cats");
/// assert_eq!(5.plurify(en), "cats");
///
/// assert_eq!(1.plurify(uk), "кіт");
/// assert_eq!(2.plurify(uk), "кота");
/// assert_eq!(5.plurify(uk), "котів");
/// ```
fn plurify<'a>(self, s: &[&'a str]) -> &'a str {
plurify(self, s)
}
}

View file

@ -1,15 +1,24 @@
use plurify::ns;
#[cfg(test)]
use plurify::*;
#[test]
fn _ns() {
fn test() {
let en = &["cat", "cats", "cats"];
let uk = &["кіт", "кота", "котів"];
assert_eq!(ns(1, en), "cat");
assert_eq!(ns(2, en), "cats");
assert_eq!(ns(5, en), "cats");
assert_eq!(plurify(1, en), "cat");
assert_eq!(plurify(2, en), "cats");
assert_eq!(plurify(5, en), "cats");
assert_eq!(ns(1, uk), "кіт");
assert_eq!(ns(2, uk), "кота");
assert_eq!(ns(5, uk), "котів");
assert_eq!(plurify(1, uk), "кіт");
assert_eq!(plurify(2, uk), "кота");
assert_eq!(plurify(5, uk), "котів");
assert_eq!(1.plurify(en), "cat");
assert_eq!(2.plurify(en), "cats");
assert_eq!(5.plurify(en), "cats");
assert_eq!(1.plurify(uk), "кіт");
assert_eq!(2.plurify(uk), "кота");
assert_eq!(5.plurify(uk), "котів");
}