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(), "内部サーバーエラー");
}