burgerlingual 1.2.0

burger utility library for web localisation
Documentation
use crate::translations::Translation;

#[derive(Debug, Clone)]
pub struct TranslationView<'a> {
    translations: Vec<&'a Translation>,
    canonical: &'a Translation
}

impl<'a> TranslationView<'a> {
    pub fn get_translation(&self, key: &str) -> Option<&str> {
        Some(self.translations.iter().rev().find_map(|translation| {
            translation.get_translation(key)
        }).unwrap_or(self.canonical.get_translation(key)?))
    }

    pub fn new(canonical: &'a Translation, translations: Vec<&'a Translation>) -> Self {
        Self { canonical, translations }
    }
}

#[test]
pub fn test_translation_view() {
    use crate::accept_language::parse_accept_language_header;
    use crate::registry::get_dummy_registry;

    let (registry, _, _, _, _) = get_dummy_registry();
    let weighted_languages = parse_accept_language_header("ja-JP;q=1, fr-FR;q=1, en-GB;q=0.2, en-US;q=0.2").unwrap();
    let view = registry.get_translation_view(&weighted_languages).unwrap();
    assert_eq!(view.get_translation("spelling_of_gray").unwrap(), "Grey");
    assert_eq!(view.get_translation("internal_server_error").unwrap(), "内部サーバーエラー");
}