1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
use fluent_langneg::{negotiate_languages, NegotiationStrategy};
use intl_memoizer::Memoizable;
use intl_pluralrules::{PluralRuleType, PluralRules as IntlPluralRules};
use unic_langid::LanguageIdentifier;

pub struct PluralRules(pub IntlPluralRules);

impl Memoizable for PluralRules {
    type Args = (PluralRuleType,);
    type Error = &'static str;
    fn construct(lang: LanguageIdentifier, args: Self::Args) -> Result<Self, Self::Error> {
        let default_lang: LanguageIdentifier = "en".parse().unwrap();
        let pr_lang = negotiate_languages(
            &[lang],
            &IntlPluralRules::get_locales(args.0),
            Some(&default_lang),
            NegotiationStrategy::Lookup,
        )[0]
        .clone();
        Ok(Self(IntlPluralRules::create(pr_lang, args.0)?))
    }
}