plurify 0.2.0

Pluralize words in different locales
Documentation
// Functions

/// Get plural string `s` for number `n`
///
/// ## Example
/// ``` rust
/// use plurify::*;
///
/// let en = &["cat", "cats", "cats"];
/// let uk = &["кіт", "кота", "котів"];
///
/// assert_eq!(plurify(1, en), "cat");
/// assert_eq!(plurify(2, en), "cats");
/// assert_eq!(plurify(5, en), "cats");
///
/// assert_eq!(plurify(1, uk), "кіт");
/// assert_eq!(plurify(2, uk), "кота");
/// assert_eq!(plurify(5, uk), "котів");
/// ```
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)
    }
}