use clap::ValueEnum;
use gtfs_core::i18n::Lang;
pub use gtfs_core::i18n::Translator;
#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum LangArg {
Tr,
En,
Ja,
Fr,
}
impl From<LangArg> for Lang {
fn from(arg: LangArg) -> Self {
match arg {
LangArg::Tr => Lang::Tr,
LangArg::En => Lang::En,
LangArg::Ja => Lang::Ja,
LangArg::Fr => Lang::Fr,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn registry_titles_cover_every_rule() {
for lang in [Lang::En, Lang::Ja, Lang::Fr] {
let translator = Translator::new(lang).unwrap().unwrap();
for meta in gtfs_rules::RULES {
assert_ne!(
translator.rule_title(meta.id, "MISSING"),
"MISSING",
"{:?} locale has no title for {}",
lang,
meta.id
);
}
}
}
#[test]
fn every_registered_rule_resolves_in_complete_dictionaries() {
for (name, lang) in [("en", Lang::En), ("fr", Lang::Fr)] {
let translator = Translator::new(lang).unwrap().unwrap();
let missing: Vec<String> = gtfs_rules::RULES
.iter()
.flat_map(|rule| {
translator
.missing_sections(rule.id)
.into_iter()
.map(move |section| format!("{section}/{}", rule.id))
})
.collect();
assert!(
missing.is_empty(),
"'{name}' locale is missing {} entries: {missing:?}\n\
Add them to ui/src/locales/{name}.ts, then run `npm run locales:export`.",
missing.len()
);
}
}
}