pub fn pluralize(
    v: Value,
    singular: Option<String>,
    plural: Option<String>
) -> Result<Value, Error>
Expand description

pluralize filter for minijinja.

Returns a plural suffix if the value is not 1, "1", or an object of length 1. By default, the plural suffix is ‘s’ and the singular suffix is empty (‘’). You can specify a singular suffix as the first argument (or None, for the default). You can specify a plural suffix as the second argument (or None, for the default).

See the examples for the correct usage.

Examples


let mut env = Environment::new();
env.add_filter("pluralize", pluralize);
for (num, s) in [
    (0, "You have 0 messages."),
    (1, "You have 1 message."),
    (10, "You have 10 messages."),
] {
    assert_eq!(
        &env.render_str(
            "You have {{ num_messages }} message{{ num_messages|pluralize }}.",
            minijinja::context! {
                num_messages => num,
            }
        )
        .unwrap(),
        s
    );
}

for (num, s) in [
    (0, "You have 0 walruses."),
    (1, "You have 1 walrus."),
    (10, "You have 10 walruses."),
] {
    assert_eq!(
        &env.render_str(
            r#"You have {{ num_walruses }} walrus{{ num_walruses|pluralize(None, "es") }}."#,
            minijinja::context! {
                num_walruses => num,
            }
        )
        .unwrap(),
        s
    );
}

for (num, s) in [
    (0, "You have 0 cherries."),
    (1, "You have 1 cherry."),
    (10, "You have 10 cherries."),
] {
    assert_eq!(
        &env.render_str(
            r#"You have {{ num_cherries }} cherr{{ num_cherries|pluralize("y", "ies") }}."#,
            minijinja::context! {
                num_cherries => num,
            }
        )
        .unwrap(),
        s
    );
}

assert_eq!(
    &env.render_str(
        r#"You have {{ num_cherries|length }} cherr{{ num_cherries|pluralize("y", "ies") }}."#,
        minijinja::context! {
            num_cherries => vec![(); 5],
        }
    )
    .unwrap(),
    "You have 5 cherries."
);

assert_eq!(
    &env.render_str(
        r#"You have {{ num_cherries }} cherr{{ num_cherries|pluralize("y", "ies") }}."#,
        minijinja::context! {
            num_cherries => "5",
        }
    )
    .unwrap(),
    "You have 5 cherries."
);
assert_eq!(
    &env.render_str(
        r#"You have 1 cherr{{ num_cherries|pluralize("y", "ies") }}."#,
        minijinja::context! {
            num_cherries => true,
        }
    )
    .unwrap()
    .to_string(),
    "You have 1 cherry.",
);
assert_eq!(
    &env.render_str(
        r#"You have {{ num_cherries }} cherr{{ num_cherries|pluralize("y", "ies") }}."#,
        minijinja::context! {
            num_cherries => 0.5f32,
        }
    )
    .unwrap_err()
    .to_string(),
    "invalid operation: Pluralize argument is not an integer, or a sequence / object with a \
     length but of type number (in <string>:1)",
);