mirror of
https://github.com/YGGverse/plurify.git
synced 2026-03-31 17:15:36 +00:00
Compare commits
4 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
81bd06eee8 | ||
|
|
5aeb139caa | ||
|
|
89675db0e8 | ||
|
|
b73a94fc3c |
4 changed files with 67 additions and 25 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "plurify"
|
name = "plurify"
|
||||||
version = "0.1.1"
|
version = "0.2.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
|
||||||
16
README.md
16
README.md
|
|
@ -1,6 +1,8 @@
|
||||||
# plurify
|
# plurify
|
||||||
|
|
||||||

|

|
||||||
|
[](https://docs.rs/plurify)
|
||||||
|
[](https://crates.io/crates/plurify)
|
||||||
|
|
||||||
Pluralize words in different locales
|
Pluralize words in different locales
|
||||||
|
|
||||||
|
|
@ -15,16 +17,16 @@ cargo add plurify
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
``` rust
|
``` rust
|
||||||
use plurify::ns;
|
use plurify::*;
|
||||||
|
|
||||||
let en = &["cat", "cats", "cats"];
|
let en = &["cat", "cats", "cats"];
|
||||||
let uk = &["кіт", "кота", "котів"];
|
let uk = &["кіт", "кота", "котів"];
|
||||||
|
|
||||||
assert_eq!(ns(1, en), "cat");
|
assert_eq!(1.plurify(en), "cat");
|
||||||
assert_eq!(ns(2, en), "cats");
|
assert_eq!(2.plurify(en), "cats");
|
||||||
assert_eq!(ns(5, en), "cats");
|
assert_eq!(5.plurify(en), "cats");
|
||||||
|
|
||||||
assert_eq!(ns(1, uk), "кіт");
|
assert_eq!(1.plurify(uk), "кіт");
|
||||||
assert_eq!(ns(2, uk), "кота");
|
assert_eq!(2.plurify(uk), "кота");
|
||||||
assert_eq!(ns(5, uk), "котів");
|
assert_eq!(5.plurify(uk), "котів");
|
||||||
```
|
```
|
||||||
49
src/lib.rs
49
src/lib.rs
|
|
@ -1,24 +1,55 @@
|
||||||
/// Get plural string `s` match number `n`
|
// Functions
|
||||||
|
|
||||||
|
/// Get plural string `s` for number `n`
|
||||||
///
|
///
|
||||||
/// ## Example
|
/// ## Example
|
||||||
/// ``` rust
|
/// ``` rust
|
||||||
/// use plurify::ns;
|
/// use plurify::*;
|
||||||
///
|
///
|
||||||
/// let en = &["cat", "cats", "cats"];
|
/// let en = &["cat", "cats", "cats"];
|
||||||
/// let uk = &["кіт", "кота", "котів"];
|
/// let uk = &["кіт", "кота", "котів"];
|
||||||
///
|
///
|
||||||
/// assert_eq!(ns(1, en), "cat");
|
/// assert_eq!(plurify(1, en), "cat");
|
||||||
/// assert_eq!(ns(2, en), "cats");
|
/// assert_eq!(plurify(2, en), "cats");
|
||||||
/// assert_eq!(ns(5, en), "cats");
|
/// assert_eq!(plurify(5, en), "cats");
|
||||||
///
|
///
|
||||||
/// assert_eq!(ns(1, uk), "кіт");
|
/// assert_eq!(plurify(1, uk), "кіт");
|
||||||
/// assert_eq!(ns(2, uk), "кота");
|
/// assert_eq!(plurify(2, uk), "кота");
|
||||||
/// assert_eq!(ns(5, 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 {
|
s[if n % 100 > 4 && n % 100 < 20 {
|
||||||
2
|
2
|
||||||
} else {
|
} else {
|
||||||
[2, 0, 1, 1, 1, 2][usize::min(n % 10, 5)]
|
[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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,24 @@
|
||||||
use plurify::ns;
|
#[cfg(test)]
|
||||||
|
use plurify::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn _ns() {
|
fn test() {
|
||||||
let en = &["cat", "cats", "cats"];
|
let en = &["cat", "cats", "cats"];
|
||||||
let uk = &["кіт", "кота", "котів"];
|
let uk = &["кіт", "кота", "котів"];
|
||||||
|
|
||||||
assert_eq!(ns(1, en), "cat");
|
assert_eq!(plurify(1, en), "cat");
|
||||||
assert_eq!(ns(2, en), "cats");
|
assert_eq!(plurify(2, en), "cats");
|
||||||
assert_eq!(ns(5, en), "cats");
|
assert_eq!(plurify(5, en), "cats");
|
||||||
|
|
||||||
assert_eq!(ns(1, uk), "кіт");
|
assert_eq!(plurify(1, uk), "кіт");
|
||||||
assert_eq!(ns(2, uk), "кота");
|
assert_eq!(plurify(2, uk), "кота");
|
||||||
assert_eq!(ns(5, 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), "котів");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue