diff --git a/codegen/src/collect_history_dates.rs b/codegen/src/collect_history_dates.rs index 674c09c..838311b 100644 --- a/codegen/src/collect_history_dates.rs +++ b/codegen/src/collect_history_dates.rs @@ -5,26 +5,25 @@ use rustypipe::{ client::RustyPipe, param::{Language, LANGUAGES}, }; -use serde::{Deserialize, Serialize}; use crate::util::{self, DICT_DIR}; -type CollectedDates = BTreeMap; +type CollectedDates = BTreeMap>; -#[derive(Debug, Serialize, Deserialize)] -struct HistoryDates { - this_week: String, - last_week: String, -} +const THIS_WEEK: &str = "this_week"; +const LAST_WEEK: &str = "last_week"; -pub async fn collect_dates() { +pub async fn collect_dates_music() { let json_path = path!(*DICT_DIR / "history_date_samples.json"); let rp = RustyPipe::builder() - .storage_dir("/home/thetadev/Documents/Programmieren/Rust/rustypipe") + .storage_dir(path!(env!("CARGO_MANIFEST_DIR") / "..")) .build() .unwrap(); - let mut res: CollectedDates = BTreeMap::new(); + let mut res: CollectedDates = { + let json_file = File::open(&json_path).unwrap(); + serde_json::from_reader(BufReader::new(json_file)).unwrap() + }; for lang in LANGUAGES { println!("{lang}"); @@ -34,14 +33,56 @@ pub async fn collect_dates() { } // The indexes have to be adapted before running - let d = HistoryDates { - this_week: history.items[0].playback_date_txt.clone().unwrap(), - last_week: history.items[18].playback_date_txt.clone().unwrap(), - }; - res.insert(lang, d); + let entry = res.entry(lang).or_default(); + entry.insert( + THIS_WEEK.to_owned(), + history.items[0].playback_date_txt.clone().unwrap(), + ); + entry.insert( + LAST_WEEK.to_owned(), + history.items[18].playback_date_txt.clone().unwrap(), + ); } - let file = File::create(json_path).unwrap(); + let file = File::create(&json_path).unwrap(); + serde_json::to_writer_pretty(file, &res).unwrap(); +} + +pub async fn collect_dates() { + let json_path = path!(*DICT_DIR / "history_date_samples.json"); + let rp = RustyPipe::builder() + .storage_dir(path!(env!("CARGO_MANIFEST_DIR") / "..")) + .build() + .unwrap(); + + let mut res: CollectedDates = { + let json_file = File::open(&json_path).unwrap(); + serde_json::from_reader(BufReader::new(json_file)).unwrap() + }; + + for lang in LANGUAGES { + println!("{lang}"); + let history = rp.query().lang(lang).history().await.unwrap(); + if history.items.len() < 3 { + panic!("{lang} empty history") + } + + let entry = res.entry(lang).or_default(); + entry.insert( + "tuesday".to_owned(), + history.items[0].playback_date_txt.clone().unwrap(), + ); + entry.insert( + "0000-01-06".to_owned(), + history.items[1].playback_date_txt.clone().unwrap(), + ); + entry.insert( + "2024-12-28".to_owned(), + history.items[15].playback_date_txt.clone().unwrap(), + ); + } + + let file = File::create(&json_path).unwrap(); serde_json::to_writer_pretty(file, &res).unwrap(); } @@ -59,10 +100,10 @@ pub fn write_samples_to_dict() { let cd = &collected_dates[&lang]; dict_entry .timeago_nd_tokens - .insert(util::filter_datestr(&cd.this_week), "0Wl".to_owned()); + .insert(util::filter_datestr(&cd[THIS_WEEK]), "0Wl".to_owned()); dict_entry .timeago_nd_tokens - .insert(util::filter_datestr(&cd.last_week), "1Wl".to_owned()); + .insert(util::filter_datestr(&cd[LAST_WEEK]), "1Wl".to_owned()); } util::write_dict(dict); diff --git a/codegen/src/gen_dictionary.rs b/codegen/src/gen_dictionary.rs index ef01834..e5ce310 100644 --- a/codegen/src/gen_dictionary.rs +++ b/codegen/src/gen_dictionary.rs @@ -45,7 +45,7 @@ pub fn generate_dictionary() { use crate::{ model::AlbumType, param::Language, - util::timeago::{DateCmp, TaToken, TimeUnit}, + util::timeago::{TaToken, TimeUnit}, }; /// Dictionary entry containing language-specific parsing information @@ -57,14 +57,13 @@ pub(crate) struct Entry { /// Identifiers: `Y`(ear), `M`(month), `W`(eek), `D`(ay), /// `h`(our), `m`(inute), `s`(econd) pub timeago_tokens: phf::Map<&'static str, TaToken>, - /// Order in which to parse numeric date components. Formatted as - /// a string of date identifiers (Y, M, D). + /// True if the month has to be parsed before the day /// /// Examples: /// - /// - 03.01.2020 => `"DMY"` - /// - Jan 3, 2020 => `"DY"` - pub date_order: &'static [DateCmp], + /// - 03.01.2020 => DMY => false + /// - 01/03/2020 => MDY => true + pub month_before_day: bool, /// Tokens for parsing month names. /// /// Format: Parsed token -> Month number (starting from 1) @@ -139,13 +138,6 @@ pub(crate) fn entry(lang: Language) -> Entry { }; }); - // Date order - let mut date_order = "&[".to_owned(); - entry.date_order.chars().for_each(|c| { - write!(date_order, "DateCmp::{c}, ").unwrap(); - }); - date_order = date_order.trim_end_matches([' ', ',']).to_owned() + "]"; - // Number tokens let mut number_tokens = phf_codegen::Map::<&str>::new(); entry.number_tokens.iter().for_each(|(txt, mag)| { @@ -186,8 +178,8 @@ pub(crate) fn entry(lang: Language) -> Entry { .to_string() .replace('\n', "\n "); - write!(code_timeago_tokens, "{} => Entry {{\n timeago_tokens: {},\n date_order: {},\n months: {},\n timeago_nd_tokens: {},\n comma_decimal: {:?},\n number_tokens: {},\n number_nd_tokens: {},\n album_types: {},\n chan_prefix: {:?},\n chan_suffix: {:?},\n }},\n ", - selector, code_ta_tokens, date_order, code_months, code_ta_nd_tokens, entry.comma_decimal, code_number_tokens, code_number_nd_tokens, code_album_types, entry.chan_prefix, entry.chan_suffix).unwrap(); + write!(code_timeago_tokens, "{} => Entry {{\n timeago_tokens: {},\n month_before_day: {:?},\n months: {},\n timeago_nd_tokens: {},\n comma_decimal: {:?},\n number_tokens: {},\n number_nd_tokens: {},\n album_types: {},\n chan_prefix: {:?},\n chan_suffix: {:?},\n }},\n ", + selector, code_ta_tokens, entry.month_before_day, code_months, code_ta_nd_tokens, entry.comma_decimal, code_number_tokens, code_number_nd_tokens, code_album_types, entry.chan_prefix, entry.chan_suffix).unwrap(); } code_timeago_tokens = code_timeago_tokens.trim_end().to_owned() + "\n }\n}\n"; diff --git a/codegen/src/main.rs b/codegen/src/main.rs index cff81b9..87f484f 100644 --- a/codegen/src/main.rs +++ b/codegen/src/main.rs @@ -32,6 +32,7 @@ enum Commands { CollectVideoDurations, CollectVideoDates, CollectHistoryDates, + CollectMusicHistoryDates, CollectChanPrefixes, ParsePlaylistDates, ParseHistoryDates, @@ -74,6 +75,9 @@ async fn main() { Commands::CollectHistoryDates => { collect_history_dates::collect_dates().await; } + Commands::CollectMusicHistoryDates => { + collect_history_dates::collect_dates_music().await; + } Commands::CollectChanPrefixes => { collect_chan_prefixes::collect_chan_prefixes().await; } diff --git a/codegen/src/model.rs b/codegen/src/model.rs index d9f212d..3002451 100644 --- a/codegen/src/model.rs +++ b/codegen/src/model.rs @@ -13,6 +13,13 @@ pub struct DictEntry { /// Should the language be parsed by character instead of by word? /// (e.g. Chinese/Japanese) pub by_char: bool, + /// True if the month has to be parsed before the day + /// + /// Examples: + /// + /// - 03.01.2020 => DMY => false + /// - 01/03/2020 => MDY => true + pub month_before_day: bool, /// Tokens for parsing timeago strings. /// /// Format: Parsed token -> \[Quantity\] Identifier diff --git a/src/util/dictionary.rs b/src/util/dictionary.rs index 43f9119..6ada000 100644 --- a/src/util/dictionary.rs +++ b/src/util/dictionary.rs @@ -8,7 +8,7 @@ use crate::{ model::AlbumType, param::Language, - util::timeago::{DateCmp, TaToken, TimeUnit}, + util::timeago::{TaToken, TimeUnit}, }; /// Dictionary entry containing language-specific parsing information @@ -20,14 +20,13 @@ pub(crate) struct Entry { /// Identifiers: `Y`(ear), `M`(month), `W`(eek), `D`(ay), /// `h`(our), `m`(inute), `s`(econd) pub timeago_tokens: phf::Map<&'static str, TaToken>, - /// Order in which to parse numeric date components. Formatted as - /// a string of date identifiers (Y, M, D). + /// True if the month has to be parsed before the day /// /// Examples: /// - /// - 03.01.2020 => `"DMY"` - /// - Jan 3, 2020 => `"DY"` - pub date_order: &'static [DateCmp], + /// - 03.01.2020 => DMY => false + /// - 01/03/2020 => MDY => true + pub month_before_day: bool, /// Tokens for parsing month names. /// /// Format: Parsed token -> Month number (starting from 1) @@ -89,7 +88,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("jaar", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: true, months: ::phf::Map { key: 12213676231523076107, disps: &[ @@ -216,7 +215,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ቀናት", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -360,7 +359,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("دقائق", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -464,27 +463,35 @@ pub(crate) fn entry(lang: Language) -> Entry { ("মিনিট", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ - (3, 11), - (2, 2), - (0, 0), + (1, 0), + (13, 15), + (3, 15), + (0, 15), ], entries: &[ - ("ছেপ\u{9cd}তেম\u{9cd}বৰ", 9), - ("জ\u{9be}ন\u{9c1}ৱ\u{9be}ৰী", 1), - ("আগষ\u{9cd}ট", 8), - ("মে’", 5), - ("অক\u{9cd}টোবৰ", 10), - ("এপ\u{9cd}ৰিল", 4), - ("ডিচেম\u{9cd}বৰ", 12), - ("ফেব\u{9cd}ৰ\u{9c1}ৱ\u{9be}ৰী", 2), - ("জ\u{9c1}ন", 6), + ("ফেব\u{9cd}ৰ\u{9c1}", 2), ("ম\u{9be}ৰ\u{9cd}চ", 3), - ("জ\u{9c1}ল\u{9be}ই", 7), + ("ডিচেম\u{9cd}বৰ", 12), ("নৱেম\u{9cd}বৰ", 11), + ("ডিচে", 12), + ("নৱে", 11), + ("এপ\u{9cd}ৰিল", 4), + ("জ\u{9c1}ল\u{9be}ই", 7), + ("ফেব\u{9cd}ৰ\u{9c1}ৱ\u{9be}ৰী", 2), + ("মে’", 5), + ("জ\u{9be}ন\u{9c1}ৱ\u{9be}ৰী", 1), + ("ছেপ\u{9cd}তে", 9), + ("আগ", 8), + ("আগষ\u{9cd}ট", 8), + ("ছেপ\u{9cd}তেম\u{9cd}বৰ", 9), + ("জ\u{9c1}ন", 6), + ("অক\u{9cd}টো", 10), + ("জ\u{9be}ন\u{9c1}", 1), + ("অক\u{9cd}টোবৰ", 10), ], }, timeago_nd_tokens: ::phf::Map { @@ -580,7 +587,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ay", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -724,7 +731,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("хвіліна", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -855,7 +862,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("седмици", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -956,7 +963,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("সেকেন\u{9cd}ড", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1097,7 +1104,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("sedmice", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1225,7 +1232,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("setmana", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1367,7 +1374,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("minuta", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1478,7 +1485,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("dage", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1602,27 +1609,36 @@ pub(crate) fn entry(lang: Language) -> Entry { ("sek", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { - key: 7485420634051515786, + key: 12913932095322966823, disps: &[ (0, 0), - (1, 8), - (0, 3), + (17, 15), + (3, 6), + (5, 10), ], entries: &[ - ("januar", 1), - ("august", 8), - ("februar", 2), - ("dezember", 12), - ("oktober", 10), - ("september", 9), - ("november", 11), - ("juli", 7), - ("juni", 6), - ("april", 4), - ("mai", 5), + ("sept", 9), ("märz", 3), + ("mai", 5), + ("september", 9), + ("dez", 12), + ("apr", 4), + ("august", 8), + ("april", 4), + ("oktober", 10), + ("aug", 8), + ("februar", 2), + ("juli", 7), + ("dezember", 12), + ("nov", 11), + ("feb", 2), + ("okt", 10), + ("juni", 6), + ("november", 11), + ("januar", 1), + ("jan", 1), ], }, timeago_nd_tokens: ::phf::Map { @@ -1717,7 +1733,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("λεπτά", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1857,7 +1873,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("second", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: true, months: ::phf::Map { key: 351906021642186605, disps: &[ @@ -1988,7 +2004,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("meses", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 8602556344903797927, disps: &[ @@ -2114,7 +2130,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("sem", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 8602556344903797927, disps: &[ @@ -2243,7 +2259,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("päeva", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 11210181029210336526, disps: &[ @@ -2356,7 +2372,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("s", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::Y, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 4594751852016600049, disps: &[ @@ -2469,7 +2485,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("دقیقه", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: true, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -2593,7 +2609,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("viikko", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -2697,7 +2713,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("linggo", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: true, months: ::phf::Map { key: 345707026197253659, disps: &[ @@ -2826,7 +2842,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("jour", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2956,7 +2972,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("semana", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -3068,7 +3084,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("કલાક", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -3175,7 +3191,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("स\u{947}क\u{902}ड", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -3312,7 +3328,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("g", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 8694567506910003252, disps: &[ @@ -3441,7 +3457,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("órával", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: &[DateCmp::Y, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -3562,7 +3578,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ամիս", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 8694567506910003252, disps: &[ @@ -3685,7 +3701,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("menit", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -3814,7 +3830,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("mán", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -3947,7 +3963,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("secondo", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 5516568623150984925, disps: &[ @@ -4085,7 +4101,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("דקות", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -4200,7 +4216,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("分", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -4287,7 +4303,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("წმ", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 14108922650502679131, disps: &[ @@ -4409,7 +4425,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("мин", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::Y, DateCmp::D], + month_before_day: false, months: ::phf::Map { key: 42584678569483946, disps: &[ @@ -4527,7 +4543,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("នាទ\u{17b8}", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -4642,7 +4658,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ಸ\u{cc6}ಕ\u{cc6}ಂಡ\u{ccd}", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 8602556344903797927, disps: &[ @@ -4751,7 +4767,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("주", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -4837,7 +4853,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ай", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: &[DateCmp::Y, DateCmp::D], + month_before_day: false, months: ::phf::Map { key: 8694567506910003252, disps: &[ @@ -4960,7 +4976,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ຊມ", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -5111,7 +5127,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("dieną", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -5233,7 +5249,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ned", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: &[DateCmp::Y, DateCmp::D], + month_before_day: false, months: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -5358,27 +5374,40 @@ pub(crate) fn entry(lang: Language) -> Entry { ("секунди", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ - (5, 0), (4, 10), - (0, 10), + (1, 0), + (5, 1), + (2, 0), + (20, 19), ], entries: &[ + ("јул", 7), + ("апр", 4), + ("февруари", 2), + ("јануари", 1), + ("мар", 3), + ("јан", 1), + ("септември", 9), + ("јун", 6), + ("август", 8), + ("сеп", 9), + ("фев", 2), + ("јули", 7), + ("април", 4), + ("ное", 11), + ("окт", 10), ("ноември", 11), ("март", 3), - ("декември", 12), - ("октомври", 10), + ("авг", 8), ("мај", 5), + ("октомври", 10), ("јуни", 6), - ("август", 8), - ("април", 4), - ("јануари", 1), - ("јули", 7), - ("септември", 9), - ("февруари", 2), + ("дек", 12), + ("декември", 12), ], }, timeago_nd_tokens: ::phf::Map { @@ -5463,7 +5492,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("സെക\u{d4d}കൻഡ\u{d4d}", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::Y, DateCmp::D], + month_before_day: false, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -5581,7 +5610,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("секундын", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 14108922650502679131, disps: &[ @@ -5594,10 +5623,10 @@ pub(crate) fn entry(lang: Language) -> Entry { ("долоодугаар", 7), ("тавдугаар", 5), ("аравдугаар", 10), - ("хоёрдугаар", 12), + ("хоёрдугаар", 2), ("дөрөвдүгээр", 4), ("зургаадугаар", 6), - ("нэгдүгээр", 11), + ("нэгдүгээр", 1), ("гуравдугаар", 3), ], }, @@ -5693,7 +5722,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("स\u{947}", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -5807,7 +5836,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("hari", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -5918,7 +5947,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("န\u{103e}စ\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: &[DateCmp::Y, DateCmp::D], + month_before_day: false, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -6036,7 +6065,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("स\u{947}क\u{947}न\u{94d}ड", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::Y, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -6147,7 +6176,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("dagen", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -6275,7 +6304,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("d", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -6396,7 +6425,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ସେ", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: true, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -6506,7 +6535,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ਘ\u{a70}ਟਾ", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -6648,7 +6677,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("roku", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -6777,7 +6806,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("s", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -6905,7 +6934,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("dia", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -7018,7 +7047,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ani", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -7162,7 +7191,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("секунда", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -7277,7 +7306,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("ද\u{dd2}න", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::Y, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -7415,7 +7444,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("dňa", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -7551,7 +7580,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("meseci", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -7671,7 +7700,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("orë", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -7803,27 +7832,38 @@ pub(crate) fn entry(lang: Language) -> Entry { ("сек", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { - key: 10121458955350035957, + key: 15467950696543387533, disps: &[ - (2, 8), - (1, 0), - (0, 0), + (0, 18), + (0, 4), + (2, 0), + (2, 0), + (3, 16), ], entries: &[ ("мај", 5), + ("феб", 2), + ("мар", 3), ("јануар", 1), + ("окт", 10), + ("дец", 12), ("август", 8), ("март", 3), - ("фебруар", 2), - ("новембар", 11), ("јун", 6), - ("октобар", 10), - ("април", 4), - ("децембар", 12), ("јул", 7), + ("нов", 11), + ("сеп", 9), + ("април", 4), + ("јан", 1), + ("октобар", 10), ("септембар", 9), + ("апр", 4), + ("авг", 8), + ("новембар", 11), + ("децембар", 12), + ("фебруар", 2), ], }, timeago_nd_tokens: ::phf::Map { @@ -7922,27 +7962,38 @@ pub(crate) fn entry(lang: Language) -> Entry { ("sati", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { - key: 15467950696543387533, + key: 10121458955350035957, disps: &[ - (1, 3), - (5, 11), + (9, 16), + (0, 6), + (5, 10), + (2, 5), (0, 0), ], entries: &[ - ("decembar", 12), - ("april", 4), - ("februar", 2), - ("jul", 7), + ("jan", 1), + ("okt", 10), ("novembar", 11), - ("maj", 5), - ("jun", 6), ("avgust", 8), - ("januar", 1), - ("septembar", 9), + ("feb", 2), + ("februar", 2), + ("decembar", 12), + ("sep", 9), + ("april", 4), + ("jul", 7), + ("dec", 12), + ("mar", 3), + ("jun", 6), + ("nov", 11), ("oktobar", 10), + ("avg", 8), + ("apr", 4), + ("septembar", 9), ("mart", 3), + ("maj", 5), + ("januar", 1), ], }, timeago_nd_tokens: ::phf::Map { @@ -8037,7 +8088,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("sekund", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: true, months: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -8147,7 +8198,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("miaka", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -8277,7 +8328,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("நிமிடத\u{bcd}திற\u{bcd}கு", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -8403,7 +8454,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("సంవత\u{c4d}సర\u{c3e}ల", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -8526,7 +8577,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("เด\u{e37}อนท\u{e35}\u{e48}แล\u{e49}ว", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -8649,7 +8700,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("sa", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 3599879742736855518, disps: &[ @@ -8796,7 +8847,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("хвилина", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -8921,7 +8972,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("سیکنڈز", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -9039,7 +9090,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("son", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -9151,7 +9202,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("tuần", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], + month_before_day: false, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -9232,7 +9283,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("小", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 106375038446233661, disps: &[ @@ -9330,7 +9381,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("分", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -9410,7 +9461,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("分", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], + month_before_day: true, months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -9510,7 +9561,7 @@ pub(crate) fn entry(lang: Language) -> Entry { ("emahoreni", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: &[DateCmp::D, DateCmp::Y], + month_before_day: true, months: ::phf::Map { key: 2126027241312876569, disps: &[ diff --git a/src/util/timeago.rs b/src/util/timeago.rs index 5ccb4fa..274c653 100644 --- a/src/util/timeago.rs +++ b/src/util/timeago.rs @@ -72,12 +72,6 @@ pub struct TaToken { pub unit: Option, } -pub enum DateCmp { - Y, - M, - D, -} - impl TimeUnit { pub fn secs(self) -> u32 { match self { @@ -207,10 +201,19 @@ impl Iterator for TaTokenParser<'_> { } } -fn parse_textual_month(entry: &dictionary::Entry, filtered_str: &str) -> Option { +fn parse_textual_month(lang: Language, filtered_str: &str) -> Option { + let entry = dictionary::entry(lang); filtered_str .split_whitespace() .find_map(|word| entry.months.get(word).copied()) + .map(|mon| { + // Mongolian has an extra number word that adds 10 to a month + if lang == Language::Mn && filtered_str.split_whitespace().any(|s| s == "арван") { + mon + 10 + } else { + mon + } + }) } /// Parse a TimeAgo string (e.g. "29 minutes ago") into a TimeAgo object. @@ -278,53 +281,49 @@ pub fn parse_textual_date(lang: Language, textual_date: &str) -> Option = None; - let mut m: Option = None; + let mut m = parse_textual_month(lang, &filtered_str).map(u16::from); let mut d: Option = None; - let mut i = 0; - for dc in date_order.iter() { - match dc { - DateCmp::Y => y = Some(nums[i]), - DateCmp::M => m = Some(nums[i]), - DateCmp::D => { - if with_day { - d = Some(nums[i]); - } else { - continue; - } + for num in nums { + if num > 31 { + if y.is_none() { + y = Some(num); + } else { + return None; } + } else if m.is_none() && (entry.month_before_day || d.is_some()) { + m = Some(num); + } else if d.is_none() { + d = Some(num); + } else { + return None; } - i += 1; } - - if m.is_none() { - m = parse_textual_month(&entry, &filtered_str).map(u16::from); + if m.is_none() && d.is_some() { + m = d; + d = None; } match (y, m, d) { - (Some(y), Some(m), d) => Month::try_from(m as u8) + (y, Some(m), d) => Month::try_from(m as u8) .ok() - .and_then(|m| Date::from_calendar_date(y.into(), m, d.unwrap_or(1) as u8).ok()) + .and_then(|m| { + Date::from_calendar_date( + y.map(i32::from) + .unwrap_or_else(|| OffsetDateTime::now_utc().year()), + m, + d.unwrap_or(1) as u8, + ) + .ok() + }) .map(ParsedDate::Absolute), _ => None, } @@ -460,7 +459,7 @@ fn split_duration_txt(txt: &str, start_word: bool) -> Vec { #[cfg(test)] mod tests { - use std::{collections::BTreeMap, fs::File, io::BufReader}; + use std::{collections::BTreeMap, fs::File, io::BufReader, str::FromStr}; use path_macro::path; use rstest::rstest; @@ -911,6 +910,20 @@ mod tests { assert_eq!(parsed_date, expect); } + #[rstest] + #[case(Language::En, "Jan 5", date!(0000-01-05))] + fn t_parse_date_this_year( + #[case] lang: Language, + #[case] textual_date: &str, + #[case] expect: Date, + ) { + let parsed_date = parse_textual_date(lang, textual_date); + let expected_date = expect + .replace_year(OffsetDateTime::now_utc().year()) + .unwrap(); + assert_eq!(parsed_date, Some(ParsedDate::Absolute(expected_date))); + } + #[test] fn t_parse_date_samples() { let json_path = path!(*TESTFILES / "dict" / "playlist_samples.json"); @@ -1008,34 +1021,48 @@ mod tests { #[test] fn t_parse_history_date_samples() { - #[derive(Deserialize)] - struct HistoryDates { - this_week: String, - last_week: String, - } - let json_path = path!(*TESTFILES / "dict" / "history_date_samples.json"); let json_file = File::open(json_path).unwrap(); - let date_samples: BTreeMap = + let date_samples: BTreeMap> = serde_json::from_reader(BufReader::new(json_file)).unwrap(); for (lang, samples) in date_samples { - assert_eq!( - parse_textual_date(lang, &samples.this_week), - Some(ParsedDate::Relative(TimeAgo { - n: 0, - unit: TimeUnit::LastWeek - })), - "lang: {lang}" - ); - assert_eq!( - parse_textual_date(lang, &samples.last_week), - Some(ParsedDate::Relative(TimeAgo { - n: 1, - unit: TimeUnit::LastWeek - })), - "lang: {lang}" - ); + for (k, v) in samples { + let expected = match k.as_str() { + "this_week" => ParsedDate::Relative(TimeAgo { + n: 0, + unit: TimeUnit::LastWeek, + }), + "last_week" => ParsedDate::Relative(TimeAgo { + n: 1, + unit: TimeUnit::LastWeek, + }), + _ => { + if let Ok(wd) = time::Weekday::from_str(&k) { + ParsedDate::Relative(TimeAgo { + n: wd.number_days_from_monday(), + unit: TimeUnit::LastWeekday, + }) + } else { + let mut date_nums = k.split('-'); + let mut y = date_nums.next().unwrap().parse::().unwrap(); + if y == 0 { + y = OffsetDateTime::now_utc().date().year(); + } + let m = date_nums.next().unwrap().parse::().unwrap(); + let d = date_nums.next().unwrap().parse::().unwrap(); + ParsedDate::Absolute( + Date::from_calendar_date(y, m.try_into().unwrap(), d).unwrap(), + ) + } + } + }; + assert_eq!( + parse_textual_date(lang, &v), + Some(expected), + "lang={lang}; {k}" + ); + } } } diff --git a/testfiles/dict/cldr_data/collect_date_order.js b/testfiles/dict/cldr_data/collect_date_order.js new file mode 100644 index 0000000..b715065 --- /dev/null +++ b/testfiles/dict/cldr_data/collect_date_order.js @@ -0,0 +1,59 @@ +const fs = require("fs"); + +const DICT_PATH = "../dictionary.json"; + +function translateLang(lang) { + switch (lang) { + case "iw": // Hebrew + return "he"; + case "zh-CN": // Simplified Chinese + return "zh-Hans"; + case "zh-HK": + return "zh-Hant-HK"; + case "zh-TW": + return "zh-Hant"; + default: + return lang; + } +} + +function isMonthBeforeDay(lang) { + const cldrLang = translateLang(lang); + const dates = require(`cldr-dates-modern/main/${cldrLang}/ca-gregorian.json`); + const dateFields = dates.main[cldrLang].dates.calendars.gregorian; + + const dateFmt = dateFields.dateFormats.short; + const mPos = dateFmt.indexOf("M"); + const dPos = dateFmt.indexOf("d"); + if (mPos < 0 || dPos < 0) throw new Error(`invalid fmt for ${lang}: ${dateFmt}`); + return dPos > mPos; +} + +const dict = JSON.parse(fs.readFileSync(DICT_PATH)); + +for (const [mainLang, entry] of Object.entries(dict)) { + const langs = [mainLang, ...entry["equivalent"]]; + const dateOrder = entry["date_order"]; + const mPos = dateOrder.indexOf("M"); + const dPos = dateOrder.indexOf("D"); + let expectMbd = mPos < 0 || dPos < 0 ? null : dPos > mPos; + + if (mainLang === "en" || mainLang.startsWith("zh-")) { + expectMbd = true; + } else if (mainLang === "fr") + expectMbd = false; + else { + for (lang of langs) { + const mbd = isMonthBeforeDay(lang) + if (expectMbd === null) { + expectMbd = mbd; + } else if (mbd !== expectMbd) { + throw new Error(`unexpected mbd for ${lang}`); + } + } + } + + dict[mainLang]["month_before_day"] = expectMbd; +} + +fs.writeFileSync(DICT_PATH, JSON.stringify(dict, null, 2)); diff --git a/testfiles/dict/cldr_data/collect_day_names.js b/testfiles/dict/cldr_data/collect_day_names.js index ea09c4d..8864ffb 100644 --- a/testfiles/dict/cldr_data/collect_day_names.js +++ b/testfiles/dict/cldr_data/collect_day_names.js @@ -17,27 +17,46 @@ function translateLang(lang) { } } -function collectMonthNames(lang, by_char, monthNames, weekdayNames) { +function collectMonthNames(lang, by_char, monthNames, monthShortNames, weekdayNames) { const cldrLang = translateLang(lang); const dates = require(`cldr-dates-modern/main/${cldrLang}/ca-gregorian.json`); const dateFields = dates.main[cldrLang].dates.calendars.gregorian; const months = dateFields.months["stand-alone"].wide; - for (const [n, name] of Object.entries(months)) { - let name2 = name.toLowerCase(); - if (name2.includes(n)) { - // Some languages dont have named months - console.log(`${lang}: month name '${name2}' includes number; skipped`); - continue; + // Mongolian dates have the extra numbe арван and have to be handled manually + if (!["mn"].includes(lang)) { + for (const [n, name] of Object.entries(months)) { + let name2 = name.toLowerCase(); + if (name2.includes(n)) { + // Some languages dont have named months + console.log(`${lang}: month name '${name2}' includes number; skipped`); + continue; + } + if (/\s/g.test(name2)) { + throw new Error(`${lang}: month name '${name2}' contains whitespace`); + } + monthNames[name2] = parseInt(n); } - if (lang === "mn") { - name2 = name2.replace(" сар", "").replace("арван ", ""); + } + + if (!["bg", "fi", "cs", "iw", "lt", "pt-PT", "sk"].includes(lang)) { + const monthsShort = dateFields.months.format.abbreviated; + for (const [n, name] of Object.entries(monthsShort)) { + let name2 = name.toLowerCase().replaceAll(".", ""); + if (name2.includes(n)) { + // Some languages dont have named months + console.log(`${lang}: month name '${name2}' includes number; skipped`); + continue; + } + if (lang === "ca") { + name2 = name2.replace("de ", ""); + } + if (/\s/g.test(name2)) { + throw new Error(`${lang}: month name '${name2}' contains whitespace`); + } + monthShortNames[name2] = parseInt(n); } - if (/\s/g.test(name2)) { - throw new Error(`${lang}: month name '${name2}' contains whitespace`); - } - monthNames[name2.toLowerCase()] = parseInt(n); } const weekdays = dateFields.days["stand-alone"].wide; @@ -72,12 +91,23 @@ const dict = JSON.parse(fs.readFileSync(DICT_PATH)); for (const [mainLang, entry] of Object.entries(dict)) { const langs = [mainLang, ...entry["equivalent"]]; let monthNames = {}; + let monthShortNames = {}; let weekdayNames = {}; for (lang of langs) { - collectMonthNames(lang, entry["by_char"], monthNames, weekdayNames); + collectMonthNames( + lang, + entry["by_char"], + monthNames, + monthShortNames, + weekdayNames + ); } - dict[mainLang]["months"] = { ...dict[mainLang]["months"], ...monthNames }; + dict[mainLang]["months"] = { + ...dict[mainLang]["months"], + ...monthNames, + ...monthShortNames, + }; dict[mainLang]["timeago_nd_tokens"] = { ...dict[mainLang]["timeago_nd_tokens"], ...weekdayNames, diff --git a/testfiles/dict/dictionary.json b/testfiles/dict/dictionary.json index 9a3c46c..8076997 100644 --- a/testfiles/dict/dictionary.json +++ b/testfiles/dict/dictionary.json @@ -79,7 +79,8 @@ "enkelsnitte": "single" }, "chan_prefix": "deur", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "am": { "equivalent": [], @@ -162,7 +163,8 @@ "ነጠላዎች": "single" }, "chan_prefix": "በ", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "ar": { "equivalent": [], @@ -252,7 +254,8 @@ "أغنية منفردة": "single" }, "chan_prefix": "بواسطة", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "as": { "equivalent": [], @@ -268,17 +271,24 @@ }, "date_order": "DMY", "months": { + "জানু": 1, "জানুৱাৰী": 1, + "ফেব্ৰু": 2, "ফেব্ৰুৱাৰী": 2, "মাৰ্চ": 3, "এপ্ৰিল": 4, "মে’": 5, "জুন": 6, "জুলাই": 7, + "আগ": 8, "আগষ্ট": 8, + "ছেপ্তে": 9, "ছেপ্তেম্বৰ": 9, + "অক্টো": 10, "অক্টোবৰ": 10, + "নৱে": 11, "নৱেম্বৰ": 11, + "ডিচে": 12, "ডিচেম্বৰ": 12 }, "timeago_nd_tokens": { @@ -324,7 +334,8 @@ "এককসমূহ": "single" }, "chan_prefix": "", - "chan_suffix": "ৰ দ্বাৰা" + "chan_suffix": "ৰ দ্বাৰা", + "month_before_day": false }, "az": { "equivalent": [], @@ -397,7 +408,8 @@ "tək": "single" }, "chan_prefix": "by", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "be": { "equivalent": [], @@ -497,7 +509,8 @@ "сінглы": "single" }, "chan_prefix": "ад", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "bg": { "equivalent": [], @@ -571,7 +584,8 @@ "сингъл": "single" }, "chan_prefix": "от", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "bn": { "equivalent": [], @@ -645,7 +659,8 @@ "সিঙ্গেলস": "single" }, "chan_prefix": ",", - "chan_suffix": "দ্বারা" + "chan_suffix": "দ্বারা", + "month_before_day": false }, "bs": { "equivalent": [], @@ -738,7 +753,8 @@ "singlovi": "single" }, "chan_prefix": "od", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "ca": { "equivalent": [], @@ -818,7 +834,8 @@ "singles": "single" }, "chan_prefix": "de:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "cs": { "equivalent": [], @@ -903,7 +920,8 @@ "singly": "single" }, "chan_prefix": "autor:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "da": { "equivalent": [], @@ -983,7 +1001,8 @@ "singler": "single" }, "chan_prefix": "af", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "de": { "equivalent": [], @@ -1009,17 +1028,25 @@ }, "date_order": "DMY", "months": { + "jan": 1, "januar": 1, + "feb": 2, "februar": 2, "märz": 3, + "apr": 4, "april": 4, "mai": 5, "juni": 6, "juli": 7, + "aug": 8, "august": 8, + "sept": 9, "september": 9, + "okt": 10, "oktober": 10, + "nov": 11, "november": 11, + "dez": 12, "dezember": 12 }, "timeago_nd_tokens": { @@ -1053,7 +1080,8 @@ "singles": "single" }, "chan_prefix": "von", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "el": { "equivalent": [], @@ -1139,13 +1167,11 @@ "σινγκλ": "single" }, "chan_prefix": "από το χρήστη", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "en": { - "equivalent": [ - "en-GB", - "en-IN" - ], + "equivalent": ["en-GB", "en-IN"], "by_char": false, "timeago_tokens": { "s": "s", @@ -1237,7 +1263,8 @@ "singles": "single" }, "chan_prefix": "by", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "es": { "equivalent": [], @@ -1320,12 +1347,11 @@ "single": "single" }, "chan_prefix": "de", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "es-US": { - "equivalent": [ - "es-419" - ], + "equivalent": ["es-419"], "by_char": false, "timeago_tokens": { "s": "s", @@ -1406,7 +1432,8 @@ "sencillos": "single" }, "chan_prefix": "de", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "et": { "equivalent": [], @@ -1488,7 +1515,8 @@ "singlid": "single" }, "chan_prefix": "kanalilt", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "eu": { "equivalent": [], @@ -1562,7 +1590,8 @@ "singleak": "single" }, "chan_prefix": "egilea:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "fa": { "equivalent": [], @@ -1628,7 +1657,8 @@ "تک‌آهنگ‌ها": "single" }, "chan_prefix": "توسط", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "fi": { "equivalent": [], @@ -1704,7 +1734,8 @@ "singlet": "single" }, "chan_prefix": "tekijä:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "fil": { "equivalent": [], @@ -1779,12 +1810,11 @@ "single": "single" }, "chan_prefix": "ni/ng", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "fr": { - "equivalent": [ - "fr-CA" - ], + "equivalent": ["fr-CA"], "by_char": false, "timeago_tokens": { "s": "s", @@ -1868,7 +1898,8 @@ "singles": "single" }, "chan_prefix": "de", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "gl": { "equivalent": [], @@ -1948,7 +1979,8 @@ "singles": "single" }, "chan_prefix": "de", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "gu": { "equivalent": [], @@ -2013,7 +2045,8 @@ "સિંગલ": "single" }, "chan_prefix": "", - "chan_suffix": "દ્વારા" + "chan_suffix": "દ્વારા", + "month_before_day": false }, "hi": { "equivalent": [], @@ -2087,7 +2120,8 @@ "सिंगल": "single" }, "chan_prefix": "", - "chan_suffix": "के ज़रिए" + "chan_suffix": "के ज़रिए", + "month_before_day": false }, "hr": { "equivalent": [], @@ -2180,7 +2214,8 @@ "singlovi": "single" }, "chan_prefix": "omogućio kanal", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "hu": { "equivalent": [], @@ -2265,7 +2300,8 @@ "kislemezek": "single" }, "chan_prefix": "", - "chan_suffix": "csatornától" + "chan_suffix": "csatornától", + "month_before_day": true }, "hy": { "equivalent": [], @@ -2344,7 +2380,8 @@ "սինգլներ": "single" }, "chan_prefix": "հեղինակ՝", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "id": { "equivalent": [], @@ -2420,7 +2457,8 @@ "single": "single" }, "chan_prefix": "oleh", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "is": { "equivalent": [], @@ -2509,7 +2547,8 @@ "smáskífur": "single" }, "chan_prefix": "eftir", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "it": { "equivalent": [], @@ -2596,7 +2635,8 @@ "singolo": "single" }, "chan_prefix": "di", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "iw": { "equivalent": [], @@ -2688,7 +2728,8 @@ "סינגלים": "single" }, "chan_prefix": "מאת", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "ja": { "equivalent": [], @@ -2731,7 +2772,8 @@ "シングル": "single" }, "chan_prefix": "作成者:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "ka": { "equivalent": [], @@ -2810,7 +2852,8 @@ "სინგლი": "single" }, "chan_prefix": "", - "chan_suffix": "-ის მიერ" + "chan_suffix": "-ის მიერ", + "month_before_day": false }, "kk": { "equivalent": [], @@ -2890,7 +2933,8 @@ "синглдер": "single" }, "chan_prefix": "қосқан", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "km": { "equivalent": [], @@ -2951,7 +2995,8 @@ "ចម្រៀងទោល": "single" }, "chan_prefix": "ដោយ", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "kn": { "equivalent": [], @@ -3033,7 +3078,8 @@ "ಸಿಂಗಲ್ಸ್": "single" }, "chan_prefix": "", - "chan_suffix": "ಚಾನಲ್‌ನಿಂದ" + "chan_suffix": "ಚಾನಲ್‌ನಿಂದ", + "month_before_day": false }, "ko": { "equivalent": [], @@ -3079,7 +3125,8 @@ "싱글": "single" }, "chan_prefix": "게시자:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "ky": { "equivalent": [], @@ -3155,7 +3202,8 @@ "синглдар": "single" }, "chan_prefix": "", - "chan_suffix": "каналы аркылуу" + "chan_suffix": "каналы аркылуу", + "month_before_day": false }, "lo": { "equivalent": [], @@ -3238,7 +3286,8 @@ "ຜົນງານເພງ": "single" }, "chan_prefix": "ໂດຍ", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "lt": { "equivalent": [], @@ -3327,7 +3376,8 @@ "singlas": "single" }, "chan_prefix": "pridėjo", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "lv": { "equivalent": [], @@ -3416,7 +3466,8 @@ "singls": "single" }, "chan_prefix": "autors:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "mk": { "equivalent": [], @@ -3442,17 +3493,28 @@ }, "date_order": "DMY", "months": { + "јан": 1, "јануари": 1, + "фев": 2, "февруари": 2, + "мар": 3, "март": 3, + "апр": 4, "април": 4, "мај": 5, + "јун": 6, "јуни": 6, + "јул": 7, "јули": 7, + "авг": 8, "август": 8, + "сеп": 9, "септември": 9, + "окт": 10, "октомври": 10, + "ное": 11, "ноември": 11, + "дек": 12, "декември": 12 }, "timeago_nd_tokens": { @@ -3488,7 +3550,8 @@ "синглови": "single" }, "chan_prefix": "од", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "ml": { "equivalent": [], @@ -3560,7 +3623,8 @@ "സിംഗിൾസ്": "single" }, "chan_prefix": "", - "chan_suffix": "മുഖേന" + "chan_suffix": "മുഖേന", + "month_before_day": false }, "mn": { "equivalent": [], @@ -3582,6 +3646,8 @@ }, "date_order": "YMD", "months": { + "нэгдүгээр": 1, + "хоёрдугаар": 2, "гуравдугаар": 3, "дөрөвдүгээр": 4, "тавдугаар": 5, @@ -3589,9 +3655,7 @@ "долоодугаар": 7, "наймдугаар": 8, "есдүгээр": 9, - "аравдугаар": 10, - "нэгдүгээр": 11, - "хоёрдугаар": 12 + "аравдугаар": 10 }, "timeago_nd_tokens": { "өнөөдөр": "0D", @@ -3624,7 +3688,8 @@ "синглүүд": "single" }, "chan_prefix": "сувгийн нэр:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "mr": { "equivalent": [], @@ -3706,7 +3771,8 @@ "सिंगल": "single" }, "chan_prefix": "", - "chan_suffix": "द्वारे" + "chan_suffix": "द्वारे", + "month_before_day": false }, "ms": { "equivalent": [], @@ -3777,7 +3843,8 @@ "rekod single": "single" }, "chan_prefix": "oleh", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "my": { "equivalent": [], @@ -3854,7 +3921,8 @@ "တစ်ပုဒ်ချင်းများ": "single" }, "chan_prefix": "", - "chan_suffix": "မှ" + "chan_suffix": "မှ", + "month_before_day": false }, "ne": { "equivalent": [], @@ -3917,7 +3985,8 @@ "एकल एल्बमहरू": "single" }, "chan_prefix": "", - "chan_suffix": "द्वारा" + "chan_suffix": "द्वारा", + "month_before_day": true }, "nl": { "equivalent": [], @@ -3996,7 +4065,8 @@ "singles": "single" }, "chan_prefix": "door", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "no": { "equivalent": [], @@ -4080,7 +4150,8 @@ "singler": "single" }, "chan_prefix": "av", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "or": { "equivalent": [], @@ -4153,7 +4224,8 @@ "ସିଙ୍ଗଲ୍": "single" }, "chan_prefix": "", - "chan_suffix": "ଦ୍ଵାରା" + "chan_suffix": "ଦ୍ଵାରା", + "month_before_day": true }, "pa": { "equivalent": [], @@ -4226,7 +4298,8 @@ "ਸਿੰਗਲ": "single" }, "chan_prefix": "", - "chan_suffix": "ਵੱਲੋਂ" + "chan_suffix": "ਵੱਲੋਂ", + "month_before_day": false }, "pl": { "equivalent": [], @@ -4324,7 +4397,8 @@ "single": "single" }, "chan_prefix": "autor:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "pt": { "equivalent": [], @@ -4409,7 +4483,8 @@ "singles": "single" }, "chan_prefix": "por", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "pt-PT": { "equivalent": [], @@ -4479,7 +4554,8 @@ "singles": "single" }, "chan_prefix": "de", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "ro": { "equivalent": [], @@ -4563,7 +4639,8 @@ "single-uri": "single" }, "chan_prefix": "de", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "ru": { "equivalent": [], @@ -4659,7 +4736,8 @@ "синглы": "single" }, "chan_prefix": "", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "si": { "equivalent": [], @@ -4729,7 +4807,8 @@ "තනි": "single" }, "chan_prefix": "", - "chan_suffix": "විසින්" + "chan_suffix": "විසින්", + "month_before_day": true }, "sk": { "equivalent": [], @@ -4814,7 +4893,8 @@ "single": "single" }, "chan_prefix": "Autori:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "sl": { "equivalent": [], @@ -4915,7 +4995,8 @@ "singli": "single" }, "chan_prefix": "kanal", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "sq": { "equivalent": [], @@ -4992,7 +5073,8 @@ "single": "single" }, "chan_prefix": "nga", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "sr": { "equivalent": [], @@ -5023,17 +5105,26 @@ }, "date_order": "DMY", "months": { + "јан": 1, "јануар": 1, + "феб": 2, "фебруар": 2, + "мар": 3, "март": 3, + "апр": 4, "април": 4, "мај": 5, "јун": 6, "јул": 7, + "авг": 8, "август": 8, + "сеп": 9, "септембар": 9, + "окт": 10, "октобар": 10, + "нов": 11, "новембар": 11, + "дец": 12, "децембар": 12 }, "timeago_nd_tokens": { @@ -5068,7 +5159,8 @@ "синглови": "single" }, "chan_prefix": "са канала", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "sr-Latn": { "equivalent": [], @@ -5099,17 +5191,26 @@ }, "date_order": "DMY", "months": { + "jan": 1, "januar": 1, + "feb": 2, "februar": 2, + "mar": 3, "mart": 3, + "apr": 4, "april": 4, "maj": 5, "jun": 6, "jul": 7, + "avg": 8, "avgust": 8, + "sep": 9, "septembar": 9, + "okt": 10, "oktobar": 10, + "nov": 11, "novembar": 11, + "dec": 12, "decembar": 12 }, "timeago_nd_tokens": { @@ -5144,7 +5245,8 @@ "singlovi": "single" }, "chan_prefix": "sa kanala", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "sv": { "equivalent": [], @@ -5223,7 +5325,8 @@ "singlar": "single" }, "chan_prefix": "från", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "sw": { "equivalent": [], @@ -5295,7 +5398,8 @@ "singo": "single" }, "chan_prefix": "kutoka", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "ta": { "equivalent": [], @@ -5380,7 +5484,8 @@ "சிங்கிள்ஸ்": "single" }, "chan_prefix": "வழங்கியவர்:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "te": { "equivalent": [], @@ -5463,7 +5568,8 @@ "సింగిల్స్": "single" }, "chan_prefix": "", - "chan_suffix": "ఛానెల్ ద్వారా" + "chan_suffix": "ఛానెల్ ద్వారా", + "month_before_day": false }, "th": { "equivalent": [], @@ -5549,7 +5655,8 @@ "ซิงเกิล": "single" }, "chan_prefix": "โดย", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "tr": { "equivalent": [], @@ -5626,7 +5733,8 @@ "single'lar": "single" }, "chan_prefix": "", - "chan_suffix": "tarafından" + "chan_suffix": "tarafından", + "month_before_day": false }, "uk": { "equivalent": [], @@ -5727,7 +5835,8 @@ "сингли": "single" }, "chan_prefix": "власник:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "ur": { "equivalent": [], @@ -5809,7 +5918,8 @@ "واحد": "single" }, "chan_prefix": "منجانب", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "uz": { "equivalent": [], @@ -5881,7 +5991,8 @@ "singllar": "single" }, "chan_prefix": "muallif:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "vi": { "equivalent": [], @@ -5925,7 +6036,8 @@ "đĩa đơn": "single" }, "chan_prefix": "của", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": false }, "zh-CN": { "equivalent": [], @@ -5983,7 +6095,8 @@ "单曲": "single" }, "chan_prefix": "创建者:", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "zh-HK": { "equivalent": [], @@ -6027,7 +6140,8 @@ "單曲": "single" }, "chan_prefix": "來自", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true }, "zh-TW": { "equivalent": [], @@ -6070,7 +6184,8 @@ "單曲": "single" }, "chan_prefix": "由", - "chan_suffix": "建立" + "chan_suffix": "建立", + "month_before_day": true }, "zu": { "equivalent": [], @@ -6160,6 +6275,7 @@ "i-single": "single" }, "chan_prefix": "ka-", - "chan_suffix": "" + "chan_suffix": "", + "month_before_day": true } } diff --git a/testfiles/dict/history_date_samples.json b/testfiles/dict/history_date_samples.json index 0d6668c..9576fef 100644 --- a/testfiles/dict/history_date_samples.json +++ b/testfiles/dict/history_date_samples.json @@ -1,334 +1,1662 @@ { "af": { + "0000-01-06": "6 Jan.", + "2021-03-01": "Maart 2021", + "2021-04-01": "April 2021", + "2022-08-01": "Augustus 2022", + "2022-10-01": "Oktober 2022", + "2022-11-01": "November 2022", + "2023-05-01": "Mei 2023", + "2023-06-01": "Junie 2023", + "2023-07-01": "Julie 2023", + "2024-12-01": "Desember 2024", + "2024-12-28": "28 Des. 2024", + "2025-01-01": "Januarie 2025", + "last_week": "Verlede week", + "Monday": "Maandag", "this_week": "Vandeesweek", - "last_week": "Verlede week" + "Thursday": "Donderdag", + "Tuesday": "Dinsdag", + "Wednesday": "Woensdag" }, "am": { + "0000-01-06": "ጃን 6", + "2021-03-01": "ማርች 2021", + "2021-04-01": "ኤፕሪል 2021", + "2022-08-01": "ኦገስት 2022", + "2022-10-01": "ኦክቶበር 2022", + "2022-11-01": "ኖቬምበር 2022", + "2023-05-01": "ሜይ 2023", + "2023-06-01": "ጁን 2023", + "2023-07-01": "ጁላይ 2023", + "2024-12-01": "ዲሴምበር 2024", + "2024-12-28": "28 ዲሴም 2024", + "2025-01-01": "ጃንዋሪ 2025", + "last_week": "ያለፈው ሳምንት", + "Monday": "ሰኞ", "this_week": "በዚህ ሳምንት", - "last_week": "ያለፈው ሳምንት" + "Thursday": "ሐሙስ", + "Tuesday": "ማክሰኞ", + "Wednesday": "ረቡዕ" }, "ar": { + "0000-01-06": "6 يناير", + "2021-03-01": "مارس 2021", + "2021-04-01": "أبريل 2021", + "2022-08-01": "أغسطس 2022", + "2022-10-01": "أكتوبر 2022", + "2022-11-01": "نوفمبر 2022", + "2023-05-01": "مايو 2023", + "2023-06-01": "يونيو 2023", + "2023-07-01": "يوليو 2023", + "2024-12-01": "ديسمبر 2024", + "2024-12-28": "28‏/12‏/2024", + "2025-01-01": "يناير 2025", + "last_week": "الأسبوع الماضي", + "Monday": "الاثنين", "this_week": "هذا الأسبوع", - "last_week": "الأسبوع الماضي" + "Thursday": "الخميس", + "Tuesday": "الثلاثاء", + "Wednesday": "الأربعاء" }, "as": { + "0000-01-06": "6 জানু", + "2021-03-01": "মাৰ্চ 2021", + "2021-04-01": "এপ্ৰিল 2021", + "2022-08-01": "আগষ্ট 2022", + "2022-10-01": "অক্টোবৰ 2022", + "2022-11-01": "নৱেম্বৰ 2022", + "2023-05-01": "মে’ 2023", + "2023-06-01": "জুন 2023", + "2023-07-01": "জুলাই 2023", + "2024-12-01": "ডিচেম্বৰ 2024", + "2024-12-28": "28-12-2024", + "2025-01-01": "জানুৱাৰী 2025", + "last_week": "যোৱা সপ্তাহৰ", + "Monday": "সোমবাৰ", "this_week": "এই সপ্তাহৰ", - "last_week": "যোৱা সপ্তাহৰ" + "Thursday": "বৃহস্পতিবাৰ", + "Tuesday": "মঙ্গলবাৰ", + "Wednesday": "বুধবাৰ" }, "az": { + "0000-01-06": "6 yan", + "2021-03-01": "mart 2021", + "2021-04-01": "aprel 2021", + "2022-08-01": "avqust 2022", + "2022-10-01": "oktyabr 2022", + "2022-11-01": "noyabr 2022", + "2023-05-01": "may 2023", + "2023-06-01": "iyun 2023", + "2023-07-01": "iyul 2023", + "2024-12-01": "dekabr 2024", + "2024-12-28": "28 dek 2024", + "2025-01-01": "yanvar 2025", + "last_week": "Ötən həftə", + "Monday": "bazar ertəsi", "this_week": "Bu həftə", - "last_week": "Ötən həftə" + "Thursday": "cümə axşamı", + "Tuesday": "çərşənbə axşamı", + "Wednesday": "çərşənbə" }, "be": { + "0000-01-06": "6 сту", + "2021-03-01": "сакавік 2021", + "2021-04-01": "красавік 2021", + "2022-08-01": "жнівень 2022", + "2022-10-01": "кастрычнік 2022", + "2022-11-01": "лістапад 2022", + "2023-05-01": "май 2023", + "2023-06-01": "чэрвень 2023", + "2023-07-01": "ліпень 2023", + "2024-12-01": "снежань 2024", + "2024-12-28": "28 сне 2024 г.", + "2025-01-01": "студзень 2025", + "last_week": "На мінулым тыдні", + "Monday": "панядзелак", "this_week": "На гэтым тыдні", - "last_week": "На мінулым тыдні" + "Thursday": "чацвер", + "Tuesday": "аўторак", + "Wednesday": "серада" }, "bg": { + "0000-01-06": "6.01", + "2021-03-01": "март 2021 г.", + "2021-04-01": "април 2021 г.", + "2022-08-01": "август 2022 г.", + "2022-10-01": "октомври 2022 г.", + "2022-11-01": "ноември 2022 г.", + "2023-05-01": "май 2023 г.", + "2023-06-01": "юни 2023 г.", + "2023-07-01": "юли 2023 г.", + "2024-12-01": "декември 2024 г.", + "2024-12-28": "28.12.2024 г.", + "2025-01-01": "януари 2025 г.", + "last_week": "Последната седмица", + "Monday": "понеделник", "this_week": "Тази седмица", - "last_week": "Последната седмица" + "Thursday": "четвъртък", + "Tuesday": "вторник", + "Wednesday": "сряда" }, "bn": { + "0000-01-06": "6 জানু", + "2021-03-01": "মার্চ 2021", + "2021-04-01": "এপ্রিল 2021", + "2022-08-01": "আগস্ট 2022", + "2022-10-01": "অক্টোবর 2022", + "2022-11-01": "নভেম্বর 2022", + "2023-05-01": "মে 2023", + "2023-06-01": "জুন 2023", + "2023-07-01": "জুলাই 2023", + "2024-12-01": "ডিসেম্বর 2024", + "2024-12-28": "28 ডিসে, 2024", + "2025-01-01": "জানুয়ারী 2025", + "last_week": "গত সপ্তাহ", + "Monday": "সোমবার", "this_week": "এই সপ্তাহে", - "last_week": "গত সপ্তাহ" + "Thursday": "বৃহস্পতিবার", + "Tuesday": "মঙ্গলবার", + "Wednesday": "বুধবার" }, "bs": { + "0000-01-06": "6. jan", + "2021-03-01": "mart 2021.", + "2021-04-01": "april 2021.", + "2022-08-01": "august 2022.", + "2022-10-01": "oktobar 2022.", + "2022-11-01": "novembar 2022.", + "2023-05-01": "maj 2023.", + "2023-06-01": "juni 2023.", + "2023-07-01": "juli 2023.", + "2024-12-01": "decembar 2024.", + "2024-12-28": "28. dec 2024.", + "2025-01-01": "januar 2025.", + "last_week": "Prošla sedmica", + "Monday": "ponedjeljak", "this_week": "Ova sedmica", - "last_week": "Prošla sedmica" + "Thursday": "četvrtak", + "Tuesday": "utorak", + "Wednesday": "srijeda" }, "ca": { + "0000-01-06": "6 de gen.", + "2021-03-01": "març del 2021", + "2021-04-01": "abril del 2021", + "2022-08-01": "agost del 2022", + "2022-10-01": "octubre del 2022", + "2022-11-01": "novembre del 2022", + "2023-05-01": "maig del 2023", + "2023-06-01": "juny del 2023", + "2023-07-01": "juliol del 2023", + "2024-12-01": "desembre del 2024", + "2024-12-28": "28 de des. 2024", + "2025-01-01": "gener del 2025", + "last_week": "La setmana passada", + "Monday": "dilluns", "this_week": "Aquesta setmana", - "last_week": "La setmana passada" + "Thursday": "dijous", + "Tuesday": "dimarts", + "Wednesday": "dimecres" }, "cs": { + "0000-01-06": "6. 1.", + "2021-03-01": "březen 2021", + "2021-04-01": "duben 2021", + "2022-08-01": "srpen 2022", + "2022-10-01": "říjen 2022", + "2022-11-01": "listopad 2022", + "2023-05-01": "květen 2023", + "2023-06-01": "červen 2023", + "2023-07-01": "červenec 2023", + "2024-12-01": "prosinec 2024", + "2024-12-28": "28. 12. 2024", + "2025-01-01": "leden 2025", + "last_week": "Minulý týden", + "Monday": "pondělí", "this_week": "Tento týden", - "last_week": "Minulý týden" + "Thursday": "čtvrtek", + "Tuesday": "úterý", + "Wednesday": "středa" }, "da": { + "0000-01-06": "6. jan.", + "2021-03-01": "marts 2021", + "2021-04-01": "april 2021", + "2022-08-01": "august 2022", + "2022-10-01": "oktober 2022", + "2022-11-01": "november 2022", + "2023-05-01": "maj 2023", + "2023-06-01": "juni 2023", + "2023-07-01": "juli 2023", + "2024-12-01": "december 2024", + "2024-12-28": "28. dec. 2024", + "2025-01-01": "januar 2025", + "last_week": "Sidste uge", + "Monday": "mandag", "this_week": "Denne uge", - "last_week": "Sidste uge" + "Thursday": "torsdag", + "Tuesday": "tirsdag", + "Wednesday": "onsdag" }, "de": { + "0000-01-06": "6. Jan.", + "2021-03-01": "März 2021", + "2021-04-01": "April 2021", + "2022-08-01": "August 2022", + "2022-10-01": "Oktober 2022", + "2022-11-01": "November 2022", + "2023-05-01": "Mai 2023", + "2023-06-01": "Juni 2023", + "2023-07-01": "Juli 2023", + "2024-12-01": "Dezember 2024", + "2024-12-28": "28.12.2024", + "2025-01-01": "Januar 2025", + "last_week": "Letzte Woche", + "Monday": "Montag", "this_week": "Diese Woche", - "last_week": "Letzte Woche" + "Thursday": "Donnerstag", + "Tuesday": "Dienstag", + "Wednesday": "Mittwoch" }, "el": { + "0000-01-06": "6 Ιαν", + "2021-03-01": "Μάρτιος 2021", + "2021-04-01": "Απρίλιος 2021", + "2022-08-01": "Αύγουστος 2022", + "2022-10-01": "Οκτώβριος 2022", + "2022-11-01": "Νοέμβριος 2022", + "2023-05-01": "Μάιος 2023", + "2023-06-01": "Ιούνιος 2023", + "2023-07-01": "Ιούλιος 2023", + "2024-12-01": "Δεκέμβριος 2024", + "2024-12-28": "28 Δεκ 2024", + "2025-01-01": "Ιανουάριος 2025", + "last_week": "Τελευταία εβδομάδα", + "Monday": "Δευτέρα", "this_week": "Αυτήν την εβδομάδα", - "last_week": "Τελευταία εβδομάδα" + "Thursday": "Πέμπτη", + "Tuesday": "Τρίτη", + "Wednesday": "Τετάρτη" }, "en": { + "0000-01-06": "Jan 6", + "2021-03-01": "March 2021", + "2021-04-01": "April 2021", + "2022-08-01": "August 2022", + "2022-10-01": "October 2022", + "2022-11-01": "November 2022", + "2023-05-01": "May 2023", + "2023-06-01": "June 2023", + "2023-07-01": "July 2023", + "2024-12-01": "December 2024", + "2024-12-28": "Dec 28, 2024", + "2025-01-01": "January 2025", + "last_week": "Last week", + "Monday": "Monday", "this_week": "This week", - "last_week": "Last week" + "Thursday": "Thursday", + "Tuesday": "Tuesday", + "Wednesday": "Wednesday" }, "en-GB": { + "0000-01-06": "6 Jan", + "2021-03-01": "March 2021", + "2021-04-01": "April 2021", + "2022-08-01": "August 2022", + "2022-10-01": "October 2022", + "2022-11-01": "November 2022", + "2023-05-01": "May 2023", + "2023-06-01": "June 2023", + "2023-07-01": "July 2023", + "2024-12-01": "December 2024", + "2024-12-28": "28 Dec 2024", + "2025-01-01": "January 2025", + "last_week": "Last week", + "Monday": "Monday", "this_week": "This week", - "last_week": "Last week" + "Thursday": "Thursday", + "Tuesday": "Tuesday", + "Wednesday": "Wednesday" }, "en-IN": { + "0000-01-06": "6 Jan", + "2021-03-01": "March 2021", + "2021-04-01": "April 2021", + "2022-08-01": "August 2022", + "2022-10-01": "October 2022", + "2022-11-01": "November 2022", + "2023-05-01": "May 2023", + "2023-06-01": "June 2023", + "2023-07-01": "July 2023", + "2024-12-01": "December 2024", + "2024-12-28": "28 Dec 2024", + "2025-01-01": "January 2025", + "last_week": "Last week", + "Monday": "Monday", "this_week": "This week", - "last_week": "Last week" + "Thursday": "Thursday", + "Tuesday": "Tuesday", + "Wednesday": "Wednesday" }, "es": { + "0000-01-06": "6 ene", + "2021-03-01": "Marzo de 2021", + "2021-04-01": "Abril de 2021", + "2022-08-01": "Agosto de 2022", + "2022-10-01": "Octubre de 2022", + "2022-11-01": "Noviembre de 2022", + "2023-05-01": "Mayo de 2023", + "2023-06-01": "Junio de 2023", + "2023-07-01": "Julio de 2023", + "2024-12-01": "Diciembre de 2024", + "2024-12-28": "28 dic 2024", + "2025-01-01": "Enero de 2025", + "last_week": "La semana pasada", + "Monday": "Lunes", "this_week": "Esta semana", - "last_week": "La semana pasada" + "Thursday": "Jueves", + "Tuesday": "Martes", + "Wednesday": "Miércoles" }, "es-419": { + "0000-01-06": "6 ene", + "2021-03-01": "Marzo de 2021", + "2021-04-01": "Abril de 2021", + "2022-08-01": "Agosto de 2022", + "2022-10-01": "Octubre de 2022", + "2022-11-01": "Noviembre de 2022", + "2023-05-01": "Mayo de 2023", + "2023-06-01": "Junio de 2023", + "2023-07-01": "Julio de 2023", + "2024-12-01": "Diciembre de 2024", + "2024-12-28": "28 dic 2024", + "2025-01-01": "Enero de 2025", + "last_week": "La semana pasada", + "Monday": "Lunes", "this_week": "Esta semana", - "last_week": "La semana pasada" + "Thursday": "Jueves", + "Tuesday": "Martes", + "Wednesday": "Miércoles" }, "es-US": { + "0000-01-06": "6 ene", + "2021-03-01": "Marzo de 2021", + "2021-04-01": "Abril de 2021", + "2022-08-01": "Agosto de 2022", + "2022-10-01": "Octubre de 2022", + "2022-11-01": "Noviembre de 2022", + "2023-05-01": "Mayo de 2023", + "2023-06-01": "Junio de 2023", + "2023-07-01": "Julio de 2023", + "2024-12-01": "Diciembre de 2024", + "2024-12-28": "28 dic 2024", + "2025-01-01": "Enero de 2025", + "last_week": "La semana pasada", + "Monday": "Lunes", "this_week": "Esta semana", - "last_week": "La semana pasada" + "Thursday": "Jueves", + "Tuesday": "Martes", + "Wednesday": "Miércoles" }, "et": { + "0000-01-06": "6. jaan", + "2021-03-01": "märts 2021", + "2021-04-01": "aprill 2021", + "2022-08-01": "august 2022", + "2022-10-01": "oktoober 2022", + "2022-11-01": "november 2022", + "2023-05-01": "mai 2023", + "2023-06-01": "juuni 2023", + "2023-07-01": "juuli 2023", + "2024-12-01": "detsember 2024", + "2024-12-28": "28. dets 2024", + "2025-01-01": "jaanuar 2025", + "last_week": "Eelmisel nädalal", + "Monday": "esmaspäev", "this_week": "Sellel nädalal", - "last_week": "Eelmisel nädalal" + "Thursday": "neljapäev", + "Tuesday": "teisipäev", + "Wednesday": "kolmapäev" }, "eu": { + "0000-01-06": "urt. 6(a)", + "2021-03-01": "2021(e)ko martxoa", + "2021-04-01": "2021(e)ko apirila", + "2022-08-01": "2022(e)ko abuztua", + "2022-10-01": "2022(e)ko urria", + "2022-11-01": "2022(e)ko azaroa", + "2023-05-01": "2023(e)ko maiatza", + "2023-06-01": "2023(e)ko ekaina", + "2023-07-01": "2023(e)ko uztaila", + "2024-12-01": "2024(e)ko abendua", + "2024-12-28": "2024(e)ko abe. 28(a)", + "2025-01-01": "2025(e)ko urtarrila", + "last_week": "Joan den astea", + "Monday": "astelehena", "this_week": "Aste hau", - "last_week": "Joan den astea" + "Thursday": "osteguna", + "Tuesday": "asteartea", + "Wednesday": "asteazkena" }, "fa": { + "0000-01-06": "6 ژانویه", + "2021-03-01": "مارس 2021", + "2021-04-01": "آوریل 2021", + "2022-08-01": "اوت 2022", + "2022-10-01": "اکتبر 2022", + "2022-11-01": "نوامبر 2022", + "2023-05-01": "مهٔ 2023", + "2023-06-01": "ژوئن 2023", + "2023-07-01": "ژوئیهٔ 2023", + "2024-12-01": "دسامبر 2024", + "2024-12-28": "28 دسامبر 2024", + "2025-01-01": "ژانویهٔ 2025", + "last_week": "هفته قبل", + "Monday": "دوشنبه", "this_week": "این هفته", - "last_week": "هفته قبل" + "Thursday": "پنجشنبه", + "Tuesday": "سه‌شنبه", + "Wednesday": "چهارشنبه" }, "fi": { + "0000-01-06": "6.1.", + "2021-03-01": "maaliskuu 2021", + "2021-04-01": "huhtikuu 2021", + "2022-08-01": "elokuu 2022", + "2022-10-01": "lokakuu 2022", + "2022-11-01": "marraskuu 2022", + "2023-05-01": "toukokuu 2023", + "2023-06-01": "kesäkuu 2023", + "2023-07-01": "heinäkuu 2023", + "2024-12-01": "joulukuu 2024", + "2024-12-28": "28.12.2024", + "2025-01-01": "tammikuu 2025", + "last_week": "Viime viikolla", + "Monday": "maanantai", "this_week": "Tällä viikolla", - "last_week": "Viime viikolla" + "Thursday": "torstai", + "Tuesday": "tiistai", + "Wednesday": "keskiviikko" }, "fil": { + "0000-01-06": "Ene 6", + "2021-03-01": "Marso 2021", + "2021-04-01": "Abril 2021", + "2022-08-01": "Agosto 2022", + "2022-10-01": "Oktubre 2022", + "2022-11-01": "Nobyembre 2022", + "2023-05-01": "Mayo 2023", + "2023-06-01": "Hunyo 2023", + "2023-07-01": "Hulyo 2023", + "2024-12-01": "Disyembre 2024", + "2024-12-28": "Dis 28, 2024", + "2025-01-01": "Enero 2025", + "last_week": "Nakaraang linggo", + "Monday": "Lunes", "this_week": "Ngayong linggo", - "last_week": "Nakaraang linggo" + "Thursday": "Huwebes", + "Tuesday": "Martes", + "Wednesday": "Miyerkules" }, "fr": { + "0000-01-06": "6 janv.", + "2021-03-01": "Mars 2021", + "2021-04-01": "Avril 2021", + "2022-08-01": "Août 2022", + "2022-10-01": "Octobre 2022", + "2022-11-01": "Novembre 2022", + "2023-05-01": "Mai 2023", + "2023-06-01": "Juin 2023", + "2023-07-01": "Juillet 2023", + "2024-12-01": "Décembre 2024", + "2024-12-28": "28 déc. 2024", + "2025-01-01": "Janvier 2025", + "last_week": "La semaine dernière", + "Monday": "Lundi", "this_week": "Cette semaine", - "last_week": "La semaine dernière" + "Thursday": "Jeudi", + "Tuesday": "Mardi", + "Wednesday": "Mercredi" }, "fr-CA": { + "0000-01-06": "6 janv.", + "2021-03-01": "Mars 2021", + "2021-04-01": "Avril 2021", + "2022-08-01": "Août 2022", + "2022-10-01": "Octobre 2022", + "2022-11-01": "Novembre 2022", + "2023-05-01": "Mai 2023", + "2023-06-01": "Juin 2023", + "2023-07-01": "Juillet 2023", + "2024-12-01": "Décembre 2024", + "2024-12-28": "28 déc. 2024", + "2025-01-01": "Janvier 2025", + "last_week": "La semaine dernière", + "Monday": "Lundi", "this_week": "Cette semaine", - "last_week": "La semaine dernière" + "Thursday": "Jeudi", + "Tuesday": "Mardi", + "Wednesday": "Mercredi" }, "gl": { + "0000-01-06": "6 de xan.", + "2021-03-01": "marzo de 2021", + "2021-04-01": "abril de 2021", + "2022-08-01": "agosto de 2022", + "2022-10-01": "outubro de 2022", + "2022-11-01": "novembro de 2022", + "2023-05-01": "maio de 2023", + "2023-06-01": "xuño de 2023", + "2023-07-01": "xullo de 2023", + "2024-12-01": "decembro de 2024", + "2024-12-28": "28 de dec. de 2024", + "2025-01-01": "xaneiro de 2025", + "last_week": "A semana pasada", + "Monday": "luns", "this_week": "Esta semana", - "last_week": "A semana pasada" + "Thursday": "xoves", + "Tuesday": "martes", + "Wednesday": "mércores" }, "gu": { + "0000-01-06": "6 જાન્યુ", + "2021-03-01": "માર્ચ 2021", + "2021-04-01": "એપ્રિલ 2021", + "2022-08-01": "ઑગસ્ટ 2022", + "2022-10-01": "ઑક્ટોબર 2022", + "2022-11-01": "નવેમ્બર 2022", + "2023-05-01": "મે 2023", + "2023-06-01": "જૂન 2023", + "2023-07-01": "જુલાઈ 2023", + "2024-12-01": "ડિસેમ્બર 2024", + "2024-12-28": "28 ડિસે, 2024", + "2025-01-01": "જાન્યુઆરી 2025", + "last_week": "છેલ્લું અઠવાડિયું", + "Monday": "સોમવાર", "this_week": "આ અઠવાડિયે", - "last_week": "છેલ્લું અઠવાડિયું" + "Thursday": "ગુરુવાર", + "Tuesday": "મંગળવાર", + "Wednesday": "બુધવાર" }, "hi": { + "0000-01-06": "6 जन॰", + "2021-03-01": "मार्च 2021", + "2021-04-01": "अप्रैल 2021", + "2022-08-01": "अगस्त 2022", + "2022-10-01": "अक्टूबर 2022", + "2022-11-01": "नवंबर 2022", + "2023-05-01": "मई 2023", + "2023-06-01": "जून 2023", + "2023-07-01": "जुलाई 2023", + "2024-12-01": "दिसंबर 2024", + "2024-12-28": "28 दिस॰ 2024", + "2025-01-01": "जनवरी 2025", + "last_week": "पिछले हफ़्ते", + "Monday": "सोमवार", "this_week": "इस हफ़्ते", - "last_week": "पिछले हफ़्ते" + "Thursday": "गुरुवार", + "Tuesday": "मंगलवार", + "Wednesday": "बुधवार" }, "hr": { + "0000-01-06": "6. sij", + "2021-03-01": "ožujak 2021.", + "2021-04-01": "travanj 2021.", + "2022-08-01": "kolovoz 2022.", + "2022-10-01": "listopad 2022.", + "2022-11-01": "studeni 2022.", + "2023-05-01": "svibanj 2023.", + "2023-06-01": "lipanj 2023.", + "2023-07-01": "srpanj 2023.", + "2024-12-01": "prosinac 2024.", + "2024-12-28": "28. pro 2024.", + "2025-01-01": "siječanj 2025.", + "last_week": "Prošli tjedan", + "Monday": "ponedjeljak", "this_week": "Ovaj tjedan", - "last_week": "Prošli tjedan" + "Thursday": "četvrtak", + "Tuesday": "utorak", + "Wednesday": "srijeda" }, "hu": { + "0000-01-06": "jan. 6.", + "2021-03-01": "2021. március", + "2021-04-01": "2021. április", + "2022-08-01": "2022. augusztus", + "2022-10-01": "2022. október", + "2022-11-01": "2022. november", + "2023-05-01": "2023. május", + "2023-06-01": "2023. június", + "2023-07-01": "2023. július", + "2024-12-01": "2024. december", + "2024-12-28": "2024. dec. 28.", + "2025-01-01": "2025. január", + "last_week": "Múlt héten", + "Monday": "hétfő", "this_week": "Ezen a héten", - "last_week": "Múlt héten" + "Thursday": "csütörtök", + "Tuesday": "kedd", + "Wednesday": "szerda" }, "hy": { + "0000-01-06": "6 հնվ", + "2021-03-01": "2021 թ․ մարտ", + "2021-04-01": "2021 թ․ ապրիլ", + "2022-08-01": "2022 թ․ օգոստոս", + "2022-10-01": "2022 թ․ հոկտեմբեր", + "2022-11-01": "2022 թ․ նոյեմբեր", + "2023-05-01": "2023 թ․ մայիս", + "2023-06-01": "2023 թ․ հունիս", + "2023-07-01": "2023 թ․ հուլիս", + "2024-12-01": "2024 թ․ դեկտեմբեր", + "2024-12-28": "28 դեկ, 2024 թ.", + "2025-01-01": "2025 թ․ հունվար", + "last_week": "Անցյալ շաբաթ", + "Monday": "երկուշաբթի", "this_week": "Այս շաբաթ", - "last_week": "Անցյալ շաբաթ" + "Thursday": "հինգշաբթի", + "Tuesday": "երեքշաբթի", + "Wednesday": "չորեքշաբթի" }, "id": { + "0000-01-06": "6 Jan", + "2021-03-01": "Maret 2021", + "2021-04-01": "April 2021", + "2022-08-01": "Agustus 2022", + "2022-10-01": "Oktober 2022", + "2022-11-01": "November 2022", + "2023-05-01": "Mei 2023", + "2023-06-01": "Juni 2023", + "2023-07-01": "Juli 2023", + "2024-12-01": "Desember 2024", + "2024-12-28": "28 Des 2024", + "2025-01-01": "Januari 2025", + "last_week": "Minggu lalu", + "Monday": "Senin", "this_week": "Minggu ini", - "last_week": "Minggu lalu" + "Thursday": "Kamis", + "Tuesday": "Selasa", + "Wednesday": "Rabu" }, "is": { + "0000-01-06": "6. jan.", + "2021-03-01": "mars 2021", + "2021-04-01": "apríl 2021", + "2022-08-01": "ágúst 2022", + "2022-10-01": "október 2022", + "2022-11-01": "nóvember 2022", + "2023-05-01": "maí 2023", + "2023-06-01": "júní 2023", + "2023-07-01": "júlí 2023", + "2024-12-01": "desember 2024", + "2024-12-28": "28. des. 2024", + "2025-01-01": "janúar 2025", + "last_week": "Í síðustu viku", + "Monday": "mánudagur", "this_week": "Í vikunni", - "last_week": "Í síðustu viku" + "Thursday": "fimmtudagur", + "Tuesday": "þriðjudagur", + "Wednesday": "miðvikudagur" }, "it": { + "0000-01-06": "6 gen", + "2021-03-01": "Marzo 2021", + "2021-04-01": "Aprile 2021", + "2022-08-01": "Agosto 2022", + "2022-10-01": "Ottobre 2022", + "2022-11-01": "Novembre 2022", + "2023-05-01": "Maggio 2023", + "2023-06-01": "Giugno 2023", + "2023-07-01": "Luglio 2023", + "2024-12-01": "Dicembre 2024", + "2024-12-28": "28 dic 2024", + "2025-01-01": "Gennaio 2025", + "last_week": "Ultima settimana", + "Monday": "Lunedì", "this_week": "Questa settimana", - "last_week": "Ultima settimana" + "Thursday": "Giovedì", + "Tuesday": "Martedì", + "Wednesday": "Mercoledì" }, "iw": { + "0000-01-06": "6 בינו׳", + "2021-03-01": "מרץ 2021", + "2021-04-01": "אפריל 2021", + "2022-08-01": "אוגוסט 2022", + "2022-10-01": "אוקטובר 2022", + "2022-11-01": "נובמבר 2022", + "2023-05-01": "מאי 2023", + "2023-06-01": "יוני 2023", + "2023-07-01": "יולי 2023", + "2024-12-01": "דצמבר 2024", + "2024-12-28": "28 בדצמ׳ 2024", + "2025-01-01": "ינואר 2025", + "last_week": "בשבוע שעבר", + "Monday": "יום שני", "this_week": "השבוע", - "last_week": "בשבוע שעבר" + "Thursday": "יום חמישי", + "Tuesday": "יום שלישי", + "Wednesday": "יום רביעי" }, "ja": { + "0000-01-06": "1月6日", + "2021-03-01": "2021年3月", + "2021-04-01": "2021年4月", + "2022-08-01": "2022年8月", + "2022-10-01": "2022年10月", + "2022-11-01": "2022年11月", + "2023-05-01": "2023年5月", + "2023-06-01": "2023年6月", + "2023-07-01": "2023年7月", + "2024-12-01": "2024年12月", + "2024-12-28": "2024/12/28", + "2025-01-01": "2025年1月", + "last_week": "先週", + "Monday": "月曜日", "this_week": "今週", - "last_week": "先週" + "Thursday": "木曜日", + "Tuesday": "火曜日", + "Wednesday": "水曜日" }, "ka": { + "0000-01-06": "6 იან", + "2021-03-01": "მარტი, 2021", + "2021-04-01": "აპრილი, 2021", + "2022-08-01": "აგვისტო, 2022", + "2022-10-01": "ოქტომბერი, 2022", + "2022-11-01": "ნოემბერი, 2022", + "2023-05-01": "მაისი, 2023", + "2023-06-01": "ივნისი, 2023", + "2023-07-01": "ივლისი, 2023", + "2024-12-01": "დეკემბერი, 2024", + "2024-12-28": "28 დეკ. 2024", + "2025-01-01": "იანვარი, 2025", + "last_week": "გასულ კვირაში", + "Monday": "ორშაბათი", "this_week": "ამ კვირაში", - "last_week": "გასულ კვირაში" + "Thursday": "ხუთშაბათი", + "Tuesday": "სამშაბათი", + "Wednesday": "ოთხშაბათი" }, "kk": { + "0000-01-06": "6 қаң.", + "2021-03-01": "2021 ж. наурыз", + "2021-04-01": "2021 ж. сәуір", + "2022-08-01": "2022 ж. тамыз", + "2022-10-01": "2022 ж. қазан", + "2022-11-01": "2022 ж. қараша", + "2023-05-01": "2023 ж. мамыр", + "2023-06-01": "2023 ж. маусым", + "2023-07-01": "2023 ж. шілде", + "2024-12-01": "2024 ж. желтоқсан", + "2024-12-28": "2024 ж. 28 жел.", + "2025-01-01": "2025 ж. қаңтар", + "last_week": "Өткен аптада", + "Monday": "дүйсенбі", "this_week": "Осы аптада", - "last_week": "Өткен аптада" + "Thursday": "бейсенбі", + "Tuesday": "сейсенбі", + "Wednesday": "сәрсенбі" }, "km": { + "0000-01-06": "6 មករា", + "2021-03-01": "មីនា 2021", + "2021-04-01": "មេសា 2021", + "2022-08-01": "សីហា 2022", + "2022-10-01": "តុលា 2022", + "2022-11-01": "វិច្ឆិកា 2022", + "2023-05-01": "ឧសភា 2023", + "2023-06-01": "មិថុនា 2023", + "2023-07-01": "កក្កដា 2023", + "2024-12-01": "ធ្នូ 2024", + "2024-12-28": "28 ធ្នូ 2024", + "2025-01-01": "មករា 2025", + "last_week": "សប្ដាហ៍​មុន", + "Monday": "ចន្ទ", "this_week": "សប្ដាហ៍​នេះ", - "last_week": "សប្ដាហ៍​មុន" + "Thursday": "ព្រហស្បតិ៍", + "Tuesday": "អង្គារ", + "Wednesday": "ពុធ" }, "kn": { + "0000-01-06": "6 ಜನ", + "2021-03-01": "ಮಾರ್ಚ್ 2021", + "2021-04-01": "ಏಪ್ರಿಲ್ 2021", + "2022-08-01": "ಆಗಸ್ಟ್ 2022", + "2022-10-01": "ಅಕ್ಟೋಬರ್ 2022", + "2022-11-01": "ನವೆಂಬರ್ 2022", + "2023-05-01": "ಮೇ 2023", + "2023-06-01": "ಜೂನ್ 2023", + "2023-07-01": "ಜುಲೈ 2023", + "2024-12-01": "ಡಿಸೆಂಬರ್ 2024", + "2024-12-28": "ಡಿಸೆಂ 28, 2024", + "2025-01-01": "ಜನವರಿ 2025", + "last_week": "ಕಳೆದ ವಾರ", + "Monday": "ಸೋಮವಾರ", "this_week": "ಈ ವಾರ", - "last_week": "ಕಳೆದ ವಾರ" + "Thursday": "ಗುರುವಾರ", + "Tuesday": "ಮಂಗಳವಾರ", + "Wednesday": "ಬುಧವಾರ" }, "ko": { + "0000-01-06": "1월 6일", + "2021-03-01": "2021년 3월", + "2021-04-01": "2021년 4월", + "2022-08-01": "2022년 8월", + "2022-10-01": "2022년 10월", + "2022-11-01": "2022년 11월", + "2023-05-01": "2023년 5월", + "2023-06-01": "2023년 6월", + "2023-07-01": "2023년 7월", + "2024-12-01": "2024년 12월", + "2024-12-28": "2024. 12. 28.", + "2025-01-01": "2025년 1월", + "last_week": "지난주", + "Monday": "월요일", "this_week": "이번 주", - "last_week": "지난주" + "Thursday": "목요일", + "Tuesday": "화요일", + "Wednesday": "수요일" }, "ky": { + "0000-01-06": "6-янв.", + "2021-03-01": "2021-ж., март", + "2021-04-01": "2021-ж., апрель", + "2022-08-01": "2022-ж., август", + "2022-10-01": "2022-ж., октябрь", + "2022-11-01": "2022-ж., ноябрь", + "2023-05-01": "2023-ж., май", + "2023-06-01": "2023-ж., июнь", + "2023-07-01": "2023-ж., июль", + "2024-12-01": "2024-ж., декабрь", + "2024-12-28": "2024-ж., 28-дек.", + "2025-01-01": "2025-ж., январь", + "last_week": "Өткөн аптадагы", + "Monday": "дүйшөмбү", "this_week": "Ушул аптадагы", - "last_week": "Өткөн аптадагы" + "Thursday": "бейшемби", + "Tuesday": "шейшемби", + "Wednesday": "шаршемби" }, "lo": { + "0000-01-06": "6 ມ.ກ.", + "2021-03-01": "ມີນາ 2021", + "2021-04-01": "ເມສາ 2021", + "2022-08-01": "ສິງຫາ 2022", + "2022-10-01": "ຕຸລາ 2022", + "2022-11-01": "ພະຈິກ 2022", + "2023-05-01": "ພຶດສະພາ 2023", + "2023-06-01": "ມິຖຸນາ 2023", + "2023-07-01": "ກໍລະກົດ 2023", + "2024-12-01": "ທັນວາ 2024", + "2024-12-28": "28 ທ.ວ. 2024", + "2025-01-01": "ມັງກອນ 2025", + "last_week": "ອາທິດຜ່ານ​ມາ", + "Monday": "ວັນຈັນ", "this_week": "ອາທິດນີ້", - "last_week": "ອາທິດຜ່ານ​ມາ" + "Thursday": "ວັນພະຫັດ", + "Tuesday": "ວັນອັງຄານ", + "Wednesday": "ວັນພຸດ" }, "lt": { + "0000-01-06": "01-06", + "2021-03-01": "2021 m. kovas", + "2021-04-01": "2021 m. balandis", + "2022-08-01": "2022 m. rugpjūtis", + "2022-10-01": "2022 m. spalis", + "2022-11-01": "2022 m. lapkritis", + "2023-05-01": "2023 m. gegužė", + "2023-06-01": "2023 m. birželis", + "2023-07-01": "2023 m. liepa", + "2024-12-01": "2024 m. gruodis", + "2024-12-28": "2024-12-28", + "2025-01-01": "2025 m. sausis", + "last_week": "Praėjusią savaitę", + "Monday": "pirmadienis", "this_week": "Šią savaitę", - "last_week": "Praėjusią savaitę" + "Thursday": "ketvirtadienis", + "Tuesday": "antradienis", + "Wednesday": "trečiadienis" }, "lv": { + "0000-01-06": "6. janv.", + "2021-03-01": "2021. g. marts", + "2021-04-01": "2021. g. aprīlis", + "2022-08-01": "2022. g. augusts", + "2022-10-01": "2022. g. oktobris", + "2022-11-01": "2022. g. novembris", + "2023-05-01": "2023. g. maijs", + "2023-06-01": "2023. g. jūnijs", + "2023-07-01": "2023. g. jūlijs", + "2024-12-01": "2024. g. decembris", + "2024-12-28": "2024. gada 28. dec.", + "2025-01-01": "2025. g. janvāris", + "last_week": "Iepriekšējā nedēļā", + "Monday": "Pirmdiena", "this_week": "Šajā nedēļā", - "last_week": "Iepriekšējā nedēļā" + "Thursday": "Ceturtdiena", + "Tuesday": "Otrdiena", + "Wednesday": "Trešdiena" }, "mk": { + "0000-01-06": "6 јан.", + "2021-03-01": "март 2021 г.", + "2021-04-01": "април 2021 г.", + "2022-08-01": "август 2022 г.", + "2022-10-01": "октомври 2022 г.", + "2022-11-01": "ноември 2022 г.", + "2023-05-01": "мај 2023 г.", + "2023-06-01": "јуни 2023 г.", + "2023-07-01": "јули 2023 г.", + "2024-12-01": "декември 2024 г.", + "2024-12-28": "28.12.2024 г.", + "2025-01-01": "јануари 2025 г.", + "last_week": "Минатата недела", + "Monday": "понеделник", "this_week": "Оваа седмица", - "last_week": "Минатата недела" + "Thursday": "четврток", + "Tuesday": "вторник", + "Wednesday": "среда" }, "ml": { + "0000-01-06": "ജനു 6", + "2021-03-01": "2021 മാർച്ച്", + "2021-04-01": "2021 ഏപ്രിൽ", + "2022-08-01": "2022 ഓഗസ്റ്റ്", + "2022-10-01": "2022 ഒക്‌ടോബർ", + "2022-11-01": "2022 നവംബർ", + "2023-05-01": "2023 മേയ്", + "2023-06-01": "2023 ജൂൺ", + "2023-07-01": "2023 ജൂലൈ", + "2024-12-01": "2024 ഡിസംബർ", + "2024-12-28": "2024, ഡിസം 28", + "2025-01-01": "2025 ജനുവരി", + "last_week": "കഴിഞ്ഞ ആഴ്ച", + "Monday": "തിങ്കളാഴ്‌ച", "this_week": "ഈ ആഴ്‌ച", - "last_week": "കഴിഞ്ഞ ആഴ്ച" + "Thursday": "വ്യാഴാഴ്‌ച", + "Tuesday": "ചൊവ്വാഴ്‌ച", + "Wednesday": "ബുധനാഴ്‌ച" }, "mn": { + "0000-01-06": "1-р сарын 6", + "2021-03-01": "2021 оны гуравдугаар сар", + "2021-04-01": "2021 оны дөрөвдүгээр сар", + "2022-08-01": "2022 оны наймдугаар сар", + "2022-10-01": "2022 оны аравдугаар сар", + "2022-11-01": "2022 оны арван нэгдүгээр сар", + "2023-05-01": "2023 оны тавдугаар сар", + "2023-06-01": "2023 оны зургаадугаар сар", + "2023-07-01": "2023 оны долоодугаар сар", + "2024-12-01": "2024 оны арван хоёрдугаар сар", + "2024-12-28": "2024 оны 12-р сарын 28", + "2025-01-01": "2025 оны нэгдүгээр сар", + "last_week": "Өнгөрсөн долоо хоног", + "Monday": "Даваа", "this_week": "Энэ долоо хоног", - "last_week": "Өнгөрсөн долоо хоног" + "Thursday": "Пүрэв", + "Tuesday": "Мягмар", + "Wednesday": "Лхагва" }, "mr": { + "0000-01-06": "6 जाने", + "2021-03-01": "मार्च 2021", + "2021-04-01": "एप्रिल 2021", + "2022-08-01": "ऑगस्ट 2022", + "2022-10-01": "ऑक्टोबर 2022", + "2022-11-01": "नोव्हेंबर 2022", + "2023-05-01": "मे 2023", + "2023-06-01": "जून 2023", + "2023-07-01": "जुलै 2023", + "2024-12-01": "डिसेंबर 2024", + "2024-12-28": "28 डिसें, 2024", + "2025-01-01": "जानेवारी 2025", + "last_week": "मागील आठवड्यात", + "Monday": "सोमवार", "this_week": "या आठवड्यात", - "last_week": "मागील आठवड्यात" + "Thursday": "गुरुवार", + "Tuesday": "मंगळवार", + "Wednesday": "बुधवार" }, "ms": { + "0000-01-06": "6 Jan", + "2021-03-01": "Mac 2021", + "2021-04-01": "April 2021", + "2022-08-01": "Ogos 2022", + "2022-10-01": "Oktober 2022", + "2022-11-01": "November 2022", + "2023-05-01": "Mei 2023", + "2023-06-01": "Jun 2023", + "2023-07-01": "Julai 2023", + "2024-12-01": "Disember 2024", + "2024-12-28": "28 Dis 2024", + "2025-01-01": "Januari 2025", + "last_week": "Minggu lepas", + "Monday": "Isnin", "this_week": "Minggu ini", - "last_week": "Minggu lepas" + "Thursday": "Khamis", + "Tuesday": "Selasa", + "Wednesday": "Rabu" }, "my": { + "0000-01-06": "ဇန် 6", + "2021-03-01": "2021 မတ်", + "2021-04-01": "2021 ဧပြီ", + "2022-08-01": "2022 ဩဂုတ်", + "2022-10-01": "2022 အောက်တိုဘာ", + "2022-11-01": "2022 နိုဝင်ဘာ", + "2023-05-01": "2023 မေ", + "2023-06-01": "2023 ဇွန်", + "2023-07-01": "2023 ဇူလိုင်", + "2024-12-01": "2024 ဒီဇင်ဘာ", + "2024-12-28": "2024 ဒီ 28", + "2025-01-01": "2025 ဇန်နဝါရီ", + "last_week": "ယခင်အပတ်", + "Monday": "တနင်္လာ", "this_week": "ယခုအပတ်", - "last_week": "ယခင်အပတ်" + "Thursday": "ကြာသပတေး", + "Tuesday": "အင်္ဂါ", + "Wednesday": "ဗုဒ္ဓဟူး" }, "ne": { + "0000-01-06": "जनवरी 6", + "2021-03-01": "2021 मार्च", + "2021-04-01": "2021 अप्रिल", + "2022-08-01": "2022 अगस्ट", + "2022-10-01": "2022 अक्टोबर", + "2022-11-01": "2022 नोभेम्बर", + "2023-05-01": "2023 मे", + "2023-06-01": "2023 जुन", + "2023-07-01": "2023 जुलाई", + "2024-12-01": "2024 डिसेम्बर", + "2024-12-28": "2024 डिसेम्बर 28", + "2025-01-01": "2025 जनवरी", + "last_week": "पछिल्लो हप्ता", + "Monday": "सोमबार", "this_week": "यस हप्ता", - "last_week": "पछिल्लो हप्ता" + "Thursday": "बिहिबार", + "Tuesday": "मङ्गलबार", + "Wednesday": "बुधबार" }, "nl": { + "0000-01-06": "6 jan", + "2021-03-01": "Maart 2021", + "2021-04-01": "April 2021", + "2022-08-01": "Augustus 2022", + "2022-10-01": "Oktober 2022", + "2022-11-01": "November 2022", + "2023-05-01": "Mei 2023", + "2023-06-01": "Juni 2023", + "2023-07-01": "Juli 2023", + "2024-12-01": "December 2024", + "2024-12-28": "28 dec 2024", + "2025-01-01": "Januari 2025", + "last_week": "Afgelopen week", + "Monday": "Maandag", "this_week": "Deze week", - "last_week": "Afgelopen week" + "Thursday": "Donderdag", + "Tuesday": "Dinsdag", + "Wednesday": "Woensdag" }, "no": { + "0000-01-06": "6. jan.", + "2021-03-01": "mars 2021", + "2021-04-01": "april 2021", + "2022-08-01": "august 2022", + "2022-10-01": "oktober 2022", + "2022-11-01": "november 2022", + "2023-05-01": "mai 2023", + "2023-06-01": "juni 2023", + "2023-07-01": "juli 2023", + "2024-12-01": "desember 2024", + "2024-12-28": "28. des. 2024", + "2025-01-01": "januar 2025", + "last_week": "Forrige uke", + "Monday": "mandag", "this_week": "Denne uken", - "last_week": "Forrige uke" + "Thursday": "torsdag", + "Tuesday": "tirsdag", + "Wednesday": "onsdag" }, "or": { + "0000-01-06": "ଜାନୁଆରୀ 6", + "2021-03-01": "ମାର୍ଚ୍ଚ 2021", + "2021-04-01": "ଅପ୍ରେଲ 2021", + "2022-08-01": "ଅଗଷ୍ଟ 2022", + "2022-10-01": "ଅକ୍ଟୋବର 2022", + "2022-11-01": "ନଭେମ୍ବର 2022", + "2023-05-01": "ମଇ 2023", + "2023-06-01": "ଜୁନ 2023", + "2023-07-01": "ଜୁଲାଇ 2023", + "2024-12-01": "ଡିସେମ୍ବର 2024", + "2024-12-28": "ଡିସେମ୍ବର 28, 2024", + "2025-01-01": "ଜାନୁଆରୀ 2025", + "last_week": "ଗତ ସପ୍ତାହ", + "Monday": "ସୋମବାର", "this_week": "ଏହି ସପ୍ତାହ", - "last_week": "ଗତ ସପ୍ତାହ" + "Thursday": "ଗୁରୁବାର", + "Tuesday": "ମଙ୍ଗଳବାର", + "Wednesday": "ବୁଧବାର" }, "pa": { + "0000-01-06": "6 ਜਨ", + "2021-03-01": "ਮਾਰਚ 2021", + "2021-04-01": "ਅਪ੍ਰੈਲ 2021", + "2022-08-01": "ਅਗਸਤ 2022", + "2022-10-01": "ਅਕਤੂਬਰ 2022", + "2022-11-01": "ਨਵੰਬਰ 2022", + "2023-05-01": "ਮਈ 2023", + "2023-06-01": "ਜੂਨ 2023", + "2023-07-01": "ਜੁਲਾਈ 2023", + "2024-12-01": "ਦਸੰਬਰ 2024", + "2024-12-28": "28 ਦਸੰ 2024", + "2025-01-01": "ਜਨਵਰੀ 2025", + "last_week": "ਪਿਛਲੇ ਹਫ਼ਤੇ", + "Monday": "ਸੋਮਵਾਰ", "this_week": "ਇਸ ਹਫ਼ਤੇ", - "last_week": "ਪਿਛਲੇ ਹਫ਼ਤੇ" + "Thursday": "ਵੀਰਵਾਰ", + "Tuesday": "ਮੰਗਲਵਾਰ", + "Wednesday": "ਬੁੱਧਵਾਰ" }, "pl": { + "0000-01-06": "6 sty", + "2021-03-01": "Marzec 2021", + "2021-04-01": "Kwiecień 2021", + "2022-08-01": "Sierpień 2022", + "2022-10-01": "Październik 2022", + "2022-11-01": "Listopad 2022", + "2023-05-01": "Maj 2023", + "2023-06-01": "Czerwiec 2023", + "2023-07-01": "Lipiec 2023", + "2024-12-01": "Grudzień 2024", + "2024-12-28": "28 gru 2024", + "2025-01-01": "Styczeń 2025", + "last_week": "W zeszłym tygodniu", + "Monday": "Poniedziałek", "this_week": "W tym tygodniu", - "last_week": "W zeszłym tygodniu" + "Thursday": "Czwartek", + "Tuesday": "Wtorek", + "Wednesday": "Środa" }, "pt": { + "0000-01-06": "6 de jan.", + "2021-03-01": "março de 2021", + "2021-04-01": "abril de 2021", + "2022-08-01": "agosto de 2022", + "2022-10-01": "outubro de 2022", + "2022-11-01": "novembro de 2022", + "2023-05-01": "maio de 2023", + "2023-06-01": "junho de 2023", + "2023-07-01": "julho de 2023", + "2024-12-01": "dezembro de 2024", + "2024-12-28": "28 de dez. de 2024", + "2025-01-01": "janeiro de 2025", + "last_week": "Semana passada", + "Monday": "Segunda-feira", "this_week": "Esta semana", - "last_week": "Semana passada" + "Thursday": "Quinta-feira", + "Tuesday": "Terça-feira", + "Wednesday": "Quarta-feira" }, "pt-PT": { + "0000-01-06": "6/01", + "2021-03-01": "março de 2021", + "2021-04-01": "abril de 2021", + "2022-08-01": "agosto de 2022", + "2022-10-01": "outubro de 2022", + "2022-11-01": "novembro de 2022", + "2023-05-01": "maio de 2023", + "2023-06-01": "junho de 2023", + "2023-07-01": "julho de 2023", + "2024-12-01": "dezembro de 2024", + "2024-12-28": "28/12/2024", + "2025-01-01": "janeiro de 2025", + "last_week": "A semana passada", + "Monday": "segunda-feira", "this_week": "Esta semana", - "last_week": "A semana passada" + "Thursday": "quinta-feira", + "Tuesday": "terça-feira", + "Wednesday": "quarta-feira" }, "ro": { + "0000-01-06": "6 ian.", + "2021-03-01": "martie 2021", + "2021-04-01": "aprilie 2021", + "2022-08-01": "august 2022", + "2022-10-01": "octombrie 2022", + "2022-11-01": "noiembrie 2022", + "2023-05-01": "mai 2023", + "2023-06-01": "iunie 2023", + "2023-07-01": "iulie 2023", + "2024-12-01": "decembrie 2024", + "2024-12-28": "28 dec. 2024", + "2025-01-01": "ianuarie 2025", + "last_week": "Săptămâna trecută", + "Monday": "luni", "this_week": "Săptămâna aceasta", - "last_week": "Săptămâna trecută" + "Thursday": "joi", + "Tuesday": "marți", + "Wednesday": "miercuri" }, "ru": { + "0000-01-06": "6 янв.", + "2021-03-01": "Март 2021 г.", + "2021-04-01": "Апрель 2021 г.", + "2022-08-01": "Август 2022 г.", + "2022-10-01": "Октябрь 2022 г.", + "2022-11-01": "Ноябрь 2022 г.", + "2023-05-01": "Май 2023 г.", + "2023-06-01": "Июнь 2023 г.", + "2023-07-01": "Июль 2023 г.", + "2024-12-01": "Декабрь 2024 г.", + "2024-12-28": "28 дек. 2024 г.", + "2025-01-01": "Январь 2025 г.", + "last_week": "На прошлой неделе", + "Monday": "Понедельник", "this_week": "На этой неделе", - "last_week": "На прошлой неделе" + "Thursday": "Четверг", + "Tuesday": "Вторник", + "Wednesday": "Среда" }, "si": { + "0000-01-06": "ජන 6", + "2021-03-01": "2021 මාර්තු", + "2021-04-01": "2021 අප්‍රේල්", + "2022-08-01": "2022 අගෝස්තු", + "2022-10-01": "2022 ඔක්තෝබර්", + "2022-11-01": "2022 නොවැම්බර්", + "2023-05-01": "2023 මැයි", + "2023-06-01": "2023 ජූනි", + "2023-07-01": "2023 ජූලි", + "2024-12-01": "2024 දෙසැම්බර්", + "2024-12-28": "2024 දෙසැ 28", + "2025-01-01": "2025 ජනවාරි", + "last_week": "පසුගිය සතිය", + "Monday": "සඳුදා", "this_week": "මෙම සතිය", - "last_week": "පසුගිය සතිය" + "Thursday": "බ්‍රහස්පතින්දා", + "Tuesday": "අඟහරුවාදා", + "Wednesday": "බදාදා" }, "sk": { + "0000-01-06": "6. 1.", + "2021-03-01": "marec 2021", + "2021-04-01": "apríl 2021", + "2022-08-01": "august 2022", + "2022-10-01": "október 2022", + "2022-11-01": "november 2022", + "2023-05-01": "máj 2023", + "2023-06-01": "jún 2023", + "2023-07-01": "júl 2023", + "2024-12-01": "december 2024", + "2024-12-28": "28. 12. 2024", + "2025-01-01": "január 2025", + "last_week": "Minulý týždeň", + "Monday": "pondelok", "this_week": "Tento týždeň", - "last_week": "Minulý týždeň" + "Thursday": "štvrtok", + "Tuesday": "utorok", + "Wednesday": "streda" }, "sl": { + "0000-01-06": "6. jan.", + "2021-03-01": "marec 2021", + "2021-04-01": "april 2021", + "2022-08-01": "avgust 2022", + "2022-10-01": "oktober 2022", + "2022-11-01": "november 2022", + "2023-05-01": "maj 2023", + "2023-06-01": "junij 2023", + "2023-07-01": "julij 2023", + "2024-12-01": "december 2024", + "2024-12-28": "28. dec. 2024", + "2025-01-01": "januar 2025", + "last_week": "Prejšnji teden", + "Monday": "ponedeljek", "this_week": "Ta teden", - "last_week": "Prejšnji teden" + "Thursday": "četrtek", + "Tuesday": "torek", + "Wednesday": "sreda" }, "sq": { + "0000-01-06": "6 jan", + "2021-03-01": "mars 2021", + "2021-04-01": "prill 2021", + "2022-08-01": "gusht 2022", + "2022-10-01": "tetor 2022", + "2022-11-01": "nëntor 2022", + "2023-05-01": "maj 2023", + "2023-06-01": "qershor 2023", + "2023-07-01": "korrik 2023", + "2024-12-01": "dhjetor 2024", + "2024-12-28": "28 dhj 2024", + "2025-01-01": "janar 2025", + "last_week": "Javën e kaluar", + "Monday": "e hënë", "this_week": "Këtë javë", - "last_week": "Javën e kaluar" + "Thursday": "e enjte", + "Tuesday": "e martë", + "Wednesday": "e mërkurë" }, "sr": { + "0000-01-06": "6. јан", + "2021-03-01": "март 2021.", + "2021-04-01": "април 2021.", + "2022-08-01": "август 2022.", + "2022-10-01": "октобар 2022.", + "2022-11-01": "новембар 2022.", + "2023-05-01": "мај 2023.", + "2023-06-01": "јун 2023.", + "2023-07-01": "јул 2023.", + "2024-12-01": "децембар 2024.", + "2024-12-28": "28. 12. 2024.", + "2025-01-01": "јануар 2025.", + "last_week": "Прошле недеље", + "Monday": "понедељак", "this_week": "Ове недеље", - "last_week": "Прошле недеље" + "Thursday": "четвртак", + "Tuesday": "уторак", + "Wednesday": "среда" }, "sr-Latn": { + "0000-01-06": "6. jan", + "2021-03-01": "mart 2021.", + "2021-04-01": "april 2021.", + "2022-08-01": "avgust 2022.", + "2022-10-01": "oktobar 2022.", + "2022-11-01": "novembar 2022.", + "2023-05-01": "maj 2023.", + "2023-06-01": "jun 2023.", + "2023-07-01": "jul 2023.", + "2024-12-01": "decembar 2024.", + "2024-12-28": "28. 12. 2024.", + "2025-01-01": "januar 2025.", + "last_week": "Prošle nedelje", + "Monday": "ponedeljak", "this_week": "Ove nedelje", - "last_week": "Prošle nedelje" + "Thursday": "četvrtak", + "Tuesday": "utorak", + "Wednesday": "sreda" }, "sv": { + "0000-01-06": "6 jan.", + "2021-03-01": "mars 2021", + "2021-04-01": "april 2021", + "2022-08-01": "augusti 2022", + "2022-10-01": "oktober 2022", + "2022-11-01": "november 2022", + "2023-05-01": "maj 2023", + "2023-06-01": "juni 2023", + "2023-07-01": "juli 2023", + "2024-12-01": "december 2024", + "2024-12-28": "28 dec. 2024", + "2025-01-01": "januari 2025", + "last_week": "Förra veckan", + "Monday": "måndag", "this_week": "Den här veckan", - "last_week": "Förra veckan" + "Thursday": "torsdag", + "Tuesday": "tisdag", + "Wednesday": "onsdag" }, "sw": { + "0000-01-06": "6 Jan", + "2021-03-01": "Machi 2021", + "2021-04-01": "Aprili 2021", + "2022-08-01": "Agosti 2022", + "2022-10-01": "Oktoba 2022", + "2022-11-01": "Novemba 2022", + "2023-05-01": "Mei 2023", + "2023-06-01": "Juni 2023", + "2023-07-01": "Julai 2023", + "2024-12-01": "Desemba 2024", + "2024-12-28": "28 Des 2024", + "2025-01-01": "Januari 2025", + "last_week": "Wiki iliyopita", + "Monday": "Jumatatu", "this_week": "Wiki hii", - "last_week": "Wiki iliyopita" + "Thursday": "Alhamisi", + "Tuesday": "Jumanne", + "Wednesday": "Jumatano" }, "ta": { + "0000-01-06": "6 ஜன.", + "2021-03-01": "மார்ச் 2021", + "2021-04-01": "ஏப்ரல் 2021", + "2022-08-01": "ஆகஸ்ட் 2022", + "2022-10-01": "அக்டோபர் 2022", + "2022-11-01": "நவம்பர் 2022", + "2023-05-01": "மே 2023", + "2023-06-01": "ஜூன் 2023", + "2023-07-01": "ஜூலை 2023", + "2024-12-01": "டிசம்பர் 2024", + "2024-12-28": "28 டிச., 2024", + "2025-01-01": "ஜனவரி 2025", + "last_week": "கடந்த வாரம்", + "Monday": "திங்கள்", "this_week": "இந்த வாரம்", - "last_week": "கடந்த வாரம்" + "Thursday": "வியாழன்", + "Tuesday": "செவ்வாய்", + "Wednesday": "புதன்" }, "te": { + "0000-01-06": "6 జన", + "2021-03-01": "మార్చి 2021", + "2021-04-01": "ఏప్రిల్ 2021", + "2022-08-01": "ఆగస్టు 2022", + "2022-10-01": "అక్టోబర్ 2022", + "2022-11-01": "నవంబర్ 2022", + "2023-05-01": "మే 2023", + "2023-06-01": "జూన్ 2023", + "2023-07-01": "జులై 2023", + "2024-12-01": "డిసెంబర్ 2024", + "2024-12-28": "28 డిసెం, 2024", + "2025-01-01": "జనవరి 2025", + "last_week": "గత వారం", + "Monday": "సోమవారం", "this_week": "ఈ వారం", - "last_week": "గత వారం" + "Thursday": "గురువారం", + "Tuesday": "మంగళవారం", + "Wednesday": "బుధవారం" }, "th": { + "0000-01-06": "6 ม.ค.", + "2021-03-01": "มีนาคม 2021", + "2021-04-01": "เมษายน 2021", + "2022-08-01": "สิงหาคม 2022", + "2022-10-01": "ตุลาคม 2022", + "2022-11-01": "พฤศจิกายน 2022", + "2023-05-01": "พฤษภาคม 2023", + "2023-06-01": "มิถุนายน 2023", + "2023-07-01": "กรกฎาคม 2023", + "2024-12-01": "ธันวาคม 2024", + "2024-12-28": "28 ธ.ค. 2024", + "2025-01-01": "มกราคม 2025", + "last_week": "สัปดาห์ที่แล้ว", + "Monday": "วันจันทร์", "this_week": "สัปดาห์นี้", - "last_week": "สัปดาห์ที่แล้ว" + "Thursday": "วันพฤหัสบดี", + "Tuesday": "วันอังคาร", + "Wednesday": "วันพุธ" }, "tr": { + "0000-01-06": "6 Oca", + "2021-03-01": "Mart 2021", + "2021-04-01": "Nisan 2021", + "2022-08-01": "Ağustos 2022", + "2022-10-01": "Ekim 2022", + "2022-11-01": "Kasım 2022", + "2023-05-01": "Mayıs 2023", + "2023-06-01": "Haziran 2023", + "2023-07-01": "Temmuz 2023", + "2024-12-01": "Aralık 2024", + "2024-12-28": "28 Ara 2024", + "2025-01-01": "Ocak 2025", + "last_week": "Geçen hafta", + "Monday": "Pazartesi", "this_week": "Bu hafta", - "last_week": "Geçen hafta" + "Thursday": "Perşembe", + "Tuesday": "Salı", + "Wednesday": "Çarşamba" }, "uk": { + "0000-01-06": "6 січ.", + "2021-03-01": "Березень 2021 р.", + "2021-04-01": "Квітень 2021 р.", + "2022-08-01": "Серпень 2022 р.", + "2022-10-01": "Жовтень 2022 р.", + "2022-11-01": "Листопад 2022 р.", + "2023-05-01": "Травень 2023 р.", + "2023-06-01": "Червень 2023 р.", + "2023-07-01": "Липень 2023 р.", + "2024-12-01": "Грудень 2024 р.", + "2024-12-28": "28 груд. 2024 р.", + "2025-01-01": "Січень 2025 р.", + "last_week": "Минулого тижня", + "Monday": "Понеділок", "this_week": "Цього тижня", - "last_week": "Минулого тижня" + "Thursday": "Четвер", + "Tuesday": "Вівторок", + "Wednesday": "Середа" }, "ur": { + "0000-01-06": "6 جنوری", + "2021-03-01": "مارچ 2021", + "2021-04-01": "اپریل 2021", + "2022-08-01": "اگست 2022", + "2022-10-01": "اکتوبر 2022", + "2022-11-01": "نومبر 2022", + "2023-05-01": "مئی 2023", + "2023-06-01": "جون 2023", + "2023-07-01": "جولائی 2023", + "2024-12-01": "دسمبر 2024", + "2024-12-28": "28 دسمبر، 2024", + "2025-01-01": "جنوری 2025", + "last_week": "گزشتہ ہفتہ", + "Monday": "پیر", "this_week": "اس ہفتے", - "last_week": "گزشتہ ہفتہ" + "Thursday": "جمعرات", + "Tuesday": "منگل", + "Wednesday": "بدھ" }, "uz": { + "0000-01-06": "6-yan", + "2021-03-01": "mart, 2021", + "2021-04-01": "aprel, 2021", + "2022-08-01": "avgust, 2022", + "2022-10-01": "oktabr, 2022", + "2022-11-01": "noyabr, 2022", + "2023-05-01": "may, 2023", + "2023-06-01": "iyun, 2023", + "2023-07-01": "iyul, 2023", + "2024-12-01": "dekabr, 2024", + "2024-12-28": "28-dek, 2024", + "2025-01-01": "yanvar, 2025", + "last_week": "O‘tgan hafta", + "Monday": "dushanba", "this_week": "Shu haftada", - "last_week": "O‘tgan hafta" + "Thursday": "payshanba", + "Tuesday": "seshanba", + "Wednesday": "chorshanba" }, "vi": { + "0000-01-06": "6 thg 1", + "2021-03-01": "tháng 3 năm 2021", + "2021-04-01": "tháng 4 năm 2021", + "2022-08-01": "tháng 8 năm 2022", + "2022-10-01": "tháng 10 năm 2022", + "2022-11-01": "tháng 11 năm 2022", + "2023-05-01": "tháng 5 năm 2023", + "2023-06-01": "tháng 6 năm 2023", + "2023-07-01": "tháng 7 năm 2023", + "2024-12-01": "tháng 12 năm 2024", + "2024-12-28": "28 thg 12, 2024", + "2025-01-01": "tháng 1 năm 2025", + "last_week": "Tuần trước", + "Monday": "Thứ Hai", "this_week": "Tuần này", - "last_week": "Tuần trước" + "Thursday": "Thứ Năm", + "Tuesday": "Thứ Ba", + "Wednesday": "Thứ Tư" }, "zh-CN": { + "0000-01-06": "1月6日", + "2021-03-01": "2021年3月", + "2021-04-01": "2021年4月", + "2022-08-01": "2022年8月", + "2022-10-01": "2022年10月", + "2022-11-01": "2022年11月", + "2023-05-01": "2023年5月", + "2023-06-01": "2023年6月", + "2023-07-01": "2023年7月", + "2024-12-01": "2024年12月", + "2024-12-28": "2024年12月28日", + "2025-01-01": "2025年1月", + "last_week": "上周", + "Monday": "星期一", "this_week": "本周", - "last_week": "上周" + "Thursday": "星期四", + "Tuesday": "星期二", + "Wednesday": "星期三" }, "zh-HK": { + "0000-01-06": "1月6日", + "2021-03-01": "2021年3月", + "2021-04-01": "2021年4月", + "2022-08-01": "2022年8月", + "2022-10-01": "2022年10月", + "2022-11-01": "2022年11月", + "2023-05-01": "2023年5月", + "2023-06-01": "2023年6月", + "2023-07-01": "2023年7月", + "2024-12-01": "2024年12月", + "2024-12-28": "2024年12月28日", + "2025-01-01": "2025年1月", + "last_week": "上星期", + "Monday": "星期一", "this_week": "本星期", - "last_week": "上星期" + "Thursday": "星期四", + "Tuesday": "星期二", + "Wednesday": "星期三" }, "zh-TW": { + "0000-01-06": "1月6日", + "2021-03-01": "2021年3月", + "2021-04-01": "2021年4月", + "2022-08-01": "2022年8月", + "2022-10-01": "2022年10月", + "2022-11-01": "2022年11月", + "2023-05-01": "2023年5月", + "2023-06-01": "2023年6月", + "2023-07-01": "2023年7月", + "2024-12-01": "2024年12月", + "2024-12-28": "2024年12月28日", + "2025-01-01": "2025年1月", + "last_week": "上週", + "Monday": "星期一", "this_week": "本週", - "last_week": "上週" + "Thursday": "星期四", + "Tuesday": "星期二", + "Wednesday": "星期三" }, "zu": { + "0000-01-06": "Jan 6", + "2021-03-01": "Mashi 2021", + "2021-04-01": "Ephreli 2021", + "2022-08-01": "Agasti 2022", + "2022-10-01": "Okthoba 2022", + "2022-11-01": "Novemba 2022", + "2023-05-01": "Meyi 2023", + "2023-06-01": "Juni 2023", + "2023-07-01": "Julayi 2023", + "2024-12-01": "Disemba 2024", + "2024-12-28": "Dis 28, 2024", + "2025-01-01": "Januwari 2025", + "last_week": "Iviki eledlule", + "Monday": "UMsombuluko", "this_week": "Leli viki", - "last_week": "Iviki eledlule" + "Thursday": "ULwesine", + "Tuesday": "ULwesibili", + "Wednesday": "ULwesithathu" } }