diff --git a/Cargo.toml b/Cargo.toml index 3aec7a3..f531af1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,7 @@ futures = "0.3.21" indicatif = "0.17.0" filenamify = "0.1.0" ress = "0.11.4" +phf = "0.11.1" [dev-dependencies] env_logger = "0.9.0" @@ -39,3 +40,4 @@ insta = "1.17.1" velcro = "0.5.3" unic-langid = "0.9.0" intl_pluralrules = "7.0.1" +phf_codegen = "0.11.1" diff --git a/src/client/scripts/timeago_testfiles.rs b/src/client/scripts/timeago_testfiles.rs index 1fa4262..80036a7 100644 --- a/src/client/scripts/timeago_testfiles.rs +++ b/src/client/scripts/timeago_testfiles.rs @@ -164,7 +164,7 @@ async fn get_comment_datestrings(rp: &RustyTube, ctoken: &str) -> (Vec, // #[test_log::test(tokio::test)] #[allow(dead_code)] async fn download_timeago_testfiles() { - let json_path = Path::new("testfiles/date/timeago.json").to_path_buf(); + let json_path = Path::new("testfiles/date/timeago_samples.json").to_path_buf(); if json_path.exists() { return; } @@ -312,7 +312,7 @@ struct TimeagoTable { #[derive(Debug, Clone, Serialize, Deserialize)] struct TimeagoTableEntry { - cases: BTreeMap, + cases: BTreeMap, missing_plurals: HashSet, } diff --git a/src/dictionary.rs b/src/dictionary.rs new file mode 100644 index 0000000..8291268 --- /dev/null +++ b/src/dictionary.rs @@ -0,0 +1,1682 @@ +// This file is automatically generated. DO NOT EDIT. +use crate::{ + model::Language, + timeago::{TaToken, TimeUnit}, +}; + +#[rustfmt::skip] +pub(crate) fn get_timeago_tokens(lang: Language) -> phf::Map<&'static str, TaToken> { + match lang { + Language::Af => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (4, 0), + (6, 5), + (7, 2), + ], + entries: &[ + ("maande", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("uur", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("dag", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("weke", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("jaar", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("maand", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("sekondes", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("minute", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("week", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("minuut", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ure", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("dae", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sekonde", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Am => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (0, 9), + (7, 0), + (5, 3), + ], + entries: &[ + ("ደቂቃ", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ሳምንታት", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ሰዓት", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ቀን", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ወራት", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ሰዓቶች", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ወር", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ሰከንዶች", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ዓመት", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ሰከንድ", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ቀናት", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ደቂቃዎች", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ዓመታት", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ሳምንት", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Ar => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (1, 9), + (5, 0), + (10, 4), + (0, 1), + (7, 19), + ], + entries: &[ + ("سنتين", TaToken { n: 2, unit: Some(TimeUnit::Year) }), + ("سنة", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("دقائق", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ساعة", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ثوان\u{64d}", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ثانية", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ثانيتين", TaToken { n: 2, unit: Some(TimeUnit::Second) }), + ("أسبوعين", TaToken { n: 2, unit: Some(TimeUnit::Week) }), + ("أسبوع", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("يومين", TaToken { n: 2, unit: Some(TimeUnit::Day) }), + ("شهر\u{64b}ا", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("أيام", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("شهر", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("يوم", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("سنوات", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("يوم\u{64b}ا", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("شهرين", TaToken { n: 2, unit: Some(TimeUnit::Month) }), + ("دقيقة", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ثوان\u{650}", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("دقيقتين", TaToken { n: 2, unit: Some(TimeUnit::Minute) }), + ("أسابيع", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ساعات", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("أشهر", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ساعتين", TaToken { n: 2, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::As => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (5, 5), + (3, 0), + ], + entries: &[ + ("দিন", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ছেকেণ\u{9cd}ড", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("বছৰৰ", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ঘণ\u{9cd}ট\u{9be}", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("সপ\u{9cd}ত\u{9be}হ", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ম\u{9be}হ", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("মিনিট", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ], + }, + Language::Az => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (5, 0), + (1, 0), + ], + entries: &[ + ("dəqiqə", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("saniyə", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("il", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("həftə", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ay", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("gün", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("saat", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::Be => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (2, 0), + (3, 15), + (9, 23), + (1, 18), + (1, 7), + ], + entries: &[ + ("месяца", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("хвіліну", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("дні", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("секунды", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("года", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("секунд", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("гадоў", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("месяцы", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("гадзіну", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("год", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("гады", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("тыдні", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("гадзін", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("дня", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("хвілін", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("дзень", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("хвіліны", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("секунду", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("тыдня", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("гадзіны", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("месяцаў", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("месяц", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("тыдзень", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("дзён", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, + Language::Bg => ::phf::Map { + key: 7485420634051515786, + disps: &[ + (2, 0), + (7, 12), + (5, 10), + ], + entries: &[ + ("час", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("секунда", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("дни", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("месец", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("седмици", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("минута", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("години", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("седмица", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ден", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("минути", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("месеца", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("часа", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("година", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("секунди", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Bn => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 1), + (2, 0), + ], + entries: &[ + ("মিনিট", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("সপ\u{9cd}ত\u{9be}হ", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("দিন", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ঘন\u{9cd}ট\u{9be}", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ম\u{9be}স", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("বছর", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("সেকেন\u{9cd}ড", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Bs => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (5, 0), + (3, 12), + (8, 3), + (1, 7), + ], + entries: &[ + ("sedmice", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("dan", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sekunde", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("minute", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("mjeseca", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("godinu", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("mjesec", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("dana", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("minuta", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("godina", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("minutu", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("sati", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("godine", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("sekundu", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("sekundi", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("sedmicu", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("sata", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("sat", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("mjeseci", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ], + }, + Language::Ca => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (6, 7), + (2, 9), + (0, 0), + ], + entries: &[ + ("setmanes", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("any", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("hora", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("dies", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("setmana", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("segon", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("mesos", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("hores", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("mes", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minuts", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("segons", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("minut", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("anys", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("dia", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, + Language::Cs => ::phf::Map { + key: 8694567506910003252, + disps: &[ + (2, 10), + (5, 0), + (8, 0), + ], + entries: &[ + ("rokem", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("hodinami", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("dnem", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("minutami", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("dny", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("lety", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("týdny", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("týdnem", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("sekundou", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("hodinou", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("měsícem", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("sekundami", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("roky", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("minutou", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("měsíci", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ], + }, + Language::Da => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (6, 0), + (0, 7), + (12, 11), + ], + entries: &[ + ("sekunder", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("dage", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("måned", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("sekund", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("minutter", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("time", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("år", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("timer", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("minut", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("dag", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("måneder", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("uger", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("uge", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::De => ::phf::Map { + key: 345707026197253659, + disps: &[ + (9, 13), + (3, 0), + (3, 6), + ], + entries: &[ + ("woche", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("jahr", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("monat", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("wochen", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("minuten", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("monaten", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("sekunden", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("stunden", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("jahren", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("sekunde", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("tag", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("stunde", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("minute", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("tagen", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, + Language::El => ::phf::Map { + key: 12213676231523076107, + disps: &[ + (0, 0), + (7, 11), + (2, 7), + ], + entries: &[ + ("λεπτά", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("εβδομάδα", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ημέρες", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("εβδομάδες", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("μήνες", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ημέρα", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("έτη", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("λεπτό", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("έτος", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("μήνα", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ώρα", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("δευτερόλεπτο", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ώρες", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("δευτερόλεπτα", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::En | Language::EnGb | Language::EnIn => ::phf::Map { + key: 7485420634051515786, + disps: &[ + (0, 7), + (8, 12), + (5, 0), + ], + entries: &[ + ("months", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("month", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("hours", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("days", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("years", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("week", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("second", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("day", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("minute", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("seconds", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("weeks", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("hour", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("minutes", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("year", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ], + }, + Language::Es | Language::EsUs | Language::Es419 => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (8, 9), + (2, 0), + (7, 5), + ], + entries: &[ + ("segundos", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("meses", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minutos", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("semanas", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("segundo", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("días", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("mes", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("hora", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("años", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("día", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("semana", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("horas", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("año", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("minuto", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ], + }, + Language::Et => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (0, 1), + (0, 0), + (0, 3), + (5, 10), + ], + entries: &[ + ("nädalat", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("nädala", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("minuti", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("aastat", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("tunni", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("sekundi", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("kuu", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("kuud", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minutit", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("nädal", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("päev", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sekundit", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("sekund", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("aasta", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("minut", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("päeva", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, + Language::Eu => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 9), + (0, 0), + ], + entries: &[ + ("egun", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("astebete", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("hilabete", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minutu", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("urtebete", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("segundo", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("aste", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("urte", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ordu", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ordubete", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::Fa => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + (0, 1), + ], + entries: &[ + ("ماه", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("روز", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("هفته", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ساعت", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ثانیه", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("سال", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("دقیقه", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ], + }, + Language::Fi => ::phf::Map { + key: 12213676231523076107, + disps: &[ + (2, 13), + (0, 0), + (0, 11), + ], + entries: &[ + ("päivä", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("kuukausi", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minuuttia", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("viikko", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("sekuntia", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("kuukautta", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("tunti", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("vuosi", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("minuutti", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("vuotta", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("tuntia", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("viikkoa", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("päivää", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sekunti", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Fil => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (0, 0), + (0, 2), + ], + entries: &[ + ("araw", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("oras", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("segundo", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("buwan", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("taon", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("minuto", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("linggo", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Fr | Language::FrCa => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (12, 3), + (2, 11), + (2, 0), + ], + entries: &[ + ("minute", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("semaine", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("jour", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("mois", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("semaines", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("jours", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("seconde", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("heures", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("secondes", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("minutes", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("an", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ans", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("heure", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::Gl => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (12, 6), + (3, 9), + (1, 0), + ], + entries: &[ + ("día", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("minutos", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("mes", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("días", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("segundos", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("anos", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ano", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("horas", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("segundo", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("semana", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("minuto", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("meses", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("semanas", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("hora", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::Gu => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + (3, 0), + ], + entries: &[ + ("સ\u{ac7}ક\u{a82}ડ", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("દિવસ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("મહિના", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("વર\u{acd}ષ", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("અઠવાડિયા", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("મિનિટ", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("કલાક", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::Hi => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 5), + (2, 0), + ], + entries: &[ + ("वर\u{94d}ष", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("माह", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("सप\u{94d}ताह", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("स\u{947}क\u{902}ड", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("दिन", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("घ\u{902}ट\u{947}", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("मिनट", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ], + }, + Language::Hr => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (3, 4), + (3, 0), + (0, 3), + (7, 6), + ], + entries: &[ + ("minuta", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("minute", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("dan", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("tjedan", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("tjedna", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("godine", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("godinu", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("mjeseca", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("godina", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("mjesec", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("sekundu", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("mjeseci", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minutu", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("sata", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("dana", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sekunde", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("sat", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("sati", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("sekundi", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Hu => ::phf::Map { + key: 7485420634051515786, + disps: &[ + (0, 0), + (3, 9), + (3, 11), + ], + entries: &[ + ("perccel", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("perce", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("nappal", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("másodperce", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("órával", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("héttel", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("hete", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("hónappal", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("másodperccel", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("évvel", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("órája", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("éve", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("napja", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("hónapja", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ], + }, + Language::Hy => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (2, 3), + (1, 0), + ], + entries: &[ + ("վայրկյան", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("շաբաթ", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("օր", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ամիս", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("րոպե", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ժամ", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("տարի", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ], + }, + Language::Id => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (0, 0), + (4, 1), + ], + entries: &[ + ("detik", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("menit", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("hari", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("jam", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("minggu", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("bulan", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("tahun", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ], + }, + Language::Is => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (1, 2), + (1, 0), + (9, 7), + ], + entries: &[ + ("mánuðum", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("klukkustundum", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("sekúndu", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("mínútum", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("dögum", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("viku", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ári", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("sekúndum", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("mínútu", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("mánuði", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("vikum", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("degi", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("árum", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("klukkustund", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::It => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (2, 3), + (0, 0), + (6, 12), + ], + entries: &[ + ("mese", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("giorni", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("settimane", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ora", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("anni", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("giorno", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("secondo", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ore", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("minuti", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("mesi", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("secondi", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("anno", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("minuto", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("settimana", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Iw => ::phf::Map { + key: 1937371814602216758, + disps: &[ + (0, 0), + (3, 0), + (0, 15), + (2, 15), + ], + entries: &[ + ("יומיים", TaToken { n: 2, unit: Some(TimeUnit::Day) }), + ("שעה", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("חודשים", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("שנים", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("חודש", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("שעות", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("שנה", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("שנתיים", TaToken { n: 2, unit: Some(TimeUnit::Year) }), + ("שבוע", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("שניות", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("שעתיים", TaToken { n: 2, unit: Some(TimeUnit::Hour) }), + ("דקה", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("שנייה", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("חודשיים", TaToken { n: 2, unit: Some(TimeUnit::Month) }), + ("יום", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ימים", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("שתי", TaToken { n: 2, unit: None }), + ("שבועות", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("דקות", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("שבועיים", TaToken { n: 2, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Ja => ::phf::Map { + key: 14108922650502679131, + disps: &[ + (1, 5), + (2, 0), + ], + entries: &[ + ("秒前", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("年前", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("分前", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("時間前", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("か月前", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("日前", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("週間前", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Ka => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 4), + (6, 0), + ], + entries: &[ + ("საათის", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("კვირის", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("წლის", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("თვის", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("დღის", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("წუთის", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("წამის", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Kk => ::phf::Map { + key: 7485420634051515786, + disps: &[ + (0, 3), + (2, 0), + ], + entries: &[ + ("апта", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("секунд", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("минут", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("сағат", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ай", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("күн", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("жыл", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ], + }, + Language::Km => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 3), + (1, 0), + ], + entries: &[ + ("សប\u{17d2}ដាហ\u{17cd}ម\u{17bb}ន", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("វ\u{17b7}នាទ\u{17b8}ម\u{17bb}ន", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ខែម\u{17bb}ន", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ម\u{17c9}ោងម\u{17bb}ន", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ឆ\u{17d2}នា\u{17c6}ម\u{17bb}ន", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ថ\u{17d2}ងៃម\u{17bb}ន", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("នាទ\u{17b8}ម\u{17bb}ន", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ], + }, + Language::Kn => ::phf::Map { + key: 2980949210194914378, + disps: &[ + (1, 0), + (1, 0), + (0, 2), + ], + entries: &[ + ("ಗಂಟ\u{cc6}", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ವರ\u{ccd}ಷದ", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ದ\u{cbf}ನದ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ತ\u{cbf}ಂಗಳ", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ನ\u{cbf}ಮ\u{cbf}ಷಗಳ", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ವಾರದ", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ಸ\u{cc6}ಕ\u{cc6}ಂಡುಗಳ", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ಗಂಟ\u{cc6}ಗಳ", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ಸ\u{cc6}ಕ\u{cc6}ಂಡ\u{ccd}", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ನ\u{cbf}ಮ\u{cbf}ಷದ", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ವಾರಗಳ", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ದ\u{cbf}ನಗಳ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ತ\u{cbf}ಂಗಳುಗಳ", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ವರ\u{ccd}ಷಗಳ", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ], + }, + Language::Ko => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (4, 1), + (5, 0), + ], + entries: &[ + ("분", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("일", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("시간", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("개월", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("년", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("초", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("주", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Ky => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (3, 3), + (0, 0), + ], + entries: &[ + ("ай", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("саат", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("жыл", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("мүнөт", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("күн", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("секунд", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("апта", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Lo => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 5), + (0, 0), + ], + entries: &[ + ("ນາທ\u{eb5}ກ\u{ec8}ອນ", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ເດ\u{eb7}ອນກ\u{ec8}ອນ", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ຊ\u{ebb}\u{ec8}ວໂມງກ\u{ec8}ອນ", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ອາທ\u{eb4}ດກ\u{ec8}ອນ", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ມ\u{eb7}\u{ec9}ກ\u{ec8}ອນ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ປ\u{eb5}ກ\u{ec8}ອນ", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ວ\u{eb4}ນາທ\u{eb5}ກ\u{ec8}ອນ", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Lt => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (11, 17), + (10, 19), + (2, 0), + (1, 2), + ], + entries: &[ + ("dieną", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("valandų", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("metus", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("minutes", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("dienų", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("valandą", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("sekundžių", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("sekundę", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("mėnesių", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("savaites", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("savaitę", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("minučių", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("mėnesį", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("dienas", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("valandas", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("savaičių", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("mėnesius", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minutę", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("sekundes", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("metų", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ], + }, + Language::Lv => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (2, 0), + (1, 12), + (0, 4), + ], + entries: &[ + ("dienām", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sekundes", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("stundām", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("stundas", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("nedēļas", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("minūtēm", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("minūtes", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("nedēļām", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("gadiem", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("gada", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("mēneša", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("sekundēm", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("mēnešiem", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("dienas", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, + Language::Mk => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (1, 11), + (11, 0), + (2, 7), + ], + entries: &[ + ("часа", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("дена", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("минути", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("месеци", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("секунда", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("години", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("час", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("минута", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("секунди", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("седмица", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("месец", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("седмици", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ден", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("година", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ], + }, + Language::Ml => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + (0, 0), + ], + entries: &[ + ("ആഴ\u{d4d}ച", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("സെക\u{d4d}കൻഡ\u{d4d}", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("മണിക\u{d4d}ക\u{d42}ർ", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ദിവസം", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("വർഷം", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("മ\u{d3e}സം", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("മിനിറ\u{d4d}റ\u{d4d}", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ], + }, + Language::Mn => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 3), + (5, 0), + ], + entries: &[ + ("сарын", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("минутын", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("өдрийн", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("хоногийн", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("жилийн", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("цагийн", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("секундын", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Mr => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (2, 6), + (1, 3), + (6, 0), + ], + entries: &[ + ("दिवसा\u{902}प\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("वर\u{94d}षा\u{902}प\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("तासाप\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("वर\u{94d}षाप\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("महिन\u{94d}याप\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("स\u{947}क\u{902}दा\u{902}प\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("दिवसाप\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("महिन\u{94d}या\u{902}प\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("आठवड\u{94d}या\u{902}प\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("मिनिटाप\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("स\u{947}क\u{902}दाप\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("तासा\u{902}प\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("मिनिटा\u{902}प\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("आठवड\u{94d}याप\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Ms => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (3, 0), + (0, 1), + ], + entries: &[ + ("hari", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("saat", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("minit", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("bulan", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minggu", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("tahun", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("jam", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::My => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (3, 0), + (3, 5), + ], + entries: &[ + ("နာရ\u{102e}", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("န\u{103e}စ\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("မ\u{102d}နစ\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ပတ\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("စက\u{1039}ကန\u{1037}\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ရက\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("လ", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ], + }, + Language::Ne => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + (1, 3), + ], + entries: &[ + ("घण\u{94d}टा", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("महिना", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("दिन", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("हप\u{94d}ता", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("वर\u{94d}ष", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("मिन\u{947}ट", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("स\u{947}क\u{947}न\u{94d}ड", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Nl => ::phf::Map { + key: 14108922650502679131, + disps: &[ + (8, 0), + (2, 10), + (2, 6), + ], + entries: &[ + ("weken", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("uur", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("dagen", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("minuut", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("seconde", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("seconden", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("jaar", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("maanden", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("maand", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("dag", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("week", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("minuten", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ], + }, + Language::No => ::phf::Map { + key: 7485420634051515786, + disps: &[ + (0, 0), + (0, 0), + (5, 6), + ], + entries: &[ + ("minutter", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("dag", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("minutt", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("døgn", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("uker", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("sekund", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("år", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("sekunder", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("måneder", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("timer", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("måned", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("dager", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("time", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("uke", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Or => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (4, 4), + (5, 0), + ], + entries: &[ + ("ସେକେଣ\u{b4d}ଡ", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ବର\u{b4d}ଷ", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ସପ\u{b4d}ତ\u{b3e}ହ", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ମ\u{b3e}ସ", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ମ\u{b3f}ନ\u{b3f}ଟ\u{b4d}", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ଘଣ\u{b4d}ଟ\u{b3e}", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ଦ\u{b3f}ନ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, + Language::Pa => ::phf::Map { + key: 399332969041170284, + disps: &[ + (0, 0), + (8, 1), + ], + entries: &[ + ("ਹਫ\u{a3c}ਤ\u{a47}", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ਮਿ\u{a70}ਟ", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ਹਫ\u{a3c}ਤਾ", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ਮਹੀਨਾ", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ਘ\u{a70}ਟ\u{a47}", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ਸਕਿ\u{a70}ਟ", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ਸਾਲ", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ਮਹੀਨ\u{a47}", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ਦਿਨ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ਘ\u{a70}ਟਾ", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::Pl => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (13, 4), + (0, 11), + (5, 11), + (8, 0), + ], + entries: &[ + ("minuty", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("rok", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("dzień", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("tygodnie", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("godzin", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("godziny", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("tydzień", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("miesięcy", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("lat", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("dni", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("minut", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("sekundę", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("sekund", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("godzinę", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("miesiąc", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("lata", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("miesiące", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minutę", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("sekundy", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Pt | Language::PtPt => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (6, 9), + (0, 0), + (2, 6), + ], + entries: &[ + ("segundos", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("dia", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ano", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("meses", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("anos", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("minuto", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("semana", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("hora", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("semanas", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("segundo", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("minutos", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("horas", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("mês", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("dias", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, + Language::Ro => ::phf::Map { + key: 14108922650502679131, + disps: &[ + (0, 0), + (4, 2), + (0, 6), + ], + entries: &[ + ("săptămână", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("luni", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("oră", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("an", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("lună", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ani", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("minute", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("secunde", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("zile", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("secundă", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("minut", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("săptămâni", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("zi", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ore", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::Ru => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (17, 15), + (7, 8), + (4, 0), + (0, 0), + ], + entries: &[ + ("часа", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("год", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("недели", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("дней", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("минуты", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("секунду", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("часов", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("секунд", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("минуту", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("дня", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("лет", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("неделю", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("секунды", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("час", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("месяцев", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("месяц", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("минут", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("года", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("день", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("месяца", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ], + }, + Language::Si => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (5, 3), + (5, 0), + ], + entries: &[ + ("ම\u{dd2}න\u{dd2}ත\u{dca}ත\u{dd4}", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("තත\u{dca}පර", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("පැය", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ම\u{dcf}ස", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("සත\u{dd2}", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("වසර", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ද\u{dd2}න", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, + Language::Sk => ::phf::Map { + key: 8694567506910003252, + disps: &[ + (7, 2), + (0, 0), + (5, 3), + ], + entries: &[ + ("hodinou", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("minútou", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("dňom", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sekundou", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("mesiacom", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minútami", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("rokom", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("mesiacmi", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("týždňom", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("dňami", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("rokmi", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("sekundami", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("hodinami", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("týždňami", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Sl => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (0, 2), + (2, 0), + (19, 11), + (3, 10), + (0, 21), + ], + entries: &[ + ("tednoma", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("uro", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("letom", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("mesecema", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("dnevi", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("tedni", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("tednom", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("leti", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("sekundama", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("dnevom", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("mesecem", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("letoma", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("dnevoma", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("minutama", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("minutami", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("dnem", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("urami", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("meseci", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("minuto", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("sekundami", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("sekundo", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("urama", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::Sq => ::phf::Map { + key: 471159234146692604, + disps: &[ + (8, 0), + (1, 3), + ], + entries: &[ + ("sekonda", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("orë", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("minuta", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("vit", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ditë", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("muaj", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("javë", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("sekondë", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("minutë", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("vjet", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ], + }, + Language::Sr => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (0, 15), + (15, 0), + (0, 6), + (7, 2), + ], + entries: &[ + ("секунди", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("дан", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("месеца", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("сат", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("недељу", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("месеци", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("дана", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("година", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("сати", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("секунде", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("месец", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("сата", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("године", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("недеље", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("годину", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("минута", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ], + }, + Language::SrLatn => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (11, 7), + (0, 0), + (8, 3), + (13, 0), + ], + entries: &[ + ("dan", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("godine", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("godina", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("godinu", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("meseca", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("dana", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sekunde", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("nedelju", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("sekundi", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("sata", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("minuta", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("sati", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("meseci", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("mesec", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("nedelja", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("nedelje", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("sat", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::Sv => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (2, 11), + (2, 0), + (9, 1), + ], + entries: &[ + ("år", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("månader", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("timmar", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("dagar", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("vecka", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("sekund", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("månad", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("veckor", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("minut", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("dag", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("timme", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("minuter", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("sekunder", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Sw => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (3, 8), + (2, 0), + ], + entries: &[ + ("mwaka", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("siku", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("wiki", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("saa", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("mwezi", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("sekunde", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("miezi", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("dakika", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("miaka", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ], + }, + Language::Ta => ::phf::Map { + key: 7485420634051515786, + disps: &[ + (2, 3), + (12, 0), + (2, 11), + ], + entries: &[ + ("ஆண\u{bcd}டுகளுக\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("வ\u{bbe}ரங\u{bcd}களுக\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("நிமிடங\u{bcd}களுக\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ந\u{bbe}ளுக\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("நிமிடத\u{bcd}திற\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("மணிநேரம\u{bcd}", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("விந\u{bbe}டிக\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("விந\u{bbe}டிகளுக\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ம\u{bbe}தங\u{bcd}களுக\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ம\u{bbe}தத\u{bcd}துக\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ஆண\u{bcd}டிற\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ந\u{bbe}ட\u{bcd}களுக\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("வ\u{bbe}ரம\u{bcd}", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Te => ::phf::Map { + key: 14108922650502679131, + disps: &[ + (10, 0), + (0, 11), + (1, 11), + ], + entries: &[ + ("న\u{c3f}మ\u{c3f}షం", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ర\u{c4b}జు", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("న\u{c46}ల", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ర\u{c4b}జుల", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("న\u{c46}లల", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("గంటల", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("గంట", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("వ\u{c3e}ర\u{c3e}ల", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("న\u{c3f}మ\u{c3f}ష\u{c3e}ల", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("వ\u{c3e}రం", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("స\u{c46}కన\u{c4d}ల", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("సంవత\u{c4d}సరం", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("స\u{c46}కను", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("సంవత\u{c4d}సర\u{c3e}ల", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ], + }, + Language::Th => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (3, 5), + (0, 0), + ], + entries: &[ + ("ว\u{e34}นาท\u{e35}ท\u{e35}\u{e48}ผ\u{e48}านมา", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ว\u{e31}นท\u{e35}\u{e48}ผ\u{e48}านมา", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("นาท\u{e35}ท\u{e35}\u{e48}ผ\u{e48}านมา", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ช\u{e31}\u{e48}วโมงท\u{e35}\u{e48}ผ\u{e48}านมา", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ส\u{e31}ปดาห\u{e4c}ท\u{e35}\u{e48}ผ\u{e48}านมา", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("ป\u{e35}ท\u{e35}\u{e48}แล\u{e49}ว", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("เด\u{e37}อนท\u{e35}\u{e48}ผ\u{e48}านมา", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ], + }, + Language::Tr => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (6, 0), + (0, 6), + ], + entries: &[ + ("gün", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("hafta", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("saat", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("yıl", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ay", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("dakika", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("saniye", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ], + }, + Language::Uk => ::phf::Map { + key: 8694567506910003252, + disps: &[ + (0, 5), + (6, 4), + (4, 0), + (2, 16), + ], + entries: &[ + ("місяців", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("роки", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("років", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("секунду", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("рік", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("секунд", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("години", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("місяць", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("хвилину", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("день", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("місяці", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("хвилини", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("годину", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("тижні", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("годин", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("хвилин", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("тиждень", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("днів", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("секунди", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("дні", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, + Language::Ur => ::phf::Map { + key: 7485420634051515786, + disps: &[ + (9, 10), + (0, 11), + (2, 0), + ], + entries: &[ + ("سیکنڈ", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("سیکنڈز", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("مہینہ", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("ہفتے", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("منٹس", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ہفتہ", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("دنوں", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("گھنٹہ", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("سال", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("مہینے", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("دن", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("منٹ", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("گھنٹے", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::Uz => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (2, 6), + (3, 0), + ], + entries: &[ + ("daqiqa", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("yil", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("kun", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("soat", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("hafta", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("soniya", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("oy", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ], + }, + Language::Vi => ::phf::Map { + key: 10121458955350035957, + disps: &[ + (7, 3), + (7, 0), + ], + entries: &[ + ("giờ", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ngày", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("tuần", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("giây", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("năm", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("tiếng", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("tháng", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("phút", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ], + }, + Language::ZhCn => ::phf::Map { + key: 14108922650502679131, + disps: &[ + (1, 3), + (4, 0), + ], + entries: &[ + ("分钟前", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("年前", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("个月前", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("小时前", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("秒钟前", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("天前", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("周前", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::ZhHk => ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 2), + (0, 0), + ], + entries: &[ + ("年前", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("日前", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("個月前", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("分鐘前", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("星期前", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("秒前", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("小時前", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ], + }, + Language::ZhTw => ::phf::Map { + key: 15467950696543387533, + disps: &[ + (2, 1), + (0, 0), + ], + entries: &[ + ("個月前", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("天前", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("小時前", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("年前", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("秒前", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("分鐘前", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("週前", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + Language::Zu => ::phf::Map { + key: 8694567506910003252, + disps: &[ + (1, 8), + (0, 0), + (11, 4), + ], + entries: &[ + ("emahoreni", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("iviki", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("amasekhondi", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("izinyanga", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("iminithi", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("ezinsukwini", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("osukwini", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("amaminithi", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("unyaka", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("iminyaka", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("inyanga", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("isekhondi", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ihora", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("amaviki", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ], + }, + } +} diff --git a/src/lib.rs b/src/lib.rs index e8f4a75..6ca8e05 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,9 +6,10 @@ mod macros; mod cache; mod deobfuscate; mod serializer; -mod timeago; mod util; +mod dictionary; pub mod client; pub mod download; pub mod model; +pub mod timeago; diff --git a/src/timeago.rs b/src/timeago.rs index 60c2dea..ea8999f 100644 --- a/src/timeago.rs +++ b/src/timeago.rs @@ -1,10 +1,8 @@ -use std::{borrow::Cow, cmp::Ordering, str::FromStr, vec}; +use std::cmp::Ordering; -use anyhow::Result; -use fancy_regex::Regex; use serde::{Deserialize, Serialize}; -use crate::{model::Language, util}; +use crate::{dictionary, model::Language, util}; pub const LANGUAGES: [Language; 83] = [ Language::Af, @@ -94,10 +92,16 @@ pub const LANGUAGES: [Language; 83] = [ #[derive(Debug, Copy, Clone, Serialize, Deserialize, Eq)] pub struct TimeAgo { - pub n: u32, + pub n: u8, pub unit: TimeUnit, } +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +pub(crate) struct TaToken { + pub n: u8, + pub unit: Option, +} + #[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)] #[serde(rename_all = "lowercase")] pub enum TimeUnit { @@ -110,1060 +114,6 @@ pub enum TimeUnit { Year, } -#[derive(Debug)] -pub struct TimeagoPattern<'a> { - word_separator: &'a str, - seconds: Vec<&'a str>, - minutes: Vec<&'a str>, - hours: Vec<&'a str>, - days: Vec<&'a str>, - weeks: Vec<&'a str>, - months: Vec<&'a str>, - years: Vec<&'a str>, - special_cases: Vec<(&'a str, TimeAgo)>, -} - -impl From for TimeagoPattern<'_> { - fn from(language: Language) -> Self { - match language { - Language::Af => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekonde", "sekondes"], - minutes: vec!["minute", "minuut"], - hours: vec!["ure", "uur"], - days: vec!["dae", "dag"], - weeks: vec!["week", "weke"], - months: vec!["maand", "maande"], - years: vec!["jaar"], - special_cases: vec![], - }, - Language::Am => TimeagoPattern { - word_separator: " ", - seconds: vec!["ሰከንድ", "ሰከንዶች"], - minutes: vec!["ደቂቃ", "ደቂቃዎች"], - hours: vec!["ሰዓት", "ሰዓቶች"], - days: vec!["ቀናት", "ቀን"], - weeks: vec!["ሳምንታት", "ሳምንት"], - months: vec!["ወራት", "ወር"], - years: vec!["ዓመታት", "ዓመት"], - special_cases: vec![], - }, - Language::Ar => TimeagoPattern { - word_separator: " ", - seconds: vec!["ثانية", "ثوانٍ", "ثوانِ"], - minutes: vec!["دقائق", "دقيقة", "دقيقتين"], - hours: vec!["ساعات", "ساعة"], - days: vec!["أيام", "يوم", "يومًا"], - weeks: vec!["أسابيع", "أسبوع"], - months: vec!["أشهر", "شهر", "شهرًا"], - years: vec!["سنة", "سنوات"], - special_cases: vec![ - ( - "ثانيتين", - TimeAgo { - n: 2, - unit: TimeUnit::Second, - }, - ), - ( - "دقيقتين", - TimeAgo { - n: 2, - unit: TimeUnit::Minute, - }, - ), - ( - "ساعتين", - TimeAgo { - n: 2, - unit: TimeUnit::Hour, - }, - ), - ( - "يومين", - TimeAgo { - n: 2, - unit: TimeUnit::Day, - }, - ), - ( - "أسبوعين", - TimeAgo { - n: 2, - unit: TimeUnit::Week, - }, - ), - ( - "شهرين", - TimeAgo { - n: 2, - unit: TimeUnit::Month, - }, - ), - ( - "سنتين", - TimeAgo { - n: 2, - unit: TimeUnit::Year, - }, - ), - ], - }, - Language::As => TimeagoPattern { - word_separator: " ", - seconds: vec!["ছেকেণ্ড"], - minutes: vec!["মিনিট"], - hours: vec!["ঘণ্টা"], - days: vec!["দিন"], - weeks: vec!["সপ্তাহ"], - months: vec!["মাহ"], - years: vec!["বছৰৰ"], - special_cases: vec![], - }, - Language::Az => TimeagoPattern { - word_separator: " ", - seconds: vec!["saniyə"], - minutes: vec!["dəqiqə"], - hours: vec!["saat"], - days: vec!["gün"], - weeks: vec!["həftə"], - months: vec!["ay"], - years: vec!["il"], - special_cases: vec![], - }, - Language::Be => TimeagoPattern { - word_separator: " ", - seconds: vec!["секунд", "секунду", "секунды"], - minutes: vec!["хвілін", "хвіліну", "хвіліны"], - hours: vec!["гадзін", "гадзіну", "гадзіны"], - days: vec!["дзень", "дзён", "дня", "дні"], - weeks: vec!["тыдзень", "тыдня", "тыдні"], - months: vec!["месяц", "месяца", "месяцы", "месяцаў"], - years: vec!["год", "года", "гады", "гадоў"], - special_cases: vec![], - }, - Language::Bg => TimeagoPattern { - word_separator: " ", - seconds: vec!["секунда", "секунди"], - minutes: vec!["минута", "минути"], - hours: vec!["час", "часа"], - days: vec!["ден", "дни"], - weeks: vec!["седмица", "седмици"], - months: vec!["месец", "месеца"], - years: vec!["година", "години"], - special_cases: vec![], - }, - Language::Bn => TimeagoPattern { - word_separator: " ", - seconds: vec!["সেকেন্ড"], - minutes: vec!["মিনিট"], - hours: vec!["ঘন্টা"], - days: vec!["দিন"], - weeks: vec!["সপ্তাহ"], - months: vec!["মাস"], - years: vec!["বছর"], - special_cases: vec![], - }, - Language::Bs => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekundi", "sekunde", "sekundu"], - minutes: vec!["minuta", "minute", "minutu"], - hours: vec!["sat", "sata", "sati"], - days: vec!["dan", "dana"], - weeks: vec!["sedmice", "sedmicu"], - months: vec!["mjesec", "mjeseca", "mjeseci"], - years: vec!["godina", "godine", "godinu"], - special_cases: vec![], - }, - Language::Ca => TimeagoPattern { - word_separator: " ", - seconds: vec!["segon", "segons"], - minutes: vec!["minut", "minuts"], - hours: vec!["hora", "hores"], - days: vec!["dia", "dies"], - weeks: vec!["setmana", "setmanes"], - months: vec!["mes", "mesos"], - years: vec!["any", "anys"], - special_cases: vec![], - }, - Language::Cs => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekundami", "sekundou"], - minutes: vec!["minutami", "minutou"], - hours: vec!["hodinami", "hodinou"], - days: vec!["dny", "dnem"], - weeks: vec!["týdnem", "týdny"], - months: vec!["měsícem", "měsíci"], - years: vec!["rokem", "roky", "lety"], - special_cases: vec![], - }, - Language::Da => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekund", "sekunder"], - minutes: vec!["minut", "minutter"], - hours: vec!["time", "timer"], - days: vec!["dag", "dage"], - weeks: vec!["uge", "uger"], - months: vec!["måned", "måneder"], - years: vec!["år"], - special_cases: vec![], - }, - Language::De => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekunde", "sekunden"], - minutes: vec!["minute", "minuten"], - hours: vec!["stunde", "stunden"], - days: vec!["tag", "tagen"], - weeks: vec!["woche", "wochen"], - months: vec!["monat", "monaten"], - years: vec!["jahr", "jahren"], - special_cases: vec![], - }, - Language::El => TimeagoPattern { - word_separator: " ", - seconds: vec!["δευτερόλεπτα", "δευτερόλεπτο"], - minutes: vec!["λεπτά", "λεπτό"], - hours: vec!["ώρα", "ώρες"], - days: vec!["ημέρα", "ημέρες"], - weeks: vec!["εβδομάδα", "εβδομάδες"], - months: vec!["μήνα", "μήνες"], - years: vec!["έτος", "έτη"], - special_cases: vec![], - }, - Language::En | Language::EnGb | Language::EnIn => TimeagoPattern { - word_separator: " ", - seconds: vec!["second", "seconds"], - minutes: vec!["minute", "minutes"], - hours: vec!["hour", "hours"], - days: vec!["day", "days"], - weeks: vec!["week", "weeks"], - months: vec!["month", "months"], - years: vec!["year", "years"], - special_cases: vec![], - }, - Language::Es | Language::EsUs | Language::Es419 => TimeagoPattern { - word_separator: " ", - seconds: vec!["segundo", "segundos"], - minutes: vec!["minuto", "minutos"], - hours: vec!["hora", "horas"], - days: vec!["día", "días"], - weeks: vec!["semana", "semanas"], - months: vec!["mes", "meses"], - years: vec!["año", "años"], - special_cases: vec![], - }, - Language::Et => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekundi", "sekund", "sekundit"], - minutes: vec!["minuti", "minut", "minutit"], - hours: vec!["tunni"], - days: vec!["päeva", "päev"], - weeks: vec!["nädala", "nädal", "nädalat"], - months: vec!["kuu", "kuud"], - years: vec!["aasta", "aastat"], - special_cases: vec![], - }, - Language::Eu => TimeagoPattern { - word_separator: " ", - seconds: vec!["segundo"], - minutes: vec!["minutu"], - hours: vec!["ordu", "ordubete"], - days: vec!["egun"], - weeks: vec!["aste", "astebete"], - months: vec!["hilabete"], - years: vec!["urte", "urtebete"], - special_cases: vec![], - }, - Language::Fa => TimeagoPattern { - word_separator: " ", - seconds: vec!["ثانیه"], - minutes: vec!["دقیقه"], - hours: vec!["ساعت"], - days: vec!["روز"], - weeks: vec!["هفته"], - months: vec!["ماه"], - years: vec!["سال"], - special_cases: vec![], - }, - Language::Fi => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekunti", "sekuntia"], - minutes: vec!["minuutti", "minuuttia"], - hours: vec!["tunti", "tuntia"], - days: vec!["päivä", "päivää"], - weeks: vec!["viikko", "viikkoa"], - months: vec!["kuukausi", "kuukautta"], - years: vec!["vuosi", "vuotta"], - special_cases: vec![], - }, - Language::Fil => TimeagoPattern { - word_separator: " ", - seconds: vec!["segundo"], - minutes: vec!["minuto"], - hours: vec!["oras"], - days: vec!["araw"], - weeks: vec!["linggo"], - months: vec!["buwan"], - years: vec!["taon"], - special_cases: vec![], - }, - Language::Fr | Language::FrCa => TimeagoPattern { - word_separator: " ", - seconds: vec!["seconde", "secondes"], - minutes: vec!["minute", "minutes"], - hours: vec!["heure", "heures"], - days: vec!["jour", "jours"], - weeks: vec!["semaine", "semaines"], - months: vec!["mois"], - years: vec!["an", "ans"], - special_cases: vec![], - }, - Language::Gl => TimeagoPattern { - word_separator: " ", - seconds: vec!["segundo", "segundos"], - minutes: vec!["minuto", "minutos"], - hours: vec!["hora", "horas"], - days: vec!["día", "días"], - weeks: vec!["semana", "semanas"], - months: vec!["mes", "meses"], - years: vec!["ano", "anos"], - special_cases: vec![], - }, - Language::Gu => TimeagoPattern { - word_separator: " ", - seconds: vec!["સેકંડ"], - minutes: vec!["મિનિટ"], - hours: vec!["કલાક"], - days: vec!["દિવસ"], - weeks: vec!["અઠવાડિયા"], - months: vec!["મહિના"], - years: vec!["વર્ષ"], - special_cases: vec![], - }, - Language::Hi => TimeagoPattern { - word_separator: " ", - seconds: vec!["सेकंड"], - minutes: vec!["मिनट"], - hours: vec!["घंटे"], - days: vec!["दिन"], - weeks: vec!["सप्ताह"], - months: vec!["माह"], - years: vec!["वर्ष"], - special_cases: vec![], - }, - Language::Hr => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekunde", "sekundi", "sekundu"], - minutes: vec!["minuta", "minute", "minutu"], - hours: vec!["sat", "sata", "sati"], - days: vec!["dan", "dana"], - weeks: vec!["tjedan", "tjedna"], - months: vec!["mjesec", "mjeseca", "mjeseci"], - years: vec!["godina", "godine", "godinu"], - special_cases: vec![], - }, - Language::Hu => TimeagoPattern { - word_separator: " ", - seconds: vec!["másodperce", "másodperccel"], - minutes: vec!["perce", "perccel"], - hours: vec!["órája", "órával"], - days: vec!["napja", "nappal"], - weeks: vec!["hete", "héttel"], - months: vec!["hónapja", "hónappal"], - years: vec!["éve", "évvel"], - special_cases: vec![], - }, - Language::Hy => TimeagoPattern { - word_separator: " ", - seconds: vec!["վայրկյան"], - minutes: vec!["րոպե"], - hours: vec!["ժամ"], - days: vec!["օր"], - weeks: vec!["շաբաթ"], - months: vec!["ամիս"], - years: vec!["տարի"], - special_cases: vec![], - }, - Language::Id => TimeagoPattern { - word_separator: " ", - seconds: vec!["detik"], - minutes: vec!["menit"], - hours: vec!["jam"], - days: vec!["hari"], - weeks: vec!["minggu"], - months: vec!["bulan"], - years: vec!["tahun"], - special_cases: vec![], - }, - Language::Is => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekúndu", "sekúndum"], - minutes: vec!["mínútu", "mínútum"], - hours: vec!["klukkustund", "klukkustundum"], - days: vec!["degi", "dögum"], - weeks: vec!["viku", "vikum"], - months: vec!["mánuði", "mánuðum"], - years: vec!["ári", "árum"], - special_cases: vec![], - }, - Language::It => TimeagoPattern { - word_separator: " ", - seconds: vec!["secondi", "secondo"], - minutes: vec!["minuti", "minuto"], - hours: vec!["ora", "ore"], - days: vec!["giorni", "giorno"], - weeks: vec!["settimana", "settimane"], - months: vec!["mese", "mesi"], - years: vec!["anni", "anno"], - special_cases: vec![], - }, - Language::Iw => TimeagoPattern { - word_separator: " ", - seconds: vec!["שניות", "שנייה"], - minutes: vec!["דקה", "דקות"], - hours: vec!["שעה", "שעות"], - days: vec!["יום", "ימים"], - weeks: vec!["שבוע", "שבועות"], - months: vec!["חודש", "חודשים"], - years: vec!["שנה", "שנים"], - special_cases: vec![ - ( - "שתי שניות", - TimeAgo { - n: 2, - unit: TimeUnit::Second, - }, - ), - ( - "שתי דקות", - TimeAgo { - n: 2, - unit: TimeUnit::Minute, - }, - ), - ( - "שעתיים", - TimeAgo { - n: 2, - unit: TimeUnit::Hour, - }, - ), - ( - "יומיים", - TimeAgo { - n: 2, - unit: TimeUnit::Day, - }, - ), - ( - "שבועיים", - TimeAgo { - n: 2, - unit: TimeUnit::Week, - }, - ), - ( - "חודשיים", - TimeAgo { - n: 2, - unit: TimeUnit::Month, - }, - ), - ( - "שנתיים", - TimeAgo { - n: 2, - unit: TimeUnit::Year, - }, - ), - ], - }, - Language::Ja => TimeagoPattern { - word_separator: "", - seconds: vec!["秒"], - minutes: vec!["分"], - hours: vec!["時間"], - days: vec!["日"], - weeks: vec!["週間"], - months: vec!["か月"], - years: vec!["年"], - special_cases: vec![], - }, - Language::Ka => TimeagoPattern { - word_separator: " ", - seconds: vec!["წამის"], - minutes: vec!["წუთის"], - hours: vec!["საათის"], - days: vec!["დღის"], - weeks: vec!["კვირის"], - months: vec!["თვის"], - years: vec!["წლის"], - special_cases: vec![], - }, - Language::Kk => TimeagoPattern { - word_separator: " ", - seconds: vec!["секунд"], - minutes: vec!["минут"], - hours: vec!["сағат"], - days: vec!["күн"], - weeks: vec!["апта"], - months: vec!["ай"], - years: vec!["жыл"], - special_cases: vec![], - }, - Language::Km => TimeagoPattern { - word_separator: " ", - seconds: vec!["វិនាទីមុន"], - minutes: vec!["នាទីមុន"], - hours: vec!["ម៉ោងមុន"], - days: vec!["ថ្ងៃមុន"], - weeks: vec!["សប្ដាហ៍មុន"], - months: vec!["ខែមុន"], - years: vec!["ឆ្នាំមុន"], - special_cases: vec![], - }, - Language::Kn => TimeagoPattern { - word_separator: " ", - seconds: vec!["ಸೆಕೆಂಡುಗಳ", "ಸೆಕೆಂಡ್"], - minutes: vec!["ನಿಮಿಷಗಳ", "ನಿಮಿಷದ"], - hours: vec!["ಗಂಟೆ", "ಗಂಟೆಗಳ"], - days: vec!["ದಿನಗಳ", "ದಿನದ"], - weeks: vec!["ವಾರಗಳ", "ವಾರದ"], - months: vec!["ತಿಂಗಳ", "ತಿಂಗಳುಗಳ"], - years: vec!["ವರ್ಷಗಳ", "ವರ್ಷದ"], - special_cases: vec![], - }, - Language::Ko => TimeagoPattern { - word_separator: "", - seconds: vec!["초"], - minutes: vec!["분"], - hours: vec!["시간"], - days: vec!["일"], - weeks: vec!["주"], - months: vec!["개월"], - years: vec!["년"], - special_cases: vec![], - }, - Language::Ky => TimeagoPattern { - word_separator: " ", - seconds: vec!["секунд"], - minutes: vec!["мүнөт"], - hours: vec!["саат"], - days: vec!["күн"], - weeks: vec!["апта"], - months: vec!["ай"], - years: vec!["жыл"], - special_cases: vec![], - }, - Language::Lo => TimeagoPattern { - word_separator: " ", - seconds: vec!["ວິນາທີກ່ອນ"], - minutes: vec!["ນາທີກ່ອນ"], - hours: vec!["ຊົ່ວໂມງກ່ອນ"], - days: vec!["ມື້ກ່ອນ"], - weeks: vec!["ອາທິດກ່ອນ"], - months: vec!["ເດືອນກ່ອນ"], - years: vec!["ປີກ່ອນ"], - special_cases: vec![], - }, - Language::Lt => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekundes", "sekundę", "sekundžių"], - minutes: vec!["minutes", "minutę", "minučių"], - hours: vec!["valandas", "valandą", "valandų"], - days: vec!["dienas", "dieną", "dienų"], - weeks: vec!["savaites", "savaitę", "savaičių"], - months: vec!["mėnesius", "mėnesių", "mėnesį"], - years: vec!["metus", "metų"], - special_cases: vec![], - }, - Language::Lv => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekundes", "sekundēm"], - minutes: vec!["minūtes", "minūtēm"], - hours: vec!["stundas", "stundām"], - days: vec!["dienas", "dienām"], - weeks: vec!["nedēļas", "nedēļām"], - months: vec!["mēneša", "mēnešiem"], - years: vec!["gada", "gadiem"], - special_cases: vec![], - }, - Language::Mk => TimeagoPattern { - word_separator: " ", - seconds: vec!["секунда", "секунди"], - minutes: vec!["минута", "минути"], - hours: vec!["час", "часа"], - days: vec!["ден", "дена"], - weeks: vec!["седмици", "седмица"], - months: vec!["месец", "месеци"], - years: vec!["година", "години"], - special_cases: vec![], - }, - Language::Ml => TimeagoPattern { - word_separator: " ", - seconds: vec!["സെക്കൻഡ്"], - minutes: vec!["മിനിറ്റ്"], - hours: vec!["മണിക്കൂർ"], - days: vec!["ദിവസം"], - weeks: vec!["ആഴ്ച"], - months: vec!["മാസം"], - years: vec!["വർഷം"], - special_cases: vec![], - }, - Language::Mn => TimeagoPattern { - word_separator: " ", - seconds: vec!["секундын"], - minutes: vec!["минутын"], - hours: vec!["цагийн"], - days: vec!["өдрийн"], - weeks: vec!["долоо хоногийн"], - months: vec!["сарын"], - years: vec!["жилийн"], - special_cases: vec![], - }, - Language::Mr => TimeagoPattern { - word_separator: " ", - seconds: vec!["सेकंदांपूर्वी", "सेकंदापूर्वी"], - minutes: vec!["मिनिटांपूर्वी", "मिनिटापूर्वी"], - hours: vec!["तासांपूर्वी", "तासापूर्वी"], - days: vec!["दिवसांपूर्वी", "दिवसापूर्वी"], - weeks: vec!["आठवड्यांपूर्वी", "आठवड्यापूर्वी"], - months: vec!["महिन्यांपूर्वी", "महिन्यापूर्वी"], - years: vec!["वर्षांपूर्वी", "वर्षापूर्वी"], - special_cases: vec![], - }, - Language::Ms => TimeagoPattern { - word_separator: " ", - seconds: vec!["saat"], - minutes: vec!["minit"], - hours: vec!["jam"], - days: vec!["hari"], - weeks: vec!["minggu"], - months: vec!["bulan"], - years: vec!["tahun"], - special_cases: vec![], - }, - Language::My => TimeagoPattern { - word_separator: " ", - seconds: vec!["စက္ကန့်"], - minutes: vec!["မိနစ်"], - hours: vec!["နာရီ"], - days: vec!["ရက်"], - weeks: vec!["ပတ်"], - months: vec!["လ"], - years: vec!["နှစ်"], - special_cases: vec![], - }, - Language::Ne => TimeagoPattern { - word_separator: " ", - seconds: vec!["सेकेन्ड"], - minutes: vec!["मिनेट"], - hours: vec!["घण्टा"], - days: vec!["दिन"], - weeks: vec!["हप्ता"], - months: vec!["महिना"], - years: vec!["वर्ष"], - special_cases: vec![], - }, - Language::Nl => TimeagoPattern { - word_separator: " ", - seconds: vec!["seconde", "seconden"], - minutes: vec!["minuten", "minuut"], - hours: vec!["uur"], - days: vec!["dag", "dagen"], - weeks: vec!["week", "weken"], - months: vec!["maand", "maanden"], - years: vec!["jaar"], - special_cases: vec![], - }, - Language::No => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekund", "sekunder"], - minutes: vec!["minutt", "minutter"], - hours: vec!["time", "timer"], - days: vec!["dag", "dager", "døgn"], - weeks: vec!["uke", "uker"], - months: vec!["måned", "måneder"], - years: vec!["år"], - special_cases: vec![], - }, - Language::Or => TimeagoPattern { - word_separator: " ", - seconds: vec!["ସେକେଣ୍ଡ"], - minutes: vec!["ମିନିଟ୍"], - hours: vec!["ଘଣ୍ଟା"], - days: vec!["ଦିନ"], - weeks: vec!["ସପ୍ତାହ"], - months: vec!["ମାସ"], - years: vec!["ବର୍ଷ"], - special_cases: vec![], - }, - Language::Pa => TimeagoPattern { - word_separator: " ", - seconds: vec!["ਸਕਿੰਟ"], - minutes: vec!["ਮਿੰਟ"], - hours: vec!["ਘੰਟਾ", "ਘੰਟੇ"], - days: vec!["ਦਿਨ"], - weeks: vec!["ਹਫ਼ਤਾ", "ਹਫ਼ਤੇ"], - months: vec!["ਮਹੀਨਾ", "ਮਹੀਨੇ"], - years: vec!["ਸਾਲ"], - special_cases: vec![], - }, - Language::Pl => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekund", "sekundy", "sekundę"], - minutes: vec!["minut", "minuty", "minutę"], - hours: vec!["godzin", "godziny", "godzinę"], - days: vec!["dni", "dzień"], - weeks: vec!["tydzień", "tygodnie"], - months: vec!["miesiąc", "miesiące", "miesięcy"], - years: vec!["lat", "lata", "rok"], - special_cases: vec![], - }, - Language::Pt | Language::PtPt => TimeagoPattern { - word_separator: " ", - seconds: vec!["segundo", "segundos"], - minutes: vec!["minuto", "minutos"], - hours: vec!["hora", "horas"], - days: vec!["dia", "dias"], - weeks: vec!["semana", "semanas"], - months: vec!["meses", "mês"], - years: vec!["ano", "anos"], - special_cases: vec![], - }, - Language::Ro => TimeagoPattern { - word_separator: " ", - seconds: vec!["secunde", "secundă"], - minutes: vec!["minut", "minute"], - hours: vec!["ore", "oră"], - days: vec!["zi", "zile"], - weeks: vec!["săptămâni", "săptămână"], - months: vec!["luni", "lună"], - years: vec!["an", "ani"], - special_cases: vec![], - }, - Language::Ru => TimeagoPattern { - word_separator: " ", - seconds: vec!["секунд", "секунду", "секунды"], - minutes: vec!["минут", "минуту", "минуты"], - hours: vec!["час", "часа", "часов"], - days: vec!["день", "дней", "дня"], - weeks: vec!["неделю", "недели"], - months: vec!["месяц", "месяца", "месяцев"], - years: vec!["год", "года", "лет"], - special_cases: vec![], - }, - Language::Si => TimeagoPattern { - word_separator: " ", - seconds: vec!["තත්පර"], - minutes: vec!["මිනිත්තු"], - hours: vec!["පැය"], - days: vec!["දින"], - weeks: vec!["සති"], - months: vec!["මාස"], - years: vec!["වසර"], - special_cases: vec![], - }, - Language::Sk => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekundami", "sekundou"], - minutes: vec!["minútami", "minútou"], - hours: vec!["hodinami", "hodinou"], - days: vec!["dňami", "dňom"], - weeks: vec!["týždňami", "týždňom"], - months: vec!["mesiacmi", "mesiacom"], - years: vec!["rokmi", "rokom"], - special_cases: vec![], - }, - Language::Sl => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekundama", "sekundami", "sekundo"], - minutes: vec!["minutama", "minutami", "minuto"], - hours: vec!["urama", "urami", "uro"], - days: vec!["dnem", "dnevi", "dnevoma", "dnevom"], - weeks: vec!["tedni", "tednom", "tednoma"], - months: vec!["mesecem", "mesecema", "meseci"], - years: vec!["leti", "letom", "letoma"], - special_cases: vec![], - }, - Language::Sq => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekonda", "sekondë"], - minutes: vec!["minuta", "minutë"], - hours: vec!["orë"], - days: vec!["ditë"], - weeks: vec!["javë"], - months: vec!["muaj"], - years: vec!["vit", "vjet"], - special_cases: vec![], - }, - Language::Sr => TimeagoPattern { - word_separator: " ", - seconds: vec!["секунде", "секунди"], - minutes: vec!["минута"], - hours: vec!["сат", "сата", "сати"], - days: vec!["дан", "дана"], - weeks: vec!["недеље", "недељу"], - months: vec!["месец", "месеца", "месеци"], - years: vec!["година", "године", "годину"], - special_cases: vec![], - }, - Language::SrLatn => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekunde", "sekundi"], - minutes: vec!["minuta"], - hours: vec!["sat", "sati", "sata"], - days: vec!["dan", "dana"], - weeks: vec!["nedelja", "nedelje", "nedelju"], - months: vec!["mesec", "meseci", "meseca"], - years: vec!["godine", "godina", "godinu"], - special_cases: vec![], - }, - Language::Sv => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekund", "sekunder"], - minutes: vec!["minut", "minuter"], - hours: vec!["timmar", "timme"], - days: vec!["dag", "dagar"], - weeks: vec!["vecka", "veckor"], - months: vec!["månad", "månader"], - years: vec!["år"], - special_cases: vec![], - }, - Language::Sw => TimeagoPattern { - word_separator: " ", - seconds: vec!["sekunde"], - minutes: vec!["dakika"], - hours: vec!["saa"], - days: vec!["siku"], - weeks: vec!["wiki"], - months: vec!["mwezi", "miezi"], - years: vec!["miaka", "mwaka"], - special_cases: vec![], - }, - Language::Ta => TimeagoPattern { - word_separator: " ", - seconds: vec!["விநாடிகளுக்கு", "விநாடிக்கு"], - minutes: vec!["நிமிடங்களுக்கு", "நிமிடத்திற்கு"], - hours: vec!["மணிநேரம்"], - days: vec!["நாட்களுக்கு", "நாளுக்கு"], - weeks: vec!["வாரங்களுக்கு", "வாரம்"], - months: vec!["மாதத்துக்கு", "மாதங்களுக்கு"], - years: vec!["ஆண்டிற்கு", "ஆண்டுகளுக்கு"], - special_cases: vec![], - }, - Language::Te => TimeagoPattern { - word_separator: " ", - seconds: vec!["సెకను", "సెకన్ల"], - minutes: vec!["నిమిషం", "నిమిషాల"], - hours: vec!["గంట", "గంటల"], - days: vec!["రోజు", "రోజుల"], - weeks: vec!["వారం", "వారాల"], - months: vec!["నెల", "నెలల"], - years: vec!["సంవత్సరం", "సంవత్సరాల"], - special_cases: vec![], - }, - Language::Th => TimeagoPattern { - word_separator: " ", - seconds: vec!["วินาทีที่ผ่านมา"], - minutes: vec!["นาทีที่ผ่านมา"], - hours: vec!["ชั่วโมงที่ผ่านมา"], - days: vec!["วันที่ผ่านมา"], - weeks: vec!["สัปดาห์ที่ผ่านมา"], - months: vec!["เดือนที่ผ่านมา"], - years: vec!["ปีที่แล้ว"], - special_cases: vec![], - }, - Language::Tr => TimeagoPattern { - word_separator: " ", - seconds: vec!["saniye"], - minutes: vec!["dakika"], - hours: vec!["saat"], - days: vec!["gün"], - weeks: vec!["hafta"], - months: vec!["ay"], - years: vec!["yıl"], - special_cases: vec![], - }, - Language::Uk => TimeagoPattern { - word_separator: " ", - seconds: vec!["секунд", "секунди", "секунду"], - minutes: vec!["хвилин", "хвилини", "хвилину"], - hours: vec!["годин", "години", "годину"], - days: vec!["день", "дні", "днів"], - weeks: vec!["тиждень", "тижні"], - months: vec!["місяць", "місяці", "місяців"], - years: vec!["роки", "років", "рік"], - special_cases: vec![], - }, - Language::Ur => TimeagoPattern { - word_separator: " ", - seconds: vec!["سیکنڈ", "سیکنڈز"], - minutes: vec!["منٹ", "منٹس"], - hours: vec!["گھنٹہ", "گھنٹے"], - days: vec!["دن", "دنوں"], - weeks: vec!["ہفتہ", "ہفتے"], - months: vec!["مہینہ", "مہینے"], - years: vec!["سال"], - special_cases: vec![], - }, - Language::Uz => TimeagoPattern { - word_separator: " ", - seconds: vec!["soniya"], - minutes: vec!["daqiqa"], - hours: vec!["soat"], - days: vec!["kun"], - weeks: vec!["hafta"], - months: vec!["oy"], - years: vec!["yil"], - special_cases: vec![], - }, - Language::Vi => TimeagoPattern { - word_separator: " ", - seconds: vec!["giây"], - minutes: vec!["phút"], - hours: vec!["giờ", "tiếng"], - days: vec!["ngày"], - weeks: vec!["tuần"], - months: vec!["tháng"], - years: vec!["năm"], - special_cases: vec![], - }, - Language::ZhCn => TimeagoPattern { - word_separator: "", - seconds: vec!["秒"], - minutes: vec!["分钟"], - hours: vec!["小时"], - days: vec!["天"], - weeks: vec!["周"], - months: vec!["个月"], - years: vec!["年"], - special_cases: vec![], - }, - Language::ZhHk => TimeagoPattern { - word_separator: "", - seconds: vec!["秒"], - minutes: vec!["分鐘"], - hours: vec!["小時"], - days: vec!["日"], - weeks: vec!["星期"], - months: vec!["個月"], - years: vec!["年"], - special_cases: vec![], - }, - Language::ZhTw => TimeagoPattern { - word_separator: "", - seconds: vec!["秒"], - minutes: vec!["分鐘"], - hours: vec!["小時"], - days: vec!["天"], - weeks: vec!["週"], - months: vec!["個月"], - years: vec!["年"], - special_cases: vec![], - }, - Language::Zu => TimeagoPattern { - word_separator: " ", - seconds: vec!["amasekhondi", "isekhondi"], - minutes: vec!["amaminithi", "iminithi"], - hours: vec!["emahoreni", "ihora"], - days: vec!["ezinsukwini", "osukwini"], - weeks: vec!["amaviki", "iviki"], - months: vec!["inyanga", "izinyanga"], - years: vec!["iminyaka", "unyaka"], - special_cases: vec![], - }, - } - } -} - -impl TryFrom<&str> for TimeagoPattern<'_> { - type Error = serde_json::Error; - - fn try_from(s: &str) -> Result { - Language::from_str(s).map(|l| Self::from(l)) - } -} - -impl TimeagoPattern<'_> { - pub fn parse(&self, textual_date: &str) -> Option { - self.special_cases - .iter() - .find_map(|case| { - if self.textual_date_matches(textual_date, case.0) { - Some(case.1) - } else { - None - } - }) - .or_else(|| match self.parse_time_unit(textual_date) { - Some(tu) => Some(TimeAgo { - n: util::parse_numeric(textual_date).unwrap_or(1), - unit: tu, - }), - None => None, - }) - } - - fn parse_time_unit(&self, textual_date: &str) -> Option { - match self.is_time_unit(textual_date, &self.seconds) { - true => Some(TimeUnit::Second), - false => match self.is_time_unit(textual_date, &self.minutes) { - true => Some(TimeUnit::Minute), - false => match self.is_time_unit(textual_date, &self.hours) { - true => Some(TimeUnit::Hour), - false => match self.is_time_unit(textual_date, &self.days) { - true => Some(TimeUnit::Day), - false => match self.is_time_unit(textual_date, &self.weeks) { - true => Some(TimeUnit::Week), - false => match self.is_time_unit(textual_date, &self.months) { - true => Some(TimeUnit::Month), - false => match self.is_time_unit(textual_date, &self.years) { - true => Some(TimeUnit::Year), - false => None, - }, - }, - }, - }, - }, - }, - } - } - - fn is_time_unit(&self, textual_date: &str, phrases: &Vec<&str>) -> bool { - phrases - .iter() - .any(|p| self.textual_date_matches(textual_date, p)) - } - - fn textual_date_matches(&self, textual_date: &str, ago_phrase: &str) -> bool { - if textual_date == ago_phrase { - return true; - } - - let text_lower = textual_date.to_lowercase().replace('\u{200b}', ""); - - if self.word_separator.is_empty() { - return text_lower.contains(ago_phrase); - } - - let escaped_phrase = fancy_regex::escape(ago_phrase); - let escaped_separator = match self.word_separator { - " " => Cow::Borrowed("[ \\t\\xA0\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000]"), - _ => fancy_regex::escape(self.word_separator), - }; - - let pattern = format!( - "(^|{}){}($|{})", - escaped_separator, escaped_phrase, escaped_separator - ); - - ok_or_bail!(Regex::new(&pattern), false) - .is_match(&text_lower) - .unwrap_or_default() - } -} - impl TimeUnit { fn seconds(&self) -> u64 { match self { @@ -1202,30 +152,39 @@ impl PartialOrd for TimeAgo { } } +pub fn parse(lang: Language, textual_date: &str) -> Option { + let mappings = dictionary::get_timeago_tokens(lang); + + let filtered_str = textual_date + .to_lowercase() + .chars() + .filter(|c| c != &'\u{200b}' && !c.is_ascii_digit()) + .collect::(); + + let mut qu: u8 = util::parse_numeric(&textual_date).unwrap_or(1); + filtered_str.split(' ').find_map(|word| { + mappings + .get(word) + .map(|t| match t.unit { + Some(unit) => Some(TimeAgo { n: t.n * qu, unit }), + None => { + qu = t.n; + None + } + }) + .flatten() + }) +} + #[cfg(test)] mod tests { use std::{collections::BTreeMap, fs::File, io::BufReader, path::Path}; - use rstest::rstest; - use super::*; - #[rstest] - #[case(Language::De, "vor 1 Sekunde", Some(TimeAgo { n: 1, unit: TimeUnit::Second }))] - #[case(Language::Ar, "قبل ساعة واحدة", Some(TimeAgo { n: 1, unit: TimeUnit::Hour }))] - fn t_parse( - #[case] lang: Language, - #[case] textual_date: &str, - #[case] expect: Option, - ) { - let pat = TimeagoPattern::try_from(lang).unwrap(); - let secs_ago = pat.parse(textual_date); - assert_eq!(secs_ago, expect); - } - #[test] fn t_testfile() { - let json_path = Path::new("testfiles/date/timeago.json"); + let json_path = Path::new("testfiles/date/timeago_samples.json"); let expect = [ TimeAgo { @@ -1379,16 +338,14 @@ mod tests { ]; let json_file = File::open(json_path).unwrap(); - let strings_map: BTreeMap> = + let strings_map: BTreeMap> = serde_json::from_reader(BufReader::new(json_file)).unwrap(); strings_map.iter().for_each(|(lang, strings)| { - let pat = TimeagoPattern::try_from(lang.as_str()).unwrap(); - assert_eq!(strings.len(), expect.len()); strings.iter().enumerate().for_each(|(n, s)| { assert_eq!( - pat.parse(s), + parse(*lang, s), Some(expect[n]), "Language: {}, n: {}", lang, @@ -1407,7 +364,7 @@ mod tests { #[derive(Debug, Clone, Deserialize)] struct TimeagoTableEntry { - cases: BTreeMap, + cases: BTreeMap, } let json_path = Path::new("testfiles/date/timeago_table.json"); @@ -1417,13 +374,16 @@ mod tests { let mut n_cases = 0; timeago_table.entries.iter().for_each(|(lang, entries)| { - let pat = TimeagoPattern::from(*lang); - entries.iter().for_each(|(t, entry)| { entry.cases.iter().for_each(|(txt, n)| { - let timeago = pat.parse(&txt).unwrap(); - assert_eq!(&timeago.unit, t); - assert_eq!(&timeago.n, n); + let timeago = parse(*lang, txt); + assert_eq!( + timeago, + Some(TimeAgo { n: *n, unit: *t }), + "lang: {}, txt: {}", + lang, + txt + ); n_cases += 1; }) diff --git a/testfiles/date/dictionary.json b/testfiles/date/dictionary.json new file mode 100644 index 0000000..7fc506e --- /dev/null +++ b/testfiles/date/dictionary.json @@ -0,0 +1,1233 @@ +{ + "af": { + "timeago_tokens": { + "dae": "D", + "dag": "D", + "jaar": "Y", + "maand": "M", + "maande": "M", + "minute": "m", + "minuut": "m", + "sekonde": "s", + "sekondes": "s", + "ure": "h", + "uur": "h", + "week": "W", + "weke": "W" + } + }, + "am": { + "timeago_tokens": { + "ሰከንድ": "s", + "ሰከንዶች": "s", + "ሰዓት": "h", + "ሰዓቶች": "h", + "ሳምንታት": "W", + "ሳምንት": "W", + "ቀናት": "D", + "ቀን": "D", + "ወራት": "M", + "ወር": "M", + "ዓመታት": "Y", + "ዓመት": "Y", + "ደቂቃ": "m", + "ደቂቃዎች": "m" + } + }, + "ar": { + "timeago_tokens": { + "أسابيع": "W", + "أسبوع": "W", + "أسبوعين": "2W", + "أشهر": "M", + "أيام": "D", + "ثانية": "s", + "ثانيتين": "2s", + "ثوانٍ": "s", + "ثوانِ": "s", + "دقائق": "m", + "دقيقة": "m", + "دقيقتين": "2m", + "ساعات": "h", + "ساعة": "h", + "ساعتين": "2h", + "سنة": "Y", + "سنتين": "2Y", + "سنوات": "Y", + "شهر": "M", + "شهرين": "2M", + "شهرًا": "M", + "يوم": "D", + "يومين": "2D", + "يومًا": "D" + } + }, + "as": { + "timeago_tokens": { + "ঘণ্টা": "h", + "ছেকেণ্ড": "s", + "দিন": "D", + "বছৰৰ": "Y", + "মাহ": "M", + "মিনিট": "m", + "সপ্তাহ": "W" + } + }, + "az": { + "timeago_tokens": { + "ay": "M", + "dəqiqə": "m", + "gün": "D", + "həftə": "W", + "il": "Y", + "saat": "h", + "saniyə": "s" + } + }, + "be": { + "timeago_tokens": { + "гадзін": "h", + "гадзіну": "h", + "гадзіны": "h", + "гадоў": "Y", + "гады": "Y", + "год": "Y", + "года": "Y", + "дзень": "D", + "дзён": "D", + "дня": "D", + "дні": "D", + "месяц": "M", + "месяца": "M", + "месяцаў": "M", + "месяцы": "M", + "секунд": "s", + "секунду": "s", + "секунды": "s", + "тыдзень": "W", + "тыдня": "W", + "тыдні": "W", + "хвілін": "m", + "хвіліну": "m", + "хвіліны": "m" + } + }, + "bg": { + "timeago_tokens": { + "година": "Y", + "години": "Y", + "ден": "D", + "дни": "D", + "месец": "M", + "месеца": "M", + "минута": "m", + "минути": "m", + "седмица": "W", + "седмици": "W", + "секунда": "s", + "секунди": "s", + "час": "h", + "часа": "h" + } + }, + "bn": { + "timeago_tokens": { + "ঘন্টা": "h", + "দিন": "D", + "বছর": "Y", + "মাস": "M", + "মিনিট": "m", + "সপ্তাহ": "W", + "সেকেন্ড": "s" + } + }, + "bs": { + "timeago_tokens": { + "dan": "D", + "dana": "D", + "godina": "Y", + "godine": "Y", + "godinu": "Y", + "minuta": "m", + "minute": "m", + "minutu": "m", + "mjesec": "M", + "mjeseca": "M", + "mjeseci": "M", + "sat": "h", + "sata": "h", + "sati": "h", + "sedmice": "W", + "sedmicu": "W", + "sekunde": "s", + "sekundi": "s", + "sekundu": "s" + } + }, + "ca": { + "timeago_tokens": { + "any": "Y", + "anys": "Y", + "dia": "D", + "dies": "D", + "hora": "h", + "hores": "h", + "mes": "M", + "mesos": "M", + "minut": "m", + "minuts": "m", + "segon": "s", + "segons": "s", + "setmana": "W", + "setmanes": "W" + } + }, + "cs": { + "timeago_tokens": { + "dnem": "D", + "dny": "D", + "hodinami": "h", + "hodinou": "h", + "lety": "Y", + "minutami": "m", + "minutou": "m", + "měsícem": "M", + "měsíci": "M", + "rokem": "Y", + "roky": "Y", + "sekundami": "s", + "sekundou": "s", + "týdnem": "W", + "týdny": "W" + } + }, + "da": { + "timeago_tokens": { + "dag": "D", + "dage": "D", + "minut": "m", + "minutter": "m", + "måned": "M", + "måneder": "M", + "sekund": "s", + "sekunder": "s", + "time": "h", + "timer": "h", + "uge": "W", + "uger": "W", + "år": "Y" + } + }, + "de": { + "timeago_tokens": { + "jahr": "Y", + "jahren": "Y", + "minute": "m", + "minuten": "m", + "monat": "M", + "monaten": "M", + "sekunde": "s", + "sekunden": "s", + "stunde": "h", + "stunden": "h", + "tag": "D", + "tagen": "D", + "woche": "W", + "wochen": "W" + } + }, + "el": { + "timeago_tokens": { + "έτη": "Y", + "έτος": "Y", + "δευτερόλεπτα": "s", + "δευτερόλεπτο": "s", + "εβδομάδα": "W", + "εβδομάδες": "W", + "ημέρα": "D", + "ημέρες": "D", + "λεπτά": "m", + "λεπτό": "m", + "μήνα": "M", + "μήνες": "M", + "ώρα": "h", + "ώρες": "h" + } + }, + "en": { + "equivalent": ["en-GB", "en-IN"], + "timeago_tokens": { + "day": "D", + "days": "D", + "hour": "h", + "hours": "h", + "minute": "m", + "minutes": "m", + "month": "M", + "months": "M", + "second": "s", + "seconds": "s", + "week": "W", + "weeks": "W", + "year": "Y", + "years": "Y" + } + }, + "es": { + "equivalent": ["es-US", "es-419"], + "timeago_tokens": { + "año": "Y", + "años": "Y", + "día": "D", + "días": "D", + "hora": "h", + "horas": "h", + "mes": "M", + "meses": "M", + "minuto": "m", + "minutos": "m", + "segundo": "s", + "segundos": "s", + "semana": "W", + "semanas": "W" + } + }, + "et": { + "timeago_tokens": { + "aasta": "Y", + "aastat": "Y", + "kuu": "M", + "kuud": "M", + "minut": "m", + "minuti": "m", + "minutit": "m", + "nädal": "W", + "nädala": "W", + "nädalat": "W", + "päev": "D", + "päeva": "D", + "sekund": "s", + "sekundi": "s", + "sekundit": "s", + "tunni": "h" + } + }, + "eu": { + "timeago_tokens": { + "aste": "W", + "astebete": "W", + "egun": "D", + "hilabete": "M", + "minutu": "m", + "ordu": "h", + "ordubete": "h", + "segundo": "s", + "urte": "Y", + "urtebete": "Y" + } + }, + "fa": { + "timeago_tokens": { + "ثانیه": "s", + "دقیقه": "m", + "روز": "D", + "ساعت": "h", + "سال": "Y", + "ماه": "M", + "هفته": "W" + } + }, + "fi": { + "timeago_tokens": { + "kuukausi": "M", + "kuukautta": "M", + "minuutti": "m", + "minuuttia": "m", + "päivä": "D", + "päivää": "D", + "sekunti": "s", + "sekuntia": "s", + "tunti": "h", + "tuntia": "h", + "viikko": "W", + "viikkoa": "W", + "vuosi": "Y", + "vuotta": "Y" + } + }, + "fil": { + "timeago_tokens": { + "araw": "D", + "buwan": "M", + "linggo": "W", + "minuto": "m", + "oras": "h", + "segundo": "s", + "taon": "Y" + } + }, + "fr": { + "equivalent": ["fr-CA"], + "timeago_tokens": { + "an": "Y", + "ans": "Y", + "heure": "h", + "heures": "h", + "jour": "D", + "jours": "D", + "minute": "m", + "minutes": "m", + "mois": "M", + "seconde": "s", + "secondes": "s", + "semaine": "W", + "semaines": "W" + } + }, + "gl": { + "timeago_tokens": { + "ano": "Y", + "anos": "Y", + "día": "D", + "días": "D", + "hora": "h", + "horas": "h", + "mes": "M", + "meses": "M", + "minuto": "m", + "minutos": "m", + "segundo": "s", + "segundos": "s", + "semana": "W", + "semanas": "W" + } + }, + "gu": { + "timeago_tokens": { + "અઠવાડિયા": "W", + "કલાક": "h", + "દિવસ": "D", + "મહિના": "M", + "મિનિટ": "m", + "વર્ષ": "Y", + "સેકંડ": "s" + } + }, + "hi": { + "timeago_tokens": { + "घंटे": "h", + "दिन": "D", + "माह": "M", + "मिनट": "m", + "वर्ष": "Y", + "सप्ताह": "W", + "सेकंड": "s" + } + }, + "hr": { + "timeago_tokens": { + "dan": "D", + "dana": "D", + "godina": "Y", + "godine": "Y", + "godinu": "Y", + "minuta": "m", + "minute": "m", + "minutu": "m", + "mjesec": "M", + "mjeseca": "M", + "mjeseci": "M", + "sat": "h", + "sata": "h", + "sati": "h", + "sekunde": "s", + "sekundi": "s", + "sekundu": "s", + "tjedan": "W", + "tjedna": "W" + } + }, + "hu": { + "timeago_tokens": { + "hete": "W", + "héttel": "W", + "hónapja": "M", + "hónappal": "M", + "másodperccel": "s", + "másodperce": "s", + "napja": "D", + "nappal": "D", + "perccel": "m", + "perce": "m", + "éve": "Y", + "évvel": "Y", + "órája": "h", + "órával": "h" + } + }, + "hy": { + "timeago_tokens": { + "ամիս": "M", + "ժամ": "h", + "շաբաթ": "W", + "վայրկյան": "s", + "տարի": "Y", + "րոպե": "m", + "օր": "D" + } + }, + "id": { + "timeago_tokens": { + "bulan": "M", + "detik": "s", + "hari": "D", + "jam": "h", + "menit": "m", + "minggu": "W", + "tahun": "Y" + } + }, + "is": { + "timeago_tokens": { + "degi": "D", + "dögum": "D", + "klukkustund": "h", + "klukkustundum": "h", + "mánuði": "M", + "mánuðum": "M", + "mínútu": "m", + "mínútum": "m", + "sekúndu": "s", + "sekúndum": "s", + "viku": "W", + "vikum": "W", + "ári": "Y", + "árum": "Y" + } + }, + "it": { + "timeago_tokens": { + "anni": "Y", + "anno": "Y", + "giorni": "D", + "giorno": "D", + "mese": "M", + "mesi": "M", + "minuti": "m", + "minuto": "m", + "ora": "h", + "ore": "h", + "secondi": "s", + "secondo": "s", + "settimana": "W", + "settimane": "W" + } + }, + "iw": { + "timeago_tokens": { + "דקה": "m", + "דקות": "m", + "חודש": "M", + "חודשיים": "2M", + "חודשים": "M", + "יום": "D", + "יומיים": "2D", + "ימים": "D", + "שבוע": "W", + "שבועות": "W", + "שבועיים": "2W", + "שנה": "Y", + "שניות": "s", + "שנייה": "s", + "שנים": "Y", + "שנתיים": "2Y", + "שעה": "h", + "שעות": "h", + "שעתיים": "2h", + "שתי": "2" + } + }, + "ja": { + "timeago_tokens": { + "か月前": "M", + "分前": "m", + "年前": "Y", + "日前": "D", + "時間前": "h", + "秒前": "s", + "週間前": "W" + } + }, + "ka": { + "timeago_tokens": { + "დღის": "D", + "თვის": "M", + "კვირის": "W", + "საათის": "h", + "წამის": "s", + "წლის": "Y", + "წუთის": "m" + } + }, + "kk": { + "timeago_tokens": { + "ай": "M", + "апта": "W", + "жыл": "Y", + "күн": "D", + "минут": "m", + "сағат": "h", + "секунд": "s" + } + }, + "km": { + "timeago_tokens": { + "ខែមុន": "M", + "ឆ្នាំមុន": "Y", + "ថ្ងៃមុន": "D", + "នាទីមុន": "m", + "ម៉ោងមុន": "h", + "វិនាទីមុន": "s", + "សប្ដាហ៍មុន": "W" + } + }, + "kn": { + "timeago_tokens": { + "ಗಂಟೆ": "h", + "ಗಂಟೆಗಳ": "h", + "ತಿಂಗಳ": "M", + "ತಿಂಗಳುಗಳ": "M", + "ದಿನಗಳ": "D", + "ದಿನದ": "D", + "ನಿಮಿಷಗಳ": "m", + "ನಿಮಿಷದ": "m", + "ವರ್ಷಗಳ": "Y", + "ವರ್ಷದ": "Y", + "ವಾರಗಳ": "W", + "ವಾರದ": "W", + "ಸೆಕೆಂಡುಗಳ": "s", + "ಸೆಕೆಂಡ್": "s" + } + }, + "ko": { + "timeago_tokens": { + "개월": "M", + "년": "Y", + "분": "m", + "시간": "h", + "일": "D", + "주": "W", + "초": "s" + } + }, + "ky": { + "timeago_tokens": { + "ай": "M", + "апта": "W", + "жыл": "Y", + "күн": "D", + "мүнөт": "m", + "саат": "h", + "секунд": "s" + } + }, + "lo": { + "timeago_tokens": { + "ຊົ່ວໂມງກ່ອນ": "h", + "ນາທີກ່ອນ": "m", + "ປີກ່ອນ": "Y", + "ມື້ກ່ອນ": "D", + "ວິນາທີກ່ອນ": "s", + "ອາທິດກ່ອນ": "W", + "ເດືອນກ່ອນ": "M" + } + }, + "lt": { + "timeago_tokens": { + "dienas": "D", + "dieną": "D", + "dienų": "D", + "metus": "Y", + "metų": "Y", + "minutes": "m", + "minutę": "m", + "minučių": "m", + "mėnesius": "M", + "mėnesių": "M", + "mėnesį": "M", + "savaites": "W", + "savaitę": "W", + "savaičių": "W", + "sekundes": "s", + "sekundę": "s", + "sekundžių": "s", + "valandas": "h", + "valandą": "h", + "valandų": "h" + } + }, + "lv": { + "timeago_tokens": { + "dienas": "D", + "dienām": "D", + "gada": "Y", + "gadiem": "Y", + "minūtes": "m", + "minūtēm": "m", + "mēneša": "M", + "mēnešiem": "M", + "nedēļas": "W", + "nedēļām": "W", + "sekundes": "s", + "sekundēm": "s", + "stundas": "h", + "stundām": "h" + } + }, + "mk": { + "timeago_tokens": { + "година": "Y", + "години": "Y", + "ден": "D", + "дена": "D", + "месец": "M", + "месеци": "M", + "минута": "m", + "минути": "m", + "седмица": "W", + "седмици": "W", + "секунда": "s", + "секунди": "s", + "час": "h", + "часа": "h" + } + }, + "ml": { + "timeago_tokens": { + "ആഴ്ച": "W", + "ദിവസം": "D", + "മണിക്കൂർ": "h", + "മാസം": "M", + "മിനിറ്റ്": "m", + "വർഷം": "Y", + "സെക്കൻഡ്": "s" + } + }, + "mn": { + "timeago_tokens": { + "хоногийн": "W", + "жилийн": "Y", + "минутын": "m", + "сарын": "M", + "секундын": "s", + "цагийн": "h", + "өдрийн": "D" + } + }, + "mr": { + "timeago_tokens": { + "आठवड्यांपूर्वी": "W", + "आठवड्यापूर्वी": "W", + "तासांपूर्वी": "h", + "तासापूर्वी": "h", + "दिवसांपूर्वी": "D", + "दिवसापूर्वी": "D", + "महिन्यांपूर्वी": "M", + "महिन्यापूर्वी": "M", + "मिनिटांपूर्वी": "m", + "मिनिटापूर्वी": "m", + "वर्षांपूर्वी": "Y", + "वर्षापूर्वी": "Y", + "सेकंदांपूर्वी": "s", + "सेकंदापूर्वी": "s" + } + }, + "ms": { + "timeago_tokens": { + "bulan": "M", + "hari": "D", + "jam": "h", + "minggu": "W", + "minit": "m", + "saat": "s", + "tahun": "Y" + } + }, + "my": { + "timeago_tokens": { + "စက္ကန့်": "s", + "နာရီ": "h", + "နှစ်": "Y", + "ပတ်": "W", + "မိနစ်": "m", + "ရက်": "D", + "လ": "M" + } + }, + "ne": { + "timeago_tokens": { + "घण्टा": "h", + "दिन": "D", + "महिना": "M", + "मिनेट": "m", + "वर्ष": "Y", + "सेकेन्ड": "s", + "हप्ता": "W" + } + }, + "nl": { + "timeago_tokens": { + "dag": "D", + "dagen": "D", + "jaar": "Y", + "maand": "M", + "maanden": "M", + "minuten": "m", + "minuut": "m", + "seconde": "s", + "seconden": "s", + "uur": "h", + "week": "W", + "weken": "W" + } + }, + "no": { + "timeago_tokens": { + "dag": "D", + "dager": "D", + "døgn": "D", + "minutt": "m", + "minutter": "m", + "måned": "M", + "måneder": "M", + "sekund": "s", + "sekunder": "s", + "time": "h", + "timer": "h", + "uke": "W", + "uker": "W", + "år": "Y" + } + }, + "or": { + "timeago_tokens": { + "ଘଣ୍ଟା": "h", + "ଦିନ": "D", + "ବର୍ଷ": "Y", + "ମାସ": "M", + "ମିନିଟ୍": "m", + "ସପ୍ତାହ": "W", + "ସେକେଣ୍ଡ": "s" + } + }, + "pa": { + "timeago_tokens": { + "ਘੰਟਾ": "h", + "ਘੰਟੇ": "h", + "ਦਿਨ": "D", + "ਮਹੀਨਾ": "M", + "ਮਹੀਨੇ": "M", + "ਮਿੰਟ": "m", + "ਸਕਿੰਟ": "s", + "ਸਾਲ": "Y", + "ਹਫ਼ਤਾ": "W", + "ਹਫ਼ਤੇ": "W" + } + }, + "pl": { + "timeago_tokens": { + "dni": "D", + "dzień": "D", + "godzin": "h", + "godziny": "h", + "godzinę": "h", + "lat": "Y", + "lata": "Y", + "miesiąc": "M", + "miesiące": "M", + "miesięcy": "M", + "minut": "m", + "minuty": "m", + "minutę": "m", + "rok": "Y", + "sekund": "s", + "sekundy": "s", + "sekundę": "s", + "tydzień": "W", + "tygodnie": "W" + } + }, + "pt": { + "equivalent": ["pt-PT"], + "timeago_tokens": { + "ano": "Y", + "anos": "Y", + "dia": "D", + "dias": "D", + "hora": "h", + "horas": "h", + "meses": "M", + "minuto": "m", + "minutos": "m", + "mês": "M", + "segundo": "s", + "segundos": "s", + "semana": "W", + "semanas": "W" + } + }, + "ro": { + "timeago_tokens": { + "an": "Y", + "ani": "Y", + "luni": "M", + "lună": "M", + "minut": "m", + "minute": "m", + "ore": "h", + "oră": "h", + "secunde": "s", + "secundă": "s", + "săptămâni": "W", + "săptămână": "W", + "zi": "D", + "zile": "D" + } + }, + "ru": { + "timeago_tokens": { + "год": "Y", + "года": "Y", + "день": "D", + "дней": "D", + "дня": "D", + "лет": "Y", + "месяц": "M", + "месяца": "M", + "месяцев": "M", + "минут": "m", + "минуту": "m", + "минуты": "m", + "недели": "W", + "неделю": "W", + "секунд": "s", + "секунду": "s", + "секунды": "s", + "час": "h", + "часа": "h", + "часов": "h" + } + }, + "si": { + "timeago_tokens": { + "තත්පර": "s", + "දින": "D", + "පැය": "h", + "මාස": "M", + "මිනිත්තු": "m", + "වසර": "Y", + "සති": "W" + } + }, + "sk": { + "timeago_tokens": { + "dňami": "D", + "dňom": "D", + "hodinami": "h", + "hodinou": "h", + "mesiacmi": "M", + "mesiacom": "M", + "minútami": "m", + "minútou": "m", + "rokmi": "Y", + "rokom": "Y", + "sekundami": "s", + "sekundou": "s", + "týždňami": "W", + "týždňom": "W" + } + }, + "sl": { + "timeago_tokens": { + "dnem": "D", + "dnevi": "D", + "dnevom": "D", + "dnevoma": "D", + "leti": "Y", + "letom": "Y", + "letoma": "Y", + "mesecem": "M", + "mesecema": "M", + "meseci": "M", + "minutama": "m", + "minutami": "m", + "minuto": "m", + "sekundama": "s", + "sekundami": "s", + "sekundo": "s", + "tedni": "W", + "tednom": "W", + "tednoma": "W", + "urama": "h", + "urami": "h", + "uro": "h" + } + }, + "sq": { + "timeago_tokens": { + "ditë": "D", + "javë": "W", + "minuta": "m", + "minutë": "m", + "muaj": "M", + "orë": "h", + "sekonda": "s", + "sekondë": "s", + "vit": "Y", + "vjet": "Y" + } + }, + "sr": { + "timeago_tokens": { + "година": "Y", + "године": "Y", + "годину": "Y", + "дан": "D", + "дана": "D", + "месец": "M", + "месеца": "M", + "месеци": "M", + "минута": "m", + "недеље": "W", + "недељу": "W", + "сат": "h", + "сата": "h", + "сати": "h", + "секунде": "s", + "секунди": "s" + } + }, + "sr-Latn": { + "timeago_tokens": { + "dan": "D", + "dana": "D", + "godina": "Y", + "godine": "Y", + "godinu": "Y", + "mesec": "M", + "meseca": "M", + "meseci": "M", + "minuta": "m", + "nedelja": "W", + "nedelje": "W", + "nedelju": "W", + "sat": "h", + "sata": "h", + "sati": "h", + "sekunde": "s", + "sekundi": "s" + } + }, + "sv": { + "timeago_tokens": { + "dag": "D", + "dagar": "D", + "minut": "m", + "minuter": "m", + "månad": "M", + "månader": "M", + "sekund": "s", + "sekunder": "s", + "timmar": "h", + "timme": "h", + "vecka": "W", + "veckor": "W", + "år": "Y" + } + }, + "sw": { + "timeago_tokens": { + "dakika": "m", + "miaka": "Y", + "miezi": "M", + "mwaka": "Y", + "mwezi": "M", + "saa": "h", + "sekunde": "s", + "siku": "D", + "wiki": "W" + } + }, + "ta": { + "timeago_tokens": { + "ஆண்டிற்கு": "Y", + "ஆண்டுகளுக்கு": "Y", + "நாட்களுக்கு": "D", + "நாளுக்கு": "D", + "நிமிடங்களுக்கு": "m", + "நிமிடத்திற்கு": "m", + "மணிநேரம்": "h", + "மாதங்களுக்கு": "M", + "மாதத்துக்கு": "M", + "வாரங்களுக்கு": "W", + "வாரம்": "W", + "விநாடிகளுக்கு": "s", + "விநாடிக்கு": "s" + } + }, + "te": { + "timeago_tokens": { + "గంట": "h", + "గంటల": "h", + "నిమిషం": "m", + "నిమిషాల": "m", + "నెల": "M", + "నెలల": "M", + "రోజు": "D", + "రోజుల": "D", + "వారం": "W", + "వారాల": "W", + "సంవత్సరం": "Y", + "సంవత్సరాల": "Y", + "సెకను": "s", + "సెకన్ల": "s" + } + }, + "th": { + "timeago_tokens": { + "ชั่วโมงที่ผ่านมา": "h", + "นาทีที่ผ่านมา": "m", + "ปีที่แล้ว": "Y", + "วันที่ผ่านมา": "D", + "วินาทีที่ผ่านมา": "s", + "สัปดาห์ที่ผ่านมา": "W", + "เดือนที่ผ่านมา": "M" + } + }, + "tr": { + "timeago_tokens": { + "ay": "M", + "dakika": "m", + "gün": "D", + "hafta": "W", + "saat": "h", + "saniye": "s", + "yıl": "Y" + } + }, + "uk": { + "timeago_tokens": { + "годин": "h", + "години": "h", + "годину": "h", + "день": "D", + "дні": "D", + "днів": "D", + "місяць": "M", + "місяці": "M", + "місяців": "M", + "роки": "Y", + "років": "Y", + "рік": "Y", + "секунд": "s", + "секунди": "s", + "секунду": "s", + "тиждень": "W", + "тижні": "W", + "хвилин": "m", + "хвилини": "m", + "хвилину": "m" + } + }, + "ur": { + "timeago_tokens": { + "دن": "D", + "دنوں": "D", + "سال": "Y", + "سیکنڈ": "s", + "سیکنڈز": "s", + "منٹ": "m", + "منٹس": "m", + "مہینہ": "M", + "مہینے": "M", + "گھنٹہ": "h", + "گھنٹے": "h", + "ہفتہ": "W", + "ہفتے": "W" + } + }, + "uz": { + "timeago_tokens": { + "daqiqa": "m", + "hafta": "W", + "kun": "D", + "oy": "M", + "soat": "h", + "soniya": "s", + "yil": "Y" + } + }, + "vi": { + "timeago_tokens": { + "giây": "s", + "giờ": "h", + "ngày": "D", + "năm": "Y", + "phút": "m", + "tháng": "M", + "tiếng": "h", + "tuần": "W" + } + }, + "zh-CN": { + "timeago_tokens": { + "个月前": "M", + "分钟前": "m", + "周前": "W", + "天前": "D", + "小时前": "h", + "年前": "Y", + "秒钟前": "s" + } + }, + "zh-HK": { + "timeago_tokens": { + "個月前": "M", + "分鐘前": "m", + "小時前": "h", + "年前": "Y", + "日前": "D", + "星期前": "W", + "秒前": "s" + } + }, + "zh-TW": { + "timeago_tokens": { + "個月前": "M", + "分鐘前": "m", + "天前": "D", + "小時前": "h", + "年前": "Y", + "秒前": "s", + "週前": "W" + } + }, + "zu": { + "timeago_tokens": { + "amaminithi": "m", + "amasekhondi": "s", + "amaviki": "W", + "emahoreni": "h", + "ezinsukwini": "D", + "ihora": "h", + "iminithi": "m", + "iminyaka": "Y", + "inyanga": "M", + "isekhondi": "s", + "iviki": "W", + "izinyanga": "M", + "osukwini": "D", + "unyaka": "Y" + } + } +} diff --git a/testfiles/date/timeago.json b/testfiles/date/timeago_samples.json similarity index 100% rename from testfiles/date/timeago.json rename to testfiles/date/timeago_samples.json diff --git a/tests/gen_dictionary.rs b/tests/gen_dictionary.rs new file mode 100644 index 0000000..fbb38d8 --- /dev/null +++ b/tests/gen_dictionary.rs @@ -0,0 +1,98 @@ +use std::{ + collections::BTreeMap, + fmt::Debug, + fs::File, + io::{BufReader, BufWriter, Write}, path::Path, +}; + +use fancy_regex::Regex; +use once_cell::sync::Lazy; +use rustypipe::{model::Language, timeago::TimeUnit}; +use serde::Deserialize; + +const DICT_PATH: &str = "testfiles/date/dictionary.json"; +const TARGET_FILE: &str = "src/dictionary.rs"; + +type Dictionary = BTreeMap; + +#[derive(Debug, Deserialize)] +struct DictEntry { + #[serde(default)] + equivalent: Vec, + timeago_tokens: BTreeMap, +} + +fn parse_tu(tu: &str) -> (u8, Option) { + static TU_PATTERN: Lazy = Lazy::new(|| Regex::new(r"^(\d*)(\w?)$").unwrap()); + match TU_PATTERN.captures(tu).unwrap() { + Some(cap) => ( + cap.get(1).unwrap().as_str().parse().unwrap_or(1), + match cap.get(2).unwrap().as_str() { + "s" => Some(TimeUnit::Second), + "m" => Some(TimeUnit::Minute), + "h" => Some(TimeUnit::Hour), + "D" => Some(TimeUnit::Day), + "W" => Some(TimeUnit::Week), + "M" => Some(TimeUnit::Month), + "Y" => Some(TimeUnit::Year), + "" => None, + _ => panic!("invalid time unit: {}", tu), + }, + ), + None => panic!("invalid time unit: {}", tu), + } +} + +fn read_dict() -> Dictionary { + let json_file = File::open(DICT_PATH).unwrap(); + serde_json::from_reader(BufReader::new(json_file)).unwrap() +} + +// #[test] +fn t_gen() { + let dict = read_dict(); + + let code_head = r#"// This file is automatically generated. DO NOT EDIT. +use crate::{ + model::Language, + timeago::{TaToken, TimeUnit}, +}; +"#; + + let mut code_timeago_tokens = r#"#[rustfmt::skip] +pub(crate) fn get_timeago_tokens(lang: Language) -> phf::Map<&'static str, TaToken> { + match lang { + "# + .to_owned(); + + dict.iter().for_each(|(lang, entry)| { + // Create a map for the language + let mut map = phf_codegen::Map::<&str>::new(); + + entry.timeago_tokens.iter().for_each(|(txt, tu_str)| { + let (n, unit) = parse_tu(&tu_str); + match unit { + Some(unit) => map.entry( + &txt, + &format!("TaToken {{ n: {}, unit: Some(TimeUnit::{:?}) }}", n, unit), + ), + None => map.entry(&txt, &format!("TaToken {{ n: {}, unit: None }}", n)), + }; + }); + + let mut selector = format!("Language::{:?}", lang); + entry.equivalent.iter().for_each(|eq| { + selector += &format!(" | Language::{:?}", eq); + }); + + let code_map = &map.build().to_string().replace('\n', "\n "); + + code_timeago_tokens += &format!("{} => {},\n ", selector, code_map); + }); + + code_timeago_tokens = code_timeago_tokens.trim_end().to_owned() + "\n }\n}\n"; + + let code = format!("{}\n{}", code_head, code_timeago_tokens); + + std::fs::write(TARGET_FILE, code).unwrap(); +}