l10n_core 0.1.3

Core crate for l10n.
Documentation
use unic_langid::LanguageIdentifier;

pub fn locales_to_string(locales: &[LanguageIdentifier], separator: &str) -> String {
    locales
        .iter()
        .map(|locale| locale.to_string())
        .collect::<Vec<_>>()
        .join(separator)
}

pub fn values_to_string<T: ToString>(values: &[T], separator: &str) -> String {
    values
        .iter()
        .map(|value| value.to_string())
        .collect::<Vec<_>>()
        .join(separator)
}

pub fn for_locales(values: &[LanguageIdentifier]) -> String {
    format!(
        "for {}: {}",
        grammar_number(values, "locale", "locales"),
        locales_to_string(values, ", "),
    )
}

pub fn grammar_number<T, S: ToString>(values: &[T], singular: S, plural: S) -> S {
    if values.len() == 1 {
        singular
    } else {
        plural
    }
}