diff --git a/.gitignore b/.gitignore index 4e1b2c5..3a5faf8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ *.snap.new rustypipe_reports -rustypipe_cache.json +rustypipe_cache*.json diff --git a/Justfile b/Justfile index cf754a3..fcf3068 100644 --- a/Justfile +++ b/Justfile @@ -28,7 +28,7 @@ testintl: for YT_LANG in "${LANGUAGES[@]}"; do echo "---TESTS FOR $YT_LANG ---" - if YT_LANG="$YT_LANG" cargo nextest run --no-fail-fast ---retries 1 --test-threads 4 --test youtube -E 'not test(/^resolve/)'; then + if YT_LANG="$YT_LANG" cargo nextest run --no-fail-fast --retries 1 --test-threads 4 --test youtube -E 'not test(/^resolve/)'; then echo "--- $YT_LANG COMPLETED ---" else echo "--- $YT_LANG FAILED ---" diff --git a/cli/src/main.rs b/cli/src/main.rs index 1e0fc2d..0a1f568 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -54,6 +54,9 @@ struct Cli { /// YouTube content country #[clap(long, global = true)] country: Option, + /// Use authentication + #[clap(long, global = true)] + auth: bool, #[clap(long, global = true)] /// RustyPipe cache file cache_file: Option, @@ -653,6 +656,9 @@ async fn run() -> anyhow::Result<()> { if let Some(country) = cli.country { rp = rp.country(Country::from_str(&country.to_ascii_uppercase()).expect("invalid country")); } + if cli.auth { + rp = rp.authenticated(); + } let rp = rp.build()?; match cli.command { diff --git a/codegen/src/collect_history_dates.rs b/codegen/src/collect_history_dates.rs new file mode 100644 index 0000000..674c09c --- /dev/null +++ b/codegen/src/collect_history_dates.rs @@ -0,0 +1,69 @@ +use std::{collections::BTreeMap, fs::File, io::BufReader}; + +use path_macro::path; +use rustypipe::{ + client::RustyPipe, + param::{Language, LANGUAGES}, +}; +use serde::{Deserialize, Serialize}; + +use crate::util::{self, DICT_DIR}; + +type CollectedDates = BTreeMap; + +#[derive(Debug, Serialize, Deserialize)] +struct HistoryDates { + this_week: String, + last_week: String, +} + +pub async fn collect_dates() { + let json_path = path!(*DICT_DIR / "history_date_samples.json"); + let rp = RustyPipe::builder() + .storage_dir("/home/thetadev/Documents/Programmieren/Rust/rustypipe") + .build() + .unwrap(); + + let mut res: CollectedDates = BTreeMap::new(); + + for lang in LANGUAGES { + println!("{lang}"); + let history = rp.query().lang(lang).music_history().await.unwrap(); + if history.items.len() < 3 { + panic!("{lang} empty history") + } + + // 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 file = File::create(json_path).unwrap(); + serde_json::to_writer_pretty(file, &res).unwrap(); +} + +pub fn write_samples_to_dict() { + let json_path = path!(*DICT_DIR / "history_date_samples.json"); + + let json_file = File::open(json_path).unwrap(); + let collected_dates: CollectedDates = + serde_json::from_reader(BufReader::new(json_file)).unwrap(); + let mut dict = util::read_dict(); + let langs = dict.keys().copied().collect::>(); + + for lang in langs { + let dict_entry = dict.entry(lang).or_default(); + let cd = &collected_dates[&lang]; + dict_entry + .timeago_nd_tokens + .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()); + } + + util::write_dict(dict); +} diff --git a/codegen/src/gen_dictionary.rs b/codegen/src/gen_dictionary.rs index 140f519..ef01834 100644 --- a/codegen/src/gen_dictionary.rs +++ b/codegen/src/gen_dictionary.rs @@ -10,7 +10,7 @@ use crate::{ }; fn parse_tu(tu: &str) -> (u8, Option) { - static TU_PATTERN: Lazy = Lazy::new(|| Regex::new(r"^(\d*)(\w?)$").unwrap()); + static TU_PATTERN: Lazy = Lazy::new(|| Regex::new(r"^(\d*)(\w*)$").unwrap()); match TU_PATTERN.captures(tu) { Some(cap) => ( cap.get(1).unwrap().as_str().parse().unwrap_or(1), @@ -22,6 +22,8 @@ fn parse_tu(tu: &str) -> (u8, Option) { "W" => Some(TimeUnit::Week), "M" => Some(TimeUnit::Month), "Y" => Some(TimeUnit::Year), + "Wl" => Some(TimeUnit::LastWeek), + "Wd" => Some(TimeUnit::LastWeekday), "" => None, _ => panic!("invalid time unit: {tu}"), }, diff --git a/codegen/src/main.rs b/codegen/src/main.rs index b2dee3e..cff81b9 100644 --- a/codegen/src/main.rs +++ b/codegen/src/main.rs @@ -3,6 +3,7 @@ mod abtest; mod collect_album_types; mod collect_chan_prefixes; +mod collect_history_dates; mod collect_large_numbers; mod collect_playlist_dates; mod collect_video_dates; @@ -30,8 +31,10 @@ enum Commands { CollectAlbumTypes, CollectVideoDurations, CollectVideoDates, + CollectHistoryDates, CollectChanPrefixes, ParsePlaylistDates, + ParseHistoryDates, ParseLargeNumbers, ParseAlbumTypes, ParseVideoDurations, @@ -68,10 +71,14 @@ async fn main() { Commands::CollectVideoDates => { collect_video_dates::collect_video_dates(cli.concurrency).await; } + Commands::CollectHistoryDates => { + collect_history_dates::collect_dates().await; + } Commands::CollectChanPrefixes => { collect_chan_prefixes::collect_chan_prefixes().await; } Commands::ParsePlaylistDates => collect_playlist_dates::write_samples_to_dict(), + Commands::ParseHistoryDates => collect_history_dates::write_samples_to_dict(), Commands::ParseLargeNumbers => collect_large_numbers::write_samples_to_dict(), Commands::ParseAlbumTypes => collect_album_types::write_samples_to_dict(), Commands::ParseVideoDurations => collect_video_durations::parse_video_durations(), diff --git a/codegen/src/model.rs b/codegen/src/model.rs index e14b913..0405369 100644 --- a/codegen/src/model.rs +++ b/codegen/src/model.rs @@ -88,6 +88,8 @@ pub enum TimeUnit { Week, Month, Year, + LastWeek, + LastWeekday, } impl TimeUnit { @@ -100,6 +102,8 @@ impl TimeUnit { TimeUnit::Week => "W", TimeUnit::Month => "M", TimeUnit::Year => "Y", + TimeUnit::LastWeek => "Wl", + TimeUnit::LastWeekday => "Wd", } } } diff --git a/codegen/src/util.rs b/codegen/src/util.rs index 6f547d7..bd62196 100644 --- a/codegen/src/util.rs +++ b/codegen/src/util.rs @@ -77,7 +77,7 @@ pub fn filter_datestr(string: &str) -> String { .to_lowercase() .chars() .filter_map(|c| { - if c == '\u{200b}' || c.is_ascii_digit() { + if matches!(c, '\u{200b}' | '.' | ',') || c.is_ascii_digit() { None } else if c == '-' { Some(' ') diff --git a/src/client/history.rs b/src/client/history.rs index b727e50..cc0f874 100644 --- a/src/client/history.rs +++ b/src/client/history.rs @@ -7,11 +7,15 @@ use crate::{ error::{Error, ExtractionError}, model::{ paginator::{ContinuationEndpoint, Paginator}, - ChannelItem, VideoItem, + ChannelItem, HistoryItem, VideoItem, }, serializer::MapResult, }; +use self::response::YouTubeListMapper; + +use super::{MapRespOptions, QContinuation}; + #[derive(Debug, Serialize)] #[serde(rename_all = "camelCase")] struct QHistorySearch<'a> { @@ -24,7 +28,7 @@ impl RustyPipeQuery { /// /// Requires authentication cookies. #[tracing::instrument(skip(self), level = "error")] - pub async fn history(&self) -> Result, Error> { + pub async fn history(&self) -> Result>, Error> { let request_body = QBrowse { browse_id: "FEhistory", }; @@ -41,6 +45,34 @@ impl RustyPipeQuery { .await } + /// Get more YouTube history items from the given continuation token + #[tracing::instrument(skip(self), level = "error")] + pub async fn history_continuation + Debug>( + &self, + ctoken: S, + visitor_data: Option<&str>, + ) -> Result>, Error> { + let ctoken = ctoken.as_ref(); + let request_body = QContinuation { + continuation: ctoken, + }; + + self.clone() + .authenticated() + .execute_request_ctx::( + ClientType::Desktop, + "history_continuation", + ctoken, + "browse", + &request_body, + MapRespOptions { + visitor_data, + ..Default::default() + }, + ) + .await + } + /// Search the YouTube playback history of the current user /// /// Requires authentication cookies. @@ -48,7 +80,7 @@ impl RustyPipeQuery { pub async fn history_search + Debug>( &self, query: S, - ) -> Result, Error> { + ) -> Result>, Error> { let query = query.as_ref(); let request_body = QHistorySearch { browse_id: "FEhistory", @@ -104,6 +136,65 @@ impl RustyPipeQuery { } } +impl MapResponse>> for response::History { + fn map_response( + self, + ctx: &MapRespCtx<'_>, + ) -> Result>>, ExtractionError> { + let items = self + .contents + .two_column_browse_results_renderer + .contents + .into_iter() + .next() + .ok_or(ExtractionError::InvalidData( + "twoColumnBrowseResultsRenderer empty".into(), + ))? + .tab_renderer + .content + .section_list_renderer + .contents; + + let mut map_res = MapResult { + warnings: items.warnings, + ..Default::default() + }; + let mut ctoken = None; + for item in items.c { + match item { + response::YouTubeListItem::ItemSectionRenderer { header, contents } => { + let mut mapper = YouTubeListMapper::::new(ctx.lang); + mapper.map_response(contents); + mapper.conv_history_items( + header.map(|h| h.item_section_header_renderer.title), + &mut map_res, + ); + } + response::YouTubeListItem::ContinuationItemRenderer { + continuation_endpoint, + } => { + if ctoken.is_none() { + ctoken = Some(continuation_endpoint.continuation_command.token); + } + } + _ => {} + } + } + + Ok(MapResult { + c: Paginator::new_ext( + None, + map_res.c, + ctoken, + ctx.visitor_data.map(str::to_owned), + crate::model::paginator::ContinuationEndpoint::Browse, + true, + ), + warnings: map_res.warnings, + }) + } +} + impl MapResponse> for response::History { fn map_response( self, @@ -131,7 +222,7 @@ impl MapResponse> for response::History { None, mapper.items, mapper.ctoken, - None, + ctx.visitor_data.map(str::to_owned), crate::model::paginator::ContinuationEndpoint::Browse, true, ), @@ -145,29 +236,47 @@ mod tests { use std::{fs::File, io::BufReader}; use path_macro::path; - use rstest::rstest; use crate::util::tests::TESTFILES; use super::*; - #[rstest] - #[case::history("history")] - #[case::subscription_feed("subscription_feed")] - fn map_history(#[case] name: &str) { - let json_path = path!(*TESTFILES / "history" / format!("{name}.json")); + #[test] + fn map_history() { + let json_path = path!(*TESTFILES / "history" / "history.json"); let json_file = File::open(json_path).unwrap(); let history: response::History = serde_json::from_reader(BufReader::new(json_file)).unwrap(); - let map_res = history.map_response(&MapRespCtx::test("")).unwrap(); + let map_res: MapResult>> = + history.map_response(&MapRespCtx::test("")).unwrap(); assert!( map_res.warnings.is_empty(), "deserialization/mapping warnings: {:?}", map_res.warnings ); - insta::assert_ron_snapshot!(format!("map_{name}"), map_res.c, { + insta::assert_ron_snapshot!(map_res.c, { + ".items[].playback_date" => "[date]", + }); + } + + #[test] + fn map_subscription_feed() { + let json_path = path!(*TESTFILES / "history" / "subscription_feed.json"); + let json_file = File::open(json_path).unwrap(); + + let history: response::History = + serde_json::from_reader(BufReader::new(json_file)).unwrap(); + let map_res: MapResult> = + history.map_response(&MapRespCtx::test("")).unwrap(); + + assert!( + map_res.warnings.is_empty(), + "deserialization/mapping warnings: {:?}", + map_res.warnings + ); + insta::assert_ron_snapshot!(map_res.c, { ".items[].publish_date" => "[date]", }); } diff --git a/src/client/mod.rs b/src/client/mod.rs index 47e554a..f8e7871 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -811,6 +811,16 @@ impl RustyPipeBuilder { self } + /// Enable authentication for all requests + /// + /// Depending on the client type RustyPipe uses either the authentication cookie or the + /// OAuth token to authenticate requests. + #[must_use] + pub fn authenticated(mut self) -> Self { + self.default_opts.auth = Some(true); + self + } + /// Disable authentication for all requests #[must_use] pub fn unauthenticated(mut self) -> Self { diff --git a/src/client/music_charts.rs b/src/client/music_charts.rs index baeeead..6df5b17 100644 --- a/src/client/music_charts.rs +++ b/src/client/music_charts.rs @@ -113,12 +113,12 @@ impl MapResponse for response::MusicCharts { }); let mapped_top = mapper_top.conv_items::(); - let mut mapped_trending = mapper_trending.conv_items::(); - let mut mapped_other = mapper_other.group_items(); + let mapped_trending = mapper_trending.conv_items::(); + let mapped_other = mapper_other.group_items(); let mut warnings = mapped_top.warnings; - warnings.append(&mut mapped_trending.warnings); - warnings.append(&mut mapped_other.warnings); + warnings.extend(mapped_trending.warnings); + warnings.extend(mapped_other.warnings); Ok(MapResult { c: MusicCharts { diff --git a/src/client/music_history.rs b/src/client/music_history.rs index 0ef3bea..0ebfcf0 100644 --- a/src/client/music_history.rs +++ b/src/client/music_history.rs @@ -1,3 +1,5 @@ +use std::fmt::Debug; + use crate::{ client::{ response::{self, music_item::MusicListMapper}, @@ -6,19 +8,19 @@ use crate::{ error::{Error, ExtractionError}, model::{ paginator::{ContinuationEndpoint, Paginator}, - AlbumItem, ArtistItem, MusicPlaylistItem, TrackItem, + AlbumItem, ArtistItem, HistoryItem, MusicPlaylistItem, TrackItem, }, serializer::MapResult, }; -use super::MapRespCtx; +use super::{MapRespCtx, MapRespOptions, QContinuation}; impl RustyPipeQuery { /// Get a list of tracks from YouTube Music which the current user recently played /// /// Requires authentication cookies. #[tracing::instrument(skip(self), level = "error")] - pub async fn music_history(&self) -> Result, Error> { + pub async fn music_history(&self) -> Result>, Error> { let request_body = QBrowseParams { browse_id: "FEmusic_history", params: "oggECgIIAQ%3D%3D", @@ -36,6 +38,34 @@ impl RustyPipeQuery { .await } + /// Get more YouTube Music history items from the given continuation token + #[tracing::instrument(skip(self), level = "error")] + pub async fn music_history_continuation + Debug>( + &self, + ctoken: S, + visitor_data: Option<&str>, + ) -> Result>, Error> { + let ctoken = ctoken.as_ref(); + let request_body = QContinuation { + continuation: ctoken, + }; + + self.clone() + .authenticated() + .execute_request_ctx::( + ClientType::Desktop, + "history_continuation", + ctoken, + "browse", + &request_body, + MapRespOptions { + visitor_data, + ..Default::default() + }, + ) + .await + } + /// Get a list of YouTube Music artists which the current user subscribed to /// /// Requires authentication cookies. @@ -99,11 +129,11 @@ impl RustyPipeQuery { } } -impl MapResponse> for response::MusicHistory { +impl MapResponse>> for response::MusicHistory { fn map_response( self, ctx: &MapRespCtx<'_>, - ) -> Result>, ExtractionError> { + ) -> Result>>, ExtractionError> { let contents = match self.contents { response::music_playlist::Contents::SingleColumnBrowseResultsRenderer(c) => { c.contents @@ -120,7 +150,7 @@ impl MapResponse> for response::MusicHistory { } => secondary_contents.section_list_renderer, }; - let mut mapper = MusicListMapper::new(ctx.lang); + let mut map_res = MapResult::default(); for shelf in contents.contents { let shelf = if let response::music_item::ItemSection::MusicShelfRenderer(s) = shelf { @@ -128,11 +158,11 @@ impl MapResponse> for response::MusicHistory { } else { continue; }; + let mut mapper = MusicListMapper::new(ctx.lang); mapper.map_response(shelf.contents); + mapper.conv_history_items(shelf.title, &mut map_res); } - let map_res = mapper.conv_items(); - let ctoken = contents .continuations .into_iter() @@ -144,7 +174,7 @@ impl MapResponse> for response::MusicHistory { None, map_res.c, ctoken, - None, + ctx.visitor_data.map(str::to_owned), ContinuationEndpoint::MusicBrowse, true, ), @@ -177,6 +207,8 @@ mod tests { "deserialization/mapping warnings: {:?}", map_res.warnings ); - insta::assert_ron_snapshot!(map_res.c); + insta::assert_ron_snapshot!(map_res.c, { + ".items[].playback_date" => "[date]", + }); } } diff --git a/src/client/pagination.rs b/src/client/pagination.rs index 65d8fab..07c4964 100644 --- a/src/client/pagination.rs +++ b/src/client/pagination.rs @@ -6,8 +6,11 @@ use crate::model::{ traits::FromYtItem, Comment, MusicItem, YouTubeItem, }; +use crate::model::{HistoryItem, TrackItem, VideoItem}; use crate::serializer::MapResult; +use self::response::YouTubeListItem; + use super::response::music_item::{map_queue_item, MusicListMapper, PlaylistPanelVideo}; use super::{ response, ClientType, MapRespCtx, MapRespOptions, MapResponse, QContinuation, RustyPipeQuery, @@ -95,38 +98,44 @@ fn map_ytm_paginator( } } +fn continuation_items(response: response::Continuation) -> MapResult> { + response + .on_response_received_actions + .and_then(|actions| { + actions + .into_iter() + .map(|action| action.append_continuation_items_action.continuation_items) + .reduce(|mut acc, mut items| { + acc.c.append(&mut items.c); + acc.warnings.append(&mut items.warnings); + acc + }) + }) + .or_else(|| { + response + .continuation_contents + .map(|contents| contents.rich_grid_continuation.contents) + }) + .unwrap_or_default() +} + impl MapResponse> for response::Continuation { fn map_response( self, ctx: &MapRespCtx<'_>, ) -> Result>, ExtractionError> { - let items = self - .on_response_received_actions - .and_then(|actions| { - actions - .into_iter() - .map(|action| action.append_continuation_items_action.continuation_items) - .reduce(|mut acc, mut items| { - acc.c.append(&mut items.c); - acc.warnings.append(&mut items.warnings); - acc - }) - }) - .or_else(|| { - self.continuation_contents - .map(|contents| contents.rich_grid_continuation.contents) - }) - .unwrap_or_default(); + let estimated_results = self.estimated_results; + let items = continuation_items(self); let mut mapper = response::YouTubeListMapper::::new(ctx.lang); mapper.map_response(items); Ok(MapResult { c: Paginator::new_ext( - self.estimated_results, + estimated_results, mapper.items, mapper.ctoken, - None, + ctx.visitor_data.map(str::to_owned), ContinuationEndpoint::Browse, ctx.authenticated, ), @@ -201,7 +210,99 @@ impl MapResponse> for response::MusicContinuation { None, map_res.c, ctoken, + ctx.visitor_data.map(str::to_owned), + ContinuationEndpoint::MusicBrowse, + ctx.authenticated, + ), + warnings: map_res.warnings, + }) + } +} + +impl MapResponse>> for response::Continuation { + fn map_response( + self, + ctx: &MapRespCtx<'_>, + ) -> Result>>, ExtractionError> { + let mut map_res = MapResult::default(); + let mut ctoken = None; + + let items = continuation_items(self); + for item in items.c { + match item { + response::YouTubeListItem::ItemSectionRenderer { header, contents } => { + let mut mapper = response::YouTubeListMapper::::new(ctx.lang); + mapper.map_response(contents); + mapper.conv_history_items( + header.map(|h| h.item_section_header_renderer.title), + &mut map_res, + ); + } + response::YouTubeListItem::ContinuationItemRenderer { + continuation_endpoint, + } => { + if ctoken.is_none() { + ctoken = Some(continuation_endpoint.continuation_command.token); + } + } + _ => {} + } + } + + Ok(MapResult { + c: Paginator::new_ext( None, + map_res.c, + ctoken, + ctx.visitor_data.map(str::to_owned), + ContinuationEndpoint::Browse, + ctx.authenticated, + ), + warnings: map_res.warnings, + }) + } +} + +impl MapResponse>> for response::MusicContinuation { + fn map_response( + self, + ctx: &MapRespCtx<'_>, + ) -> Result>>, ExtractionError> { + let mut map_res = MapResult::default(); + let mut continuations = Vec::new(); + + let mut map_shelf = |shelf: response::music_item::MusicShelf| { + let mut mapper = MusicListMapper::new(ctx.lang); + mapper.map_response(shelf.contents); + mapper.conv_history_items(shelf.title, &mut map_res); + continuations.extend(shelf.continuations); + }; + + match self.continuation_contents { + Some(response::music_item::ContinuationContents::MusicShelfContinuation(shelf)) => { + map_shelf(shelf); + } + Some(response::music_item::ContinuationContents::SectionListContinuation(contents)) => { + for c in contents.contents { + if let response::music_item::ItemSection::MusicShelfRenderer(shelf) = c { + map_shelf(shelf); + } + } + } + _ => {} + } + + let ctoken = continuations + .into_iter() + .next() + .map(|cont| cont.next_continuation_data.continuation); + + Ok(MapResult { + c: Paginator::new_ext( + None, + map_res.c, + ctoken, + ctx.visitor_data.map(str::to_owned), ContinuationEndpoint::MusicBrowse, ctx.authenticated, ), @@ -213,11 +314,6 @@ impl MapResponse> for response::MusicContinuation { impl Paginator { /// Get the next page from the paginator (or `None` if the paginator is exhausted) pub async fn next>(&self, query: Q) -> Result, Error> { - // let mut q = query.as_ref().clone(); - // if self.authenticated { - // q = q.authenticated(); - // } - Ok(match &self.ctoken { Some(ctoken) => { let q = if self.authenticated { @@ -319,6 +415,36 @@ impl Paginator { } } +impl Paginator> { + /// Get the next page from the paginator (or `None` if the paginator is exhausted) + pub async fn next>(&self, query: Q) -> Result, Error> { + Ok(match &self.ctoken { + Some(ctoken) => Some( + query + .as_ref() + .history_continuation(ctoken, self.visitor_data.as_deref()) + .await?, + ), + _ => None, + }) + } +} + +impl Paginator> { + /// Get the next page from the paginator (or `None` if the paginator is exhausted) + pub async fn next>(&self, query: Q) -> Result, Error> { + Ok(match &self.ctoken { + Some(ctoken) => Some( + query + .as_ref() + .music_history_continuation(ctoken, self.visitor_data.as_deref()) + .await?, + ), + _ => None, + }) + } +} + macro_rules! paginator { ($entity_type:ty) => { impl Paginator<$entity_type> { @@ -400,6 +526,8 @@ macro_rules! paginator { } paginator!(Comment); +paginator!(HistoryItem); +paginator!(HistoryItem); #[cfg(test)] mod tests { diff --git a/src/client/response/mod.rs b/src/client/response/mod.rs index 364ae56..e032444 100644 --- a/src/client/response/mod.rs +++ b/src/client/response/mod.rs @@ -209,6 +209,14 @@ pub(crate) struct TextBox { pub text: String, } +#[serde_as] +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct SimpleHeaderRenderer { + #[serde_as(as = "Text")] + pub title: String, +} + #[serde_as] #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] diff --git a/src/client/response/music_item.rs b/src/client/response/music_item.rs index b41af07..1138bac 100644 --- a/src/client/response/music_item.rs +++ b/src/client/response/music_item.rs @@ -4,7 +4,7 @@ use serde_with::{rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkip use crate::{ model::{ self, traits::FromYtItem, AlbumId, AlbumItem, AlbumType, ArtistId, ArtistItem, ChannelId, - MusicItem, MusicItemType, MusicPlaylistItem, TrackItem, UserItem, + HistoryItem, MusicItem, MusicItemType, MusicPlaylistItem, TrackItem, UserItem, }, param::Language, serializer::{ @@ -18,7 +18,7 @@ use super::{ url_endpoint::{ BrowseEndpointWrap, MusicPage, MusicPageType, MusicVideoType, NavigationEndpoint, PageType, }, - ContentsRenderer, MusicContinuationData, Thumbnails, ThumbnailsWrap, + ContentsRenderer, MusicContinuationData, SimpleHeaderRenderer, Thumbnails, ThumbnailsWrap, }; #[serde_as] @@ -39,6 +39,8 @@ pub(crate) enum ItemSection { #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct MusicShelf { + #[serde_as(as = "Option")] + pub title: Option, /// Playlist ID (only for playlists) pub playlist_id: Option, pub contents: MapResult>, @@ -396,15 +398,7 @@ pub(crate) struct GridRenderer { #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct GridHeader { - pub grid_header_renderer: GridHeaderRenderer, -} - -#[serde_as] -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct GridHeaderRenderer { - #[serde_as(as = "Text")] - pub title: String, + pub grid_header_renderer: SimpleHeaderRenderer, } #[derive(Debug, Deserialize)] @@ -419,14 +413,6 @@ pub(crate) struct SimpleHeader { pub music_header_renderer: SimpleHeaderRenderer, } -#[serde_as] -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct SimpleHeaderRenderer { - #[serde_as(as = "Text")] - pub title: String, -} - #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) enum TrackBadge { @@ -1257,6 +1243,26 @@ impl MusicListMapper { warnings: self.warnings, } } + + pub fn conv_history_items( + self, + date_txt: Option, + res: &mut MapResult>>, + ) { + res.warnings.extend(self.warnings); + res.c.extend( + self.items + .into_iter() + .filter_map(TrackItem::from_ytm_item) + .map(|item| HistoryItem { + item, + playback_date: date_txt.as_deref().and_then(|s| { + timeago::parse_textual_date_to_d(self.lang, s, &mut res.warnings) + }), + playback_date_txt: date_txt.clone(), + }), + ); + } } /// Map TextComponents containing artist names to a list of artists and a 'Various Artists' flag diff --git a/src/client/response/video_item.rs b/src/client/response/video_item.rs index 874e3a1..1541728 100644 --- a/src/client/response/video_item.rs +++ b/src/client/response/video_item.rs @@ -4,9 +4,12 @@ use serde_with::{ }; use time::OffsetDateTime; -use super::{ChannelBadge, ContentImage, ContinuationEndpoint, PhMetadataView, Thumbnails}; +use super::{ + ChannelBadge, ContentImage, ContinuationEndpoint, PhMetadataView, SimpleHeaderRenderer, + Thumbnails, +}; use crate::{ - model::{Channel, ChannelItem, ChannelTag, PlaylistItem, VideoItem, YouTubeItem}, + model::{Channel, ChannelItem, ChannelTag, HistoryItem, PlaylistItem, VideoItem, YouTubeItem}, param::Language, serializer::{ text::{AttributedText, Text, TextComponent}, @@ -63,6 +66,7 @@ pub(crate) enum YouTubeListItem { /// GridRenderer: contains videos on channel page #[serde(alias = "expandedShelfContentsRenderer", alias = "gridRenderer")] ItemSectionRenderer { + header: Option, #[serde(alias = "items")] contents: MapResult>, }, @@ -294,6 +298,12 @@ pub(crate) struct YouTubeListRenderer { pub contents: MapResult>, } +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct ItemSectionHeader { + pub item_section_header_renderer: SimpleHeaderRenderer, +} + #[serde_as] #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] @@ -833,7 +843,7 @@ impl YouTubeListMapper { YouTubeListItem::RichItemRenderer { content } => { self.map_item(*content); } - YouTubeListItem::ItemSectionRenderer { mut contents } => { + YouTubeListItem::ItemSectionRenderer { mut contents, .. } => { self.warnings.append(&mut contents.warnings); contents.c.into_iter().for_each(|it| self.map_item(it)); } @@ -881,7 +891,7 @@ impl YouTubeListMapper { YouTubeListItem::RichItemRenderer { content } => { self.map_item(*content); } - YouTubeListItem::ItemSectionRenderer { mut contents } => { + YouTubeListItem::ItemSectionRenderer { mut contents, .. } => { self.warnings.append(&mut contents.warnings); contents.c.into_iter().for_each(|it| self.map_item(it)); } @@ -893,6 +903,23 @@ impl YouTubeListMapper { self.warnings.append(&mut res.warnings); res.c.into_iter().for_each(|item| self.map_item(item)); } + + pub(crate) fn conv_history_items( + self, + date_txt: Option, + res: &mut MapResult>>, + ) { + res.warnings.extend(self.warnings); + res.c.extend(self.items.into_iter().map(|item| { + HistoryItem { + item, + playback_date: date_txt.as_deref().and_then(|s| { + timeago::parse_textual_date_to_d(self.lang, s, &mut res.warnings) + }), + playback_date_txt: date_txt.clone(), + } + })); + } } impl YouTubeListMapper { @@ -916,7 +943,7 @@ impl YouTubeListMapper { YouTubeListItem::RichItemRenderer { content } => { self.map_item(*content); } - YouTubeListItem::ItemSectionRenderer { mut contents } => { + YouTubeListItem::ItemSectionRenderer { mut contents, .. } => { self.warnings.append(&mut contents.warnings); contents.c.into_iter().for_each(|it| self.map_item(it)); } diff --git a/src/client/snapshots/rustypipe__client__history__tests__map_history.snap b/src/client/snapshots/rustypipe__client__history__tests__map_history.snap index fbb9397..faa1964 100644 --- a/src/client/snapshots/rustypipe__client__history__tests__map_history.snap +++ b/src/client/snapshots/rustypipe__client__history__tests__map_history.snap @@ -5,240 +5,260 @@ expression: map_res.c Paginator( count: None, items: [ - VideoItem( - id: "mPshy_DWxfo", - name: "trying TWEENING everything! (FAILED) PLEASE GIVE ME SOME ADVICEEE", - duration: Some(6), - thumbnail: [ - Thumbnail( - url: "https://i.ytimg.com/vi/mPshy_DWxfo/hqdefault.jpg?sqp=-oaymwFACKgBEF5IWvKriqkDMwgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAHwAQH4Af4JgALOBYoCDAgAEAEYfyAyKEAwDw==&rs=AOn4CLBfBVk2IGdGGGmpqOir2RbC8cY1xw", - width: 168, - height: 94, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/mPshy_DWxfo/hqdefault.jpg?sqp=-oaymwFACMQBEG5IWvKriqkDMwgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAHwAQH4Af4JgALOBYoCDAgAEAEYfyAyKEAwDw==&rs=AOn4CLDnRYKBX4qMlA54i-q3W7w1WvGApg", - width: 196, - height: 110, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/mPshy_DWxfo/hqdefault.jpg?sqp=-oaymwFBCPYBEIoBSFryq4qpAzMIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB8AEB-AH-CYACzgWKAgwIABABGH8gMihAMA8=&rs=AOn4CLDza_6r3345q6SBZvGm292mOobNPg", - width: 246, - height: 138, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/mPshy_DWxfo/hqdefault.jpg?sqp=-oaymwFBCNACELwBSFryq4qpAzMIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB8AEB-AH-CYACzgWKAgwIABABGH8gMihAMA8=&rs=AOn4CLDySwxxAy2hfw2YcAKs6ERLhzPTkQ", - width: 336, - height: 188, - ), - ], - channel: Some(ChannelTag( - id: "UCM7OXM6t80a3e3tzQDWxwEA", - name: "Ari", - avatar: [ + HistoryItem( + item: VideoItem( + id: "mPshy_DWxfo", + name: "trying TWEENING everything! (FAILED) PLEASE GIVE ME SOME ADVICEEE", + duration: Some(6), + thumbnail: [ Thumbnail( - url: "https://yt3.ggpht.com/TpeTKFR6QWu4Cjam4PcpQwCPMnammWnSg93CdBvgFFLhkGm4nbQkUFKaAIYJ1ChUy9IgmJIQMRg=s68-c-k-c0x00ffffff-no-rj", - width: 68, - height: 68, + url: "https://i.ytimg.com/vi/mPshy_DWxfo/hqdefault.jpg?sqp=-oaymwFACKgBEF5IWvKriqkDMwgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAHwAQH4Af4JgALOBYoCDAgAEAEYfyAyKEAwDw==&rs=AOn4CLBfBVk2IGdGGGmpqOir2RbC8cY1xw", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/mPshy_DWxfo/hqdefault.jpg?sqp=-oaymwFACMQBEG5IWvKriqkDMwgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAHwAQH4Af4JgALOBYoCDAgAEAEYfyAyKEAwDw==&rs=AOn4CLDnRYKBX4qMlA54i-q3W7w1WvGApg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/mPshy_DWxfo/hqdefault.jpg?sqp=-oaymwFBCPYBEIoBSFryq4qpAzMIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB8AEB-AH-CYACzgWKAgwIABABGH8gMihAMA8=&rs=AOn4CLDza_6r3345q6SBZvGm292mOobNPg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/mPshy_DWxfo/hqdefault.jpg?sqp=-oaymwFBCNACELwBSFryq4qpAzMIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB8AEB-AH-CYACzgWKAgwIABABGH8gMihAMA8=&rs=AOn4CLDySwxxAy2hfw2YcAKs6ERLhzPTkQ", + width: 336, + height: 188, ), ], - verification: none, - subscriber_count: None, - )), - publish_date: "[date]", - publish_date_txt: None, - view_count: Some(15), - is_live: false, - is_short: false, - is_upcoming: false, - short_description: None, + channel: Some(ChannelTag( + id: "UCM7OXM6t80a3e3tzQDWxwEA", + name: "Ari", + avatar: [ + Thumbnail( + url: "https://yt3.ggpht.com/TpeTKFR6QWu4Cjam4PcpQwCPMnammWnSg93CdBvgFFLhkGm4nbQkUFKaAIYJ1ChUy9IgmJIQMRg=s68-c-k-c0x00ffffff-no-rj", + width: 68, + height: 68, + ), + ], + verification: none, + subscriber_count: None, + )), + publish_date: None, + publish_date_txt: None, + view_count: Some(15), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: None, + ), + playback_date: "[date]", + playback_date_txt: Some("Yesterday"), ), - VideoItem( - id: "SRWatgS077k", - name: "My Time at \"Camp Operetta\"", - duration: Some(578), - thumbnail: [ - Thumbnail( - url: "https://i.ytimg.com/vi/SRWatgS077k/hqdefault.jpg?sqp=-oaymwEmCKgBEF5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAN8mzi3fbrJgqJiEeqpMZXRa7AuQ", - width: 168, - height: 94, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/SRWatgS077k/hqdefault.jpg?sqp=-oaymwEmCMQBEG5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLBgxonLRY-4QQ1-jR3Xen-fAZcHHQ", - width: 196, - height: 110, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/SRWatgS077k/hqdefault.jpg?sqp=-oaymwEnCPYBEIoBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLBOk1abznwO5Bm0_m5YXMFkU0JSog", - width: 246, - height: 138, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/SRWatgS077k/hqdefault.jpg?sqp=-oaymwEnCNACELwBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLCQt7cAJuE-W8t1TnQnSe5EVbsw8A", - width: 336, - height: 188, - ), - ], - channel: Some(ChannelTag( - id: "UCGwu0nbY2wSkW8N-cghnLpA", - name: "JaidenAnimations", - avatar: [ + HistoryItem( + item: VideoItem( + id: "SRWatgS077k", + name: "My Time at \"Camp Operetta\"", + duration: Some(578), + thumbnail: [ Thumbnail( - url: "https://yt3.ggpht.com/gopbHeiDtEB932rIFqLlR4D_hFtd-BcdGrQgGeyDpkD3guskkbT74DsJYPGo3x7MqkyqtgL-=s68-c-k-c0x00ffffff-no-rj", - width: 68, - height: 68, + url: "https://i.ytimg.com/vi/SRWatgS077k/hqdefault.jpg?sqp=-oaymwEmCKgBEF5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAN8mzi3fbrJgqJiEeqpMZXRa7AuQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/SRWatgS077k/hqdefault.jpg?sqp=-oaymwEmCMQBEG5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLBgxonLRY-4QQ1-jR3Xen-fAZcHHQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/SRWatgS077k/hqdefault.jpg?sqp=-oaymwEnCPYBEIoBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLBOk1abznwO5Bm0_m5YXMFkU0JSog", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/SRWatgS077k/hqdefault.jpg?sqp=-oaymwEnCNACELwBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLCQt7cAJuE-W8t1TnQnSe5EVbsw8A", + width: 336, + height: 188, ), ], - verification: verified, - subscriber_count: None, - )), - publish_date: "[date]", - publish_date_txt: None, - view_count: Some(23907328), - is_live: false, - is_short: false, - is_upcoming: false, - short_description: Some("What can I say other than that was one heck of a time\n\nScribble Showdown Tickets: https://www.scribbleshowdown.com/\n\n\n♥ The Team ♥\nDenny: https://www.instagram.com/90percentknuckles/\nAtrox:..."), + channel: Some(ChannelTag( + id: "UCGwu0nbY2wSkW8N-cghnLpA", + name: "JaidenAnimations", + avatar: [ + Thumbnail( + url: "https://yt3.ggpht.com/gopbHeiDtEB932rIFqLlR4D_hFtd-BcdGrQgGeyDpkD3guskkbT74DsJYPGo3x7MqkyqtgL-=s68-c-k-c0x00ffffff-no-rj", + width: 68, + height: 68, + ), + ], + verification: verified, + subscriber_count: None, + )), + publish_date: None, + publish_date_txt: None, + view_count: Some(23907328), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: Some("What can I say other than that was one heck of a time\n\nScribble Showdown Tickets: https://www.scribbleshowdown.com/\n\n\n♥ The Team ♥\nDenny: https://www.instagram.com/90percentknuckles/\nAtrox:..."), + ), + playback_date: "[date]", + playback_date_txt: Some("Yesterday"), ), - VideoItem( - id: "kTxlkDoqArA", - name: "Wie Cartoons Früher gemacht wurden!", - duration: Some(283), - thumbnail: [ - Thumbnail( - url: "https://i.ytimg.com/vi/kTxlkDoqArA/hqdefault.jpg?sqp=-oaymwEmCKgBEF5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLBYdDA06ekKDlhB0PSlTwf6Ih1cMg", - width: 168, - height: 94, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/kTxlkDoqArA/hqdefault.jpg?sqp=-oaymwEmCMQBEG5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAgu_Ad1pFCsa3jINV1ocaVOQWOXg", - width: 196, - height: 110, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/kTxlkDoqArA/hqdefault.jpg?sqp=-oaymwEnCPYBEIoBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLDkOVQbyZlrZ_jbdkSzUd5RiobObA", - width: 246, - height: 138, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/kTxlkDoqArA/hqdefault.jpg?sqp=-oaymwEnCNACELwBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLA5cnUH03I2lg1-FOJ01njh8UOJEw", - width: 336, - height: 188, - ), - ], - channel: Some(ChannelTag( - id: "UCxTHCMaxURhapisCMBv8y0A", - name: "Plankton", - avatar: [ + HistoryItem( + item: VideoItem( + id: "kTxlkDoqArA", + name: "Wie Cartoons Früher gemacht wurden!", + duration: Some(283), + thumbnail: [ Thumbnail( - url: "https://yt3.ggpht.com/Cdlsy3IXgis5hNYRwvohPB9AIxH8tNdEo9CwxXK1i3QEUO7YN3p4YJ_cd5ruGsmNhvoX7803=s68-c-k-c0x00ffffff-no-rj", - width: 68, - height: 68, + url: "https://i.ytimg.com/vi/kTxlkDoqArA/hqdefault.jpg?sqp=-oaymwEmCKgBEF5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLBYdDA06ekKDlhB0PSlTwf6Ih1cMg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/kTxlkDoqArA/hqdefault.jpg?sqp=-oaymwEmCMQBEG5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAgu_Ad1pFCsa3jINV1ocaVOQWOXg", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/kTxlkDoqArA/hqdefault.jpg?sqp=-oaymwEnCPYBEIoBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLDkOVQbyZlrZ_jbdkSzUd5RiobObA", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/kTxlkDoqArA/hqdefault.jpg?sqp=-oaymwEnCNACELwBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLA5cnUH03I2lg1-FOJ01njh8UOJEw", + width: 336, + height: 188, ), ], - verification: verified, - subscriber_count: None, - )), - publish_date: "[date]", - publish_date_txt: None, - view_count: Some(390010), - is_live: false, - is_short: false, - is_upcoming: false, - short_description: Some("Folgt mir auf Instagram!\nhttps://instagram.com/plankton.gif \n\nÜBER DEN KANAL:\nRede viel wenn der Tag lang ist"), + channel: Some(ChannelTag( + id: "UCxTHCMaxURhapisCMBv8y0A", + name: "Plankton", + avatar: [ + Thumbnail( + url: "https://yt3.ggpht.com/Cdlsy3IXgis5hNYRwvohPB9AIxH8tNdEo9CwxXK1i3QEUO7YN3p4YJ_cd5ruGsmNhvoX7803=s68-c-k-c0x00ffffff-no-rj", + width: 68, + height: 68, + ), + ], + verification: verified, + subscriber_count: None, + )), + publish_date: None, + publish_date_txt: None, + view_count: Some(390010), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: Some("Folgt mir auf Instagram!\nhttps://instagram.com/plankton.gif \n\nÜBER DEN KANAL:\nRede viel wenn der Tag lang ist"), + ), + playback_date: "[date]", + playback_date_txt: Some("Yesterday"), ), - VideoItem( - id: "oIVSKQ8NMqk", - name: "What I learned on highschool swim", - duration: Some(620), - thumbnail: [ - Thumbnail( - url: "https://i.ytimg.com/vi/oIVSKQ8NMqk/hqdefault.jpg?sqp=-oaymwEmCKgBEF5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAeTbOz6FlrH1x3jA4AwYcTGmUwxg", - width: 168, - height: 94, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/oIVSKQ8NMqk/hqdefault.jpg?sqp=-oaymwEmCMQBEG5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAEzpr1xBI-8jJwZz72NHj9VKyefA", - width: 196, - height: 110, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/oIVSKQ8NMqk/hqdefault.jpg?sqp=-oaymwEnCPYBEIoBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLBNzC8nvKtO7fmqzavWemou7QOLOg", - width: 246, - height: 138, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/oIVSKQ8NMqk/hqdefault.jpg?sqp=-oaymwEnCNACELwBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLA1_VgkVeq4ELmrQ8a4vhtJhg6TMA", - width: 336, - height: 188, - ), - ], - channel: Some(ChannelTag( - id: "UCsKVP_4zQ877TEiH_Ih5yDQ", - name: "illymation", - avatar: [ + HistoryItem( + item: VideoItem( + id: "oIVSKQ8NMqk", + name: "What I learned on highschool swim", + duration: Some(620), + thumbnail: [ Thumbnail( - url: "https://yt3.ggpht.com/ytc/AIdro_n3doafn2qRRawkYet_KQdH2Jl1ugSQnjnd0Ham12C9MYI=s68-c-k-c0x00ffffff-no-rj", - width: 68, - height: 68, + url: "https://i.ytimg.com/vi/oIVSKQ8NMqk/hqdefault.jpg?sqp=-oaymwEmCKgBEF5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAeTbOz6FlrH1x3jA4AwYcTGmUwxg", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/oIVSKQ8NMqk/hqdefault.jpg?sqp=-oaymwEmCMQBEG5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAEzpr1xBI-8jJwZz72NHj9VKyefA", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/oIVSKQ8NMqk/hqdefault.jpg?sqp=-oaymwEnCPYBEIoBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLBNzC8nvKtO7fmqzavWemou7QOLOg", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/oIVSKQ8NMqk/hqdefault.jpg?sqp=-oaymwEnCNACELwBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLA1_VgkVeq4ELmrQ8a4vhtJhg6TMA", + width: 336, + height: 188, ), ], - verification: verified, - subscriber_count: None, - )), - publish_date: "[date]", - publish_date_txt: None, - view_count: Some(6491367), - is_live: false, - is_short: false, - is_upcoming: false, - short_description: Some("okay, so I wasn\'t the BEST ... but I tried my best!\n▶ Black Friday Merch sale: https://www.hereforthechaos.com\n▶ SNEAK PEEKS ON PATREON! http://patreon.com/illymation\n\n▶ BG ARTIST: Ingrid..."), + channel: Some(ChannelTag( + id: "UCsKVP_4zQ877TEiH_Ih5yDQ", + name: "illymation", + avatar: [ + Thumbnail( + url: "https://yt3.ggpht.com/ytc/AIdro_n3doafn2qRRawkYet_KQdH2Jl1ugSQnjnd0Ham12C9MYI=s68-c-k-c0x00ffffff-no-rj", + width: 68, + height: 68, + ), + ], + verification: verified, + subscriber_count: None, + )), + publish_date: None, + publish_date_txt: None, + view_count: Some(6491367), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: Some("okay, so I wasn\'t the BEST ... but I tried my best!\n▶ Black Friday Merch sale: https://www.hereforthechaos.com\n▶ SNEAK PEEKS ON PATREON! http://patreon.com/illymation\n\n▶ BG ARTIST: Ingrid..."), + ), + playback_date: "[date]", + playback_date_txt: Some("Yesterday"), ), - VideoItem( - id: "X30eFeqrHJo", - name: "My Last Week of University!", - duration: Some(659), - thumbnail: [ - Thumbnail( - url: "https://i.ytimg.com/vi/X30eFeqrHJo/hqdefault.jpg?sqp=-oaymwEmCKgBEF5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAc6-vKGjlwODu5rDSHK2tz4sRzYQ", - width: 168, - height: 94, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/X30eFeqrHJo/hqdefault.jpg?sqp=-oaymwEmCMQBEG5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAE7jwC0MudkKK-I1nyGvCheljvtQ", - width: 196, - height: 110, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/X30eFeqrHJo/hqdefault.jpg?sqp=-oaymwEnCPYBEIoBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLAfIZ4htcNHP3RWahpR4XM7U-UTFQ", - width: 246, - height: 138, - ), - Thumbnail( - url: "https://i.ytimg.com/vi/X30eFeqrHJo/hqdefault.jpg?sqp=-oaymwEnCNACELwBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLDYMLObTeyxHK_PewK4Rwk3V-2KGw", - width: 336, - height: 188, - ), - ], - channel: Some(ChannelTag( - id: "UC6a8lp6vaCMhUVXPyynhjUA", - name: "Ruby Granger", - avatar: [ + HistoryItem( + item: VideoItem( + id: "X30eFeqrHJo", + name: "My Last Week of University!", + duration: Some(659), + thumbnail: [ Thumbnail( - url: "https://yt3.ggpht.com/u9qrR3ceVkt7yen48Rd1WWV_w-OdE5iejCNI2y-PyG0tpd7xlqWFDahsaZa02cMk7O-0WkCL=s68-c-k-c0x00ffffff-no-rj", - width: 68, - height: 68, + url: "https://i.ytimg.com/vi/X30eFeqrHJo/hqdefault.jpg?sqp=-oaymwEmCKgBEF5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAc6-vKGjlwODu5rDSHK2tz4sRzYQ", + width: 168, + height: 94, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/X30eFeqrHJo/hqdefault.jpg?sqp=-oaymwEmCMQBEG5IWvKriqkDGQgBFQAAiEIYAdgBAeIBCggYEAIYBjgBQAE=&rs=AOn4CLAE7jwC0MudkKK-I1nyGvCheljvtQ", + width: 196, + height: 110, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/X30eFeqrHJo/hqdefault.jpg?sqp=-oaymwEnCPYBEIoBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLAfIZ4htcNHP3RWahpR4XM7U-UTFQ", + width: 246, + height: 138, + ), + Thumbnail( + url: "https://i.ytimg.com/vi/X30eFeqrHJo/hqdefault.jpg?sqp=-oaymwEnCNACELwBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLDYMLObTeyxHK_PewK4Rwk3V-2KGw", + width: 336, + height: 188, ), ], - verification: verified, - subscriber_count: None, - )), - publish_date: "[date]", - publish_date_txt: None, - view_count: Some(132844), - is_live: false, - is_short: false, - is_upcoming: false, - short_description: Some("This first year has been somewhat hectic, and certainly was tricky in the first semester; however, I have enjoyed it immensely and, as I said, am sad that this term has now ended. I am returning..."), + channel: Some(ChannelTag( + id: "UC6a8lp6vaCMhUVXPyynhjUA", + name: "Ruby Granger", + avatar: [ + Thumbnail( + url: "https://yt3.ggpht.com/u9qrR3ceVkt7yen48Rd1WWV_w-OdE5iejCNI2y-PyG0tpd7xlqWFDahsaZa02cMk7O-0WkCL=s68-c-k-c0x00ffffff-no-rj", + width: 68, + height: 68, + ), + ], + verification: verified, + subscriber_count: None, + )), + publish_date: None, + publish_date_txt: None, + view_count: Some(132844), + is_live: false, + is_short: false, + is_upcoming: false, + short_description: Some("This first year has been somewhat hectic, and certainly was tricky in the first semester; however, I have enjoyed it immensely and, as I said, am sad that this term has now ended. I am returning..."), + ), + playback_date: "[date]", + playback_date_txt: Some("Yesterday"), ), ], ctoken: Some("4qmFsgJMEglGRWhpc3RvcnkaKENBSjZHbmx5WVRWb2QyOU9RMmR6U1RSaGNXMTFkMWxSTms4M05WcFKaAhRicm93c2UtZmVlZEZFaGlzdG9yeQ%3D%3D"), diff --git a/src/client/snapshots/rustypipe__client__music_history__tests__map_history.snap b/src/client/snapshots/rustypipe__client__music_history__tests__map_history.snap index 8ffb946..d025f4a 100644 --- a/src/client/snapshots/rustypipe__client__music_history__tests__map_history.snap +++ b/src/client/snapshots/rustypipe__client__music_history__tests__map_history.snap @@ -5,741 +5,833 @@ expression: map_res.c Paginator( count: Some(23), items: [ - TrackItem( - id: "-gBtW4GhF3Y", - name: "O Du fröhliche", - duration: Some(214), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), - name: "Helene Fischer", - ), - ], - artist_id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), - album: Some(AlbumId( - id: "MPREb_IBxM8XVyrqh", - name: "Weihnachten", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "-gBtW4GhF3Y", + name: "O Du fröhliche", + duration: Some(214), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), + name: "Helene Fischer", + ), + ], + artist_id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), + album: Some(AlbumId( + id: "MPREb_IBxM8XVyrqh", + name: "Weihnachten", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Today"), ), - TrackItem( - id: "nsV9bCW3sLM", - name: "Stille Nacht", - duration: Some(264), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), - name: "Helene Fischer", - ), - ], - artist_id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), - album: Some(AlbumId( - id: "MPREb_IBxM8XVyrqh", - name: "Weihnachten", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "nsV9bCW3sLM", + name: "Stille Nacht", + duration: Some(264), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), + name: "Helene Fischer", + ), + ], + artist_id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), + album: Some(AlbumId( + id: "MPREb_IBxM8XVyrqh", + name: "Weihnachten", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Today"), ), - TrackItem( - id: "3-oqGxnJTrA", - name: "Ihr Kinderlein kommet", - duration: Some(195), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), - name: "Helene Fischer", - ), - ], - artist_id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), - album: Some(AlbumId( - id: "MPREb_IBxM8XVyrqh", - name: "Weihnachten", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "3-oqGxnJTrA", + name: "Ihr Kinderlein kommet", + duration: Some(195), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), + name: "Helene Fischer", + ), + ], + artist_id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), + album: Some(AlbumId( + id: "MPREb_IBxM8XVyrqh", + name: "Weihnachten", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Today"), ), - TrackItem( - id: "xBby89eXe1g", - name: "Tochter Zion", - duration: Some(186), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), - name: "Helene Fischer", - ), - ], - artist_id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), - album: Some(AlbumId( - id: "MPREb_IBxM8XVyrqh", - name: "Weihnachten", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "xBby89eXe1g", + name: "Tochter Zion", + duration: Some(186), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), + name: "Helene Fischer", + ), + ], + artist_id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), + album: Some(AlbumId( + id: "MPREb_IBxM8XVyrqh", + name: "Weihnachten", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Today"), ), - TrackItem( - id: "ikyIeWgP6i4", - name: "Adeste Fideles", - duration: Some(236), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), - name: "Helene Fischer", - ), - ], - artist_id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), - album: Some(AlbumId( - id: "MPREb_IBxM8XVyrqh", - name: "Weihnachten", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "ikyIeWgP6i4", + name: "Adeste Fideles", + duration: Some(236), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/xH15w12BHaphTUcf1ivgy4Q6sZh1m3ZSklFqL6O9H5hixdtpzHHEDF48uSy3VDJJjaqf-SQurQmcPnhaCw=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), + name: "Helene Fischer", + ), + ], + artist_id: Some("UCE7_p3lcXA-YXRZp2PjrgYw"), + album: Some(AlbumId( + id: "MPREb_IBxM8XVyrqh", + name: "Weihnachten", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Today"), ), - TrackItem( - id: "u54XYn1nCZ8", - name: "Das Polizeiboot", - duration: Some(187), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/-IzX3AN3btJwzM7YzUtDRu8-40B_qNcQlckN26aHVFNopjA4wiRGLuDfiTPrSx8X-ULA-GdkcbGU57M=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/-IzX3AN3btJwzM7YzUtDRu8-40B_qNcQlckN26aHVFNopjA4wiRGLuDfiTPrSx8X-ULA-GdkcbGU57M=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UC_WzOax81EduoCiIrWQCrTw"), - name: "SpongeBob Schwammkopf", - ), - ], - artist_id: Some("UC_WzOax81EduoCiIrWQCrTw"), - album: Some(AlbumId( - id: "MPREb_M2trHaS2Z39", - name: "Quallendisco", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "u54XYn1nCZ8", + name: "Das Polizeiboot", + duration: Some(187), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/-IzX3AN3btJwzM7YzUtDRu8-40B_qNcQlckN26aHVFNopjA4wiRGLuDfiTPrSx8X-ULA-GdkcbGU57M=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/-IzX3AN3btJwzM7YzUtDRu8-40B_qNcQlckN26aHVFNopjA4wiRGLuDfiTPrSx8X-ULA-GdkcbGU57M=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UC_WzOax81EduoCiIrWQCrTw"), + name: "SpongeBob Schwammkopf", + ), + ], + artist_id: Some("UC_WzOax81EduoCiIrWQCrTw"), + album: Some(AlbumId( + id: "MPREb_M2trHaS2Z39", + name: "Quallendisco", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Today"), ), - TrackItem( - id: "acOEjiOH2v8", - name: "We Made It", - duration: Some(212), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/kpuoWhUjjFS0CR_Bz7OY4JSHXIYzbYTa9FWalcXudTAETr1EioLtSa5ua5vNcla0_aAbVjUe0zv-OQxWsw=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/kpuoWhUjjFS0CR_Bz7OY4JSHXIYzbYTa9FWalcXudTAETr1EioLtSa5ua5vNcla0_aAbVjUe0zv-OQxWsw=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCi3H2bHgaTFwrfwx_GOJyZw"), - name: "t-low", - ), - ArtistId( - id: Some("UCrWB2JlLx3-q8CUUiVXgedg"), - name: "Miksu / Macloud", - ), - ], - artist_id: Some("UCi3H2bHgaTFwrfwx_GOJyZw"), - album: Some(AlbumId( - id: "MPREb_fkur1VEwyKR", - name: "Percocet Party", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "acOEjiOH2v8", + name: "We Made It", + duration: Some(212), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/kpuoWhUjjFS0CR_Bz7OY4JSHXIYzbYTa9FWalcXudTAETr1EioLtSa5ua5vNcla0_aAbVjUe0zv-OQxWsw=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/kpuoWhUjjFS0CR_Bz7OY4JSHXIYzbYTa9FWalcXudTAETr1EioLtSa5ua5vNcla0_aAbVjUe0zv-OQxWsw=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCi3H2bHgaTFwrfwx_GOJyZw"), + name: "t-low", + ), + ArtistId( + id: Some("UCrWB2JlLx3-q8CUUiVXgedg"), + name: "Miksu / Macloud", + ), + ], + artist_id: Some("UCi3H2bHgaTFwrfwx_GOJyZw"), + album: Some(AlbumId( + id: "MPREb_fkur1VEwyKR", + name: "Percocet Party", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Today"), ), - TrackItem( - id: "Xg5dn6o-mME", - name: "Misfit Toys", - duration: Some(190), - cover: [ - Thumbnail( - url: "https://i.ytimg.com/vi/Xg5dn6o-mME/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3n1aZ8j7_o-eQbVtcbLCm2KSK2I6A", - width: 400, - height: 225, - ), - ], - artists: [ - ArtistId( - id: Some("UCr4IKNkUPPmkwE_LAjtho0g"), - name: "Pusha T", - ), - ], - artist_id: Some("UCr4IKNkUPPmkwE_LAjtho0g"), - album: None, - view_count: None, - track_type: episode, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "Xg5dn6o-mME", + name: "Misfit Toys", + duration: Some(190), + cover: [ + Thumbnail( + url: "https://i.ytimg.com/vi/Xg5dn6o-mME/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3n1aZ8j7_o-eQbVtcbLCm2KSK2I6A", + width: 400, + height: 225, + ), + ], + artists: [ + ArtistId( + id: Some("UCr4IKNkUPPmkwE_LAjtho0g"), + name: "Pusha T", + ), + ], + artist_id: Some("UCr4IKNkUPPmkwE_LAjtho0g"), + album: None, + view_count: None, + track_type: episode, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Today"), ), - TrackItem( - id: "Smy4qcyPMEc", - name: "Remember Me (Intro)", - duration: Some(101), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCGr1UQ4CwzRMmYoQfHQQWTg"), - name: "d4vd", - ), - ], - artist_id: Some("UCGr1UQ4CwzRMmYoQfHQQWTg"), - album: Some(AlbumId( - id: "MPREb_muqZ7sOFHBp", - name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "Smy4qcyPMEc", + name: "Remember Me (Intro)", + duration: Some(101), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCGr1UQ4CwzRMmYoQfHQQWTg"), + name: "d4vd", + ), + ], + artist_id: Some("UCGr1UQ4CwzRMmYoQfHQQWTg"), + album: Some(AlbumId( + id: "MPREb_muqZ7sOFHBp", + name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "cmEIneYW2yk", - name: "Paint The Town Blue (from the series Arcane League of Legends)", - duration: Some(115), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCn3fPGV_gVYAmpgb1APyQug"), - name: "Ashnikko", - ), - ], - artist_id: Some("UCn3fPGV_gVYAmpgb1APyQug"), - album: Some(AlbumId( - id: "MPREb_muqZ7sOFHBp", - name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "cmEIneYW2yk", + name: "Paint The Town Blue (from the series Arcane League of Legends)", + duration: Some(115), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCn3fPGV_gVYAmpgb1APyQug"), + name: "Ashnikko", + ), + ], + artist_id: Some("UCn3fPGV_gVYAmpgb1APyQug"), + album: Some(AlbumId( + id: "MPREb_muqZ7sOFHBp", + name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "HFVM4QE1qBA", - name: "To Ashes and Blood (from the series Arcane League of Legends)", - duration: Some(246), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCqishLHg7u5voH0sEmR-l6Q"), - name: "Woodkid", - ), - ], - artist_id: Some("UCqishLHg7u5voH0sEmR-l6Q"), - album: Some(AlbumId( - id: "MPREb_muqZ7sOFHBp", - name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "HFVM4QE1qBA", + name: "To Ashes and Blood (from the series Arcane League of Legends)", + duration: Some(246), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCqishLHg7u5voH0sEmR-l6Q"), + name: "Woodkid", + ), + ], + artist_id: Some("UCqishLHg7u5voH0sEmR-l6Q"), + album: Some(AlbumId( + id: "MPREb_muqZ7sOFHBp", + name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "O0qHqHt3JiY", - name: "Hellfire (from the series Arcane League of Legends)", - duration: Some(165), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCqRcnDXGwIt_mCXNuzKVqqg"), - name: "Fever 333", - ), - ], - artist_id: Some("UCqRcnDXGwIt_mCXNuzKVqqg"), - album: Some(AlbumId( - id: "MPREb_muqZ7sOFHBp", - name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "O0qHqHt3JiY", + name: "Hellfire (from the series Arcane League of Legends)", + duration: Some(165), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCqRcnDXGwIt_mCXNuzKVqqg"), + name: "Fever 333", + ), + ], + artist_id: Some("UCqRcnDXGwIt_mCXNuzKVqqg"), + album: Some(AlbumId( + id: "MPREb_muqZ7sOFHBp", + name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "rfDBTQNdj-M", - name: "Renegade (We Never Run) (from the series Arcane League of Legends) (feat. Jarina De Marco)", - duration: Some(162), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCm9GDfNgJCv-FJkWTIaiFIg"), - name: "Raja Kumari", - ), - ArtistId( - id: Some("UCfW0_9uspt55KDtOZNPcSFg"), - name: "Stefflon Don", - ), - ], - artist_id: Some("UCm9GDfNgJCv-FJkWTIaiFIg"), - album: Some(AlbumId( - id: "MPREb_muqZ7sOFHBp", - name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "rfDBTQNdj-M", + name: "Renegade (We Never Run) (from the series Arcane League of Legends) (feat. Jarina De Marco)", + duration: Some(162), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCm9GDfNgJCv-FJkWTIaiFIg"), + name: "Raja Kumari", + ), + ArtistId( + id: Some("UCfW0_9uspt55KDtOZNPcSFg"), + name: "Stefflon Don", + ), + ], + artist_id: Some("UCm9GDfNgJCv-FJkWTIaiFIg"), + album: Some(AlbumId( + id: "MPREb_muqZ7sOFHBp", + name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "_M409k9cOcg", - name: "특 S-Class", - duration: Some(196), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/MiN4KEyFzPNKECd0md-d4FtMpzbpVChSp_lWmh4w14CTfcLix05BOgS3TD5nQlrllMvp2_6T_e3lIJaD=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/MiN4KEyFzPNKECd0md-d4FtMpzbpVChSp_lWmh4w14CTfcLix05BOgS3TD5nQlrllMvp2_6T_e3lIJaD=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCIMmuidNJdncfMEelOU08Fg"), - name: "Stray Kids", - ), - ], - artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), - album: Some(AlbumId( - id: "MPREb_zR25p24PqIC", - name: "5-STAR", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "_M409k9cOcg", + name: "특 S-Class", + duration: Some(196), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/MiN4KEyFzPNKECd0md-d4FtMpzbpVChSp_lWmh4w14CTfcLix05BOgS3TD5nQlrllMvp2_6T_e3lIJaD=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/MiN4KEyFzPNKECd0md-d4FtMpzbpVChSp_lWmh4w14CTfcLix05BOgS3TD5nQlrllMvp2_6T_e3lIJaD=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCIMmuidNJdncfMEelOU08Fg"), + name: "Stray Kids", + ), + ], + artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), + album: Some(AlbumId( + id: "MPREb_zR25p24PqIC", + name: "5-STAR", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "MpG_ft84IoE", - name: "Sucker (from the series Arcane League of Legends)", - duration: Some(225), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UC5xpuW4UI520aDhKXGaJYgQ"), - name: "Marcus King", - ), - ], - artist_id: Some("UC5xpuW4UI520aDhKXGaJYgQ"), - album: Some(AlbumId( - id: "MPREb_muqZ7sOFHBp", - name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "MpG_ft84IoE", + name: "Sucker (from the series Arcane League of Legends)", + duration: Some(225), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UC5xpuW4UI520aDhKXGaJYgQ"), + name: "Marcus King", + ), + ], + artist_id: Some("UC5xpuW4UI520aDhKXGaJYgQ"), + album: Some(AlbumId( + id: "MPREb_muqZ7sOFHBp", + name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "g7W7MisCKWk", - name: "I Can\'t Hear It Now (from the series Arcane League of Legends)", - duration: Some(162), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCw5G4AVjJ_YI9BOTjj-v1iw"), - name: "Freya Ridings", - ), - ], - artist_id: Some("UCw5G4AVjJ_YI9BOTjj-v1iw"), - album: Some(AlbumId( - id: "MPREb_muqZ7sOFHBp", - name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "g7W7MisCKWk", + name: "I Can\'t Hear It Now (from the series Arcane League of Legends)", + duration: Some(162), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCw5G4AVjJ_YI9BOTjj-v1iw"), + name: "Freya Ridings", + ), + ], + artist_id: Some("UCw5G4AVjJ_YI9BOTjj-v1iw"), + album: Some(AlbumId( + id: "MPREb_muqZ7sOFHBp", + name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "B-XivnZunVM", - name: "Heavy Is The Crown (Original Score)", - duration: Some(102), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCjZCpUyBTuYRQhkYKZR_mdg"), - name: "Mike Shinoda", - ), - ArtistId( - id: Some("UCCDcGPkq3rOACsM5_j5QiHg"), - name: "Emily Armstrong", - ), - ], - artist_id: Some("UCjZCpUyBTuYRQhkYKZR_mdg"), - album: Some(AlbumId( - id: "MPREb_muqZ7sOFHBp", - name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "B-XivnZunVM", + name: "Heavy Is The Crown (Original Score)", + duration: Some(102), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/AYcl_X1V-eF8utaaVUlgmY-ibcQwE2BsY0RW6TdbZ5qAK8UNUfA5xaNiERyCHv2PpsXNh_L3hPZkmdM=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCjZCpUyBTuYRQhkYKZR_mdg"), + name: "Mike Shinoda", + ), + ArtistId( + id: Some("UCCDcGPkq3rOACsM5_j5QiHg"), + name: "Emily Armstrong", + ), + ], + artist_id: Some("UCjZCpUyBTuYRQhkYKZR_mdg"), + album: Some(AlbumId( + id: "MPREb_muqZ7sOFHBp", + name: "Arcane League of Legends: Season 2 (Soundtrack from the Animated Series)", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "ZeIneYtQ1rw", - name: "CASE 143", - duration: Some(192), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/gHEirg29K3Qf3JREf5nXADzhEsWvG60jF3qzOBTZ-ZLGRdNp64_lcj-pI5GMrkhy1JPU5EIDE4WgmpU=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/gHEirg29K3Qf3JREf5nXADzhEsWvG60jF3qzOBTZ-ZLGRdNp64_lcj-pI5GMrkhy1JPU5EIDE4WgmpU=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCIMmuidNJdncfMEelOU08Fg"), - name: "Stray Kids", - ), - ], - artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), - album: Some(AlbumId( - id: "MPREb_NuxPbSpDTkj", - name: "MAXIDENT", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "ZeIneYtQ1rw", + name: "CASE 143", + duration: Some(192), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/gHEirg29K3Qf3JREf5nXADzhEsWvG60jF3qzOBTZ-ZLGRdNp64_lcj-pI5GMrkhy1JPU5EIDE4WgmpU=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/gHEirg29K3Qf3JREf5nXADzhEsWvG60jF3qzOBTZ-ZLGRdNp64_lcj-pI5GMrkhy1JPU5EIDE4WgmpU=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCIMmuidNJdncfMEelOU08Fg"), + name: "Stray Kids", + ), + ], + artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), + album: Some(AlbumId( + id: "MPREb_NuxPbSpDTkj", + name: "MAXIDENT", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "8Go0B7mNcsU", - name: "Railway (방찬) Railway (Bang Chan)", - duration: Some(174), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCIMmuidNJdncfMEelOU08Fg"), - name: "Stray Kids", - ), - ], - artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), - album: Some(AlbumId( - id: "MPREb_hVsLiyk7ZIe", - name: "合 (HOP) HOP", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "8Go0B7mNcsU", + name: "Railway (방찬) Railway (Bang Chan)", + duration: Some(174), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCIMmuidNJdncfMEelOU08Fg"), + name: "Stray Kids", + ), + ], + artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), + album: Some(AlbumId( + id: "MPREb_hVsLiyk7ZIe", + name: "合 (HOP) HOP", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "of7yhvIadWo", - name: "Walkin On Water (HIP Ver.)", - duration: Some(176), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCIMmuidNJdncfMEelOU08Fg"), - name: "Stray Kids", - ), - ], - artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), - album: Some(AlbumId( - id: "MPREb_hVsLiyk7ZIe", - name: "合 (HOP) HOP", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "of7yhvIadWo", + name: "Walkin On Water (HIP Ver.)", + duration: Some(176), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCIMmuidNJdncfMEelOU08Fg"), + name: "Stray Kids", + ), + ], + artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), + album: Some(AlbumId( + id: "MPREb_hVsLiyk7ZIe", + name: "合 (HOP) HOP", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "iqeY3sz8ldk", - name: "U (feat. TABLO)", - duration: Some(164), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCIMmuidNJdncfMEelOU08Fg"), - name: "Stray Kids", - ), - ], - artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), - album: Some(AlbumId( - id: "MPREb_hVsLiyk7ZIe", - name: "合 (HOP) HOP", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "iqeY3sz8ldk", + name: "U (feat. TABLO)", + duration: Some(164), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCIMmuidNJdncfMEelOU08Fg"), + name: "Stray Kids", + ), + ], + artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), + album: Some(AlbumId( + id: "MPREb_hVsLiyk7ZIe", + name: "合 (HOP) HOP", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "vRmkqYlH-nA", - name: "Bounce Back", - duration: Some(184), - cover: [ - Thumbnail( - url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w60-h60-l90-rj", - width: 60, - height: 60, - ), - Thumbnail( - url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w120-h120-l90-rj", - width: 120, - height: 120, - ), - ], - artists: [ - ArtistId( - id: Some("UCIMmuidNJdncfMEelOU08Fg"), - name: "Stray Kids", - ), - ], - artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), - album: Some(AlbumId( - id: "MPREb_hVsLiyk7ZIe", - name: "合 (HOP) HOP", - )), - view_count: None, - track_type: track, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "vRmkqYlH-nA", + name: "Bounce Back", + duration: Some(184), + cover: [ + Thumbnail( + url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w60-h60-l90-rj", + width: 60, + height: 60, + ), + Thumbnail( + url: "https://lh3.googleusercontent.com/FV8clXeLy7dam8rYixnT7x-6nuTyb6qkusqgW4emZJYaU0XgKf95oIozIHvgB9BtETuneDd0XJauH3lO=w120-h120-l90-rj", + width: 120, + height: 120, + ), + ], + artists: [ + ArtistId( + id: Some("UCIMmuidNJdncfMEelOU08Fg"), + name: "Stray Kids", + ), + ], + artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), + album: Some(AlbumId( + id: "MPREb_hVsLiyk7ZIe", + name: "合 (HOP) HOP", + )), + view_count: None, + track_type: track, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), - TrackItem( - id: "ovHoY8UBIu8", - name: "Walkin On Water", - duration: Some(172), - cover: [ - Thumbnail( - url: "https://i.ytimg.com/vi/ovHoY8UBIu8/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3nT3hLBjoOobwzYb9uspvK59B2j7A", - width: 400, - height: 225, - ), - ], - artists: [ - ArtistId( - id: Some("UCIMmuidNJdncfMEelOU08Fg"), - name: "Stray Kids", - ), - ArtistId( - id: None, - name: "26M views", - ), - ], - artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), - album: None, - view_count: None, - track_type: video, - track_nr: None, - by_va: false, + HistoryItem( + item: TrackItem( + id: "ovHoY8UBIu8", + name: "Walkin On Water", + duration: Some(172), + cover: [ + Thumbnail( + url: "https://i.ytimg.com/vi/ovHoY8UBIu8/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3nT3hLBjoOobwzYb9uspvK59B2j7A", + width: 400, + height: 225, + ), + ], + artists: [ + ArtistId( + id: Some("UCIMmuidNJdncfMEelOU08Fg"), + name: "Stray Kids", + ), + ArtistId( + id: None, + name: "26M views", + ), + ], + artist_id: Some("UCIMmuidNJdncfMEelOU08Fg"), + album: None, + view_count: None, + track_type: video, + track_nr: None, + by_va: false, + ), + playback_date: "[date]", + playback_date_txt: Some("Last week"), ), ], ctoken: None, diff --git a/src/model/mod.rs b/src/model/mod.rs index 7e24ed0..acd4e20 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -1331,3 +1331,15 @@ pub struct MusicSearchSuggestion { /// Suggested music items pub items: Vec, } + +/// YouTube playback history entry +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[non_exhaustive] +pub struct HistoryItem { + /// History item + pub item: T, + /// Playback date + pub playback_date: Option, + /// Textual playback date + pub playback_date_txt: Option, +} diff --git a/src/util/date.rs b/src/util/date.rs index afa07e9..dde5d88 100644 --- a/src/util/date.rs +++ b/src/util/date.rs @@ -1,4 +1,4 @@ -use time::{Date, Month, OffsetDateTime}; +use time::{Date, Duration, Month, OffsetDateTime}; /// Shift a date by the given number of months. /// Ambiguous month-ends are shifted backwards as necessary. @@ -25,6 +25,11 @@ pub fn shift_years(date: Date, years: i32) -> Date { shift_months(date, years * 12) } +pub fn shift_weeks_mo(date: Date, weeks: i32) -> Date { + let d = date + Duration::weeks(weeks.into()); + Date::from_iso_week_date(d.year(), d.iso_week(), time::Weekday::Monday).unwrap() +} + /// Get the current datetime without milli/micro/nanoseconds pub fn now_sec() -> OffsetDateTime { OffsetDateTime::now_utc() diff --git a/src/util/dictionary.rs b/src/util/dictionary.rs index 22fab6a..52a8ffd 100644 --- a/src/util/dictionary.rs +++ b/src/util/dictionary.rs @@ -91,35 +91,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 12213676231523076107, disps: &[ - (4, 8), - (1, 0), - (7, 2), + (0, 4), + (2, 0), + (7, 5), + (16, 12), + (0, 21), ], entries: &[ + ("maart", 3), + ("julie", 7), + ("oktober", 10), ("nov", 11), - ("okt", 10), - ("apr", 4), - ("jun", 6), - ("mrt", 3), - ("aug", 8), ("des", 12), - ("mei", 5), + ("mrt", 3), + ("okt", 10), + ("aug", 8), + ("januarie", 1), ("jan", 1), - ("jul", 7), + ("mei", 5), + ("apr", 4), + ("augustus", 8), + ("april", 4), + ("november", 11), + ("desember", 12), ("sep", 9), ("feb", 2), + ("februarie", 2), + ("jun", 6), + ("jul", 7), + ("junie", 6), + ("september", 9), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ (0, 0), + (0, 2), + (5, 4), ], entries: &[ + ("donderdag", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("vandeesweek", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("maandag", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("vrydag", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("gister", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("woensdag", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("sondag", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("saterdag", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("dinsdag", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ("vandag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("verlede week", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: true, @@ -191,37 +215,58 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 7485420634051515786, + key: 12913932095322966823, disps: &[ - (2, 0), - (0, 10), - (9, 7), + (7, 12), + (4, 0), + (10, 6), + (4, 10), + (5, 5), ], entries: &[ - ("ሜይ", 5), - ("ሴፕቴ", 9), - ("ዲሴም", 12), - ("ፌብ", 2), - ("ፌብሩ", 2), - ("ኦገስ", 8), - ("ማርች", 3), - ("ኤፕሪ", 4), + ("ኤፕሪል", 4), ("ኦክቶ", 10), - ("ጃንዩ", 1), - ("ኖቬም", 11), ("ጁን", 6), ("ጃን", 1), + ("ኖቬም", 11), + ("ፌብሩዋሪ", 2), + ("ማርች", 3), + ("ኖቬምበር", 11), + ("ኦገስት", 8), + ("ዲሴም", 12), + ("ኦክቶበር", 10), + ("ኦገስ", 8), + ("ጃንዋሪ", 1), + ("ሜይ", 5), + ("ጃንዩ", 1), + ("ሴፕቴምበር", 9), ("ጁላይ", 7), + ("ፌብሩ", 2), + ("ፌብ", 2), + ("ዲሴምበር", 12), + ("ኤፕሪ", 4), + ("ሴፕቴ", 9), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ (0, 0), + (1, 0), + (3, 6), ], entries: &[ - ("ትላንት", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ("ዛሬ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ያለፈው ሳምንት", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ትላንት", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ሰኞ", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("እሑድ", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("ማክሰኞ", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ሐሙስ", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("ቅዳሜ", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("በዚህ ሳምንት", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ረቡዕ", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ዓርብ", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -313,18 +358,45 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 12913932095322966823, disps: &[ + (3, 0), + (0, 9), + (5, 10), ], entries: &[ + ("ديسمبر", 12), + ("يناير", 1), + ("فبراير", 2), + ("يوليو", 7), + ("يونيو", 6), + ("أبريل", 4), + ("سبتمبر", 9), + ("أكتوبر", 10), + ("مايو", 5), + ("أغسطس", 8), + ("مارس", 3), + ("نوفمبر", 11), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (0, 0), + (1, 0), + (1, 7), + (2, 8), ], entries: &[ - ("البارحة", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("الأحد", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("الاثنين", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("الجمعة", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("هذا الأسبوع", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("أمس", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("الأسبوع الماضي", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("اليوم", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("السبت", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("البارحة", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("الخميس", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("الثلاثاء", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("الأربعاء", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -387,18 +459,44 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 12913932095322966823, disps: &[ + (3, 11), + (2, 2), + (0, 0), ], 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{9be}ৰ\u{9cd}চ", 3), + ("জ\u{9c1}ল\u{9be}ই", 7), + ("নৱেম\u{9cd}বৰ", 11), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (1, 5), + (2, 0), + (0, 1), ], entries: &[ - ("আজি", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("এই সপ\u{9cd}ত\u{9be}হৰ", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("মঙ\u{9cd}গলব\u{9be}ৰ", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("দেওব\u{9be}ৰ", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("সোমব\u{9be}ৰ", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("ক\u{9be}লি", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("শনিব\u{9be}ৰ", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ব\u{9c1}ধব\u{9be}ৰ", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("আজি", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ব\u{9c3}হস\u{9cd}পতিব\u{9be}ৰ", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("যোৱ\u{9be} সপ\u{9cd}ত\u{9be}হৰ", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("শ\u{9c1}ক\u{9cd}ৰব\u{9be}ৰ", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -472,35 +570,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 8694567506910003252, + key: 12913932095322966823, disps: &[ - (1, 5), - (4, 0), - (0, 10), + (1, 14), + (1, 20), + (2, 17), + (1, 0), + (12, 2), ], entries: &[ + ("noyabr", 11), ("okt", 10), - ("sen", 9), - ("yan", 1), - ("mar", 3), - ("iyl", 7), - ("noy", 11), - ("dek", 12), - ("fev", 2), - ("iyn", 6), ("avq", 8), - ("may", 5), + ("dekabr", 12), + ("sen", 9), + ("avqust", 8), + ("fev", 2), + ("mart", 3), + ("oktyabr", 10), + ("dek", 12), + ("iyun", 6), ("apr", 4), + ("may", 5), + ("fevral", 2), + ("aprel", 4), + ("iyul", 7), + ("yan", 1), + ("iyn", 6), + ("sentyabr", 9), + ("noy", 11), + ("iyl", 7), + ("mar", 3), + ("yanvar", 1), ], }, timeago_nd_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ - (0, 0), + (2, 10), + (0, 6), + (7, 0), ], entries: &[ - ("dünən", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("cümə", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("bugün", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("çərşənbə axşamı", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("cümə axşamı", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("şənbə", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("bazar ertəsi", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("bazar", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("çərşənbə", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ötən həftə", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("bu həftə", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("dünən", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: true, @@ -589,35 +711,61 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, - disps: &[ - (11, 11), - (2, 2), - (0, 0), - ], - entries: &[ - ("лют", 2), - ("ліп", 7), - ("чэр", 6), - ("кас", 10), - ("сак", 3), - ("сту", 1), - ("сне", 12), - ("ліс", 11), - ("вер", 9), - ("кра", 4), - ("мая", 5), - ("жні", 8), - ], - }, - timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ (1, 0), + (4, 7), + (14, 23), + (0, 0), + (20, 15), ], entries: &[ - ("сёння", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("жні", 8), + ("лют", 2), + ("ліпень", 7), + ("май", 5), + ("сак", 3), + ("вер", 9), + ("верасень", 9), + ("кас", 10), + ("сакавік", 3), + ("красавік", 4), + ("кра", 4), + ("мая", 5), + ("жнівень", 8), + ("ліс", 11), + ("ліп", 7), + ("лістапад", 11), + ("студзень", 1), + ("сне", 12), + ("кастрычнік", 10), + ("чэрвень", 6), + ("люты", 2), + ("чэр", 6), + ("снежань", 12), + ("сту", 1), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 8694567506910003252, + disps: &[ + (6, 0), + (2, 9), + (0, 10), + ], + entries: &[ + ("учора", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("на мінулым тыдні", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("нядзеля", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("панядзелак", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("чацвер", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("серада", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("ўчора", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("сёння", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("аўторак", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("на гэтым тыдні", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("субота", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("пятніца", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -693,18 +841,44 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 12913932095322966823, disps: &[ + (0, 0), + (0, 0), + (11, 1), ], entries: &[ + ("август", 8), + ("декември", 12), + ("февруари", 2), + ("май", 5), + ("октомври", 10), + ("януари", 1), + ("юли", 7), + ("март", 3), + ("септември", 9), + ("април", 4), + ("ноември", 11), + ("юни", 6), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (0, 0), + (0, 3), + (3, 3), ], entries: &[ + ("вторник", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("сряда", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("тази седмица", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("вчера", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("понеделник", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("четвъртък", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("неделя", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("събота", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("петък", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("днес", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("последната седмица", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: true, @@ -763,35 +937,57 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 12913932095322966823, disps: &[ - (3, 4), - (2, 0), - (2, 3), + (0, 14), + (3, 20), + (7, 4), + (0, 0), + (3, 0), ], entries: &[ - ("অক\u{9cd}টো,", 10), - ("ফেব,", 2), - ("নভে,", 11), - ("জ\u{9be}ন\u{9c1},", 1), - ("ম\u{9be}র\u{9cd}চ,", 3), - ("আগ,", 8), - ("ডিসে,", 12), - ("জ\u{9c1}ন,", 6), - ("এপ\u{9cd}রি,", 4), - ("মে,", 5), - ("সেপ,", 9), - ("জ\u{9c1}ল,", 7), + ("মে", 5), + ("জ\u{9be}ন\u{9c1}", 1), + ("আগ", 8), + ("সেপ\u{9cd}টেম\u{9cd}বর", 9), + ("জ\u{9c1}ল", 7), + ("এপ\u{9cd}রি", 4), + ("নভে", 11), + ("জ\u{9c1}ন", 6), + ("জ\u{9c1}ল\u{9be}ই", 7), + ("ফেব\u{9cd}র\u{9c1}য\u{9bc}\u{9be}রী", 2), + ("জ\u{9be}ন\u{9c1}য\u{9bc}\u{9be}রী", 1), + ("নভেম\u{9cd}বর", 11), + ("ডিসে", 12), + ("এপ\u{9cd}রিল", 4), + ("অক\u{9cd}টোবর", 10), + ("ডিসেম\u{9cd}বর", 12), + ("সেপ", 9), + ("আগস\u{9cd}ট", 8), + ("ফেব", 2), + ("ম\u{9be}র\u{9cd}চ", 3), + ("অক\u{9cd}টো", 10), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ (0, 0), + (1, 4), + (0, 9), ], entries: &[ + ("শনিব\u{9be}র", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("গত সপ\u{9cd}ত\u{9be}হ", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("গতক\u{9be}ল", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("শ\u{9c1}ক\u{9cd}রব\u{9be}র", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("এই সপ\u{9cd}ত\u{9be}হে", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("আজ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("সোমব\u{9be}র", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("রবিব\u{9be}র", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("ব\u{9c1}ধব\u{9be}র", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ব\u{9c3}হস\u{9cd}পতিব\u{9be}র", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("মঙ\u{9cd}গলব\u{9be}র", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -880,35 +1076,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 10121458955350035957, + key: 12913932095322966823, disps: &[ + (0, 0), (0, 9), - (1, 6), - (5, 0), + (1, 1), + (12, 6), + (10, 1), ], entries: &[ + ("juni", 6), ("jul", 7), - ("okt", 10), ("sep", 9), + ("januar", 1), + ("februar", 2), ("nov", 11), - ("maj", 5), ("mar", 3), - ("apr", 4), ("feb", 2), + ("april", 4), ("jun", 6), - ("jan", 1), ("aug", 8), + ("mart", 3), + ("novembar", 11), + ("juli", 7), + ("septembar", 9), + ("jan", 1), + ("okt", 10), ("dec", 12), + ("oktobar", 10), + ("decembar", 12), + ("august", 8), + ("maj", 5), + ("apr", 4), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (1, 0), + (3, 9), + (4, 0), + (9, 6), ], entries: &[ + ("ponedjeljak", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("prošla sedmica", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("subota", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ("jučer", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ova sedmica", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("danas", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("utorak", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("nedjelja", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("petak", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("četvrtak", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("srijeda", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -983,33 +1203,55 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 12913932095322966823, disps: &[ - (4, 2), - (1, 7), - (1, 0), + (0, 8), + (6, 0), + (0, 6), + (4, 12), + (9, 6), ], entries: &[ - ("nov", 11), - ("jul", 7), - ("juny", 6), ("març", 3), - ("febr", 2), - ("set", 9), - ("des", 12), - ("d’ag", 8), + ("jul", 7), + ("octubre", 10), + ("abril", 4), + ("juliol", 7), + ("setembre", 9), + ("febrer", 2), ("gen", 1), - ("d’abr", 4), ("maig", 5), + ("desembre", 12), + ("gener", 1), + ("des", 12), + ("juny", 6), + ("d’abr", 4), + ("agost", 8), + ("novembre", 11), + ("set", 9), + ("d’ag", 8), ("d’oct", 10), + ("febr", 2), + ("nov", 11), ], }, timeago_nd_tokens: ::phf::Map { - key: 7485420634051515786, + key: 10121458955350035957, disps: &[ - (0, 0), + (7, 0), + (9, 0), + (8, 5), ], entries: &[ - ("avui", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("diumenge", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("la setmana passada", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("dilluns", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("dimecres", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("ahir", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("divendres", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("dimarts", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("aquesta setmana", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("avui", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("dijous", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("dissabte", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -1100,18 +1342,44 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 12913932095322966823, disps: &[ - ], - entries: &[ - ], - }, - timeago_nd_tokens: ::phf::Map { - key: 10121458955350035957, - disps: &[ + (0, 11), + (8, 11), (0, 0), ], entries: &[ - ("včera", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("říjen", 10), + ("listopad", 11), + ("prosinec", 12), + ("duben", 4), + ("září", 9), + ("leden", 1), + ("srpen", 8), + ("červen", 6), + ("únor", 2), + ("květen", 5), + ("červenec", 7), + ("březen", 3), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 8694567506910003252, + disps: &[ + (5, 5), + (5, 5), + (0, 0), + ], + entries: &[ + ("pátek", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("tento týden", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("čtvrtek", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("úterý", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("minulý týden", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("sobota", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ("dnes", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("včera", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("neděle", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("pondělí", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("středa", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -1180,35 +1448,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 10121458955350035957, + key: 15467950696543387533, disps: &[ - (0, 9), - (1, 6), - (5, 0), + (18, 13), + (4, 15), + (2, 13), + (0, 0), + (1, 13), ], entries: &[ - ("jul", 7), - ("okt", 10), - ("sep", 9), + ("januar", 1), ("nov", 11), - ("maj", 5), - ("mar", 3), - ("apr", 4), - ("feb", 2), + ("marts", 3), ("jun", 6), + ("mar", 3), + ("oktober", 10), + ("feb", 2), + ("december", 12), + ("jul", 7), + ("sep", 9), + ("november", 11), + ("juli", 7), + ("maj", 5), ("jan", 1), - ("aug", 8), ("dec", 12), + ("juni", 6), + ("april", 4), + ("apr", 4), + ("februar", 2), + ("aug", 8), + ("september", 9), + ("august", 8), + ("okt", 10), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ + (0, 3), (1, 0), + (1, 2), ], entries: &[ - ("dag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("onsdag", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("denne uge", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("sidste uge", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("mandag", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("tirsdag", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("torsdag", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("lørdag", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("søndag", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("fredag", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("går", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("dag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: true, @@ -1278,20 +1570,46 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 7485420634051515786, disps: &[ + (0, 0), + (1, 8), + (0, 3), ], entries: &[ + ("januar", 1), + ("august", 8), + ("februar", 2), + ("dezember", 12), + ("oktober", 10), + ("september", 9), + ("november", 11), + ("juli", 7), + ("juni", 6), + ("april", 4), + ("mai", 5), + ("märz", 3), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (10, 0), + (0, 7), + (0, 9), ], entries: &[ + ("diese woche", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("sonntag", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ("gestern", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("freitag", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("donnerstag", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("montag", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("letzte woche", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("mittwoch", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("samstag", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ("heute", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("dienstag", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -1367,32 +1685,58 @@ pub(crate) fn entry(lang: Language) -> Entry { key: 15467950696543387533, disps: &[ (0, 0), - (4, 0), - (0, 4), + (2, 0), + (8, 2), + (6, 19), + (13, 2), ], entries: &[ - ("ιουλ", 7), - ("δεκ", 12), - ("απρ", 4), - ("οκτ", 10), - ("σεπ", 9), - ("φεβ", 2), - ("νοε", 11), - ("μαΐ", 5), - ("ιουν", 6), - ("ιαν", 1), ("μαρ", 3), + ("μαΐ", 5), + ("σεπ", 9), + ("σεπτέμβριος", 9), + ("δεκέμβριος", 12), + ("φεβ", 2), + ("νοέμβριος", 11), + ("ιουλ", 7), + ("ιούνιος", 6), + ("απρίλιος", 4), + ("ιουν", 6), + ("δεκ", 12), + ("ιαν", 1), + ("ιανουάριος", 1), + ("ιούλιος", 7), + ("μάιος", 5), + ("απρ", 4), ("αυγ", 8), + ("αύγουστος", 8), + ("οκτ", 10), + ("οκτώβριος", 10), + ("φεβρουάριος", 2), + ("μάρτιος", 3), + ("νοε", 11), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 2126027241312876569, disps: &[ - (0, 0), + (3, 0), + (0, 7), + (8, 9), ], entries: &[ - ("χτες", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ("σήμερα", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("σάββατο", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("τετάρτη", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("χθες", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("παρασκευή", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("χτες", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("τρίτη", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("τελευταία εβδομάδα", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("πέμπτη", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("κυριακή", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("δευτέρα", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("αυτήν την εβδομάδα", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: true, @@ -1476,36 +1820,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 351906021642186605, disps: &[ - (8, 0), - (5, 8), + (17, 3), + (19, 19), (4, 0), + (0, 22), + (2, 6), ], entries: &[ - ("nov", 11), - ("sept", 9), - ("apr", 4), - ("dec", 12), - ("mar", 3), - ("jun", 6), - ("sep", 9), ("may", 5), + ("nov", 11), + ("june", 6), + ("april", 4), ("jul", 7), - ("jan", 1), + ("dec", 12), + ("october", 10), + ("mar", 3), ("oct", 10), - ("feb", 2), + ("november", 11), + ("sept", 9), + ("march", 3), + ("july", 7), + ("august", 8), ("aug", 8), + ("february", 2), + ("feb", 2), + ("sep", 9), + ("september", 9), + ("jun", 6), + ("january", 1), + ("jan", 1), + ("december", 12), + ("apr", 4), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (2, 0), + (2, 0), + (1, 5), ], entries: &[ + ("this week", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("wednesday", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("yesterday", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("monday", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("tuesday", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("sunday", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("saturday", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("thursday", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("last week", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("today", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("friday", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -1580,35 +1948,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 8602556344903797927, disps: &[ (1, 0), - (1, 6), - (0, 4), + (4, 16), + (2, 12), + (11, 3), + (0, 5), ], entries: &[ - ("jul", 7), - ("oct", 10), - ("ene", 1), - ("may", 5), - ("sept", 9), - ("feb", 2), - ("nov", 11), - ("dic", 12), - ("abr", 4), - ("jun", 6), - ("ago", 8), ("mar", 3), + ("septiembre", 9), + ("abr", 4), + ("nov", 11), + ("noviembre", 11), + ("abril", 4), + ("jul", 7), + ("diciembre", 12), + ("agosto", 8), + ("octubre", 10), + ("feb", 2), + ("jun", 6), + ("may", 5), + ("mayo", 5), + ("junio", 6), + ("oct", 10), + ("febrero", 2), + ("ago", 8), + ("dic", 12), + ("julio", 7), + ("enero", 1), + ("ene", 1), + ("sept", 9), + ("marzo", 3), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (1, 0), + (4, 10), + (3, 4), ], entries: &[ ("ayer", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sábado", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("martes", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("la semana pasada", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("lunes", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("miércoles", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("hoy", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("jueves", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("viernes", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("esta semana", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("domingo", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -1678,35 +2071,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 8602556344903797927, disps: &[ (1, 0), - (1, 6), - (0, 4), + (4, 16), + (2, 12), + (11, 3), + (0, 5), ], entries: &[ - ("jul", 7), - ("oct", 10), - ("ene", 1), - ("may", 5), - ("sept", 9), - ("feb", 2), - ("nov", 11), - ("dic", 12), - ("abr", 4), - ("jun", 6), - ("ago", 8), ("mar", 3), + ("septiembre", 9), + ("abr", 4), + ("nov", 11), + ("noviembre", 11), + ("abril", 4), + ("jul", 7), + ("diciembre", 12), + ("agosto", 8), + ("octubre", 10), + ("feb", 2), + ("jun", 6), + ("may", 5), + ("mayo", 5), + ("junio", 6), + ("oct", 10), + ("febrero", 2), + ("ago", 8), + ("dic", 12), + ("julio", 7), + ("enero", 1), + ("ene", 1), + ("sept", 9), + ("marzo", 3), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (1, 0), + (4, 10), + (3, 4), ], entries: &[ ("ayer", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sábado", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("martes", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("la semana pasada", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("lunes", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("miércoles", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("hoy", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("jueves", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("viernes", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("esta semana", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("domingo", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -1779,35 +2197,55 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 14108922650502679131, + key: 11210181029210336526, disps: &[ - (4, 0), - (2, 4), - (0, 3), + (1, 0), + (8, 16), + (5, 6), + (2, 12), ], entries: &[ - ("okt", 10), - ("aug", 8), - ("dets", 12), - ("mai", 5), - ("jaan", 1), - ("nov", 11), - ("juuni", 6), - ("märts", 3), - ("sept", 9), ("apr", 4), - ("veebr", 2), + ("september", 9), + ("aprill", 4), + ("dets", 12), + ("august", 8), + ("aug", 8), + ("oktoober", 10), + ("juuni", 6), + ("november", 11), + ("jaanuar", 1), ("juuli", 7), + ("veebruar", 2), + ("mai", 5), + ("sept", 9), + ("jaan", 1), + ("okt", 10), + ("detsember", 12), + ("märts", 3), + ("veebr", 2), + ("nov", 11), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ + (6, 1), (0, 0), + (0, 1), ], entries: &[ ("eile", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("laupäev", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("pühapäev", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("sellel nädalal", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("teisipäev", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("kolmapäev", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("eelmisel nädalal", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("esmaspäev", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("täna", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("neljapäev", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("reede", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -1869,35 +2307,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { - key: 15467950696543387533, + key: 4594751852016600049, disps: &[ - (1, 0), - (9, 5), - (2, 4), + (0, 2), + (3, 0), + (22, 22), + (6, 1), + (5, 6), ], entries: &[ - ("uzt", 7), - ("aza", 11), - ("ots", 2), - ("urr", 10), - ("mai", 5), ("urt", 1), - ("abu", 8), + ("mai", 5), + ("azaroa", 11), ("eka", 6), - ("abe", 12), - ("ira", 9), - ("mar", 3), ("api", 4), + ("mar", 3), + ("abendua", 12), + ("apirila", 4), + ("ekaina", 6), + ("otsaila", 2), + ("urtarrila", 1), + ("abu", 8), + ("abuztua", 8), + ("uztaila", 7), + ("uzt", 7), + ("abe", 12), + ("urr", 10), + ("martxoa", 3), + ("aza", 11), + ("maiatza", 5), + ("ira", 9), + ("ots", 2), + ("urria", 10), + ("iraila", 9), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (9, 10), + (2, 0), + (1, 6), ], entries: &[ - ("atzo", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("aste hau", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("igandea", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("larunbata", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ("gaur", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("asteazkena", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("joan den astea", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("astelehena", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("asteartea", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ostirala", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("osteguna", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("atzo", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: true, @@ -1954,35 +2417,51 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 7485420634051515786, disps: &[ (0, 0), - (4, 3), - (7, 8), + (2, 5), + (2, 13), + (0, 7), ], entries: &[ - ("دسامبر", 12), - ("ژانویه", 1), - ("مارس", 3), - ("ژوئیه", 7), - ("سپتامبر", 9), - ("آوریل", 4), - ("نوامبر", 11), - ("ژوئن", 6), - ("مه", 5), - ("اوت", 8), + ("فوریه\u{654}", 2), + ("ژوئیه\u{654}", 7), ("اکتبر", 10), + ("ژوئن", 6), + ("دسامبر", 12), ("فوریه", 2), + ("اوت", 8), + ("ژانویه\u{654}", 1), + ("ژانویه", 1), + ("آوریل", 4), + ("سپتامبر", 9), + ("ژوئیه", 7), + ("مه\u{654}", 5), + ("مارس", 3), + ("مه", 5), + ("نوامبر", 11), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (9, 8), + (0, 1), + (3, 0), ], entries: &[ - ("امروز", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ("دیروز", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("سه\u{200c}شنبه", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("امروز", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("پنجشنبه", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("جمعه", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("هفته قبل", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("چهارشنبه", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("یکشنبه", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("شنبه", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("این هفته", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("دوشنبه", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -2059,20 +2538,46 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 7485420634051515786, disps: &[ + (0, 3), + (0, 0), + (1, 3), ], entries: &[ + ("elokuu", 8), + ("syyskuu", 9), + ("joulukuu", 12), + ("marraskuu", 11), + ("maaliskuu", 3), + ("toukokuu", 5), + ("helmikuu", 2), + ("lokakuu", 10), + ("heinäkuu", 7), + ("huhtikuu", 4), + ("kesäkuu", 6), + ("tammikuu", 1), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (0, 0), + (4, 1), + (4, 1), + (4, 0), ], entries: &[ + ("tällä viikolla", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("viime viikolla", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("maanantai", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("tänään", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ("eilen", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("lauantai", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("perjantai", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("sunnuntai", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("keskiviikko", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("tiistai", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("torstai", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -2134,35 +2639,61 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, - disps: &[ - (2, 0), - (7, 3), - (4, 3), - ], - entries: &[ - ("abr", 4), - ("set", 9), - ("mar", 3), - ("may", 5), - ("hun", 6), - ("nob", 11), - ("okt", 10), - ("ene", 1), - ("hul", 7), - ("dis", 12), - ("ago", 8), - ("peb", 2), - ], - }, - timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 345707026197253659, disps: &[ + (2, 18), + (0, 0), + (14, 0), + (3, 13), (0, 0), ], entries: &[ - ("ngayong", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("setyembre", 9), + ("hun", 6), + ("dis", 12), + ("okt", 10), + ("set", 9), + ("agosto", 8), + ("hunyo", 6), + ("peb", 2), + ("oktubre", 10), + ("mar", 3), + ("ago", 8), + ("hul", 7), + ("marso", 3), + ("abr", 4), + ("nob", 11), + ("mayo", 5), + ("may", 5), + ("abril", 4), + ("nobyembre", 11), + ("disyembre", 12), + ("enero", 1), + ("pebrero", 2), + ("ene", 1), + ("hulyo", 7), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 7485420634051515786, + disps: &[ + (4, 6), + (0, 0), + (4, 11), + ], + entries: &[ + ("ngayon", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("martes", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ngayong linggo", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("miyerkules", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("lunes", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("sabado", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("huwebes", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ("kahapon", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ngayong", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("linggo", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("nakaraang linggo", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("biyernes", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -2234,36 +2765,58 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 12913932095322966823, disps: &[ - (10, 7), - (1, 0), - (3, 1), + (3, 15), + (3, 0), + (0, 8), + (4, 6), + (13, 6), ], entries: &[ - ("août", 8), - ("févr", 2), ("nov", 11), - ("sept", 9), - ("janv", 1), ("oct", 10), + ("septembre", 9), ("juin", 6), - ("déc", 12), ("juil", 7), + ("juillet", 7), ("mars", 3), ("avr", 4), + ("avril", 4), + ("novembre", 11), + ("sept", 9), + ("déc", 12), + ("décembre", 12), + ("août", 8), + ("octobre", 10), + ("janv", 1), + ("févr", 2), ("mai", 5), + ("janvier", 1), ("juill", 7), + ("février", 2), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (0, 0), + (8, 0), + (1, 9), + (5, 9), ], entries: &[ + ("dimanche", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("lundi", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("hier", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("mercredi", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("aujourd’hui", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("vendredi", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("cette semaine", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("aujourd'hui", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("la semaine dernière", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("samedi", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("mardi", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("jeudi", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -2339,35 +2892,58 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 8694567506910003252, + key: 12913932095322966823, disps: &[ + (2, 6), (2, 0), - (2, 10), - (2, 5), + (1, 21), + (6, 21), + (1, 15), ], entries: &[ - ("nov", 11), - ("abr", 4), - ("maio", 5), - ("ago", 8), ("mar", 3), - ("xuño", 6), + ("novembro", 11), + ("xullo", 7), + ("agosto", 8), + ("outubro", 10), ("xul", 7), + ("xan", 1), + ("decembro", 12), + ("febreiro", 2), + ("abril", 4), + ("dec", 12), + ("nov", 11), + ("maio", 5), + ("feb", 2), + ("xuño", 6), + ("setembro", 9), + ("ago", 8), + ("marzo", 3), + ("xaneiro", 1), + ("abr", 4), ("out", 10), ("set", 9), - ("feb", 2), - ("xan", 1), - ("dec", 12), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (0, 1), + (2, 0), + (5, 0), ], entries: &[ - ("hoxe", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ("onte", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("martes", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("hoxe", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("sábado", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("luns", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("xoves", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("esta semana", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("domingo", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("mércores", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("a semana pasada", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("venres", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -2425,35 +3001,53 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 12913932095322966823, disps: &[ + (2, 1), + (0, 2), + (14, 11), (1, 0), - (3, 11), - (4, 6), ], entries: &[ - ("ઑગસ\u{acd}ટ,", 8), - ("ફ\u{ac7}બ\u{acd}ર\u{ac1},", 2), - ("મ\u{ac7},", 5), - ("માર\u{acd}ચ,", 3), - ("નવ\u{ac7},", 11), - ("જાન\u{acd}ય\u{ac1},", 1), - ("એપ\u{acd}રિલ,", 4), - ("જ\u{ac1}લાઈ,", 7), - ("સપ\u{acd}ટ\u{ac7},", 9), - ("જ\u{ac2}ન,", 6), - ("ડિસ\u{ac7},", 12), - ("ઑક\u{acd}ટો,", 10), + ("સપ\u{acd}ટ\u{ac7}", 9), + ("નવ\u{ac7}મ\u{acd}બર", 11), + ("ડિસ\u{ac7}", 12), + ("ઑગસ\u{acd}ટ", 8), + ("નવ\u{ac7}", 11), + ("મ\u{ac7}", 5), + ("સપ\u{acd}ટ\u{ac7}મ\u{acd}બર", 9), + ("જ\u{ac1}લાઈ", 7), + ("ડિસ\u{ac7}મ\u{acd}બર", 12), + ("ઑક\u{acd}ટોબર", 10), + ("એપ\u{acd}રિલ", 4), + ("જ\u{ac2}ન", 6), + ("ઑક\u{acd}ટો", 10), + ("ફ\u{ac7}બ\u{acd}ર\u{ac1}આરી", 2), + ("જાન\u{acd}ય\u{ac1}", 1), + ("માર\u{acd}ચ", 3), + ("ફ\u{ac7}બ\u{acd}ર\u{ac1}", 2), + ("જાન\u{acd}ય\u{ac1}આરી", 1), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (0, 0), + (2, 0), + (2, 0), + (1, 4), ], entries: &[ - ("આજ\u{ac7}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ("ગઈકાલ\u{ac7}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("આજ\u{ac7}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("શ\u{ac1}ક\u{acd}રવાર", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("આ અઠવાડિય\u{ac7}", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ગ\u{ac1}ર\u{ac1}વાર", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("રવિવાર", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("બ\u{ac1}ધવાર", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("શનિવાર", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("છ\u{ac7}લ\u{acd}લ\u{ac1}\u{a82} અઠવાડિય\u{ac1}\u{a82}", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("મ\u{a82}ગળવાર", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("સોમવાર", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -2516,33 +3110,56 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 12913932095322966823, disps: &[ - (7, 0), - (2, 8), - (0, 2), + (2, 4), + (4, 14), + (1, 0), + (4, 15), + (3, 15), ], entries: &[ ("मार\u{94d}च", 3), - ("सित॰", 9), - ("फ\u{93c}र॰", 2), - ("नव॰", 11), - ("ज\u{942}न", 6), - ("अग॰", 8), - ("ज\u{941}ल॰", 7), - ("जन॰", 1), - ("मई", 5), - ("अक\u{94d}त\u{942}॰", 10), ("दिस॰", 12), + ("अक\u{94d}ट\u{942}॰", 10), + ("अक\u{94d}त\u{942}॰", 10), + ("ज\u{941}ल॰", 7), + ("अगस\u{94d}त", 8), + ("ज\u{942}न", 6), + ("अक\u{94d}ट\u{942}बर", 10), ("अप\u{94d}र\u{948}ल", 4), + ("दिस\u{902}बर", 12), + ("फ\u{93c}र॰", 2), + ("सित\u{902}बर", 9), + ("अक\u{94d}त\u{942}बर", 10), + ("सित॰", 9), + ("ज\u{941}लाई", 7), + ("मई", 5), + ("फ\u{93c}रवरी", 2), + ("जन॰", 1), + ("नव॰", 11), + ("जनवरी", 1), + ("अग॰", 8), + ("नव\u{902}बर", 11), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ (0, 0), + (6, 6), + (1, 0), ], entries: &[ - ("कल", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ("आज", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("शनिवार", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("कल", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("इस हफ\u{93c}\u{94d}त\u{947}", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("पिछल\u{947} हफ\u{93c}\u{94d}त\u{947}", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("रविवार", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("ग\u{941}र\u{941}वार", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("श\u{941}क\u{94d}रवार", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("म\u{902}गलवार", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("सोमवार", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("ब\u{941}धवार", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -2626,35 +3243,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 8694567506910003252, disps: &[ - (0, 8), - (0, 4), - (2, 0), + (0, 23), + (1, 9), + (5, 12), + (1, 0), + (16, 1), ], entries: &[ - ("lis", 10), - ("stu", 11), - ("velj", 2), - ("lip", 6), - ("svi", 5), - ("ruj", 9), - ("pro", 12), + ("studeni", 11), ("sij", 1), - ("kol", 8), - ("ožu", 3), + ("pro", 12), + ("travanj", 4), ("tra", 4), + ("listopad", 10), + ("svi", 5), + ("veljača", 2), ("srp", 7), + ("kol", 8), + ("svibanj", 5), + ("siječanj", 1), + ("velj", 2), + ("prosinac", 12), + ("srpanj", 7), + ("stu", 11), + ("kolovoz", 8), + ("rujan", 9), + ("lip", 6), + ("ruj", 9), + ("lipanj", 6), + ("ožu", 3), + ("lis", 10), + ("ožujak", 3), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (1, 1), + (1, 2), + (6, 0), ], entries: &[ + ("subota", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("petak", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("ponedjeljak", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("ovaj tjedan", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("jučer", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ("danas", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("utorak", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("srijeda", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("nedjelja", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("prošli tjedan", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("četvrtak", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -2727,35 +3369,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (5, 0), - (0, 10), - (6, 9), + (22, 19), + (8, 21), + (0, 12), + (1, 0), + (0, 5), ], entries: &[ - ("jan", 1), - ("jún", 6), + ("augusztus", 8), + ("március", 3), ("júl", 7), - ("márc", 3), - ("máj", 5), + ("jan", 1), + ("február", 2), + ("november", 11), + ("jún", 6), + ("szeptember", 9), + ("május", 5), ("dec", 12), - ("okt", 10), - ("ápr", 4), - ("nov", 11), + ("december", 12), + ("máj", 5), + ("június", 6), ("aug", 8), ("szept", 9), + ("július", 7), + ("április", 4), ("febr", 2), + ("márc", 3), + ("október", 10), + ("nov", 11), + ("január", 1), + ("ápr", 4), + ("okt", 10), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (1, 0), + (1, 7), + (10, 0), + (2, 0), ], entries: &[ - ("tegnap", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("szerda", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("szombat", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("múlt héten", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ezen a héten", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("csütörtök", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("vasárnap", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("péntek", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("kedd", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("hétfő", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("ma", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("tegnap", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: true, @@ -2820,35 +3487,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 8694567506910003252, disps: &[ - (3, 0), - (1, 0), - (3, 11), + (2, 3), + (0, 17), + (7, 0), + (15, 5), + (3, 1), ], entries: &[ - ("հոկ,", 10), - ("սեպ,", 9), - ("հլս,", 7), - ("նոյ,", 11), - ("մրտ,", 3), - ("փտվ,", 2), - ("դեկ,", 12), - ("օգս,", 8), - ("հնս,", 6), - ("հնվ,", 1), - ("մյս,", 5), - ("ապր,", 4), + ("սեպ", 9), + ("հուլիս", 7), + ("նոյ", 11), + ("մայիս", 5), + ("հնվ", 1), + ("նոյեմբեր", 11), + ("օգոստոս", 8), + ("սեպտեմբեր", 9), + ("հոկ", 10), + ("հլս", 7), + ("հնս", 6), + ("մյս", 5), + ("փտվ", 2), + ("հունիս", 6), + ("մրտ", 3), + ("օգս", 8), + ("ապրիլ", 4), + ("դեկտեմբեր", 12), + ("դեկ", 12), + ("փետրվար", 2), + ("մարտ", 3), + ("հունվար", 1), + ("հոկտեմբեր", 10), + ("ապր", 4), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (4, 7), + (2, 0), + (7, 3), ], entries: &[ - ("երեկ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("շաբաթ", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("չորեքշաբթի", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ուրբաթ", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("երկուշաբթի", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("այսօր", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("հինգշաբթի", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("երեքշաբթի", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("կիրակի", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("երեկ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("անցյալ շաբաթ", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("այս շաբաթ", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: true, @@ -2915,35 +3607,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 106375038446233661, + key: 15467950696543387533, disps: &[ - (0, 0), - (1, 7), - (0, 1), + (3, 0), + (4, 14), + (2, 14), + (0, 3), + (5, 3), ], entries: &[ - ("feb", 2), - ("mar", 3), - ("jul", 7), - ("jan", 1), + ("september", 9), ("agu", 8), - ("nov", 11), - ("mei", 5), - ("jun", 6), - ("des", 12), - ("sep", 9), ("okt", 10), + ("januari", 1), + ("jun", 6), + ("mar", 3), + ("nov", 11), + ("jul", 7), + ("mei", 5), + ("juli", 7), + ("februari", 2), + ("agustus", 8), + ("sep", 9), + ("november", 11), ("apr", 4), + ("des", 12), + ("jan", 1), + ("april", 4), + ("feb", 2), + ("desember", 12), + ("juni", 6), + ("oktober", 10), + ("maret", 3), ], }, timeago_nd_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ - (0, 0), + (1, 8), + (3, 0), + (5, 3), ], entries: &[ + ("jumat", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("selasa", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("minggu lalu", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("kamis", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ("ini", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("rabu", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("minggu", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("minggu ini", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("senin", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("kemarin", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sabtu", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -3022,32 +3738,56 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 15467950696543387533, disps: &[ - (6, 0), - (0, 9), - (3, 7), + (3, 10), + (5, 5), + (11, 0), + (0, 20), + (1, 3), ], entries: &[ - ("apr", 4), - ("júl", 7), - ("feb", 2), - ("nóv", 11), - ("ágú", 8), - ("okt", 10), ("des", 12), + ("ágúst", 8), + ("mars", 3), + ("janúar", 1), + ("ágú", 8), + ("feb", 2), ("sep", 9), - ("mar", 3), - ("maí", 5), + ("apr", 4), + ("nóv", 11), + ("febrúar", 2), ("jan", 1), + ("apríl", 4), + ("október", 10), + ("desember", 12), + ("júní", 6), + ("júlí", 7), + ("nóvember", 11), + ("september", 9), + ("maí", 5), + ("okt", 10), ("jún", 6), + ("júl", 7), + ("mar", 3), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (6, 0), + (0, 6), + (8, 3), ], entries: &[ + ("laugardagur", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("föstudagur", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("í síðustu viku", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("dag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("í vikunni", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("þriðjudagur", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("fimmtudagur", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("mánudagur", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("miðvikudagur", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("sunnudagur", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ("gær", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, @@ -3126,35 +3866,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 7485420634051515786, + key: 5516568623150984925, disps: &[ - (0, 0), - (0, 2), - (3, 1), + (1, 13), + (4, 16), + (5, 2), + (9, 0), + (2, 0), ], entries: &[ - ("apr", 4), - ("set", 9), - ("mag", 5), - ("gen", 1), - ("lug", 7), - ("nov", 11), - ("feb", 2), - ("ott", 10), - ("mar", 3), - ("dic", 12), - ("ago", 8), ("giu", 6), + ("febbraio", 2), + ("marzo", 3), + ("set", 9), + ("ago", 8), + ("agosto", 8), + ("mar", 3), + ("gen", 1), + ("maggio", 5), + ("feb", 2), + ("nov", 11), + ("novembre", 11), + ("mag", 5), + ("apr", 4), + ("dicembre", 12), + ("lug", 7), + ("aprile", 4), + ("gennaio", 1), + ("dic", 12), + ("settembre", 9), + ("ottobre", 10), + ("ott", 10), + ("luglio", 7), + ("giugno", 6), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (3, 0), + (3, 0), + (2, 2), ], entries: &[ + ("domenica", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("martedì", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("giovedì", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("lunedì", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("venerdì", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("sabato", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("mercoledì", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("questa settimana", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("ieri", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ("oggi", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ultima settimana", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: true, @@ -3236,35 +4001,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 7485420634051515786, disps: &[ + (1, 12), + (3, 14), + (6, 3), (0, 0), - (6, 1), - (0, 3), + (4, 19), ], entries: &[ - ("ביולי", 7), - ("ביוני", 6), + ("דצמבר", 12), + ("יוני", 6), + ("ספטמבר", 9), ("במרץ", 3), - ("בספט׳", 9), - ("בינו׳", 1), ("באוג׳", 8), - ("במאי", 5), - ("בדצמ׳", 12), - ("באוק׳", 10), + ("ביולי", 7), + ("אפריל", 4), ("בנוב׳", 11), - ("באפר׳", 4), + ("בדצמ׳", 12), + ("מאי", 5), + ("ביוני", 6), + ("אוקטובר", 10), + ("פברואר", 2), + ("במאי", 5), ("בפבר׳", 2), + ("אוגוסט", 8), + ("מרץ", 3), + ("באוק׳", 10), + ("יולי", 7), + ("נובמבר", 11), + ("בספט׳", 9), + ("באפר׳", 4), + ("ינואר", 1), + ("בינו׳", 1), ], }, timeago_nd_tokens: ::phf::Map { - key: 15467950696543387533, + key: 12913932095322966823, disps: &[ - (0, 0), + (1, 1), + (2, 0), + (0, 6), ], entries: &[ - ("היום", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("שישי", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("אתמול", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("שבת", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("בשבוע שעבר", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("השבוע", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("שלישי", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("היום", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("שני", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("רביעי", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ראשון", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("חמישי", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -3332,11 +4122,22 @@ pub(crate) fn entry(lang: Language) -> Entry { timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (0, 4), + (0, 3), + (4, 0), ], entries: &[ - ("本", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ("昨", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("土", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("水", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("先週", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("木", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("金", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("日", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("今週", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("本", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("火", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("月", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -3401,33 +4202,58 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 14108922650502679131, disps: &[ - (0, 5), - (1, 0), - (6, 5), + (4, 21), + (0, 0), + (2, 5), + (0, 20), + (2, 22), ], entries: &[ - ("თებ", 2), - ("აგვ", 8), - ("ნოე", 11), - ("აპრ", 4), - ("დეკ", 12), + ("თებერვალი", 2), ("სექ", 9), - ("ოქტ", 10), - ("ივნ", 6), - ("მაი", 5), + ("აპრ", 4), ("ივლ", 7), - ("იან", 1), + ("ივნისი", 6), + ("დეკემბერი", 12), + ("ნოემბერი", 11), + ("მარტი", 3), + ("იანვარი", 1), + ("სექტემბერი", 9), + ("ოქტ", 10), + ("აგვ", 8), + ("მაი", 5), + ("ოქტომბერი", 10), ("მარ", 3), + ("ივნ", 6), + ("იან", 1), + ("ივლისი", 7), + ("თებ", 2), + ("მაისი", 5), + ("ნოე", 11), + ("დეკ", 12), + ("აგვისტო", 8), + ("აპრილი", 4), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (0, 0), + (0, 6), + (9, 9), + (2, 0), ], entries: &[ + ("ორშაბათი", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("გასულ კვირაში", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("გუშინ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ოთხშაბათი", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("დღეს", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("კვირა", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("სამშაბათი", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("პარასკევი", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("ამ კვირაში", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ხუთშაბათი", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("შაბათი", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -3493,35 +4319,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { - key: 15467950696543387533, + key: 42584678569483946, disps: &[ - (3, 1), + (10, 8), + (0, 0), (1, 0), - (0, 6), + (3, 6), + (16, 1), ], entries: &[ - ("там", 8), - ("шіл", 7), - ("мау", 6), - ("мам", 5), - ("нау", 3), - ("қаз", 10), + ("маусым", 6), ("жел", 12), - ("ақп", 2), + ("ақпан", 2), + ("сәуір", 4), + ("мамыр", 5), + ("наурыз", 3), ("қар", 11), + ("желтоқсан", 12), + ("мам", 5), + ("тамыз", 8), + ("қыркүйек", 9), ("сәу", 4), - ("қыр", 9), + ("ақп", 2), + ("қаз", 10), + ("там", 8), + ("шілде", 7), ("қаң", 1), + ("қаңтар", 1), + ("шіл", 7), + ("қараша", 11), + ("мау", 6), + ("қыр", 9), + ("қазан", 10), + ("нау", 3), ], }, timeago_nd_tokens: ::phf::Map { - key: 15467950696543387533, + key: 10121458955350035957, disps: &[ - (0, 0), + (3, 0), + (2, 3), + (2, 2), ], entries: &[ + ("сәрсенбі", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("кеше", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("жексенбі", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("осы аптада", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("сенбі", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ("бүгін", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("жұма", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("бейсенбі", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("дүйсенбі", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("өткен аптада", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("сейсенбі", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -3607,11 +4458,24 @@ pub(crate) fn entry(lang: Language) -> Entry { timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ + (2, 2), (0, 0), + (4, 2), ], entries: &[ + ("ព\u{17bb}ធ", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ចន\u{17d2}ទ", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("បានធ\u{17d2}វើបច\u{17d2}ច\u{17bb}ប\u{17d2}បន\u{17d2}នភាពនៅថ\u{17d2}ងៃនេះ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ស\u{17bb}ក\u{17d2}រ", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("អង\u{17d2}គារ", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ("បានធ\u{17d2}វើបច\u{17d2}ច\u{17bb}ប\u{17d2}បន\u{17d2}នភាពម\u{17d2}ស\u{17b7}លម\u{17b7}ញ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("អាទ\u{17b7}ត\u{17d2}យ", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("ម\u{17d2}ស\u{17b7}លម\u{17b7}ញ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ព\u{17d2}រហស\u{17d2}បត\u{17b7}\u{17cd}", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("សៅរ\u{17cd}", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("សប\u{17d2}ដាហ\u{17cd}ម\u{17bb}ន", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("សប\u{17d2}ដាហ\u{17cd}នេះ", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ថ\u{17d2}ងៃនេះ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: true, @@ -3685,35 +4549,52 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (3, 0), + (0, 3), + (2, 2), (5, 2), - (2, 6), + (4, 0), ], entries: &[ - ("ಮಾರ\u{ccd}ಚ\u{ccd}", 3), - ("ಡ\u{cbf}ಸ\u{cc6}ಂ", 12), - ("ನವ\u{cc6}ಂ", 11), + ("ಅಕ\u{ccd}ಟ\u{ccb}", 10), + ("ಅಕ\u{ccd}ಟ\u{ccb}ಬರ\u{ccd}", 10), + ("ಜುಲ\u{cc8}", 7), + ("ನವ\u{cc6}ಂಬರ\u{ccd}", 11), ("ಫ\u{cc6}ಬ\u{ccd}ರವರ\u{cbf}", 2), - ("ಜ\u{cc2}ನ\u{ccd}", 6), - ("ಮೇ", 5), - ("ಜನವರ\u{cbf}", 1), - ("ಅಕ\u{ccd}ಟೋ", 10), - ("ಏಪ\u{ccd}ರ\u{cbf}", 4), - ("ಆಗಸ\u{ccd}ಟ\u{ccd}", 8), - ("ಜುಲೈ", 7), ("ಸ\u{cc6}ಪ\u{ccd}ಟ\u{cc6}ಂ", 9), + ("ಜ\u{cc2}ನ\u{ccd}", 6), + ("ಮ\u{cc7}", 5), + ("ನವ\u{cc6}ಂ", 11), + ("ಡ\u{cbf}ಸ\u{cc6}ಂಬರ\u{ccd}", 12), + ("ಸ\u{cc6}ಪ\u{ccd}ಟ\u{cc6}ಂಬರ\u{ccd}", 9), + ("ಡ\u{cbf}ಸ\u{cc6}ಂ", 12), + ("ಮಾರ\u{ccd}ಚ\u{ccd}", 3), + ("ಜನವರ\u{cbf}", 1), + ("ಏಪ\u{ccd}ರ\u{cbf}", 4), + ("ಏಪ\u{ccd}ರ\u{cbf}ಲ\u{ccd}", 4), + ("ಆಗಸ\u{ccd}ಟ\u{ccd}", 8), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (5, 2), + (1, 1), + (0, 0), ], entries: &[ ("ಇಂದು", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ಸ\u{ccb}ಮವಾರ", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("ಶನ\u{cbf}ವಾರ", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ಕಳ\u{cc6}ದ ವಾರ", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ಈ ವಾರ", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ಬುಧವಾರ", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ಮಂಗಳವಾರ", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ("ನ\u{cbf}ನ\u{ccd}ನ\u{cc6}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ಗುರುವಾರ", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("ಶುಕ\u{ccd}ರವಾರ", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("ಭಾನುವಾರ", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -3723,7 +4604,7 @@ pub(crate) fn entry(lang: Language) -> Entry { (0, 0), ], entries: &[ - ("ಕೋಟ\u{cbf}", 7), + ("ಕ\u{ccb}ಟ\u{cbf}", 7), ("ಲಕ\u{ccd}ಷ", 5), ], }, @@ -3733,7 +4614,7 @@ pub(crate) fn entry(lang: Language) -> Entry { (0, 0), ], entries: &[ - ("ವೀಕ\u{ccd}ಷಣ\u{cc6}ಗಳ\u{cbf}ಲ\u{ccd}ಲ", 0), + ("ವ\u{cc0}ಕ\u{ccd}ಷಣ\u{cc6}ಗಳ\u{cbf}ಲ\u{ccd}ಲ", 0), ], }, album_types: ::phf::Map { @@ -3742,9 +4623,9 @@ pub(crate) fn entry(lang: Language) -> Entry { (2, 0), ], entries: &[ - ("ಆಡ\u{cbf}ಯೋಬುಕ\u{ccd}", AlbumType::Audiobook), - ("ಶೋ", AlbumType::Show), - ("ಒಂದೇ", AlbumType::Single), + ("ಆಡ\u{cbf}ಯ\u{ccb}ಬುಕ\u{ccd}", AlbumType::Audiobook), + ("ಶ\u{ccb}", AlbumType::Show), + ("ಒಂದ\u{cc7}", AlbumType::Single), ("ep", AlbumType::Ep), ("ಆಲ\u{ccd}ಬಮ\u{ccd}", AlbumType::Album), ], @@ -3781,10 +4662,21 @@ pub(crate) fn entry(lang: Language) -> Entry { key: 12913932095322966823, disps: &[ (0, 0), + (0, 1), + (3, 1), ], entries: &[ - ("어제", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ("오늘", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("일요일", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("이번 주", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("수요일", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("금요일", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("목요일", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("월요일", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("화요일", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("어제", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("토요일", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("지난주", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: false, @@ -3846,35 +4738,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { - key: 14108922650502679131, + key: 8694567506910003252, disps: &[ - (0, 3), - (6, 10), - (2, 0), + (3, 2), + (10, 3), + (3, 0), + (18, 14), + (0, 2), ], entries: &[ + ("октябрь", 10), + ("сен", 9), ("май", 5), - ("фев", 2), - ("янв", 1), ("ноя", 11), ("июн", 6), + ("янв", 1), ("авг", 8), - ("сен", 9), + ("март", 3), ("дек", 12), - ("мар", 3), + ("апрель", 4), ("окт", 10), - ("апр", 4), + ("сентябрь", 9), + ("июль", 7), ("июл", 7), + ("ноябрь", 11), + ("фев", 2), + ("июнь", 6), + ("февраль", 2), + ("декабрь", 12), + ("август", 8), + ("январь", 1), + ("апр", 4), + ("мар", 3), ], }, timeago_nd_tokens: ::phf::Map { - key: 15467950696543387533, + key: 10121458955350035957, disps: &[ - (0, 0), + (1, 0), + (0, 3), + (6, 6), ], entries: &[ + ("бейшемби", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("жума", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("кечээ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ушул аптадагы", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("жекшемби", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("шейшемби", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("бүгүнкү", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ("бүгүн", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("өткөн аптадагы", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ишемби", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("шаршемби", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("дүйшөмбү", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -3941,35 +4858,62 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 106375038446233661, + key: 7485420634051515786, disps: &[ - (1, 0), - (5, 9), - (2, 0), + (2, 3), + (3, 11), + (21, 18), + (0, 8), + (3, 0), ], entries: &[ + ("ມກ", 1), ("ມນ", 3), - ("ກຍ", 9), + ("ເມສາ", 4), + ("ມສ", 4), + ("ທວ", 12), + ("ກພ", 2), + ("ສຫ", 8), + ("ກ\u{ecd}ລະກ\u{ebb}ດ", 7), + ("ມ\u{eb5}ນາ", 3), + ("ພຈ", 11), + ("ສ\u{eb4}ງຫາ", 8), + ("ມ\u{eb4}ຖ\u{eb8}ນາ", 6), + ("ກລ", 7), + ("ພ\u{eb6}ດສະພາ", 5), + ("ຕລ", 10), + ("ຕ\u{eb8}ລາ", 10), ("ມ\u{eb4}ຖ", 6), ("ພພ", 5), - ("ກລ", 7), - ("ມກ", 1), - ("ມສ", 4), - ("ສຫ", 8), - ("ກພ", 2), - ("ພຈ", 11), - ("ທວ", 12), - ("ຕລ", 10), + ("ກຍ", 9), + ("ກ\u{eb1}ນຍາ", 9), + ("ມ\u{eb1}ງກອນ", 1), + ("ພະຈ\u{eb4}ກ", 11), + ("ກ\u{eb8}ມພາ", 2), + ("ທ\u{eb1}ນວາ", 12), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (1, 0), + (10, 0), + (1, 1), + (2, 0), ], entries: &[ - ("ອ\u{eb1}ບເດດມ\u{eb7}\u{ec9}ນ\u{eb5}\u{ec9}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ວ\u{eb1}ນພະຫ\u{eb1}ດ", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ("ອ\u{eb1}ດເດດມ\u{eb7}\u{ec9}ວານນ\u{eb5}\u{ec9}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ວ\u{eb1}ນສ\u{eb8}ກ", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("ວ\u{eb1}ນອ\u{eb1}ງຄານ", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ວ\u{eb1}ນອາທ\u{eb4}ດ", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("ມ\u{eb7}\u{ec9}ວານນ\u{eb5}\u{ec9}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ມ\u{eb7}\u{ec9}ນ\u{eb5}\u{ec9}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ວ\u{eb1}ນຈ\u{eb1}ນ", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("ອາທ\u{eb4}ດຜ\u{ec8}ານມາ", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ວ\u{eb1}ນເສ\u{ebb}າ", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ອາທ\u{eb4}ດນ\u{eb5}\u{ec9}", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ອ\u{eb1}ບເດດມ\u{eb7}\u{ec9}ນ\u{eb5}\u{ec9}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ວ\u{eb1}ນພ\u{eb8}ດ", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -4064,18 +5008,44 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 12913932095322966823, disps: &[ + (1, 9), + (0, 0), + (6, 5), ], entries: &[ + ("spalis", 10), + ("vasaris", 2), + ("liepa", 7), + ("rugpjūtis", 8), + ("gruodis", 12), + ("rugsėjis", 9), + ("balandis", 4), + ("birželis", 6), + ("sausis", 1), + ("gegužė", 5), + ("lapkritis", 11), + ("kovas", 3), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (0, 0), + (9, 2), + (0, 7), + (4, 0), ], entries: &[ + ("šeštadienis", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("praėjusią savaitę", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("šiandien", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("trečiadienis", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("sekmadienis", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("penktadienis", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("pirmadienis", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("šią savaitę", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ketvirtadienis", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ("vakar", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("antradienis", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -4155,35 +5125,58 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (3, 11), - (0, 6), (0, 0), + (3, 18), + (0, 1), + (15, 18), + (1, 18), ], entries: &[ - ("sept", 9), - ("marts", 3), + ("jūnijs", 6), ("febr", 2), + ("janvāris", 1), + ("februāris", 2), + ("aug", 8), + ("jūl", 7), + ("oktobris", 10), + ("marts", 3), + ("apr", 4), + ("okt", 10), + ("decembris", 12), + ("jūlijs", 7), + ("sept", 9), + ("augusts", 8), + ("janv", 1), + ("nov", 11), + ("novembris", 11), ("jūn", 6), ("dec", 12), - ("nov", 11), - ("apr", 4), - ("jūl", 7), + ("septembris", 9), ("maijs", 5), - ("janv", 1), - ("aug", 8), - ("okt", 10), + ("aprīlis", 4), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ + (3, 5), (0, 0), + (0, 7), ], entries: &[ - ("šodien", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("iepriekšējā nedēļā", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("vakar", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("otrdiena", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("pirmdiena", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("sestdiena", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ceturtdiena", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("piektdiena", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("svētdiena", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("šodien", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("trešdiena", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("šajā nedēļā", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: true, @@ -4256,18 +5249,44 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 12913932095322966823, disps: &[ + (5, 0), + (4, 10), + (0, 10), ], entries: &[ + ("ноември", 11), + ("март", 3), + ("декември", 12), + ("октомври", 10), + ("мај", 5), + ("јуни", 6), + ("август", 8), + ("април", 4), + ("јануари", 1), + ("јули", 7), + ("септември", 9), + ("февруари", 2), ], }, timeago_nd_tokens: ::phf::Map { - key: 15467950696543387533, + key: 12913932095322966823, disps: &[ - (0, 0), + (2, 0), + (0, 7), + (3, 4), ], entries: &[ ("вчера", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("оваа седмица", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("сабота", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("четврток", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("вторник", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("минатата недела", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("петок", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("денес", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("понеделник", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("среда", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("недела", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -4330,35 +5349,57 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (10, 0), - (1, 11), + (0, 10), (1, 6), + (1, 14), + (6, 0), + (0, 2), ], entries: &[ - ("ഫെബ\u{d4d}ര\u{d41}", 2), - ("മേയ\u{d4d}", 5), + ("ജ\u{d42}ൺ", 6), + ("സെപ\u{d4d}റ\u{d4d}റം", 9), + ("മ\u{d3e}ർച\u{d4d}ച\u{d4d}", 3), + ("ഒക\u{d4d}\u{200c}ടോബർ", 10), + ("ഡിസംബർ", 12), ("ഓഗ", 8), - ("ഒക\u{d4d}ടോ", 10), + ("ഡിസം", 12), + ("സെപ\u{d4d}റ\u{d4d}റംബർ", 9), + ("നവംബർ", 11), + ("ജന\u{d41}", 1), + ("ഏപ\u{d4d}രിൽ", 4), + ("ഓഗസ\u{d4d}റ\u{d4d}റ\u{d4d}", 8), ("ജ\u{d42}ലൈ", 7), ("മ\u{d3e}ർ", 3), - ("ഏപ\u{d4d}രി", 4), - ("ജന\u{d41}", 1), - ("ജ\u{d42}ൺ", 6), ("നവം", 11), - ("സെപ\u{d4d}റ\u{d4d}റം", 9), - ("ഡിസം", 12), + ("ഫെബ\u{d4d}ര\u{d41}", 2), + ("മേയ\u{d4d}", 5), + ("ഏപ\u{d4d}രി", 4), + ("ജന\u{d41}വരി", 1), + ("ഒക\u{d4d}ടോ", 10), + ("ഫെബ\u{d4d}ര\u{d41}വരി", 2), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (0, 2), + (1, 0), + (10, 4), ], entries: &[ - ("ഇന\u{d4d}ന\u{d4d}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("വെള\u{d4d}ളിയ\u{d3e}ഴ\u{d4d}\u{200c}ച", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("കഴിഞ\u{d4d}ഞ ആഴ\u{d4d}ച", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("തിങ\u{d4d}കള\u{d3e}ഴ\u{d4d}\u{200c}ച", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("ചൊവ\u{d4d}വ\u{d3e}ഴ\u{d4d}\u{200c}ച", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ശനിയ\u{d3e}ഴ\u{d4d}\u{200c}ച", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ഈ ആഴ\u{d4d}\u{200c}ച", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ഞ\u{d3e}യറ\u{d3e}ഴ\u{d4d}\u{200c}ച", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ("ഇന\u{d4d}നലെ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ബ\u{d41}ധന\u{d3e}ഴ\u{d4d}\u{200c}ച", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ഇന\u{d4d}ന\u{d4d}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("വ\u{d4d}യ\u{d3e}ഴ\u{d3e}ഴ\u{d4d}\u{200c}ച", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -4423,20 +5464,43 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], months: ::phf::Map { - key: 12913932095322966823, + key: 14108922650502679131, disps: &[ + (5, 0), + (2, 9), ], entries: &[ + ("наймдугаар", 8), + ("есдүгээр", 9), + ("долоодугаар", 7), + ("тавдугаар", 5), + ("аравдугаар", 10), + ("хоёрдугаар", 12), + ("дөрөвдүгээр", 4), + ("зургаадугаар", 6), + ("нэгдүгээр", 11), + ("гуравдугаар", 3), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (8, 0), + (1, 6), + (0, 8), ], entries: &[ + ("баасан", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("өнөөдөр", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("даваа", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("энэ долоо хоног", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ням", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("өнгөрсөн долоо хоног", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("өчигдөр", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("лхагва", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("бямба", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("пүрэв", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("мягмар", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -4512,34 +5576,54 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 15467950696543387533, disps: &[ - (2, 4), - (0, 0), - (10, 10), + (2, 2), + (0, 14), + (6, 0), + (1, 14), ], entries: &[ - ("जान\u{947},", 1), - ("ऑक\u{94d}टो,", 10), - ("मार\u{94d}च,", 3), - ("ज\u{941}ल\u{948},", 7), - ("एप\u{94d}रि,", 4), - ("नोव\u{94d}ह\u{947}\u{902},", 11), - ("ज\u{942}न,", 6), - ("ऑग,", 8), - ("म\u{947},", 5), - ("सप\u{94d}ट\u{947}\u{902},", 9), - ("फ\u{947}ब\u{94d}र\u{941},", 2), - ("डिस\u{947}\u{902},", 12), + ("सप\u{94d}ट\u{947}\u{902}", 9), + ("नोव\u{94d}ह\u{947}\u{902}", 11), + ("एप\u{94d}रिल", 4), + ("ऑगस\u{94d}ट", 8), + ("डिस\u{947}\u{902}", 12), + ("ऑक\u{94d}टोबर", 10), + ("फ\u{947}ब\u{94d}र\u{941}", 2), + ("नोव\u{94d}ह\u{947}\u{902}बर", 11), + ("ज\u{941}ल\u{948}", 7), + ("एप\u{94d}रि", 4), + ("सप\u{94d}ट\u{947}\u{902}बर", 9), + ("जान\u{947}", 1), + ("मार\u{94d}च", 3), + ("फ\u{947}ब\u{94d}र\u{941}वारी", 2), + ("ज\u{942}न", 6), + ("ऑक\u{94d}टो", 10), + ("म\u{947}", 5), + ("डिस\u{947}\u{902}बर", 12), + ("ऑग", 8), + ("जान\u{947}वारी", 1), ], }, timeago_nd_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ + (1, 8), + (8, 3), (0, 0), ], entries: &[ - ("आज", TaToken { n: 0, unit: Some(TimeUnit::Day) }), - ("today", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("म\u{902}गळवार", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ग\u{941}र\u{941}वार", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ("काल", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("today", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("या आठवड\u{94d}यात", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("श\u{941}क\u{94d}रवार", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("आज", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("मागील आठवड\u{94d}यात", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ब\u{941}धवार", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("रविवार", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("सोमवार", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("शनिवार", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -4604,35 +5688,57 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (2, 1), - (3, 3), + (2, 17), + (15, 4), + (0, 7), (0, 0), + (0, 11), ], entries: &[ - ("jan", 1), - ("sep", 9), + ("feb", 2), + ("dis", 12), + ("november", 11), + ("september", 9), ("mac", 3), + ("januari", 1), + ("sep", 9), + ("julai", 7), ("jun", 6), + ("ogos", 8), + ("februari", 2), + ("okt", 10), + ("jul", 7), + ("disember", 12), + ("apr", 4), + ("jan", 1), + ("oktober", 10), + ("ogo", 8), + ("april", 4), ("mei", 5), ("nov", 11), - ("apr", 4), - ("feb", 2), - ("ogo", 8), - ("jul", 7), - ("dis", 12), - ("okt", 10), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (0, 0), + (0, 10), + (4, 0), + (5, 9), ], entries: &[ - ("semalam", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ahad", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ("ini", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("minggu ini", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("rabu", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("sabtu", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("minggu lepas", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("semalam", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("selasa", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("khamis", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("jumaat", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("isnin", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -4695,33 +5801,55 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 7485420634051515786, disps: &[ - (1, 2), - (5, 4), - (0, 0), + (6, 18), + (0, 18), + (7, 20), + (2, 0), + (2, 14), ], entries: &[ - ("မေ", 5), - ("ဩ", 8), - ("ဇ\u{103d}န\u{103a}", 6), - ("ဒ\u{102e}", 12), - ("စက\u{103a}", 9), - ("မတ\u{103a}", 3), - ("ဇန\u{103a}", 1), - ("ဇ\u{1030}", 7), - ("အောက\u{103a}", 10), ("န\u{102d}\u{102f}", 11), - ("ဖေ", 2), ("ဧ", 4), + ("ဒ\u{102e}ဇင\u{103a}ဘာ", 12), + ("စက\u{103a}တင\u{103a}ဘာ", 9), + ("ဇ\u{1030}လ\u{102d}\u{102f}င\u{103a}", 7), + ("ဇ\u{103d}န\u{103a}", 6), + ("ဖေ", 2), + ("ဧပြ\u{102e}", 4), + ("စက\u{103a}", 9), + ("ဒ\u{102e}", 12), + ("ဇန\u{103a}", 1), + ("န\u{102d}\u{102f}ဝင\u{103a}ဘာ", 11), + ("မတ\u{103a}", 3), + ("ဩဂ\u{102f}တ\u{103a}", 8), + ("ဩ", 8), + ("ဇန\u{103a}နဝါရ\u{102e}", 1), + ("အောက\u{103a}တ\u{102d}\u{102f}ဘာ", 10), + ("မေ", 5), + ("ဖေဖော\u{103a}ဝါရ\u{102e}", 2), + ("အောက\u{103a}", 10), + ("ဇ\u{1030}", 7), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ (0, 0), + (0, 0), + (5, 9), ], entries: &[ + ("တနင\u{103a}\u{1039}လာ", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("ကြာသပတေး", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("တနင\u{103a}\u{1039}ဂန\u{103d}ေ", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("စနေ", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ("ယနေ\u{1037}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ဗ\u{102f}ဒ\u{1039}ဓဟ\u{1030}း", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("သောကြာ", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("အင\u{103a}\u{1039}ဂါ", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ("မနေ\u{1037}က", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ယခ\u{102f}အပတ\u{103a}", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ယခင\u{103a}အပတ\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: false, @@ -4808,13 +5936,24 @@ pub(crate) fn entry(lang: Language) -> Entry { ], }, timeago_nd_tokens: ::phf::Map { - key: 15467950696543387533, + key: 12913932095322966823, disps: &[ - (1, 0), + (0, 4), + (7, 0), + (2, 9), ], entries: &[ + ("सोमबार", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("पछिल\u{94d}लो हप\u{94d}ता", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("यस हप\u{94d}ता", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("मङ\u{94d}गलबार", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("श\u{941}क\u{94d}रबार", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("आज", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ब\u{941}धबार", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("हिजो", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("बिहिबार", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("शनिबार", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("आइतबार", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -4883,35 +6022,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 7485420634051515786, disps: &[ - (7, 0), - (0, 6), - (0, 0), + (1, 18), + (12, 5), + (15, 21), + (5, 0), + (5, 16), ], entries: &[ - ("feb", 2), - ("sep", 9), ("mrt", 3), - ("jun", 6), - ("mei", 5), - ("nov", 11), - ("apr", 4), - ("aug", 8), - ("jul", 7), ("dec", 12), - ("jan", 1), + ("januari", 1), + ("feb", 2), + ("jul", 7), + ("juli", 7), + ("aug", 8), + ("november", 11), + ("maart", 3), + ("apr", 4), + ("juni", 6), + ("december", 12), + ("jun", 6), + ("april", 4), + ("nov", 11), + ("oktober", 10), + ("september", 9), + ("sep", 9), ("okt", 10), + ("augustus", 8), + ("februari", 2), + ("jan", 1), + ("mei", 5), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ (0, 0), + (3, 2), + (5, 10), ], entries: &[ - ("gisteren", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("afgelopen week", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("vandaag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("donderdag", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("vrijdag", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("maandag", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("zondag", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("woensdag", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("zaterdag", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("deze week", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("dinsdag", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("gisteren", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: true, @@ -4984,38 +6147,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 1937371814602216758, + key: 12913932095322966823, disps: &[ - (14, 0), - (10, 3), - (1, 8), + (0, 0), + (2, 3), + (0, 11), + (0, 17), + (7, 0), ], entries: &[ - ("jan", 1), + ("mai", 5), + ("september", 9), + ("nov", 11), + ("januar", 1), + ("november", 11), + ("desember", 12), ("mar", 3), - ("apr", 4), - ("jul", 7), - ("des", 12), - ("juli", 7), - ("okt", 10), - ("mars", 3), ("juni", 6), + ("jul", 7), + ("oktober", 10), + ("aug", 8), + ("mars", 3), + ("april", 4), + ("februar", 2), + ("apr", 4), + ("jan", 1), ("jun", 6), ("feb", 2), - ("aug", 8), - ("nov", 11), + ("des", 12), + ("juli", 7), + ("august", 8), ("sep", 9), - ("mai", 5), + ("okt", 10), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (0, 2), + (2, 0), + (8, 8), ], entries: &[ - ("dag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ("går", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("mandag", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("lørdag", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("torsdag", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("fredag", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("søndag", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("tirsdag", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("onsdag", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("forrige uke", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("dag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("denne uken", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: true, @@ -5106,11 +6290,22 @@ pub(crate) fn entry(lang: Language) -> Entry { timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (4, 0), + (0, 8), + (1, 2), ], entries: &[ + ("ମଙ\u{b4d}ଗଳବ\u{b3e}ର", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ଏହ\u{b3f} ସପ\u{b4d}ତ\u{b3e}ହ", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ଗତ ସପ\u{b4d}ତ\u{b3e}ହ", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ଶ\u{b41}କ\u{b4d}ରବ\u{b3e}ର", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("ରବ\u{b3f}ବ\u{b3e}ର", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ("ଆଜ\u{b3f}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ଗ\u{b41}ର\u{b41}ବ\u{b3e}ର", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("ସୋମବ\u{b3e}ର", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("ଗତକ\u{b3e}ଲ\u{b3f}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ଶନ\u{b3f}ବ\u{b3e}ର", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ବ\u{b41}ଧବ\u{b3e}ର", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -5179,35 +6374,57 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 8694567506910003252, + key: 7485420634051515786, disps: &[ - (1, 0), - (0, 0), - (0, 6), + (0, 5), + (0, 15), + (3, 0), + (4, 20), + (12, 7), ], entries: &[ - ("ਮਾਰਚ", 3), - ("ਜ\u{a42}ਨ", 6), - ("ਜਨ", 1), + ("ਅਗਸਤ", 8), + ("ਜ\u{a41}ਲਾ", 7), + ("ਅਪ\u{a4d}ਰ\u{a48}ਲ", 4), + ("ਨਵ\u{a70}ਬਰ", 11), + ("ਮਈ", 5), + ("ਸਤ\u{a70}ਬਰ", 9), + ("ਅਪ\u{a4d}ਰ\u{a48}", 4), ("ਨਵ\u{a70}", 11), ("ਦਸ\u{a70}", 12), - ("ਅਪ\u{a4d}ਰ\u{a48}", 4), - ("ਮਈ", 5), - ("ਜ\u{a41}ਲਾ", 7), + ("ਜਨਵਰੀ", 1), + ("ਜ\u{a42}ਨ", 6), + ("ਮਾਰਚ", 3), + ("ਦਸ\u{a70}ਬਰ", 12), + ("ਸਤ\u{a70}", 9), ("ਫ\u{a3c}ਰ", 2), ("ਅਗ", 8), - ("ਸਤ\u{a70}", 9), + ("ਅਕਤ\u{a42}ਬਰ", 10), + ("ਜਨ", 1), + ("ਫ\u{a3c}ਰਵਰੀ", 2), ("ਅਕਤ\u{a42}", 10), + ("ਜ\u{a41}ਲਾਈ", 7), ], }, timeago_nd_tokens: ::phf::Map { - key: 15467950696543387533, + key: 12913932095322966823, disps: &[ - (1, 0), + (2, 6), + (2, 0), + (0, 6), ], entries: &[ - ("ਅ\u{a71}ਜ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ਮ\u{a70}ਗਲਵਾਰ", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ਸ\u{a3c}\u{a41}\u{a71}ਕਰਵਾਰ", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("ਕ\u{a71}ਲ\u{a4d}ਹ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ਅ\u{a71}ਜ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ਬ\u{a41}\u{a71}ਧਵਾਰ", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ਐਤਵਾਰ", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("ਪਿਛਲ\u{a47} ਹਫ\u{a3c}ਤ\u{a47}", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ਸ\u{a4b}ਮਵਾਰ", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("ਵੀਰਵਾਰ", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("ਸ\u{a3c}ਨਿ\u{a71}ਚਰਵਾਰ", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ਇਸ ਹਫ\u{a3c}ਤ\u{a47}", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: false, @@ -5297,35 +6514,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 12913932095322966823, disps: &[ - (1, 4), - (10, 8), - (2, 0), + (1, 7), + (1, 8), + (4, 0), + (1, 7), + (13, 13), ], entries: &[ - ("lis", 11), - ("sty", 1), - ("wrz", 9), - ("lip", 7), + ("lipiec", 7), + ("kwiecień", 4), + ("grudzień", 12), + ("luty", 2), + ("sierpień", 8), + ("styczeń", 1), ("lut", 2), + ("czerwiec", 6), + ("kwi", 4), + ("wrzesień", 9), + ("lip", 7), ("paź", 10), + ("maj", 5), + ("październik", 10), + ("mar", 3), + ("wrz", 9), + ("marzec", 3), ("cze", 6), ("gru", 12), + ("sty", 1), + ("listopad", 11), + ("lis", 11), ("sie", 8), - ("maj", 5), - ("kwi", 4), - ("mar", 3), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 8694567506910003252, disps: &[ + (6, 8), + (0, 8), (0, 0), ], entries: &[ + ("sobota", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("poniedziałek", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("piątek", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("niedziela", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("w\u{a0}tym tygodniu", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("dzisiaj", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("wtorek", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("w zeszłym tygodniu", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("wczoraj", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("czwartek", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("środa", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("dziś", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: true, @@ -5398,34 +6640,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 7485420634051515786, disps: &[ - (1, 0), - (0, 3), - (3, 8), + (2, 9), + (16, 21), + (1, 1), + (4, 0), + (5, 4), ], entries: &[ - ("jan", 1), - ("out", 10), - ("nov", 11), ("dez", 12), - ("set", 9), - ("jul", 7), - ("fev", 2), - ("mar", 3), ("abr", 4), - ("mai", 5), - ("jun", 6), + ("novembro", 11), + ("mar", 3), ("ago", 8), + ("fev", 2), + ("dezembro", 12), + ("jun", 6), + ("mai", 5), + ("outubro", 10), + ("março", 3), + ("set", 9), + ("jan", 1), + ("julho", 7), + ("junho", 6), + ("nov", 11), + ("setembro", 9), + ("janeiro", 1), + ("out", 10), + ("abril", 4), + ("jul", 7), + ("maio", 5), + ("agosto", 8), + ("fevereiro", 2), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (6, 3), + (2, 0), + (4, 3), ], entries: &[ + ("quarta feira", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("terça feira", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("esta semana", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("sábado", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("sexta feira", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("hoje", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("domingo", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("segunda feira", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("quinta feira", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("semana passada", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("ontem", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, @@ -5498,19 +6765,45 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ + (1, 5), + (0, 6), + (6, 0), ], entries: &[ + ("setembro", 9), + ("julho", 7), + ("março", 3), + ("novembro", 11), + ("janeiro", 1), + ("maio", 5), + ("fevereiro", 2), + ("outubro", 10), + ("abril", 4), + ("dezembro", 12), + ("agosto", 8), + ("junho", 6), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (6, 3), + (2, 0), + (1, 4), ], entries: &[ + ("quarta feira", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("segunda feira", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("esta semana", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("sábado", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("sexta feira", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("hoje", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("domingo", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("a semana passada", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("quinta feira", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("terça feira", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ("ontem", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, @@ -5582,35 +6875,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 10121458955350035957, + key: 15467950696543387533, disps: &[ - (10, 3), - (1, 7), - (1, 0), + (0, 22), + (8, 3), + (2, 0), + (13, 8), + (2, 18), ], entries: &[ + ("martie", 3), + ("ianuarie", 1), + ("noiembrie", 11), + ("aprilie", 4), + ("sept", 9), + ("octombrie", 10), + ("aug", 8), ("iul", 7), - ("oct", 10), - ("apr", 4), + ("august", 8), + ("ian", 1), + ("iun", 6), ("dec", 12), - ("mai", 5), + ("apr", 4), ("feb", 2), ("mar", 3), + ("mai", 5), + ("februarie", 2), + ("iulie", 7), + ("septembrie", 9), + ("iunie", 6), + ("decembrie", 12), ("nov", 11), - ("sept", 9), - ("iun", 6), - ("aug", 8), - ("ian", 1), + ("oct", 10), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (0, 5), + (0, 0), + (9, 7), ], entries: &[ - ("astăzi", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("miercuri", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("marți", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ("ieri", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("săptămâna trecută", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("astăzi", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("luni", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("săptămâna aceasta", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("vineri", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("duminică", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("joi", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("sâmbătă", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -5699,35 +7016,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 8694567506910003252, + key: 12913932095322966823, disps: &[ - (1, 9), - (7, 3), - (1, 0), + (0, 15), + (7, 22), + (9, 18), + (4, 6), + (2, 0), ], entries: &[ - ("янв", 1), - ("сент", 9), - ("авг", 8), - ("июн", 6), - ("мая", 5), - ("апр", 4), + ("нояб", 11), + ("июнь", 6), ("февр", 2), + ("январь", 1), + ("июн", 6), + ("май", 5), + ("ноябрь", 11), + ("апр", 4), + ("сентябрь", 9), + ("мая", 5), + ("янв", 1), + ("март", 3), + ("октябрь", 10), + ("авг", 8), + ("апрель", 4), ("дек", 12), + ("август", 8), + ("декабрь", 12), + ("июль", 7), + ("февраль", 2), + ("мар", 3), + ("сент", 9), ("окт", 10), ("июл", 7), - ("нояб", 11), - ("мар", 3), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (0, 0), + (1, 3), + (3, 7), + (4, 0), ], entries: &[ - ("сегодня", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("на этой неделе", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("четверг", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ("вчера", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("вторник", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("пятница", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("понедельник", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("воскресенье", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("среда", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("суббота", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("на прошлой неделе", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("сегодня", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: true, @@ -5788,33 +7130,52 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 2), - (0, 0), - (0, 6), + (11, 13), + (13, 13), + (9, 0), + (10, 0), ], entries: &[ + ("ජනව\u{dcf}ර\u{dd2}", 1), + ("ජ\u{dd6}න\u{dd2}", 6), + ("පෙබරව\u{dcf}ර\u{dd2}", 2), + ("ඔක\u{dca}", 10), ("නොවැ", 11), - ("මැය\u{dd2}", 5), + ("දෙසැ", 12), + ("ජ\u{dd6}ල\u{dd2}", 7), + ("නොවැම\u{dca}බර\u{dca}", 11), + ("සැප\u{dca}තැම\u{dca}බර\u{dca}", 9), + ("දෙසැම\u{dca}බර\u{dca}", 12), + ("ජන", 1), + ("ම\u{dcf}ර\u{dca}ත\u{dd4}", 3), ("සැප\u{dca}", 9), ("අගෝ", 8), - ("ම\u{dcf}ර\u{dca}ත\u{dd4}", 3), - ("ජ\u{dd6}ල\u{dd2}", 7), - ("ඔක\u{dca}", 10), - ("පෙබ", 2), - ("ජන", 1), - ("දෙසැ", 12), - ("ජ\u{dd6}න\u{dd2}", 6), + ("මැය\u{dd2}", 5), + ("ඔක\u{dca}තෝබර\u{dca}", 10), ("අප\u{dca}\u{200d}රේල\u{dca}", 4), + ("පෙබ", 2), + ("අගෝස\u{dca}ත\u{dd4}", 8), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ (0, 0), + (0, 6), + (1, 0), ], entries: &[ - ("අද", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("මෙම සත\u{dd2}ය", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("ඊයේ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("පස\u{dd4}ග\u{dd2}ය සත\u{dd2}ය", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ඉර\u{dd2}ද\u{dcf}", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("බ\u{dca}\u{200d}රහස\u{dca}පත\u{dd2}න\u{dca}ද\u{dcf}", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("සඳ\u{dd4}ද\u{dcf}", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("අද", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("අඟහර\u{dd4}ව\u{dcf}ද\u{dcf}", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("බද\u{dcf}ද\u{dcf}", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("සෙනස\u{dd4}ර\u{dcf}ද\u{dcf}", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ස\u{dd2}ක\u{dd4}ර\u{dcf}ද\u{dcf}", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -5902,20 +7263,46 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ + (1, 0), + (3, 5), + (1, 0), ], entries: &[ + ("jún", 6), + ("október", 10), + ("august", 8), + ("marec", 3), + ("december", 12), + ("november", 11), + ("máj", 5), + ("apríl", 4), + ("september", 9), + ("júl", 7), + ("február", 2), + ("január", 1), ], }, timeago_nd_tokens: ::phf::Map { - key: 10121458955350035957, + key: 12913932095322966823, disps: &[ - (0, 0), + (0, 4), + (0, 7), + (4, 0), ], entries: &[ - ("včera", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("piatok", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), ("dnes", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("utorok", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("minulý týždeň", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("pondelok", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("štvrtok", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("včera", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("nedeľa", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("sobota", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("streda", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("tento týždeň", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: true, @@ -6011,33 +7398,57 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 15467950696543387533, disps: &[ - (3, 0), - (3, 4), - (0, 11), + (1, 16), + (2, 12), + (0, 1), + (0, 0), + (7, 8), ], entries: &[ - ("apr", 4), - ("jan", 1), - ("jul", 7), - ("jun", 6), - ("maj", 5), - ("mar", 3), - ("nov", 11), + ("januar", 1), ("feb", 2), - ("sep", 9), + ("mar", 3), + ("avgust", 8), + ("maj", 5), + ("oktober", 10), ("dec", 12), + ("nov", 11), + ("junij", 6), + ("sep", 9), + ("november", 11), + ("apr", 4), + ("julij", 7), + ("jan", 1), + ("april", 4), ("avg", 8), + ("jul", 7), + ("marec", 3), + ("februar", 2), + ("jun", 6), + ("september", 9), + ("december", 12), ("okt", 10), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ + (0, 3), + (0, 8), (0, 0), ], entries: &[ ("danes", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ta teden", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("petek", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("ponedeljek", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("torek", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("nedelja", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ("včeraj", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sreda", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("četrtek", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("sobota", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("prejšnji teden", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ], }, comma_decimal: true, @@ -6102,24 +7513,37 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 7485420634051515786, + key: 12913932095322966823, disps: &[ - (1, 0), - (1, 1), - (6, 6), + (2, 6), + (0, 9), + (2, 6), + (16, 2), + (3, 0), ], entries: &[ - ("shk", 2), ("dhj", 12), - ("mar", 3), - ("sht", 9), + ("shkurt", 2), ("gush", 8), - ("pri", 4), - ("qer", 6), + ("qershor", 6), + ("prill", 4), ("korr", 7), - ("maj", 5), + ("korrik", 7), + ("shtator", 9), + ("shk", 2), ("tet", 10), + ("gusht", 8), + ("nëntor", 11), + ("maj", 5), + ("qer", 6), + ("mar", 3), ("nën", 11), + ("pri", 4), + ("sht", 9), + ("tetor", 10), + ("janar", 1), + ("mars", 3), + ("dhjetor", 12), ("jan", 1), ], }, @@ -6127,10 +7551,21 @@ pub(crate) fn entry(lang: Language) -> Entry { key: 12913932095322966823, disps: &[ (1, 0), + (3, 8), + (1, 7), ], entries: &[ ("dje", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("këtë javë", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("enjte", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("javën e kaluar", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("sot", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("premte", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("hënë", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("martë", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("diel", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("shtunë", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("mërkurë", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -6207,20 +7642,46 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, - disps: &[ - ], - entries: &[ - ], - }, - timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ + (2, 8), + (1, 0), (0, 0), ], entries: &[ - ("јуче", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("мај", 5), + ("јануар", 1), + ("август", 8), + ("март", 3), + ("фебруар", 2), + ("новембар", 11), + ("јун", 6), + ("октобар", 10), + ("април", 4), + ("децембар", 12), + ("јул", 7), + ("септембар", 9), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (3, 10), + (0, 9), + (3, 0), + ], + entries: &[ ("данас", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("петак", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("субота", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("јуче", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("среда", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ове недеље", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("понедељак", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("прошле недеље", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("уторак", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("четвртак", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("недеља", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -6297,20 +7758,46 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ + (1, 3), + (5, 11), + (0, 0), ], entries: &[ + ("decembar", 12), + ("april", 4), + ("februar", 2), + ("jul", 7), + ("novembar", 11), + ("maj", 5), + ("jun", 6), + ("avgust", 8), + ("januar", 1), + ("septembar", 9), + ("oktobar", 10), + ("mart", 3), ], }, timeago_nd_tokens: ::phf::Map { - key: 15467950696543387533, + key: 12913932095322966823, disps: &[ + (1, 3), + (10, 3), (1, 0), ], entries: &[ + ("sreda", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("juče", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("prošle nedelje", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("petak", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("nedelja", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ("danas", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("utorak", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ove nedelje", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("subota", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ponedeljak", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("četvrtak", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -6383,35 +7870,55 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (0, 0), - (5, 5), - (4, 11), + (19, 6), + (2, 19), + (1, 0), + (10, 14), ], entries: &[ - ("sep", 9), - ("jan", 1), + ("januari", 1), ("okt", 10), - ("dec", 12), - ("nov", 11), - ("apr", 4), - ("feb", 2), - ("mars", 3), - ("aug", 8), ("juli", 7), + ("oktober", 10), + ("sep", 9), + ("mars", 3), + ("apr", 4), + ("april", 4), + ("feb", 2), ("maj", 5), + ("september", 9), + ("december", 12), + ("dec", 12), + ("augusti", 8), + ("februari", 2), + ("nov", 11), ("juni", 6), + ("november", 11), + ("aug", 8), + ("jan", 1), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (1, 0), + (2, 8), + (10, 3), + (4, 0), ], entries: &[ - ("dag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("tisdag", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("lördag", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("onsdag", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("måndag", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("söndag", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("förra veckan", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("går", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("dag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("den här veckan", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("fredag", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("torsdag", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -6471,35 +7978,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 12913932095322966823, disps: &[ - (4, 0), - (1, 4), - (6, 1), + (0, 17), + (2, 2), + (0, 0), + (11, 2), + (1, 10), ], entries: &[ - ("jan", 1), - ("jul", 7), - ("mac", 3), - ("feb", 2), + ("aprili", 4), ("nov", 11), - ("okt", 10), + ("januari", 1), + ("machi", 3), ("apr", 4), ("jun", 6), - ("sep", 9), - ("ago", 8), + ("feb", 2), + ("jul", 7), + ("septemba", 9), + ("jan", 1), + ("desemba", 12), + ("okt", 10), ("des", 12), + ("ago", 8), + ("sep", 9), ("mei", 5), + ("julai", 7), + ("mac", 3), + ("agosti", 8), + ("juni", 6), + ("februari", 2), + ("oktoba", 10), + ("novemba", 11), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ (1, 0), + (0, 0), + (2, 9), ], entries: &[ - ("leo", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ("jana", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("jumatano", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ijumaa", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("jumatatu", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("leo", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("jumamosi", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("alhamisi", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("wiki hii", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("jumanne", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("wiki iliyopita", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("jumapili", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -6577,35 +8108,57 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 10121458955350035957, + key: 12913932095322966823, disps: &[ - (0, 10), - (9, 8), - (3, 0), + (8, 2), + (0, 0), + (0, 3), + (1, 9), + (1, 16), ], entries: &[ - ("ஆக,", 8), - ("பிப\u{bcd},", 2), - ("ஏப\u{bcd},", 4), - ("அக\u{bcd},", 10), - ("டிச,", 12), - ("நவ,", 11), - ("ஜூலை,", 7), - ("ம\u{bbe}ர\u{bcd},", 3), - ("ஜன,", 1), - ("மே,", 5), - ("ஜூன\u{bcd},", 6), - ("செப\u{bcd},", 9), + ("ஆக", 8), + ("பிப\u{bcd}", 2), + ("டிச", 12), + ("ஏப\u{bcd}ரல\u{bcd}", 4), + ("நவ", 11), + ("ஜூன\u{bcd}", 6), + ("டிசம\u{bcd}பர\u{bcd}", 12), + ("மே", 5), + ("ம\u{bbe}ர\u{bcd}", 3), + ("அக\u{bcd}டோபர\u{bcd}", 10), + ("செப\u{bcd}டம\u{bcd}பர\u{bcd}", 9), + ("ஏப\u{bcd}", 4), + ("அக\u{bcd}", 10), + ("செப\u{bcd}", 9), + ("ஆகஸ\u{bcd}ட\u{bcd}", 8), + ("ஜன", 1), + ("நவம\u{bcd}பர\u{bcd}", 11), + ("ஜூலை", 7), + ("ஜனவரி", 1), + ("ம\u{bbe}ர\u{bcd}ச\u{bcd}", 3), + ("பிப\u{bcd}ரவரி", 2), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ (0, 0), + (0, 6), + (5, 1), ], entries: &[ + ("கடந\u{bcd}த வ\u{bbe}ரம\u{bcd}", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("புதன\u{bcd}", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("நேற\u{bcd}று", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("திங\u{bcd}கள\u{bcd}", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("செவ\u{bcd}வ\u{bbe}ய\u{bcd}", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("சனி", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("வெள\u{bcd}ளி", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("விய\u{bbe}ழன\u{bcd}", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("இந\u{bcd}த வ\u{bbe}ரம\u{bcd}", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("இன\u{bcd}று", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ஞ\u{bbe}யிறு", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -6678,35 +8231,56 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 7485420634051515786, disps: &[ - (5, 6), - (0, 0), - (1, 0), + (3, 0), + (0, 13), + (3, 6), + (15, 9), ], entries: &[ - ("ఏప\u{c4d}ర\u{c3f},", 4), - ("జన,", 1), - ("డ\u{c3f}స\u{c46}ం,", 12), - ("ఫ\u{c3f}బ\u{c4d}ర,", 2), - ("అక\u{c4d}ట\u{c4b},", 10), - ("నవం,", 11), - ("మ\u{c47},", 5), - ("జూన\u{c4d},", 6), - ("స\u{c46}ప\u{c4d}ట\u{c46}ం,", 9), - ("ఆగ,", 8), - ("జుల\u{c48},", 7), - ("మ\u{c3e}ర\u{c4d}చ\u{c3f},", 3), + ("నవం", 11), + ("ఆగస\u{c4d}టు", 8), + ("మ\u{c47}", 5), + ("జుల\u{c48}", 7), + ("నవంబర\u{c4d}", 11), + ("ఏప\u{c4d}ర\u{c3f}ల\u{c4d}", 4), + ("ఫ\u{c3f}బ\u{c4d}ర", 2), + ("ఫ\u{c3f}బ\u{c4d}రవర\u{c3f}", 2), + ("డ\u{c3f}స\u{c46}ంబర\u{c4d}", 12), + ("మ\u{c3e}ర\u{c4d}చ\u{c3f}", 3), + ("జనవర\u{c3f}", 1), + ("డ\u{c3f}స\u{c46}ం", 12), + ("స\u{c46}ప\u{c4d}ట\u{c46}ం", 9), + ("స\u{c46}ప\u{c4d}ట\u{c46}ంబర\u{c4d}", 9), + ("ఆగ", 8), + ("జూన\u{c4d}", 6), + ("జన", 1), + ("అక\u{c4d}ట\u{c4b}", 10), + ("ఏప\u{c4d}ర\u{c3f}", 4), + ("అక\u{c4d}ట\u{c4b}బర\u{c4d}", 10), ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 2980949210194914378, disps: &[ - (1, 0), + (3, 10), + (2, 9), + (2, 0), ], entries: &[ - ("ఈ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("శుక\u{c4d}రవ\u{c3e}రం", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("గురువ\u{c3e}రం", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("మంగళవ\u{c3e}రం", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ("న\u{c3f}న\u{c4d}న", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("న\u{c47}డు", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("శన\u{c3f}వ\u{c3e}రం", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("బుధవ\u{c3e}రం", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("స\u{c4b}మవ\u{c3e}రం", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("గత వ\u{c3e}రం", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ఈ వ\u{c3e}రం", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("ఆద\u{c3f}వ\u{c3e}రం", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("ఈ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: false, @@ -6777,35 +8351,62 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 10121458955350035957, + key: 12913932095322966823, disps: &[ - (2, 0), - (2, 0), - (0, 11), + (0, 2), + (0, 4), + (12, 15), + (0, 0), + (22, 10), ], entries: &[ - ("สค", 8), - ("มค", 1), - ("ตค", 10), - ("ม\u{e34}ย", 6), - ("เมย", 4), - ("ม\u{e35}ค", 3), - ("กพ", 2), - ("กย", 9), - ("กค", 7), - ("ธค", 12), ("พค", 5), + ("ต\u{e38}ลาคม", 10), + ("กย", 9), + ("เมษายน", 4), + ("สค", 8), + ("ธค", 12), + ("ม\u{e35}นาคม", 3), + ("กค", 7), + ("มค", 1), + ("ม\u{e35}ค", 3), + ("พฤษภาคม", 5), + ("ธ\u{e31}นวาคม", 12), + ("พฤศจ\u{e34}กายน", 11), + ("ก\u{e38}มภาพ\u{e31}นธ\u{e4c}", 2), + ("ม\u{e34}ย", 6), + ("กพ", 2), + ("ก\u{e31}นยายน", 9), + ("ส\u{e34}งหาคม", 8), + ("เมย", 4), ("พย", 11), + ("มกราคม", 1), + ("ตค", 10), + ("ม\u{e34}ถ\u{e38}นายน", 6), + ("กรกฎาคม", 7), ], }, timeago_nd_tokens: ::phf::Map { - key: 10121458955350035957, + key: 7485420634051515786, disps: &[ + (5, 12), + (3, 9), (0, 0), ], entries: &[ - ("อ\u{e31}ปเดตเม\u{e37}\u{e48}อวานน\u{e35}\u{e49}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ว\u{e31}นจ\u{e31}นทร\u{e4c}", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("ว\u{e31}นอ\u{e31}งคาร", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ว\u{e31}นศ\u{e38}กร\u{e4c}", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("เม\u{e37}\u{e48}อวานน\u{e35}\u{e49}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ว\u{e31}นน\u{e35}\u{e49}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ว\u{e31}นเสาร\u{e4c}", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ว\u{e31}นพ\u{e38}ธ", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("ส\u{e31}ปดาห\u{e4c}น\u{e35}\u{e49}", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("อ\u{e31}ปเดตแล\u{e49}วว\u{e31}นน\u{e35}\u{e49}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ส\u{e31}ปดาห\u{e4c}ท\u{e35}\u{e48}แล\u{e49}ว", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("อ\u{e31}ปเดตเม\u{e37}\u{e48}อวานน\u{e35}\u{e49}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ว\u{e31}นพฤห\u{e31}สบด\u{e35}", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("ว\u{e31}นอาท\u{e34}ตย\u{e4c}", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -6873,35 +8474,60 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 10121458955350035957, + key: 3599879742736855518, disps: &[ - (0, 0), - (6, 9), - (0, 3), + (6, 0), + (8, 6), + (0, 14), + (13, 16), + (1, 12), ], entries: &[ - ("haz", 6), - ("ağu", 8), - ("oca", 1), - ("nis", 4), - ("eyl", 9), - ("mar", 3), - ("ara", 12), - ("eki", 10), - ("kas", 11), ("şub", 2), + ("kasım", 11), + ("ocak", 1), + ("kas", 11), + ("mart", 3), + ("ara", 12), ("tem", 7), + ("nis", 4), + ("aralık", 12), ("may", 5), + ("ağustos", 8), + ("nisan", 4), + ("eki", 10), + ("eyl", 9), + ("oca", 1), + ("haz", 6), + ("temmuz", 7), + ("mar", 3), + ("haziran", 6), + ("mayıs", 5), + ("eylül", 9), + ("şubat", 2), + ("ağu", 8), + ("ekim", 10), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (0, 1), + (0, 4), + (5, 0), ], entries: &[ - ("dün", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("pazartesi", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("çarşamba", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("perşembe", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("bu hafta", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("cumartesi", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ("bugün", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("geçen hafta", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("dün", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("salı", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("cuma", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("pazar", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -6992,35 +8618,61 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 10121458955350035957, + key: 7485420634051515786, disps: &[ - (3, 5), - (3, 0), - (0, 11), + (4, 23), + (1, 8), + (0, 0), + (0, 0), + (11, 1), ], entries: &[ - ("бер", 3), - ("лют", 2), - ("жовт", 10), - ("квіт", 4), - ("серп", 8), - ("вер", 9), - ("груд", 12), - ("черв", 6), - ("лип", 7), ("січ", 1), - ("лист", 11), + ("червень", 6), + ("бер", 3), + ("січень", 1), + ("листопад", 11), + ("травень", 5), + ("березень", 3), + ("серпень", 8), + ("липень", 7), + ("жовт", 10), ("трав", 5), + ("вер", 9), + ("черв", 6), + ("жовтень", 10), + ("серп", 8), + ("лист", 11), + ("грудень", 12), + ("лип", 7), + ("квітень", 4), + ("лют", 2), + ("груд", 12), + ("вересень", 9), + ("лютий", 2), + ("квіт", 4), ], }, timeago_nd_tokens: ::phf::Map { - key: 15467950696543387533, + key: 7485420634051515786, disps: &[ - (1, 0), + (2, 0), + (4, 11), + (3, 0), ], entries: &[ + ("пʼятниця", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("цього тижня", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), ("вчора", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ("сьогодні", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("понеділок", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("неділя", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("середа", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("четвер", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("минулого тижня", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("субота", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("учора", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("вівторок", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: true, @@ -7088,34 +8740,59 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 15467950696543387533, + key: 10121458955350035957, disps: &[ - (1, 0), - (10, 7), - (8, 7), + (0, 15), + (2, 0), + (1, 7), + (1, 7), + (8, 6), ], entries: &[ - ("فروری،", 2), - ("اکتوبر،", 10), - ("جنوری،", 1), ("اپریل،", 4), + ("ستمبر", 9), + ("نومبر", 11), ("ستمبر،", 9), - ("دسمبر،", 12), - ("نومبر،", 11), - ("مارچ،", 3), - ("اگست،", 8), - ("جون،", 6), - ("جولائی،", 7), ("مئی،", 5), + ("جنوری،", 1), + ("دسمبر", 12), + ("جنوری", 1), + ("دسمبر،", 12), + ("جولائی", 7), + ("اگست", 8), + ("مارچ", 3), + ("اپریل", 4), + ("جون", 6), + ("نومبر،", 11), + ("جولائی،", 7), + ("فروری،", 2), + ("فروری", 2), + ("اکتوبر،", 10), + ("اکتوبر", 10), + ("اگست،", 8), + ("مئی", 5), + ("مارچ،", 3), + ("جون،", 6), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (3, 0), + (4, 7), + (1, 0), ], entries: &[ + ("پیر", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("جمعرات", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("منگل", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("ہفتہ", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("گزشتہ ہفتہ", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), ("آج", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("اس ہفتے", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("اتوار", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("جمعہ", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("بدھ", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("کل", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, @@ -7180,33 +8857,57 @@ pub(crate) fn entry(lang: Language) -> Entry { months: ::phf::Map { key: 12913932095322966823, disps: &[ - (2, 5), - (0, 0), - (9, 6), + (5, 12), + (1, 0), + (3, 21), + (1, 0), + (3, 21), ], entries: &[ - ("mar,", 3), - ("may,", 5), - ("noy,", 11), - ("avg,", 8), - ("iyl,", 7), - ("iyn,", 6), - ("yan,", 1), - ("fev,", 2), - ("dek,", 12), - ("okt,", 10), - ("sen,", 9), - ("apr,", 4), + ("mar", 3), + ("oktabr", 10), + ("yan", 1), + ("noyabr", 11), + ("sen", 9), + ("iyun", 6), + ("fev", 2), + ("mart", 3), + ("avg", 8), + ("okt", 10), + ("avgust", 8), + ("apr", 4), + ("dek", 12), + ("fevral", 2), + ("noy", 11), + ("iyul", 7), + ("may", 5), + ("iyn", 6), + ("dekabr", 12), + ("yanvar", 1), + ("iyl", 7), + ("sentabr", 9), + ("aprel", 4), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 0), + (2, 8), + (8, 0), + (6, 10), ], entries: &[ - ("kecha", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("seshanba", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ("bugun", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("shu haftada", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("shanba", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("juma", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("dushanba", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("yakshanba", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("payshanba", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("chorshanba", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("o‘tgan hafta", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("kecha", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: true, @@ -7270,12 +8971,23 @@ pub(crate) fn entry(lang: Language) -> Entry { ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (0, 0), + (0, 10), + (1, 0), + (10, 6), ], entries: &[ + ("thứ hai", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("qua", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("thứ sáu", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("thứ năm", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("tuần này", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("thứ tư", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("thứ bảy", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("tuần trước", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("chủ nhật", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("thứ ba", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), ("nay", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, @@ -7333,19 +9045,45 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], months: ::phf::Map { - key: 12913932095322966823, + key: 106375038446233661, disps: &[ + (0, 10), + (1, 0), + (0, 11), ], entries: &[ + ("二月", 2), + ("七月", 7), + ("三月", 3), + ("六月", 6), + ("五月", 5), + ("十月", 10), + ("十一月", 11), + ("十二月", 12), + ("九月", 9), + ("四月", 4), + ("八月", 8), + ("一月", 1), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ + (3, 9), (1, 0), + (6, 9), ], entries: &[ + ("二", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("三", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("本周", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("五", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("四", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("六", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), ("今", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("上周", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("一", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("日", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ("昨", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, @@ -7412,13 +9150,24 @@ pub(crate) fn entry(lang: Language) -> Entry { ], }, timeago_nd_tokens: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (1, 0), + (5, 0), + (0, 9), + (1, 6), ], entries: &[ - ("今", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ("昨", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("本星期", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("六", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("一", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("二", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("上星期", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("五", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("三", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("今", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("四", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("日", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ], }, comma_decimal: false, @@ -7483,11 +9232,22 @@ pub(crate) fn entry(lang: Language) -> Entry { timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 0), + (4, 3), + (4, 0), + (1, 8), ], entries: &[ - ("今", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("上週", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("本週", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("一", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), ("昨", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("二", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("四", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("日", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), + ("三", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), + ("六", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("五", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("今", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: false, @@ -7563,35 +9323,61 @@ pub(crate) fn entry(lang: Language) -> Entry { }, date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 7485420634051515786, + key: 2126027241312876569, disps: &[ - (2, 0), - (1, 9), - (1, 10), + (2, 9), + (1, 19), + (2, 19), + (18, 21), + (3, 0), ], entries: &[ - ("dis", 12), ("jul", 7), - ("aga", 8), - ("okt", 10), ("feb", 2), + ("mashi", 3), + ("jan", 1), + ("aga", 8), + ("februwari", 2), + ("disemba", 12), ("nov", 11), ("sep", 9), - ("mas", 3), - ("eph", 4), + ("juni", 6), + ("agasti", 8), ("mey", 5), - ("jan", 1), + ("okthoba", 10), + ("ephreli", 4), + ("okt", 10), + ("januwari", 1), + ("julayi", 7), + ("novemba", 11), + ("mas", 3), + ("meyi", 5), + ("eph", 4), ("jun", 6), + ("septhemba", 9), + ("dis", 12), ], }, timeago_nd_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ (0, 0), + (0, 2), + (0, 7), ], entries: &[ + ("umsombuluko", TaToken { n: 0, unit: Some(TimeUnit::LastWeekday) }), + ("ulwesihlanu", TaToken { n: 4, unit: Some(TimeUnit::LastWeekday) }), + ("iviki eledlule", TaToken { n: 1, unit: Some(TimeUnit::LastWeek) }), + ("ulwesithathu", TaToken { n: 2, unit: Some(TimeUnit::LastWeekday) }), ("izolo", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ulwesibili", TaToken { n: 1, unit: Some(TimeUnit::LastWeekday) }), + ("umgqibelo", TaToken { n: 5, unit: Some(TimeUnit::LastWeekday) }), + ("ulwesine", TaToken { n: 3, unit: Some(TimeUnit::LastWeekday) }), + ("isonto", TaToken { n: 6, unit: Some(TimeUnit::LastWeekday) }), ("namuhla", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("leli viki", TaToken { n: 0, unit: Some(TimeUnit::LastWeek) }), + ("namhlanje", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, comma_decimal: false, diff --git a/src/util/mod.rs b/src/util/mod.rs index a50cb7d..4241262 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -4,7 +4,7 @@ mod protobuf; pub mod dictionary; pub mod timeago; -pub use date::{now_sec, shift_months, shift_years}; +pub use date::{now_sec, shift_months, shift_weeks_mo, shift_years}; pub use protobuf::{string_from_pb, ProtoBuilder}; use std::{ diff --git a/src/util/timeago.rs b/src/util/timeago.rs index 7e1913f..b1c2006 100644 --- a/src/util/timeago.rs +++ b/src/util/timeago.rs @@ -61,6 +61,8 @@ pub enum TimeUnit { Week, Month, Year, + LastWeek, + LastWeekday, } /// Value of a parsed TimeAgo token, used in the dictionary @@ -86,10 +88,17 @@ impl TimeUnit { TimeUnit::Week => 7 * 24 * 3600, TimeUnit::Month => 30 * 24 * 3600, TimeUnit::Year => 365 * 24 * 3600, + TimeUnit::LastWeekday | TimeUnit::LastWeek => 0, } } } +impl TaToken { + fn into_timeago(self) -> Option { + self.unit.map(|unit| TimeAgo { n: self.n, unit }) + } +} + impl TimeAgo { fn secs(self) -> u32 { u32::from(self.n) * self.unit.secs() @@ -119,6 +128,17 @@ impl From for OffsetDateTime { match ta.unit { TimeUnit::Month => ts.replace_date(util::shift_months(ts.date(), -i32::from(ta.n))), TimeUnit::Year => ts.replace_date(util::shift_years(ts.date(), -i32::from(ta.n))), + TimeUnit::LastWeek => { + ts.replace_date(util::shift_weeks_mo(ts.date(), -i32::from(ta.n))) + } + TimeUnit::LastWeekday => ts.replace_date( + Date::from_iso_week_date( + ts.year(), + ts.iso_week(), + time::Weekday::Monday.nth_next(ta.n), + ) + .unwrap(), + ), _ => ts - Duration::from(ta), } } @@ -139,7 +159,7 @@ fn filter_datestr(string: &str) -> String { .to_lowercase() .chars() .filter_map(|c| { - if matches!(c, '\u{200b}' | '.') || c.is_ascii_digit() { + if matches!(c, '\u{200b}' | '.' | ',') || c.is_ascii_digit() { None } else if c == '-' { Some(' ') @@ -249,57 +269,86 @@ pub fn parse_textual_date(lang: Language, textual_date: &str) -> Option(textual_date); - match nums.len() { - 0 => match TaTokenParser::new(&entry, by_char, true, &filtered_str).next() { - Some(timeago) => Some(ParsedDate::Relative(timeago)), - None => TaTokenParser::new(&entry, by_char, false, &filtered_str) - .next() - .map(ParsedDate::Relative), - }, - 1 => TaTokenParser::new(&entry, by_char, false, &filtered_str) - .next() - .map(|timeago| ParsedDate::Relative(timeago * nums[0] as u8)), - 2..=3 => { - if nums.len() == entry.date_order.len() { - let mut y: Option = None; - let mut m: Option = None; - let mut d: Option = None; - - nums.iter() - .enumerate() - .for_each(|(i, n)| match entry.date_order[i] { - DateCmp::Y => y = Some(*n), - DateCmp::M => m = Some(*n), - DateCmp::D => d = Some(*n), - }); - - // Chinese/Japanese dont use textual months - if m.is_none() && !by_char { - m = parse_textual_month(&entry, &filtered_str).map(u16::from); - } - - match (y, m, d) { - (Some(y), Some(m), Some(d)) => Month::try_from(m as u8) - .ok() - .and_then(|m| Date::from_calendar_date(y.into(), m, d as u8).ok()) - .map(ParsedDate::Absolute), - _ => None, - } - } else { - None + if nums.is_empty() { + entry + .timeago_nd_tokens + .get(&filtered_str) + .and_then(|t| t.into_timeago()) + .or_else(|| TaTokenParser::new(&entry, by_char, true, &filtered_str).next()) + .or_else(|| TaTokenParser::new(&entry, by_char, false, &filtered_str).next()) + .map(ParsedDate::Relative) + } else { + if nums.len() == 1 { + if let Some(timeago) = TaTokenParser::new(&entry, by_char, false, &filtered_str).next() + { + return Some(ParsedDate::Relative(timeago * nums[0] as u8)); } } - _ => None, + + let mut date_order = entry.date_order; + let with_day = if entry.date_order.len() == nums.len() { + true + } else if entry.date_order.len() - 1 == nums.len() { + false + } else if nums.len() == 1 { + date_order = &[DateCmp::Y]; + false + } else { + return None; + }; + + let mut y: Option = None; + let mut m: Option = None; + 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; + } + } + } + i += 1; + } + + if m.is_none() { + m = parse_textual_month(&entry, &filtered_str).map(u16::from); + } + + match (y, m, d) { + (Some(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()) + .map(ParsedDate::Absolute), + _ => None, + } } } -/// Parse a textual date (e.g. "29 minutes ago" or "Jul 2, 2014") into a Chrono DateTime object. +/// Parse a textual date (e.g. "29 minutes ago" or "Jul 2, 2014") into a OffsetDateTime object. /// /// Returns None if the date could not be parsed. pub fn parse_textual_date_to_dt(lang: Language, textual_date: &str) -> Option { parse_textual_date(lang, textual_date).map(OffsetDateTime::from) } +/// Parse a textual date (e.g. "29 minutes ago" "Jul 2, 2014") into a Date object. +/// +/// Returns None if the date could not be parsed. +pub fn parse_textual_date_to_d( + lang: Language, + textual_date: &str, + warnings: &mut Vec, +) -> Option { + parse_textual_date_or_warn(lang, textual_date, warnings).map(OffsetDateTime::date) +} + pub fn parse_textual_date_or_warn( lang: Language, textual_date: &str, @@ -845,6 +894,8 @@ mod tests { "যোগ দিয়েছেন 24 সেপ, 2013", Some(ParsedDate::Absolute(date!(2013-9-24))) )] + #[case(Language::Ja, "2023年7月", Some(ParsedDate::Absolute(date!(2023-07-01))))] + #[case(Language::De, "Juli 2023", Some(ParsedDate::Absolute(date!(2023-07-01))))] fn t_parse_date( #[case] lang: Language, #[case] textual_date: &str, @@ -949,6 +1000,39 @@ 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 = + 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}" + ); + } + } + #[test] fn t_parse_video_duration() { let json_path = path!(*TESTFILES / "dict" / "video_duration_samples.json"); diff --git a/testfiles/dict/cldr_data/collect_day_names.js b/testfiles/dict/cldr_data/collect_day_names.js new file mode 100644 index 0000000..ea09c4d --- /dev/null +++ b/testfiles/dict/cldr_data/collect_day_names.js @@ -0,0 +1,87 @@ +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 collectMonthNames(lang, by_char, monthNames, 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; + } + if (lang === "mn") { + name2 = name2.replace(" сар", "").replace("арван ", ""); + } + 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; + for (const [id, name] of Object.entries(weekdays)) { + let name2 = name.toLowerCase(); + + if (by_char) { + name2 = name2.replace("曜日", "").replace("星期", ""); + if (name2.length != 1) { + throw new Error(`${lang}: single-char name '${name2}' has invalid length`); + } + } else { + if (lang === "iw") { + name2 = name2.replace("יום ", ""); + } else if (lang === "sq") { + name2 = name2.replace("e ", ""); + } + if (/\s/g.test(name2)) { + // throw new Error(`${lang}: name '${name2}' contains whitespace`); + console.log(`${lang}: weekday name '${name2}' contains whitespace`); + } + } + + const ids = { mon: 0, tue: 1, wed: 2, thu: 3, fri: 4, sat: 5, sun: 6 }; + const n = ids[id]; + weekdayNames[name2] = `${n}Wd`; + } +} + +const dict = JSON.parse(fs.readFileSync(DICT_PATH)); + +for (const [mainLang, entry] of Object.entries(dict)) { + const langs = [mainLang, ...entry["equivalent"]]; + let monthNames = {}; + let weekdayNames = {}; + + for (lang of langs) { + collectMonthNames(lang, entry["by_char"], monthNames, weekdayNames); + } + dict[mainLang]["months"] = { ...dict[mainLang]["months"], ...monthNames }; + dict[mainLang]["timeago_nd_tokens"] = { + ...dict[mainLang]["timeago_nd_tokens"], + ...weekdayNames, + }; +} + +fs.writeFileSync(DICT_PATH, JSON.stringify(dict, null, 2)); diff --git a/testfiles/dict/cldr_data/package.json b/testfiles/dict/cldr_data/package.json index 18d5cae..26af44d 100644 --- a/testfiles/dict/cldr_data/package.json +++ b/testfiles/dict/cldr_data/package.json @@ -6,7 +6,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { - "cldr-dates-modern": "^43.0.0", - "cldr-numbers-modern": "^43.0.0" + "cldr-dates-modern": "^45.0.0", + "cldr-numbers-modern": "^45.0.0" } } diff --git a/testfiles/dict/dictionary.json b/testfiles/dict/dictionary.json index a7d2a58..deae2c9 100644 --- a/testfiles/dict/dictionary.json +++ b/testfiles/dict/dictionary.json @@ -25,21 +25,41 @@ "date_order": "DY", "months": { "jan": 1, + "januarie": 1, "feb": 2, + "februarie": 2, + "maart": 3, "mrt": 3, "apr": 4, + "april": 4, "mei": 5, "jun": 6, + "junie": 6, "jul": 7, + "julie": 7, "aug": 8, + "augustus": 8, "sep": 9, + "september": 9, "okt": 10, + "oktober": 10, "nov": 11, - "des": 12 + "november": 11, + "des": 12, + "desember": 12 }, "timeago_nd_tokens": { "vandag": "0D", - "gister": "1D" + "maandag": "0Wd", + "vandeesweek": "0Wl", + "gister": "1D", + "dinsdag": "1Wd", + "verlede week": "1Wl", + "woensdag": "2Wd", + "donderdag": "3Wd", + "vrydag": "4Wd", + "saterdag": "5Wd", + "sondag": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -86,23 +106,40 @@ "date_order": "DY", "months": { "ጃን": 1, + "ጃንዋሪ": 1, "ጃንዩ": 1, "ፌብ": 2, "ፌብሩ": 2, + "ፌብሩዋሪ": 2, "ማርች": 3, "ኤፕሪ": 4, + "ኤፕሪል": 4, "ሜይ": 5, "ጁን": 6, "ጁላይ": 7, "ኦገስ": 8, + "ኦገስት": 8, "ሴፕቴ": 9, + "ሴፕቴምበር": 9, "ኦክቶ": 10, + "ኦክቶበር": 10, "ኖቬም": 11, - "ዲሴም": 12 + "ኖቬምበር": 11, + "ዲሴም": 12, + "ዲሴምበር": 12 }, "timeago_nd_tokens": { "ዛሬ": "0D", - "ትላንት": "1D" + "ሰኞ": "0Wd", + "በዚህ ሳምንት": "0Wl", + "ትላንት": "1D", + "ማክሰኞ": "1Wd", + "ያለፈው ሳምንት": "1Wl", + "ረቡዕ": "2Wd", + "ሐሙስ": "3Wd", + "ዓርብ": "4Wd", + "ቅዳሜ": "5Wd", + "እሑድ": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -162,10 +199,33 @@ "سنتين": "2Y" }, "date_order": "DMY", - "months": {}, + "months": { + "يناير": 1, + "فبراير": 2, + "مارس": 3, + "أبريل": 4, + "مايو": 5, + "يونيو": 6, + "يوليو": 7, + "أغسطس": 8, + "سبتمبر": 9, + "أكتوبر": 10, + "نوفمبر": 11, + "ديسمبر": 12 + }, "timeago_nd_tokens": { "اليوم": "0D", - "البارحة": "1D" + "الاثنين": "0Wd", + "هذا الأسبوع": "0Wl", + "أمس": "1D", + "البارحة": "1D", + "الثلاثاء": "1Wd", + "الأسبوع الماضي": "1Wl", + "الأربعاء": "2Wd", + "الخميس": "3Wd", + "الجمعة": "4Wd", + "السبت": "5Wd", + "الأحد": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -201,10 +261,32 @@ "বছৰৰ": "Y" }, "date_order": "DMY", - "months": {}, + "months": { + "জানুৱাৰী": 1, + "ফেব্ৰুৱাৰী": 2, + "মাৰ্চ": 3, + "এপ্ৰিল": 4, + "মে’": 5, + "জুন": 6, + "জুলাই": 7, + "আগষ্ট": 8, + "ছেপ্তেম্বৰ": 9, + "অক্টোবৰ": 10, + "নৱেম্বৰ": 11, + "ডিচেম্বৰ": 12 + }, "timeago_nd_tokens": { "আজি": "0D", - "কালি": "1D" + "সোমবাৰ": "0Wd", + "এই সপ্তাহৰ": "0Wl", + "কালি": "1D", + "মঙ্গলবাৰ": "1Wd", + "যোৱা সপ্তাহৰ": "1Wl", + "বুধবাৰ": "2Wd", + "বৃহস্পতিবাৰ": "3Wd", + "শুক্ৰবাৰ": "4Wd", + "শনিবাৰ": "5Wd", + "দেওবাৰ": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -253,21 +335,41 @@ "date_order": "DY", "months": { "yan": 1, + "yanvar": 1, "fev": 2, + "fevral": 2, "mar": 3, + "mart": 3, "apr": 4, + "aprel": 4, "may": 5, "iyn": 6, + "iyun": 6, "iyl": 7, + "iyul": 7, "avq": 8, + "avqust": 8, "sen": 9, + "sentyabr": 9, "okt": 10, + "oktyabr": 10, "noy": 11, - "dek": 12 + "noyabr": 11, + "dek": 12, + "dekabr": 12 }, "timeago_nd_tokens": { "bugün": "0D", - "dünən": "1D" + "bazar ertəsi": "0Wd", + "bu həftə": "0Wl", + "dünən": "1D", + "çərşənbə axşamı": "1Wd", + "ötən həftə": "1Wl", + "çərşənbə": "2Wd", + "cümə axşamı": "3Wd", + "cümə": "4Wd", + "şənbə": "5Wd", + "bazar": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -328,21 +430,43 @@ "date_order": "DY", "months": { "сту": 1, + "студзень": 1, "лют": 2, + "люты": 2, "сак": 3, + "сакавік": 3, "кра": 4, + "красавік": 4, + "май": 5, "мая": 5, "чэр": 6, + "чэрвень": 6, "ліп": 7, + "ліпень": 7, "жні": 8, + "жнівень": 8, "вер": 9, + "верасень": 9, "кас": 10, + "кастрычнік": 10, "ліс": 11, - "сне": 12 + "лістапад": 11, + "сне": 12, + "снежань": 12 }, "timeago_nd_tokens": { "сёння": "0D", - "ўчора": "1D" + "панядзелак": "0Wd", + "на гэтым тыдні": "0Wl", + "учора": "1D", + "ўчора": "1D", + "аўторак": "1Wd", + "на мінулым тыдні": "1Wl", + "серада": "2Wd", + "чацвер": "3Wd", + "пятніца": "4Wd", + "субота": "5Wd", + "нядзеля": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -389,10 +513,32 @@ "години": "Y" }, "date_order": "DMY", - "months": {}, + "months": { + "януари": 1, + "февруари": 2, + "март": 3, + "април": 4, + "май": 5, + "юни": 6, + "юли": 7, + "август": 8, + "септември": 9, + "октомври": 10, + "ноември": 11, + "декември": 12 + }, "timeago_nd_tokens": { "днес": "0D", - "вчера": "1D" + "понеделник": "0Wd", + "тази седмица": "0Wl", + "вчера": "1D", + "вторник": "1Wd", + "последната седмица": "1Wl", + "сряда": "2Wd", + "четвъртък": "3Wd", + "петък": "4Wd", + "събота": "5Wd", + "неделя": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -427,22 +573,40 @@ }, "date_order": "DY", "months": { - "জানু,": 1, - "ফেব,": 2, - "মার্চ,": 3, - "এপ্রি,": 4, - "মে,": 5, - "জুন,": 6, - "জুল,": 7, - "আগ,": 8, - "সেপ,": 9, - "অক্টো,": 10, - "নভে,": 11, - "ডিসে,": 12 + "জানু": 1, + "জানুয়ারী": 1, + "ফেব": 2, + "ফেব্রুয়ারী": 2, + "মার্চ": 3, + "এপ্রি": 4, + "এপ্রিল": 4, + "মে": 5, + "জুন": 6, + "জুল": 7, + "জুলাই": 7, + "আগ": 8, + "আগস্ট": 8, + "সেপ": 9, + "সেপ্টেম্বর": 9, + "অক্টো": 10, + "অক্টোবর": 10, + "নভে": 11, + "নভেম্বর": 11, + "ডিসে": 12, + "ডিসেম্বর": 12 }, "timeago_nd_tokens": { "আজ": "0D", - "গতকাল": "1D" + "সোমবার": "0Wd", + "এই সপ্তাহে": "0Wl", + "গতকাল": "1D", + "মঙ্গলবার": "1Wd", + "গত সপ্তাহ": "1Wl", + "বুধবার": "2Wd", + "বৃহস্পতিবার": "3Wd", + "শুক্রবার": "4Wd", + "শনিবার": "5Wd", + "রবিবার": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -503,21 +667,41 @@ "date_order": "DY", "months": { "jan": 1, + "januar": 1, "feb": 2, + "februar": 2, "mar": 3, + "mart": 3, "apr": 4, + "april": 4, "maj": 5, "jun": 6, + "juni": 6, "jul": 7, + "juli": 7, "aug": 8, + "august": 8, "sep": 9, + "septembar": 9, "okt": 10, + "oktobar": 10, "nov": 11, - "dec": 12 + "novembar": 11, + "dec": 12, + "decembar": 12 }, "timeago_nd_tokens": { "danas": "0D", - "jučer": "1D" + "ponedjeljak": "0Wd", + "ova sedmica": "0Wl", + "jučer": "1D", + "utorak": "1Wd", + "prošla sedmica": "1Wl", + "srijeda": "2Wd", + "četvrtak": "3Wd", + "petak": "4Wd", + "subota": "5Wd", + "nedjelja": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -565,21 +749,39 @@ "date_order": "DY", "months": { "gen": 1, + "gener": 1, "febr": 2, + "febrer": 2, "març": 3, + "abril": 4, "d’abr": 4, "maig": 5, "juny": 6, "jul": 7, + "juliol": 7, + "agost": 8, "d’ag": 8, "set": 9, + "setembre": 9, "d’oct": 10, + "octubre": 10, "nov": 11, - "des": 12 + "novembre": 11, + "des": 12, + "desembre": 12 }, "timeago_nd_tokens": { "avui": "0D", - "ahir": "1D" + "dilluns": "0Wd", + "aquesta setmana": "0Wl", + "ahir": "1D", + "dimarts": "1Wd", + "la setmana passada": "1Wl", + "dimecres": "2Wd", + "dijous": "3Wd", + "divendres": "4Wd", + "dissabte": "5Wd", + "diumenge": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -638,10 +840,32 @@ "roky": "Y" }, "date_order": "DMY", - "months": {}, + "months": { + "leden": 1, + "únor": 2, + "březen": 3, + "duben": 4, + "květen": 5, + "červen": 6, + "červenec": 7, + "srpen": 8, + "září": 9, + "říjen": 10, + "listopad": 11, + "prosinec": 12 + }, "timeago_nd_tokens": { "dnes": "0D", - "včera": "1D" + "pondělí": "0Wd", + "tento týden": "0Wl", + "včera": "1D", + "úterý": "1Wd", + "minulý týden": "1Wl", + "středa": "2Wd", + "čtvrtek": "3Wd", + "pátek": "4Wd", + "sobota": "5Wd", + "neděle": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -685,21 +909,41 @@ "date_order": "DY", "months": { "jan": 1, + "januar": 1, "feb": 2, + "februar": 2, "mar": 3, + "marts": 3, "apr": 4, + "april": 4, "maj": 5, "jun": 6, + "juni": 6, "jul": 7, + "juli": 7, "aug": 8, + "august": 8, "sep": 9, + "september": 9, "okt": 10, + "oktober": 10, "nov": 11, - "dec": 12 + "november": 11, + "dec": 12, + "december": 12 }, "timeago_nd_tokens": { "dag": "0D", - "går": "1D" + "mandag": "0Wd", + "denne uge": "0Wl", + "går": "1D", + "tirsdag": "1Wd", + "sidste uge": "1Wl", + "onsdag": "2Wd", + "torsdag": "3Wd", + "fredag": "4Wd", + "lørdag": "5Wd", + "søndag": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -742,10 +986,32 @@ "jahren": "Y" }, "date_order": "DMY", - "months": {}, + "months": { + "januar": 1, + "februar": 2, + "märz": 3, + "april": 4, + "mai": 5, + "juni": 6, + "juli": 7, + "august": 8, + "september": 9, + "oktober": 10, + "november": 11, + "dezember": 12 + }, "timeago_nd_tokens": { "heute": "0D", - "gestern": "1D" + "montag": "0Wd", + "diese woche": "0Wl", + "gestern": "1D", + "dienstag": "1Wd", + "letzte woche": "1Wl", + "mittwoch": "2Wd", + "donnerstag": "3Wd", + "freitag": "4Wd", + "samstag": "5Wd", + "sonntag": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -793,21 +1059,43 @@ "date_order": "DY", "months": { "ιαν": 1, + "ιανουάριος": 1, "φεβ": 2, + "φεβρουάριος": 2, "μαρ": 3, + "μάρτιος": 3, "απρ": 4, + "απρίλιος": 4, "μαΐ": 5, + "μάιος": 5, "ιουν": 6, + "ιούνιος": 6, "ιουλ": 7, + "ιούλιος": 7, "αυγ": 8, + "αύγουστος": 8, "σεπ": 9, + "σεπτέμβριος": 9, "οκτ": 10, + "οκτώβριος": 10, "νοε": 11, - "δεκ": 12 + "νοέμβριος": 11, + "δεκ": 12, + "δεκέμβριος": 12 }, "timeago_nd_tokens": { "σήμερα": "0D", - "χτες": "1D" + "δευτέρα": "0Wd", + "αυτήν την εβδομάδα": "0Wl", + "χθες": "1D", + "χτες": "1D", + "τρίτη": "1Wd", + "τελευταία εβδομάδα": "1Wl", + "τετάρτη": "2Wd", + "πέμπτη": "3Wd", + "παρασκευή": "4Wd", + "σάββατο": "5Wd", + "κυριακή": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -867,22 +1155,42 @@ "date_order": "DY", "months": { "jan": 1, + "january": 1, "feb": 2, + "february": 2, "mar": 3, + "march": 3, "apr": 4, + "april": 4, "may": 5, "jun": 6, + "june": 6, "jul": 7, + "july": 7, "aug": 8, + "august": 8, "sep": 9, "sept": 9, + "september": 9, "oct": 10, + "october": 10, "nov": 11, - "dec": 12 + "november": 11, + "dec": 12, + "december": 12 }, "timeago_nd_tokens": { "today": "0D", - "yesterday": "1D" + "monday": "0Wd", + "this week": "0Wl", + "yesterday": "1D", + "tuesday": "1Wd", + "last week": "1Wl", + "wednesday": "2Wd", + "thursday": "3Wd", + "friday": "4Wd", + "saturday": "5Wd", + "sunday": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -932,21 +1240,42 @@ "date_order": "DY", "months": { "ene": 1, + "enero": 1, "feb": 2, + "febrero": 2, "mar": 3, + "marzo": 3, "abr": 4, + "abril": 4, "may": 5, + "mayo": 5, "jun": 6, + "junio": 6, "jul": 7, + "julio": 7, "ago": 8, + "agosto": 8, "sept": 9, + "septiembre": 9, "oct": 10, + "octubre": 10, "nov": 11, - "dic": 12 + "noviembre": 11, + "dic": 12, + "diciembre": 12 }, "timeago_nd_tokens": { "hoy": "0D", - "ayer": "1D" + "lunes": "0Wd", + "esta semana": "0Wl", + "ayer": "1D", + "martes": "1Wd", + "la semana pasada": "1Wl", + "miércoles": "2Wd", + "jueves": "3Wd", + "viernes": "4Wd", + "sábado": "5Wd", + "domingo": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -993,21 +1322,42 @@ "date_order": "DY", "months": { "ene": 1, + "enero": 1, "feb": 2, + "febrero": 2, "mar": 3, + "marzo": 3, "abr": 4, + "abril": 4, "may": 5, + "mayo": 5, "jun": 6, + "junio": 6, "jul": 7, + "julio": 7, "ago": 8, + "agosto": 8, "sept": 9, + "septiembre": 9, "oct": 10, + "octubre": 10, "nov": 11, - "dic": 12 + "noviembre": 11, + "dic": 12, + "diciembre": 12 }, "timeago_nd_tokens": { "hoy": "0D", - "ayer": "1D" + "lunes": "0Wd", + "esta semana": "0Wl", + "ayer": "1D", + "martes": "1Wd", + "la semana pasada": "1Wl", + "miércoles": "2Wd", + "jueves": "3Wd", + "viernes": "4Wd", + "sábado": "5Wd", + "domingo": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -1055,21 +1405,38 @@ "date_order": "DY", "months": { "jaan": 1, + "jaanuar": 1, "veebr": 2, + "veebruar": 2, "märts": 3, "apr": 4, + "aprill": 4, "mai": 5, "juuni": 6, "juuli": 7, "aug": 8, + "august": 8, "sept": 9, + "september": 9, "okt": 10, + "oktoober": 10, "nov": 11, - "dets": 12 + "november": 11, + "dets": 12, + "detsember": 12 }, "timeago_nd_tokens": { "täna": "0D", - "eile": "1D" + "esmaspäev": "0Wd", + "sellel nädalal": "0Wl", + "eile": "1D", + "teisipäev": "1Wd", + "eelmisel nädalal": "1Wl", + "kolmapäev": "2Wd", + "neljapäev": "3Wd", + "reede": "4Wd", + "laupäev": "5Wd", + "pühapäev": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1108,21 +1475,42 @@ "date_order": "YD", "months": { "urt": 1, + "urtarrila": 1, "ots": 2, + "otsaila": 2, "mar": 3, + "martxoa": 3, "api": 4, + "apirila": 4, "mai": 5, + "maiatza": 5, "eka": 6, + "ekaina": 6, "uzt": 7, + "uztaila": 7, "abu": 8, + "abuztua": 8, "ira": 9, + "iraila": 9, "urr": 10, + "urria": 10, "aza": 11, - "abe": 12 + "azaroa": 11, + "abe": 12, + "abendua": 12 }, "timeago_nd_tokens": { "gaur": "0D", - "atzo": "1D" + "astelehena": "0Wd", + "aste hau": "0Wl", + "atzo": "1D", + "asteartea": "1Wd", + "joan den astea": "1Wl", + "asteazkena": "2Wd", + "osteguna": "3Wd", + "ostirala": "4Wd", + "larunbata": "5Wd", + "igandea": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1156,12 +1544,16 @@ "date_order": "DY", "months": { "ژانویه": 1, + "ژانویهٔ": 1, "فوریه": 2, + "فوریهٔ": 2, "مارس": 3, "آوریل": 4, "مه": 5, + "مهٔ": 5, "ژوئن": 6, "ژوئیه": 7, + "ژوئیهٔ": 7, "اوت": 8, "سپتامبر": 9, "اکتبر": 10, @@ -1170,7 +1562,16 @@ }, "timeago_nd_tokens": { "امروز": "0D", - "دیروز": "1D" + "دوشنبه": "0Wd", + "این هفته": "0Wl", + "دیروز": "1D", + "سه‌شنبه": "1Wd", + "هفته قبل": "1Wl", + "چهارشنبه": "2Wd", + "پنجشنبه": "3Wd", + "جمعه": "4Wd", + "شنبه": "5Wd", + "یکشنبه": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -1219,10 +1620,32 @@ "vuotta": "Y" }, "date_order": "DMY", - "months": {}, + "months": { + "tammikuu": 1, + "helmikuu": 2, + "maaliskuu": 3, + "huhtikuu": 4, + "toukokuu": 5, + "kesäkuu": 6, + "heinäkuu": 7, + "elokuu": 8, + "syyskuu": 9, + "lokakuu": 10, + "marraskuu": 11, + "joulukuu": 12 + }, "timeago_nd_tokens": { "tänään": "0D", - "eilen": "1D" + "maanantai": "0Wd", + "tällä viikolla": "0Wl", + "eilen": "1D", + "tiistai": "1Wd", + "viime viikolla": "1Wl", + "keskiviikko": "2Wd", + "torstai": "3Wd", + "perjantai": "4Wd", + "lauantai": "5Wd", + "sunnuntai": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1261,21 +1684,43 @@ "date_order": "DY", "months": { "ene": 1, + "enero": 1, "peb": 2, + "pebrero": 2, "mar": 3, + "marso": 3, "abr": 4, + "abril": 4, "may": 5, + "mayo": 5, "hun": 6, + "hunyo": 6, "hul": 7, + "hulyo": 7, "ago": 8, + "agosto": 8, "set": 9, + "setyembre": 9, "okt": 10, + "oktubre": 10, "nob": 11, - "dis": 12 + "nobyembre": 11, + "dis": 12, + "disyembre": 12 }, "timeago_nd_tokens": { + "ngayon": "0D", "ngayong": "0D", - "kahapon": "1D" + "lunes": "0Wd", + "ngayong linggo": "0Wl", + "kahapon": "1D", + "martes": "1Wd", + "nakaraang linggo": "1Wl", + "miyerkules": "2Wd", + "huwebes": "3Wd", + "biyernes": "4Wd", + "sabado": "5Wd", + "linggo": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -1324,22 +1769,40 @@ "date_order": "DY", "months": { "janv": 1, + "janvier": 1, "févr": 2, + "février": 2, "mars": 3, "avr": 4, + "avril": 4, "mai": 5, "juin": 6, "juil": 7, "juill": 7, + "juillet": 7, "août": 8, "sept": 9, + "septembre": 9, "oct": 10, + "octobre": 10, "nov": 11, - "déc": 12 + "novembre": 11, + "déc": 12, + "décembre": 12 }, "timeago_nd_tokens": { "aujourd'hui": "0D", - "hier": "1D" + "aujourd’hui": "0D", + "lundi": "0Wd", + "cette semaine": "0Wl", + "hier": "1D", + "mardi": "1Wd", + "la semaine dernière": "1Wl", + "mercredi": "2Wd", + "jeudi": "3Wd", + "vendredi": "4Wd", + "samedi": "5Wd", + "dimanche": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1389,21 +1852,40 @@ "date_order": "DY", "months": { "xan": 1, + "xaneiro": 1, "feb": 2, + "febreiro": 2, "mar": 3, + "marzo": 3, "abr": 4, + "abril": 4, "maio": 5, "xuño": 6, "xul": 7, + "xullo": 7, "ago": 8, + "agosto": 8, "set": 9, + "setembro": 9, "out": 10, + "outubro": 10, "nov": 11, - "dec": 12 + "novembro": 11, + "dec": 12, + "decembro": 12 }, "timeago_nd_tokens": { "hoxe": "0D", - "onte": "1D" + "luns": "0Wd", + "esta semana": "0Wl", + "onte": "1D", + "martes": "1Wd", + "a semana pasada": "1Wl", + "mércores": "2Wd", + "xoves": "3Wd", + "venres": "4Wd", + "sábado": "5Wd", + "domingo": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1437,22 +1919,37 @@ }, "date_order": "DY", "months": { - "જાન્યુ,": 1, - "ફેબ્રુ,": 2, - "માર્ચ,": 3, - "એપ્રિલ,": 4, - "મે,": 5, - "જૂન,": 6, - "જુલાઈ,": 7, - "ઑગસ્ટ,": 8, - "સપ્ટે,": 9, - "ઑક્ટો,": 10, - "નવે,": 11, - "ડિસે,": 12 + "જાન્યુ": 1, + "જાન્યુઆરી": 1, + "ફેબ્રુ": 2, + "ફેબ્રુઆરી": 2, + "માર્ચ": 3, + "એપ્રિલ": 4, + "મે": 5, + "જૂન": 6, + "જુલાઈ": 7, + "ઑગસ્ટ": 8, + "સપ્ટે": 9, + "સપ્ટેમ્બર": 9, + "ઑક્ટો": 10, + "ઑક્ટોબર": 10, + "નવે": 11, + "નવેમ્બર": 11, + "ડિસે": 12, + "ડિસેમ્બર": 12 }, "timeago_nd_tokens": { "આજે": "0D", - "ગઈકાલે": "1D" + "સોમવાર": "0Wd", + "આ અઠવાડિયે": "0Wl", + "ગઈકાલે": "1D", + "મંગળવાર": "1Wd", + "છેલ્લું અઠવાડિયું": "1Wl", + "બુધવાર": "2Wd", + "ગુરુવાર": "3Wd", + "શુક્રવાર": "4Wd", + "શનિવાર": "5Wd", + "રવિવાર": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -1490,21 +1987,40 @@ "date_order": "DY", "months": { "जन॰": 1, + "जनवरी": 1, "फ़र॰": 2, + "फ़रवरी": 2, "मार्च": 3, "अप्रैल": 4, "मई": 5, "जून": 6, "जुल॰": 7, + "जुलाई": 7, "अग॰": 8, + "अगस्त": 8, "सित॰": 9, + "सितंबर": 9, + "अक्टू॰": 10, + "अक्टूबर": 10, "अक्तू॰": 10, + "अक्तूबर": 10, "नव॰": 11, - "दिस॰": 12 + "नवंबर": 11, + "दिस॰": 12, + "दिसंबर": 12 }, "timeago_nd_tokens": { "आज": "0D", - "कल": "1D" + "सोमवार": "0Wd", + "इस हफ़्ते": "0Wl", + "कल": "1D", + "मंगलवार": "1Wd", + "पिछले हफ़्ते": "1Wl", + "बुधवार": "2Wd", + "गुरुवार": "3Wd", + "शुक्रवार": "4Wd", + "शनिवार": "5Wd", + "रविवार": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -1561,21 +2077,42 @@ "date_order": "DY", "months": { "sij": 1, + "siječanj": 1, "velj": 2, + "veljača": 2, "ožu": 3, + "ožujak": 3, "tra": 4, + "travanj": 4, "svi": 5, + "svibanj": 5, "lip": 6, + "lipanj": 6, "srp": 7, + "srpanj": 7, "kol": 8, + "kolovoz": 8, "ruj": 9, + "rujan": 9, "lis": 10, + "listopad": 10, "stu": 11, - "pro": 12 + "studeni": 11, + "pro": 12, + "prosinac": 12 }, "timeago_nd_tokens": { "danas": "0D", - "jučer": "1D" + "ponedjeljak": "0Wd", + "ovaj tjedan": "0Wl", + "jučer": "1D", + "utorak": "1Wd", + "prošli tjedan": "1Wl", + "srijeda": "2Wd", + "četvrtak": "3Wd", + "petak": "4Wd", + "subota": "5Wd", + "nedjelja": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1623,21 +2160,42 @@ "date_order": "YD", "months": { "jan": 1, + "január": 1, "febr": 2, + "február": 2, "márc": 3, + "március": 3, "ápr": 4, + "április": 4, "máj": 5, + "május": 5, "jún": 6, + "június": 6, "júl": 7, + "július": 7, "aug": 8, + "augusztus": 8, "szept": 9, + "szeptember": 9, "okt": 10, + "október": 10, "nov": 11, - "dec": 12 + "november": 11, + "dec": 12, + "december": 12 }, "timeago_nd_tokens": { "ma": "0D", - "tegnap": "1D" + "hétfő": "0Wd", + "ezen a héten": "0Wl", + "tegnap": "1D", + "kedd": "1Wd", + "múlt héten": "1Wl", + "szerda": "2Wd", + "csütörtök": "3Wd", + "péntek": "4Wd", + "szombat": "5Wd", + "vasárnap": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1677,22 +2235,43 @@ }, "date_order": "DY", "months": { - "հնվ,": 1, - "փտվ,": 2, - "մրտ,": 3, - "ապր,": 4, - "մյս,": 5, - "հնս,": 6, - "հլս,": 7, - "օգս,": 8, - "սեպ,": 9, - "հոկ,": 10, - "նոյ,": 11, - "դեկ,": 12 + "հնվ": 1, + "հունվար": 1, + "փետրվար": 2, + "փտվ": 2, + "մարտ": 3, + "մրտ": 3, + "ապր": 4, + "ապրիլ": 4, + "մայիս": 5, + "մյս": 5, + "հնս": 6, + "հունիս": 6, + "հլս": 7, + "հուլիս": 7, + "օգոստոս": 8, + "օգս": 8, + "սեպ": 9, + "սեպտեմբեր": 9, + "հոկ": 10, + "հոկտեմբեր": 10, + "նոյ": 11, + "նոյեմբեր": 11, + "դեկ": 12, + "դեկտեմբեր": 12 }, "timeago_nd_tokens": { "այսօր": "0D", - "երեկ": "1D" + "երկուշաբթի": "0Wd", + "այս շաբաթ": "0Wl", + "երեկ": "1D", + "երեքշաբթի": "1Wd", + "անցյալ շաբաթ": "1Wl", + "չորեքշաբթի": "2Wd", + "հինգշաբթի": "3Wd", + "ուրբաթ": "4Wd", + "շաբաթ": "5Wd", + "կիրակի": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1735,21 +2314,41 @@ "date_order": "DY", "months": { "jan": 1, + "januari": 1, "feb": 2, + "februari": 2, "mar": 3, + "maret": 3, "apr": 4, + "april": 4, "mei": 5, "jun": 6, + "juni": 6, "jul": 7, + "juli": 7, "agu": 8, + "agustus": 8, "sep": 9, + "september": 9, "okt": 10, + "oktober": 10, "nov": 11, - "des": 12 + "november": 11, + "des": 12, + "desember": 12 }, "timeago_nd_tokens": { "ini": "0D", - "kemarin": "1D" + "senin": "0Wd", + "minggu ini": "0Wl", + "kemarin": "1D", + "selasa": "1Wd", + "minggu lalu": "1Wl", + "rabu": "2Wd", + "kamis": "3Wd", + "jumat": "4Wd", + "sabtu": "5Wd", + "minggu": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1800,21 +2399,41 @@ "date_order": "DY", "months": { "jan": 1, + "janúar": 1, "feb": 2, + "febrúar": 2, "mar": 3, + "mars": 3, "apr": 4, + "apríl": 4, "maí": 5, "jún": 6, + "júní": 6, "júl": 7, + "júlí": 7, "ágú": 8, + "ágúst": 8, "sep": 9, + "september": 9, "okt": 10, + "október": 10, "nóv": 11, - "des": 12 + "nóvember": 11, + "des": 12, + "desember": 12 }, "timeago_nd_tokens": { "dag": "0D", - "gær": "1D" + "mánudagur": "0Wd", + "í vikunni": "0Wl", + "gær": "1D", + "þriðjudagur": "1Wd", + "í síðustu viku": "1Wl", + "miðvikudagur": "2Wd", + "fimmtudagur": "3Wd", + "föstudagur": "4Wd", + "laugardagur": "5Wd", + "sunnudagur": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1866,21 +2485,42 @@ "date_order": "DY", "months": { "gen": 1, + "gennaio": 1, "feb": 2, + "febbraio": 2, "mar": 3, + "marzo": 3, "apr": 4, + "aprile": 4, "mag": 5, + "maggio": 5, "giu": 6, + "giugno": 6, "lug": 7, + "luglio": 7, "ago": 8, + "agosto": 8, "set": 9, + "settembre": 9, "ott": 10, + "ottobre": 10, "nov": 11, - "dic": 12 + "novembre": 11, + "dic": 12, + "dicembre": 12 }, "timeago_nd_tokens": { "oggi": "0D", - "ieri": "1D" + "lunedì": "0Wd", + "questa settimana": "0Wl", + "ieri": "1D", + "martedì": "1Wd", + "ultima settimana": "1Wl", + "mercoledì": "2Wd", + "giovedì": "3Wd", + "venerdì": "4Wd", + "sabato": "5Wd", + "domenica": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -1935,21 +2575,42 @@ "date_order": "DY", "months": { "בינו׳": 1, + "ינואר": 1, "בפבר׳": 2, + "פברואר": 2, "במרץ": 3, + "מרץ": 3, + "אפריל": 4, "באפר׳": 4, "במאי": 5, + "מאי": 5, "ביוני": 6, + "יוני": 6, "ביולי": 7, + "יולי": 7, + "אוגוסט": 8, "באוג׳": 8, "בספט׳": 9, + "ספטמבר": 9, + "אוקטובר": 10, "באוק׳": 10, "בנוב׳": 11, - "בדצמ׳": 12 + "נובמבר": 11, + "בדצמ׳": 12, + "דצמבר": 12 }, "timeago_nd_tokens": { "היום": "0D", - "אתמול": "1D" + "שני": "0Wd", + "השבוע": "0Wl", + "אתמול": "1D", + "שלישי": "1Wd", + "בשבוע שעבר": "1Wl", + "רביעי": "2Wd", + "חמישי": "3Wd", + "שישי": "4Wd", + "שבת": "5Wd", + "ראשון": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -1986,7 +2647,16 @@ "months": {}, "timeago_nd_tokens": { "本": "0D", - "昨": "1D" + "月": "0Wd", + "今週": "0Wl", + "昨": "1D", + "火": "1Wd", + "先週": "1Wl", + "水": "2Wd", + "木": "3Wd", + "金": "4Wd", + "土": "5Wd", + "日": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -2025,21 +2695,42 @@ "date_order": "DY", "months": { "იან": 1, + "იანვარი": 1, "თებ": 2, + "თებერვალი": 2, "მარ": 3, + "მარტი": 3, "აპრ": 4, + "აპრილი": 4, "მაი": 5, + "მაისი": 5, "ივნ": 6, + "ივნისი": 6, "ივლ": 7, + "ივლისი": 7, "აგვ": 8, + "აგვისტო": 8, "სექ": 9, + "სექტემბერი": 9, "ოქტ": 10, + "ოქტომბერი": 10, "ნოე": 11, - "დეკ": 12 + "ნოემბერი": 11, + "დეკ": 12, + "დეკემბერი": 12 }, "timeago_nd_tokens": { "დღეს": "0D", - "გუშინ": "1D" + "ორშაბათი": "0Wd", + "ამ კვირაში": "0Wl", + "გუშინ": "1D", + "სამშაბათი": "1Wd", + "გასულ კვირაში": "1Wl", + "ოთხშაბათი": "2Wd", + "ხუთშაბათი": "3Wd", + "პარასკევი": "4Wd", + "შაბათი": "5Wd", + "კვირა": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -2081,21 +2772,42 @@ "date_order": "YD", "months": { "қаң": 1, + "қаңтар": 1, "ақп": 2, + "ақпан": 2, "нау": 3, + "наурыз": 3, "сәу": 4, + "сәуір": 4, "мам": 5, + "мамыр": 5, "мау": 6, + "маусым": 6, "шіл": 7, + "шілде": 7, "там": 8, + "тамыз": 8, "қыр": 9, + "қыркүйек": 9, "қаз": 10, + "қазан": 10, "қар": 11, - "жел": 12 + "қараша": 11, + "жел": 12, + "желтоқсан": 12 }, "timeago_nd_tokens": { "бүгін": "0D", - "кеше": "1D" + "дүйсенбі": "0Wd", + "осы аптада": "0Wl", + "кеше": "1D", + "сейсенбі": "1Wd", + "өткен аптада": "1Wl", + "сәрсенбі": "2Wd", + "бейсенбі": "3Wd", + "жұма": "4Wd", + "сенбі": "5Wd", + "жексенбі": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -2147,8 +2859,19 @@ "ធ្នូ": 12 }, "timeago_nd_tokens": { + "ថ្ងៃនេះ": "0D", "បានធ្វើបច្ចុប្បន្នភាពនៅថ្ងៃនេះ": "0D", - "បានធ្វើបច្ចុប្បន្នភាពម្សិលមិញ": "1D" + "ចន្ទ": "0Wd", + "សប្ដាហ៍នេះ": "0Wl", + "បានធ្វើបច្ចុប្បន្នភាពម្សិលមិញ": "1D", + "ម្សិលមិញ": "1D", + "អង្គារ": "1Wd", + "សប្ដាហ៍មុន": "1Wl", + "ពុធ": "2Wd", + "ព្រហស្បតិ៍": "3Wd", + "សុក្រ": "4Wd", + "សៅរ៍": "5Wd", + "អាទិត្យ": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -2199,18 +2922,32 @@ "ಫೆಬ್ರವರಿ": 2, "ಮಾರ್ಚ್": 3, "ಏಪ್ರಿ": 4, + "ಏಪ್ರಿಲ್": 4, "ಮೇ": 5, "ಜೂನ್": 6, "ಜುಲೈ": 7, "ಆಗಸ್ಟ್": 8, "ಸೆಪ್ಟೆಂ": 9, + "ಸೆಪ್ಟೆಂಬರ್": 9, "ಅಕ್ಟೋ": 10, + "ಅಕ್ಟೋಬರ್": 10, "ನವೆಂ": 11, - "ಡಿಸೆಂ": 12 + "ನವೆಂಬರ್": 11, + "ಡಿಸೆಂ": 12, + "ಡಿಸೆಂಬರ್": 12 }, "timeago_nd_tokens": { "ಇಂದು": "0D", - "ನಿನ್ನೆ": "1D" + "ಸೋಮವಾರ": "0Wd", + "ಈ ವಾರ": "0Wl", + "ನಿನ್ನೆ": "1D", + "ಮಂಗಳವಾರ": "1Wd", + "ಕಳೆದ ವಾರ": "1Wl", + "ಬುಧವಾರ": "2Wd", + "ಗುರುವಾರ": "3Wd", + "ಶುಕ್ರವಾರ": "4Wd", + "ಶನಿವಾರ": "5Wd", + "ಭಾನುವಾರ": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -2246,7 +2983,16 @@ "months": {}, "timeago_nd_tokens": { "오늘": "0D", - "어제": "1D" + "월요일": "0Wd", + "이번 주": "0Wl", + "어제": "1D", + "화요일": "1Wd", + "지난주": "1Wl", + "수요일": "2Wd", + "목요일": "3Wd", + "금요일": "4Wd", + "토요일": "5Wd", + "일요일": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -2285,21 +3031,42 @@ "date_order": "YD", "months": { "янв": 1, + "январь": 1, "фев": 2, + "февраль": 2, "мар": 3, + "март": 3, "апр": 4, + "апрель": 4, "май": 5, "июн": 6, + "июнь": 6, "июл": 7, + "июль": 7, "авг": 8, + "август": 8, "сен": 9, + "сентябрь": 9, "окт": 10, + "октябрь": 10, "ноя": 11, - "дек": 12 + "ноябрь": 11, + "дек": 12, + "декабрь": 12 }, "timeago_nd_tokens": { "бүгүн": "0D", - "кечээ": "1D" + "бүгүнкү": "0D", + "дүйшөмбү": "0Wd", + "ушул аптадагы": "0Wl", + "кечээ": "1D", + "шейшемби": "1Wd", + "өткөн аптадагы": "1Wl", + "шаршемби": "2Wd", + "бейшемби": "3Wd", + "жума": "4Wd", + "ишемби": "5Wd", + "жекшемби": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -2342,21 +3109,44 @@ "date_order": "DY", "months": { "ມກ": 1, + "ມັງກອນ": 1, "ກພ": 2, + "ກຸມພາ": 2, "ມນ": 3, + "ມີນາ": 3, "ມສ": 4, + "ເມສາ": 4, "ພພ": 5, + "ພຶດສະພາ": 5, "ມິຖ": 6, + "ມິຖຸນາ": 6, "ກລ": 7, + "ກໍລະກົດ": 7, "ສຫ": 8, + "ສິງຫາ": 8, "ກຍ": 9, + "ກັນຍາ": 9, "ຕລ": 10, + "ຕຸລາ": 10, "ພຈ": 11, - "ທວ": 12 + "ພະຈິກ": 11, + "ທວ": 12, + "ທັນວາ": 12 }, "timeago_nd_tokens": { + "ມື້ນີ້": "0D", "ອັບເດດມື້ນີ້": "0D", - "ອັດເດດມື້ວານນີ້": "1D" + "ວັນຈັນ": "0Wd", + "ອາທິດນີ້": "0Wl", + "ມື້ວານນີ້": "1D", + "ອັດເດດມື້ວານນີ້": "1D", + "ວັນອັງຄານ": "1Wd", + "ອາທິດຜ່ານມາ": "1Wl", + "ວັນພຸດ": "2Wd", + "ວັນພະຫັດ": "3Wd", + "ວັນສຸກ": "4Wd", + "ວັນເສົາ": "5Wd", + "ວັນອາທິດ": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -2419,10 +3209,32 @@ "metus": "Y" }, "date_order": "YMD", - "months": {}, + "months": { + "sausis": 1, + "vasaris": 2, + "kovas": 3, + "balandis": 4, + "gegužė": 5, + "birželis": 6, + "liepa": 7, + "rugpjūtis": 8, + "rugsėjis": 9, + "spalis": 10, + "lapkritis": 11, + "gruodis": 12 + }, "timeago_nd_tokens": { "šiandien": "0D", - "vakar": "1D" + "pirmadienis": "0Wd", + "šią savaitę": "0Wl", + "vakar": "1D", + "antradienis": "1Wd", + "praėjusią savaitę": "1Wl", + "trečiadienis": "2Wd", + "ketvirtadienis": "3Wd", + "penktadienis": "4Wd", + "šeštadienis": "5Wd", + "sekmadienis": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -2476,21 +3288,40 @@ "date_order": "YD", "months": { "janv": 1, + "janvāris": 1, "febr": 2, + "februāris": 2, "marts": 3, "apr": 4, + "aprīlis": 4, "maijs": 5, "jūn": 6, + "jūnijs": 6, "jūl": 7, + "jūlijs": 7, "aug": 8, + "augusts": 8, "sept": 9, + "septembris": 9, "okt": 10, + "oktobris": 10, "nov": 11, - "dec": 12 + "novembris": 11, + "dec": 12, + "decembris": 12 }, "timeago_nd_tokens": { "šodien": "0D", - "vakar": "1D" + "pirmdiena": "0Wd", + "šajā nedēļā": "0Wl", + "vakar": "1D", + "otrdiena": "1Wd", + "iepriekšējā nedēļā": "1Wl", + "trešdiena": "2Wd", + "ceturtdiena": "3Wd", + "piektdiena": "4Wd", + "sestdiena": "5Wd", + "svētdiena": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -2534,10 +3365,32 @@ "години": "Y" }, "date_order": "DMY", - "months": {}, + "months": { + "јануари": 1, + "февруари": 2, + "март": 3, + "април": 4, + "мај": 5, + "јуни": 6, + "јули": 7, + "август": 8, + "септември": 9, + "октомври": 10, + "ноември": 11, + "декември": 12 + }, "timeago_nd_tokens": { "денес": "0D", - "вчера": "1D" + "понеделник": "0Wd", + "оваа седмица": "0Wl", + "вчера": "1D", + "вторник": "1Wd", + "минатата недела": "1Wl", + "среда": "2Wd", + "четврток": "3Wd", + "петок": "4Wd", + "сабота": "5Wd", + "недела": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -2577,21 +3430,39 @@ "date_order": "YD", "months": { "ജനു": 1, + "ജനുവരി": 1, "ഫെബ്രു": 2, + "ഫെബ്രുവരി": 2, "മാർ": 3, + "മാർച്ച്": 3, "ഏപ്രി": 4, + "ഏപ്രിൽ": 4, "മേയ്": 5, "ജൂൺ": 6, "ജൂലൈ": 7, "ഓഗ": 8, + "ഓഗസ്റ്റ്": 8, "സെപ്റ്റം": 9, + "സെപ്റ്റംബർ": 9, "ഒക്ടോ": 10, + "ഒക്‌ടോബർ": 10, "നവം": 11, - "ഡിസം": 12 + "നവംബർ": 11, + "ഡിസം": 12, + "ഡിസംബർ": 12 }, "timeago_nd_tokens": { "ഇന്ന്": "0D", - "ഇന്നലെ": "1D" + "തിങ്കളാഴ്‌ച": "0Wd", + "ഈ ആഴ്‌ച": "0Wl", + "ഇന്നലെ": "1D", + "ചൊവ്വാഴ്‌ച": "1Wd", + "കഴിഞ്ഞ ആഴ്ച": "1Wl", + "ബുധനാഴ്‌ച": "2Wd", + "വ്യാഴാഴ്‌ച": "3Wd", + "വെള്ളിയാഴ്‌ച": "4Wd", + "ശനിയാഴ്‌ച": "5Wd", + "ഞായറാഴ്‌ച": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -2630,10 +3501,30 @@ "жилийн": "Y" }, "date_order": "YMD", - "months": {}, + "months": { + "гуравдугаар": 3, + "дөрөвдүгээр": 4, + "тавдугаар": 5, + "зургаадугаар": 6, + "долоодугаар": 7, + "наймдугаар": 8, + "есдүгээр": 9, + "аравдугаар": 10, + "нэгдүгээр": 11, + "хоёрдугаар": 12 + }, "timeago_nd_tokens": { "өнөөдөр": "0D", - "өчигдөр": "1D" + "даваа": "0Wd", + "энэ долоо хоног": "0Wl", + "өчигдөр": "1D", + "мягмар": "1Wd", + "өнгөрсөн долоо хоног": "1Wl", + "лхагва": "2Wd", + "пүрэв": "3Wd", + "баасан": "4Wd", + "бямба": "5Wd", + "ням": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -2681,23 +3572,40 @@ }, "date_order": "DY", "months": { - "जाने,": 1, - "फेब्रु,": 2, - "मार्च,": 3, - "एप्रि,": 4, - "मे,": 5, - "जून,": 6, - "जुलै,": 7, - "ऑग,": 8, - "सप्टें,": 9, - "ऑक्टो,": 10, - "नोव्हें,": 11, - "डिसें,": 12 + "जाने": 1, + "जानेवारी": 1, + "फेब्रु": 2, + "फेब्रुवारी": 2, + "मार्च": 3, + "एप्रि": 4, + "एप्रिल": 4, + "मे": 5, + "जून": 6, + "जुलै": 7, + "ऑग": 8, + "ऑगस्ट": 8, + "सप्टें": 9, + "सप्टेंबर": 9, + "ऑक्टो": 10, + "ऑक्टोबर": 10, + "नोव्हें": 11, + "नोव्हेंबर": 11, + "डिसें": 12, + "डिसेंबर": 12 }, "timeago_nd_tokens": { "today": "0D", "आज": "0D", - "काल": "1D" + "सोमवार": "0Wd", + "या आठवड्यात": "0Wl", + "काल": "1D", + "मंगळवार": "1Wd", + "मागील आठवड्यात": "1Wl", + "बुधवार": "2Wd", + "गुरुवार": "3Wd", + "शुक्रवार": "4Wd", + "शनिवार": "5Wd", + "रविवार": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -2738,21 +3646,39 @@ "date_order": "DY", "months": { "jan": 1, + "januari": 1, "feb": 2, + "februari": 2, "mac": 3, "apr": 4, + "april": 4, "mei": 5, "jun": 6, "jul": 7, + "julai": 7, "ogo": 8, + "ogos": 8, "sep": 9, + "september": 9, "okt": 10, + "oktober": 10, "nov": 11, - "dis": 12 + "november": 11, + "dis": 12, + "disember": 12 }, "timeago_nd_tokens": { "ini": "0D", - "semalam": "1D" + "isnin": "0Wd", + "minggu ini": "0Wl", + "semalam": "1D", + "selasa": "1Wd", + "minggu lepas": "1Wl", + "rabu": "2Wd", + "khamis": "3Wd", + "jumaat": "4Wd", + "sabtu": "5Wd", + "ahad": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -2790,21 +3716,39 @@ "date_order": "YD", "months": { "ဇန်": 1, + "ဇန်နဝါရီ": 1, "ဖေ": 2, + "ဖေဖော်ဝါရီ": 2, "မတ်": 3, "ဧ": 4, + "ဧပြီ": 4, "မေ": 5, "ဇွန်": 6, "ဇူ": 7, + "ဇူလိုင်": 7, "ဩ": 8, + "ဩဂုတ်": 8, "စက်": 9, + "စက်တင်ဘာ": 9, "အောက်": 10, + "အောက်တိုဘာ": 10, "နို": 11, - "ဒီ": 12 + "နိုဝင်ဘာ": 11, + "ဒီ": 12, + "ဒီဇင်ဘာ": 12 }, "timeago_nd_tokens": { "ယနေ့": "0D", - "မနေ့က": "1D" + "တနင်္လာ": "0Wd", + "ယခုအပတ်": "0Wl", + "မနေ့က": "1D", + "အင်္ဂါ": "1Wd", + "ယခင်အပတ်": "1Wl", + "ဗုဒ္ဓဟူး": "2Wd", + "ကြာသပတေး": "3Wd", + "သောကြာ": "4Wd", + "စနေ": "5Wd", + "တနင်္ဂနွေ": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -2859,7 +3803,16 @@ }, "timeago_nd_tokens": { "आज": "0D", - "हिजो": "1D" + "सोमबार": "0Wd", + "यस हप्ता": "0Wl", + "हिजो": "1D", + "मङ्गलबार": "1Wd", + "पछिल्लो हप्ता": "1Wl", + "बुधबार": "2Wd", + "बिहिबार": "3Wd", + "शुक्रबार": "4Wd", + "शनिबार": "5Wd", + "आइतबार": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -2904,21 +3857,41 @@ "date_order": "DY", "months": { "jan": 1, + "januari": 1, "feb": 2, + "februari": 2, + "maart": 3, "mrt": 3, "apr": 4, + "april": 4, "mei": 5, "jun": 6, + "juni": 6, "jul": 7, + "juli": 7, "aug": 8, + "augustus": 8, "sep": 9, + "september": 9, "okt": 10, + "oktober": 10, "nov": 11, - "dec": 12 + "november": 11, + "dec": 12, + "december": 12 }, "timeago_nd_tokens": { "vandaag": "0D", - "gisteren": "1D" + "maandag": "0Wd", + "deze week": "0Wl", + "gisteren": "1D", + "dinsdag": "1Wd", + "afgelopen week": "1Wl", + "woensdag": "2Wd", + "donderdag": "3Wd", + "vrijdag": "4Wd", + "zaterdag": "5Wd", + "zondag": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -2966,24 +3939,41 @@ "date_order": "DY", "months": { "jan": 1, + "januar": 1, "feb": 2, + "februar": 2, "mar": 3, "mars": 3, "apr": 4, + "april": 4, "mai": 5, "jun": 6, "juni": 6, "jul": 7, "juli": 7, "aug": 8, + "august": 8, "sep": 9, + "september": 9, "okt": 10, + "oktober": 10, "nov": 11, - "des": 12 + "november": 11, + "des": 12, + "desember": 12 }, "timeago_nd_tokens": { "dag": "0D", - "går": "1D" + "mandag": "0Wd", + "denne uken": "0Wl", + "går": "1D", + "tirsdag": "1Wd", + "forrige uke": "1Wl", + "onsdag": "2Wd", + "torsdag": "3Wd", + "fredag": "4Wd", + "lørdag": "5Wd", + "søndag": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3040,7 +4030,16 @@ }, "timeago_nd_tokens": { "ଆଜି": "0D", - "ଗତକାଲି": "1D" + "ସୋମବାର": "0Wd", + "ଏହି ସପ୍ତାହ": "0Wl", + "ଗତକାଲି": "1D", + "ମଙ୍ଗଳବାର": "1Wd", + "ଗତ ସପ୍ତାହ": "1Wl", + "ବୁଧବାର": "2Wd", + "ଗୁରୁବାର": "3Wd", + "ଶୁକ୍ରବାର": "4Wd", + "ଶନିବାର": "5Wd", + "ରବିବାର": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -3085,21 +4084,39 @@ "date_order": "DY", "months": { "ਜਨ": 1, + "ਜਨਵਰੀ": 1, "ਫ਼ਰ": 2, + "ਫ਼ਰਵਰੀ": 2, "ਮਾਰਚ": 3, "ਅਪ੍ਰੈ": 4, + "ਅਪ੍ਰੈਲ": 4, "ਮਈ": 5, "ਜੂਨ": 6, "ਜੁਲਾ": 7, + "ਜੁਲਾਈ": 7, "ਅਗ": 8, + "ਅਗਸਤ": 8, "ਸਤੰ": 9, + "ਸਤੰਬਰ": 9, "ਅਕਤੂ": 10, + "ਅਕਤੂਬਰ": 10, "ਨਵੰ": 11, - "ਦਸੰ": 12 + "ਨਵੰਬਰ": 11, + "ਦਸੰ": 12, + "ਦਸੰਬਰ": 12 }, "timeago_nd_tokens": { "ਅੱਜ": "0D", - "ਕੱਲ੍ਹ": "1D" + "ਸੋਮਵਾਰ": "0Wd", + "ਇਸ ਹਫ਼ਤੇ": "0Wl", + "ਕੱਲ੍ਹ": "1D", + "ਮੰਗਲਵਾਰ": "1Wd", + "ਪਿਛਲੇ ਹਫ਼ਤੇ": "1Wl", + "ਬੁੱਧਵਾਰ": "2Wd", + "ਵੀਰਵਾਰ": "3Wd", + "ਸ਼ੁੱਕਰਵਾਰ": "4Wd", + "ਸ਼ਨਿੱਚਰਵਾਰ": "5Wd", + "ਐਤਵਾਰ": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -3161,21 +4178,42 @@ "date_order": "DY", "months": { "sty": 1, + "styczeń": 1, "lut": 2, + "luty": 2, "mar": 3, + "marzec": 3, "kwi": 4, + "kwiecień": 4, "maj": 5, "cze": 6, + "czerwiec": 6, "lip": 7, + "lipiec": 7, "sie": 8, + "sierpień": 8, "wrz": 9, + "wrzesień": 9, "paź": 10, + "październik": 10, "lis": 11, - "gru": 12 + "listopad": 11, + "gru": 12, + "grudzień": 12 }, "timeago_nd_tokens": { + "dziś": "0D", "dzisiaj": "0D", - "wczoraj": "1D" + "poniedziałek": "0Wd", + "w tym tygodniu": "0Wl", + "wczoraj": "1D", + "wtorek": "1Wd", + "w zeszłym tygodniu": "1Wl", + "środa": "2Wd", + "czwartek": "3Wd", + "piątek": "4Wd", + "sobota": "5Wd", + "niedziela": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3223,21 +4261,42 @@ "date_order": "DY", "months": { "jan": 1, + "janeiro": 1, "fev": 2, + "fevereiro": 2, "mar": 3, + "março": 3, "abr": 4, + "abril": 4, "mai": 5, + "maio": 5, "jun": 6, + "junho": 6, "jul": 7, + "julho": 7, "ago": 8, + "agosto": 8, "set": 9, + "setembro": 9, "out": 10, + "outubro": 10, "nov": 11, - "dez": 12 + "novembro": 11, + "dez": 12, + "dezembro": 12 }, "timeago_nd_tokens": { "hoje": "0D", - "ontem": "1D" + "segunda feira": "0Wd", + "esta semana": "0Wl", + "ontem": "1D", + "terça feira": "1Wd", + "semana passada": "1Wl", + "quarta feira": "2Wd", + "quinta feira": "3Wd", + "sexta feira": "4Wd", + "sábado": "5Wd", + "domingo": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3282,10 +4341,32 @@ "anos": "Y" }, "date_order": "DMY", - "months": {}, + "months": { + "janeiro": 1, + "fevereiro": 2, + "março": 3, + "abril": 4, + "maio": 5, + "junho": 6, + "julho": 7, + "agosto": 8, + "setembro": 9, + "outubro": 10, + "novembro": 11, + "dezembro": 12 + }, "timeago_nd_tokens": { "hoje": "0D", - "ontem": "1D" + "segunda feira": "0Wd", + "esta semana": "0Wl", + "ontem": "1D", + "terça feira": "1Wd", + "a semana passada": "1Wl", + "quarta feira": "2Wd", + "quinta feira": "3Wd", + "sexta feira": "4Wd", + "sábado": "5Wd", + "domingo": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3331,21 +4412,41 @@ "date_order": "DY", "months": { "ian": 1, + "ianuarie": 1, "feb": 2, + "februarie": 2, "mar": 3, + "martie": 3, "apr": 4, + "aprilie": 4, "mai": 5, "iun": 6, + "iunie": 6, "iul": 7, + "iulie": 7, "aug": 8, + "august": 8, "sept": 9, + "septembrie": 9, "oct": 10, + "octombrie": 10, + "noiembrie": 11, "nov": 11, - "dec": 12 + "dec": 12, + "decembrie": 12 }, "timeago_nd_tokens": { "astăzi": "0D", - "ieri": "1D" + "luni": "0Wd", + "săptămâna aceasta": "0Wl", + "ieri": "1D", + "marți": "1Wd", + "săptămâna trecută": "1Wl", + "miercuri": "2Wd", + "joi": "3Wd", + "vineri": "4Wd", + "sâmbătă": "5Wd", + "duminică": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3406,21 +4507,42 @@ "date_order": "DY", "months": { "янв": 1, + "январь": 1, "февр": 2, + "февраль": 2, "мар": 3, + "март": 3, "апр": 4, + "апрель": 4, + "май": 5, "мая": 5, "июн": 6, + "июнь": 6, "июл": 7, + "июль": 7, "авг": 8, + "август": 8, "сент": 9, + "сентябрь": 9, "окт": 10, + "октябрь": 10, "нояб": 11, - "дек": 12 + "ноябрь": 11, + "дек": 12, + "декабрь": 12 }, "timeago_nd_tokens": { "сегодня": "0D", - "вчера": "1D" + "понедельник": "0Wd", + "на этой неделе": "0Wl", + "вчера": "1D", + "вторник": "1Wd", + "на прошлой неделе": "1Wl", + "среда": "2Wd", + "четверг": "3Wd", + "пятница": "4Wd", + "суббота": "5Wd", + "воскресенье": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3456,21 +4578,37 @@ "date_order": "YD", "months": { "ජන": 1, + "ජනවාරි": 1, "පෙබ": 2, + "පෙබරවාරි": 2, "මාර්තු": 3, "අප්‍රේල්": 4, "මැයි": 5, "ජූනි": 6, "ජූලි": 7, "අගෝ": 8, + "අගෝස්තු": 8, "සැප්": 9, + "සැප්තැම්බර්": 9, "ඔක්": 10, + "ඔක්තෝබර්": 10, "නොවැ": 11, - "දෙසැ": 12 + "නොවැම්බර්": 11, + "දෙසැ": 12, + "දෙසැම්බර්": 12 }, "timeago_nd_tokens": { "අද": "0D", - "ඊයේ": "1D" + "සඳුදා": "0Wd", + "මෙම සතිය": "0Wl", + "ඊයේ": "1D", + "අඟහරුවාදා": "1Wd", + "පසුගිය සතිය": "1Wl", + "බදාදා": "2Wd", + "බ්‍රහස්පතින්දා": "3Wd", + "සිකුරාදා": "4Wd", + "සෙනසුරාදා": "5Wd", + "ඉරිදා": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -3528,10 +4666,32 @@ "rokom": "Y" }, "date_order": "DMY", - "months": {}, + "months": { + "január": 1, + "február": 2, + "marec": 3, + "apríl": 4, + "máj": 5, + "jún": 6, + "júl": 7, + "august": 8, + "september": 9, + "október": 10, + "november": 11, + "december": 12 + }, "timeago_nd_tokens": { "dnes": "0D", - "včera": "1D" + "pondelok": "0Wd", + "tento týždeň": "0Wl", + "včera": "1D", + "utorok": "1Wd", + "minulý týždeň": "1Wl", + "streda": "2Wd", + "štvrtok": "3Wd", + "piatok": "4Wd", + "sobota": "5Wd", + "nedeľa": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3596,21 +4756,41 @@ "date_order": "DY", "months": { "jan": 1, + "januar": 1, "feb": 2, + "februar": 2, "mar": 3, + "marec": 3, "apr": 4, + "april": 4, "maj": 5, "jun": 6, + "junij": 6, "jul": 7, + "julij": 7, "avg": 8, + "avgust": 8, "sep": 9, + "september": 9, "okt": 10, + "oktober": 10, "nov": 11, - "dec": 12 + "november": 11, + "dec": 12, + "december": 12 }, "timeago_nd_tokens": { "danes": "0D", - "včeraj": "1D" + "ponedeljek": "0Wd", + "ta teden": "0Wl", + "včeraj": "1D", + "torek": "1Wd", + "prejšnji teden": "1Wl", + "sreda": "2Wd", + "četrtek": "3Wd", + "petek": "4Wd", + "sobota": "5Wd", + "nedelja": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3651,21 +4831,41 @@ "date_order": "DY", "months": { "jan": 1, + "janar": 1, "shk": 2, + "shkurt": 2, "mar": 3, + "mars": 3, "pri": 4, + "prill": 4, "maj": 5, "qer": 6, + "qershor": 6, "korr": 7, + "korrik": 7, "gush": 8, + "gusht": 8, "sht": 9, + "shtator": 9, "tet": 10, + "tetor": 10, "nën": 11, - "dhj": 12 + "nëntor": 11, + "dhj": 12, + "dhjetor": 12 }, "timeago_nd_tokens": { "sot": "0D", - "dje": "1D" + "hënë": "0Wd", + "këtë javë": "0Wl", + "dje": "1D", + "martë": "1Wd", + "javën e kaluar": "1Wl", + "mërkurë": "2Wd", + "enjte": "3Wd", + "premte": "4Wd", + "shtunë": "5Wd", + "diel": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3714,10 +4914,32 @@ "године": "Y" }, "date_order": "DMY", - "months": {}, + "months": { + "јануар": 1, + "фебруар": 2, + "март": 3, + "април": 4, + "мај": 5, + "јун": 6, + "јул": 7, + "август": 8, + "септембар": 9, + "октобар": 10, + "новембар": 11, + "децембар": 12 + }, "timeago_nd_tokens": { "данас": "0D", - "јуче": "1D" + "понедељак": "0Wd", + "ове недеље": "0Wl", + "јуче": "1D", + "уторак": "1Wd", + "прошле недеље": "1Wl", + "среда": "2Wd", + "четвртак": "3Wd", + "петак": "4Wd", + "субота": "5Wd", + "недеља": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3766,10 +4988,32 @@ "godine": "Y" }, "date_order": "DMY", - "months": {}, + "months": { + "januar": 1, + "februar": 2, + "mart": 3, + "april": 4, + "maj": 5, + "jun": 6, + "jul": 7, + "avgust": 8, + "septembar": 9, + "oktobar": 10, + "novembar": 11, + "decembar": 12 + }, "timeago_nd_tokens": { "danas": "0D", - "juče": "1D" + "ponedeljak": "0Wd", + "ove nedelje": "0Wl", + "juče": "1D", + "utorak": "1Wd", + "prošle nedelje": "1Wl", + "sreda": "2Wd", + "četvrtak": "3Wd", + "petak": "4Wd", + "subota": "5Wd", + "nedelja": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3817,21 +5061,38 @@ "date_order": "DY", "months": { "jan": 1, + "januari": 1, "feb": 2, + "februari": 2, "mars": 3, "apr": 4, + "april": 4, "maj": 5, "juni": 6, "juli": 7, "aug": 8, + "augusti": 8, "sep": 9, + "september": 9, "okt": 10, + "oktober": 10, "nov": 11, - "dec": 12 + "november": 11, + "dec": 12, + "december": 12 }, "timeago_nd_tokens": { "dag": "0D", - "går": "1D" + "måndag": "0Wd", + "den här veckan": "0Wl", + "går": "1D", + "tisdag": "1Wd", + "förra veckan": "1Wl", + "onsdag": "2Wd", + "torsdag": "3Wd", + "fredag": "4Wd", + "lördag": "5Wd", + "söndag": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -3868,21 +5129,41 @@ "date_order": "DY", "months": { "jan": 1, + "januari": 1, "feb": 2, + "februari": 2, "mac": 3, + "machi": 3, "apr": 4, + "aprili": 4, "mei": 5, "jun": 6, + "juni": 6, "jul": 7, + "julai": 7, "ago": 8, + "agosti": 8, "sep": 9, + "septemba": 9, "okt": 10, + "oktoba": 10, "nov": 11, - "des": 12 + "novemba": 11, + "des": 12, + "desemba": 12 }, "timeago_nd_tokens": { "leo": "0D", - "jana": "1D" + "jumatatu": "0Wd", + "wiki hii": "0Wl", + "jana": "1D", + "jumanne": "1Wd", + "wiki iliyopita": "1Wl", + "jumatano": "2Wd", + "alhamisi": "3Wd", + "ijumaa": "4Wd", + "jumamosi": "5Wd", + "jumapili": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -3933,22 +5214,40 @@ }, "date_order": "DY", "months": { - "ஜன,": 1, - "பிப்,": 2, - "மார்,": 3, - "ஏப்,": 4, - "மே,": 5, - "ஜூன்,": 6, - "ஜூலை,": 7, - "ஆக,": 8, - "செப்,": 9, - "அக்,": 10, - "நவ,": 11, - "டிச,": 12 + "ஜன": 1, + "ஜனவரி": 1, + "பிப்": 2, + "பிப்ரவரி": 2, + "மார்": 3, + "மார்ச்": 3, + "ஏப்": 4, + "ஏப்ரல்": 4, + "மே": 5, + "ஜூன்": 6, + "ஜூலை": 7, + "ஆக": 8, + "ஆகஸ்ட்": 8, + "செப்": 9, + "செப்டம்பர்": 9, + "அக்": 10, + "அக்டோபர்": 10, + "நவ": 11, + "நவம்பர்": 11, + "டிச": 12, + "டிசம்பர்": 12 }, "timeago_nd_tokens": { "இன்று": "0D", - "நேற்று": "1D" + "திங்கள்": "0Wd", + "இந்த வாரம்": "0Wl", + "நேற்று": "1D", + "செவ்வாய்": "1Wd", + "கடந்த வாரம்": "1Wl", + "புதன்": "2Wd", + "வியாழன்": "3Wd", + "வெள்ளி": "4Wd", + "சனி": "5Wd", + "ஞாயிறு": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -3995,22 +5294,40 @@ }, "date_order": "DY", "months": { - "జన,": 1, - "ఫిబ్ర,": 2, - "మార్చి,": 3, - "ఏప్రి,": 4, - "మే,": 5, - "జూన్,": 6, - "జులై,": 7, - "ఆగ,": 8, - "సెప్టెం,": 9, - "అక్టో,": 10, - "నవం,": 11, - "డిసెం,": 12 + "జన": 1, + "జనవరి": 1, + "ఫిబ్ర": 2, + "ఫిబ్రవరి": 2, + "మార్చి": 3, + "ఏప్రి": 4, + "ఏప్రిల్": 4, + "మే": 5, + "జూన్": 6, + "జులై": 7, + "ఆగ": 8, + "ఆగస్టు": 8, + "సెప్టెం": 9, + "సెప్టెంబర్": 9, + "అక్టో": 10, + "అక్టోబర్": 10, + "నవం": 11, + "నవంబర్": 11, + "డిసెం": 12, + "డిసెంబర్": 12 }, "timeago_nd_tokens": { "ఈ": "0D", - "నిన్న": "1D" + "నేడు": "0D", + "సోమవారం": "0Wd", + "ఈ వారం": "0Wl", + "నిన్న": "1D", + "మంగళవారం": "1Wd", + "గత వారం": "1Wl", + "బుధవారం": "2Wd", + "గురువారం": "3Wd", + "శుక్రవారం": "4Wd", + "శనివారం": "5Wd", + "ఆదివారం": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -4055,22 +5372,45 @@ }, "date_order": "DY", "months": { + "มกราคม": 1, "มค": 1, "กพ": 2, + "กุมภาพันธ์": 2, "มีค": 3, + "มีนาคม": 3, "เมย": 4, + "เมษายน": 4, "พค": 5, + "พฤษภาคม": 5, + "มิถุนายน": 6, "มิย": 6, "กค": 7, + "กรกฎาคม": 7, "สค": 8, + "สิงหาคม": 8, "กย": 9, + "กันยายน": 9, "ตค": 10, + "ตุลาคม": 10, "พย": 11, - "ธค": 12 + "พฤศจิกายน": 11, + "ธค": 12, + "ธันวาคม": 12 }, "timeago_nd_tokens": { + "วันนี้": "0D", "อัปเดตแล้ววันนี้": "0D", - "อัปเดตเมื่อวานนี้": "1D" + "วันจันทร์": "0Wd", + "สัปดาห์นี้": "0Wl", + "เมื่อวานนี้": "1D", + "อัปเดตเมื่อวานนี้": "1D", + "วันอังคาร": "1Wd", + "สัปดาห์ที่แล้ว": "1Wl", + "วันพุธ": "2Wd", + "วันพฤหัสบดี": "3Wd", + "วันศุกร์": "4Wd", + "วันเสาร์": "5Wd", + "วันอาทิตย์": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -4113,21 +5453,42 @@ "date_order": "DY", "months": { "oca": 1, + "ocak": 1, "şub": 2, + "şubat": 2, "mar": 3, + "mart": 3, "nis": 4, + "nisan": 4, "may": 5, + "mayıs": 5, "haz": 6, + "haziran": 6, "tem": 7, + "temmuz": 7, "ağu": 8, + "ağustos": 8, "eyl": 9, + "eylül": 9, "eki": 10, + "ekim": 10, "kas": 11, - "ara": 12 + "kasım": 11, + "ara": 12, + "aralık": 12 }, "timeago_nd_tokens": { "bugün": "0D", - "dün": "1D" + "pazartesi": "0Wd", + "bu hafta": "0Wl", + "dün": "1D", + "salı": "1Wd", + "geçen hafta": "1Wl", + "çarşamba": "2Wd", + "perşembe": "3Wd", + "cuma": "4Wd", + "cumartesi": "5Wd", + "pazar": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -4190,21 +5551,43 @@ "date_order": "DY", "months": { "січ": 1, + "січень": 1, "лют": 2, + "лютий": 2, "бер": 3, + "березень": 3, "квіт": 4, + "квітень": 4, "трав": 5, + "травень": 5, "черв": 6, + "червень": 6, "лип": 7, + "липень": 7, "серп": 8, + "серпень": 8, "вер": 9, + "вересень": 9, "жовт": 10, + "жовтень": 10, "лист": 11, - "груд": 12 + "листопад": 11, + "груд": 12, + "грудень": 12 }, "timeago_nd_tokens": { "сьогодні": "0D", - "вчора": "1D" + "понеділок": "0Wd", + "цього тижня": "0Wl", + "вчора": "1D", + "учора": "1D", + "вівторок": "1Wd", + "минулого тижня": "1Wl", + "середа": "2Wd", + "четвер": "3Wd", + "пʼятниця": "4Wd", + "субота": "5Wd", + "неділя": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -4247,22 +5630,43 @@ }, "date_order": "DY", "months": { + "جنوری": 1, "جنوری،": 1, + "فروری": 2, "فروری،": 2, + "مارچ": 3, "مارچ،": 3, + "اپریل": 4, "اپریل،": 4, + "مئی": 5, "مئی،": 5, + "جون": 6, "جون،": 6, + "جولائی": 7, "جولائی،": 7, + "اگست": 8, "اگست،": 8, + "ستمبر": 9, "ستمبر،": 9, + "اکتوبر": 10, "اکتوبر،": 10, + "نومبر": 11, "نومبر،": 11, + "دسمبر": 12, "دسمبر،": 12 }, "timeago_nd_tokens": { "آج": "0D", - "کل": "1D" + "پیر": "0Wd", + "اس ہفتے": "0Wl", + "کل": "1D", + "منگل": "1Wd", + "گزشتہ ہفتہ": "1Wl", + "بدھ": "2Wd", + "جمعرات": "3Wd", + "جمعہ": "4Wd", + "ہفتہ": "5Wd", + "اتوار": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -4300,22 +5704,42 @@ }, "date_order": "DY", "months": { - "yan,": 1, - "fev,": 2, - "mar,": 3, - "apr,": 4, - "may,": 5, - "iyn,": 6, - "iyl,": 7, - "avg,": 8, - "sen,": 9, - "okt,": 10, - "noy,": 11, - "dek,": 12 + "yan": 1, + "yanvar": 1, + "fev": 2, + "fevral": 2, + "mar": 3, + "mart": 3, + "apr": 4, + "aprel": 4, + "may": 5, + "iyn": 6, + "iyun": 6, + "iyl": 7, + "iyul": 7, + "avg": 8, + "avgust": 8, + "sen": 9, + "sentabr": 9, + "okt": 10, + "oktabr": 10, + "noy": 11, + "noyabr": 11, + "dek": 12, + "dekabr": 12 }, "timeago_nd_tokens": { "bugun": "0D", - "kecha": "1D" + "dushanba": "0Wd", + "shu haftada": "0Wl", + "kecha": "1D", + "seshanba": "1Wd", + "o‘tgan hafta": "1Wl", + "chorshanba": "2Wd", + "payshanba": "3Wd", + "juma": "4Wd", + "shanba": "5Wd", + "yakshanba": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -4350,7 +5774,16 @@ "months": {}, "timeago_nd_tokens": { "nay": "0D", - "qua": "1D" + "thứ hai": "0Wd", + "tuần này": "0Wl", + "qua": "1D", + "thứ ba": "1Wd", + "tuần trước": "1Wl", + "thứ tư": "2Wd", + "thứ năm": "3Wd", + "thứ sáu": "4Wd", + "thứ bảy": "5Wd", + "chủ nhật": "6Wd" }, "comma_decimal": true, "number_tokens": { @@ -4382,10 +5815,32 @@ "年": "Y" }, "date_order": "YMD", - "months": {}, + "months": { + "一月": 1, + "二月": 2, + "三月": 3, + "四月": 4, + "五月": 5, + "六月": 6, + "七月": 7, + "八月": 8, + "九月": 9, + "十月": 10, + "十一月": 11, + "十二月": 12 + }, "timeago_nd_tokens": { "今": "0D", - "昨": "1D" + "一": "0Wd", + "本周": "0Wl", + "昨": "1D", + "二": "1Wd", + "上周": "1Wl", + "三": "2Wd", + "四": "3Wd", + "五": "4Wd", + "六": "5Wd", + "日": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -4422,7 +5877,16 @@ "months": {}, "timeago_nd_tokens": { "今": "0D", - "昨": "1D" + "一": "0Wd", + "本星期": "0Wl", + "昨": "1D", + "二": "1Wd", + "上星期": "1Wl", + "三": "2Wd", + "四": "3Wd", + "五": "4Wd", + "六": "5Wd", + "日": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -4456,7 +5920,16 @@ "months": {}, "timeago_nd_tokens": { "今": "0D", - "昨": "1D" + "一": "0Wd", + "本週": "0Wl", + "昨": "1D", + "二": "1Wd", + "上週": "1Wl", + "三": "2Wd", + "四": "3Wd", + "五": "4Wd", + "六": "5Wd", + "日": "6Wd" }, "comma_decimal": false, "number_tokens": { @@ -4506,21 +5979,43 @@ "date_order": "DY", "months": { "jan": 1, + "januwari": 1, "feb": 2, + "februwari": 2, "mas": 3, + "mashi": 3, "eph": 4, + "ephreli": 4, "mey": 5, + "meyi": 5, "jun": 6, + "juni": 6, "jul": 7, + "julayi": 7, "aga": 8, + "agasti": 8, "sep": 9, + "septhemba": 9, "okt": 10, + "okthoba": 10, "nov": 11, - "dis": 12 + "novemba": 11, + "dis": 12, + "disemba": 12 }, "timeago_nd_tokens": { + "namhlanje": "0D", "namuhla": "0D", - "izolo": "1D" + "umsombuluko": "0Wd", + "leli viki": "0Wl", + "izolo": "1D", + "ulwesibili": "1Wd", + "iviki eledlule": "1Wl", + "ulwesithathu": "2Wd", + "ulwesine": "3Wd", + "ulwesihlanu": "4Wd", + "umgqibelo": "5Wd", + "isonto": "6Wd" }, "comma_decimal": false, "number_tokens": { diff --git a/testfiles/dict/history_date_samples.json b/testfiles/dict/history_date_samples.json new file mode 100644 index 0000000..0d6668c --- /dev/null +++ b/testfiles/dict/history_date_samples.json @@ -0,0 +1,334 @@ +{ + "af": { + "this_week": "Vandeesweek", + "last_week": "Verlede week" + }, + "am": { + "this_week": "በዚህ ሳምንት", + "last_week": "ያለፈው ሳምንት" + }, + "ar": { + "this_week": "هذا الأسبوع", + "last_week": "الأسبوع الماضي" + }, + "as": { + "this_week": "এই সপ্তাহৰ", + "last_week": "যোৱা সপ্তাহৰ" + }, + "az": { + "this_week": "Bu həftə", + "last_week": "Ötən həftə" + }, + "be": { + "this_week": "На гэтым тыдні", + "last_week": "На мінулым тыдні" + }, + "bg": { + "this_week": "Тази седмица", + "last_week": "Последната седмица" + }, + "bn": { + "this_week": "এই সপ্তাহে", + "last_week": "গত সপ্তাহ" + }, + "bs": { + "this_week": "Ova sedmica", + "last_week": "Prošla sedmica" + }, + "ca": { + "this_week": "Aquesta setmana", + "last_week": "La setmana passada" + }, + "cs": { + "this_week": "Tento týden", + "last_week": "Minulý týden" + }, + "da": { + "this_week": "Denne uge", + "last_week": "Sidste uge" + }, + "de": { + "this_week": "Diese Woche", + "last_week": "Letzte Woche" + }, + "el": { + "this_week": "Αυτήν την εβδομάδα", + "last_week": "Τελευταία εβδομάδα" + }, + "en": { + "this_week": "This week", + "last_week": "Last week" + }, + "en-GB": { + "this_week": "This week", + "last_week": "Last week" + }, + "en-IN": { + "this_week": "This week", + "last_week": "Last week" + }, + "es": { + "this_week": "Esta semana", + "last_week": "La semana pasada" + }, + "es-419": { + "this_week": "Esta semana", + "last_week": "La semana pasada" + }, + "es-US": { + "this_week": "Esta semana", + "last_week": "La semana pasada" + }, + "et": { + "this_week": "Sellel nädalal", + "last_week": "Eelmisel nädalal" + }, + "eu": { + "this_week": "Aste hau", + "last_week": "Joan den astea" + }, + "fa": { + "this_week": "این هفته", + "last_week": "هفته قبل" + }, + "fi": { + "this_week": "Tällä viikolla", + "last_week": "Viime viikolla" + }, + "fil": { + "this_week": "Ngayong linggo", + "last_week": "Nakaraang linggo" + }, + "fr": { + "this_week": "Cette semaine", + "last_week": "La semaine dernière" + }, + "fr-CA": { + "this_week": "Cette semaine", + "last_week": "La semaine dernière" + }, + "gl": { + "this_week": "Esta semana", + "last_week": "A semana pasada" + }, + "gu": { + "this_week": "આ અઠવાડિયે", + "last_week": "છેલ્લું અઠવાડિયું" + }, + "hi": { + "this_week": "इस हफ़्ते", + "last_week": "पिछले हफ़्ते" + }, + "hr": { + "this_week": "Ovaj tjedan", + "last_week": "Prošli tjedan" + }, + "hu": { + "this_week": "Ezen a héten", + "last_week": "Múlt héten" + }, + "hy": { + "this_week": "Այս շաբաթ", + "last_week": "Անցյալ շաբաթ" + }, + "id": { + "this_week": "Minggu ini", + "last_week": "Minggu lalu" + }, + "is": { + "this_week": "Í vikunni", + "last_week": "Í síðustu viku" + }, + "it": { + "this_week": "Questa settimana", + "last_week": "Ultima settimana" + }, + "iw": { + "this_week": "השבוע", + "last_week": "בשבוע שעבר" + }, + "ja": { + "this_week": "今週", + "last_week": "先週" + }, + "ka": { + "this_week": "ამ კვირაში", + "last_week": "გასულ კვირაში" + }, + "kk": { + "this_week": "Осы аптада", + "last_week": "Өткен аптада" + }, + "km": { + "this_week": "សប្ដាហ៍​នេះ", + "last_week": "សប្ដាហ៍​មុន" + }, + "kn": { + "this_week": "ಈ ವಾರ", + "last_week": "ಕಳೆದ ವಾರ" + }, + "ko": { + "this_week": "이번 주", + "last_week": "지난주" + }, + "ky": { + "this_week": "Ушул аптадагы", + "last_week": "Өткөн аптадагы" + }, + "lo": { + "this_week": "ອາທິດນີ້", + "last_week": "ອາທິດຜ່ານ​ມາ" + }, + "lt": { + "this_week": "Šią savaitę", + "last_week": "Praėjusią savaitę" + }, + "lv": { + "this_week": "Šajā nedēļā", + "last_week": "Iepriekšējā nedēļā" + }, + "mk": { + "this_week": "Оваа седмица", + "last_week": "Минатата недела" + }, + "ml": { + "this_week": "ഈ ആഴ്‌ച", + "last_week": "കഴിഞ്ഞ ആഴ്ച" + }, + "mn": { + "this_week": "Энэ долоо хоног", + "last_week": "Өнгөрсөн долоо хоног" + }, + "mr": { + "this_week": "या आठवड्यात", + "last_week": "मागील आठवड्यात" + }, + "ms": { + "this_week": "Minggu ini", + "last_week": "Minggu lepas" + }, + "my": { + "this_week": "ယခုအပတ်", + "last_week": "ယခင်အပတ်" + }, + "ne": { + "this_week": "यस हप्ता", + "last_week": "पछिल्लो हप्ता" + }, + "nl": { + "this_week": "Deze week", + "last_week": "Afgelopen week" + }, + "no": { + "this_week": "Denne uken", + "last_week": "Forrige uke" + }, + "or": { + "this_week": "ଏହି ସପ୍ତାହ", + "last_week": "ଗତ ସପ୍ତାହ" + }, + "pa": { + "this_week": "ਇਸ ਹਫ਼ਤੇ", + "last_week": "ਪਿਛਲੇ ਹਫ਼ਤੇ" + }, + "pl": { + "this_week": "W tym tygodniu", + "last_week": "W zeszłym tygodniu" + }, + "pt": { + "this_week": "Esta semana", + "last_week": "Semana passada" + }, + "pt-PT": { + "this_week": "Esta semana", + "last_week": "A semana passada" + }, + "ro": { + "this_week": "Săptămâna aceasta", + "last_week": "Săptămâna trecută" + }, + "ru": { + "this_week": "На этой неделе", + "last_week": "На прошлой неделе" + }, + "si": { + "this_week": "මෙම සතිය", + "last_week": "පසුගිය සතිය" + }, + "sk": { + "this_week": "Tento týždeň", + "last_week": "Minulý týždeň" + }, + "sl": { + "this_week": "Ta teden", + "last_week": "Prejšnji teden" + }, + "sq": { + "this_week": "Këtë javë", + "last_week": "Javën e kaluar" + }, + "sr": { + "this_week": "Ове недеље", + "last_week": "Прошле недеље" + }, + "sr-Latn": { + "this_week": "Ove nedelje", + "last_week": "Prošle nedelje" + }, + "sv": { + "this_week": "Den här veckan", + "last_week": "Förra veckan" + }, + "sw": { + "this_week": "Wiki hii", + "last_week": "Wiki iliyopita" + }, + "ta": { + "this_week": "இந்த வாரம்", + "last_week": "கடந்த வாரம்" + }, + "te": { + "this_week": "ఈ వారం", + "last_week": "గత వారం" + }, + "th": { + "this_week": "สัปดาห์นี้", + "last_week": "สัปดาห์ที่แล้ว" + }, + "tr": { + "this_week": "Bu hafta", + "last_week": "Geçen hafta" + }, + "uk": { + "this_week": "Цього тижня", + "last_week": "Минулого тижня" + }, + "ur": { + "this_week": "اس ہفتے", + "last_week": "گزشتہ ہفتہ" + }, + "uz": { + "this_week": "Shu haftada", + "last_week": "O‘tgan hafta" + }, + "vi": { + "this_week": "Tuần này", + "last_week": "Tuần trước" + }, + "zh-CN": { + "this_week": "本周", + "last_week": "上周" + }, + "zh-HK": { + "this_week": "本星期", + "last_week": "上星期" + }, + "zh-TW": { + "this_week": "本週", + "last_week": "上週" + }, + "zu": { + "this_week": "Leli viki", + "last_week": "Iviki eledlule" + } +} diff --git a/tests/youtube.rs b/tests/youtube.rs index 8c5b2d6..ca9e69b 100644 --- a/tests/youtube.rs +++ b/tests/youtube.rs @@ -5,7 +5,7 @@ use std::fmt::Display; use std::str::FromStr; use rstest::{fixture, rstest}; -use rustypipe::model::TrackType; +use rustypipe::model::{HistoryItem, TrackItem, TrackType, VideoItem}; use rustypipe::param::{AlbumOrder, LANGUAGES}; use time::{macros::date, OffsetDateTime}; @@ -2751,7 +2751,7 @@ async fn history(rp: RustyPipe, cookie_auth_enabled: bool) { } let videos = rp.query().history().await.unwrap(); - assert_next_items(videos, rp.query(), 100).await; + assert_next_history(videos, rp.query(), 100).await; } #[rstest] @@ -2762,7 +2762,7 @@ async fn history_search(rp: RustyPipe, cookie_auth_enabled: bool) { } let videos = rp.query().history_search("a").await.unwrap(); - assert_next_items(videos, rp.query(), 5).await; + assert_next_history(videos, rp.query(), 5).await; } #[rstest] @@ -2817,7 +2817,7 @@ async fn music_history(rp: RustyPipe, cookie_auth_enabled: bool) { } let tracks = rp.query().music_history().await.unwrap(); - assert_next_items(tracks, rp.query(), 150).await; + assert_next_music_history(tracks, rp.query(), 150).await; } #[rstest] @@ -2998,6 +2998,30 @@ async fn assert_next_items>( assert_gte(p.items.len(), n_items, "items"); } +/// Assert that the history paginator produces at least n items +async fn assert_next_history>( + paginator: Paginator>, + query: Q, + n_items: usize, +) { + let mut p = paginator; + let query = query.as_ref(); + p.extend_limit(query, n_items).await.unwrap(); + assert_gte(p.items.len(), n_items, "items"); +} + +/// Assert that the music history paginator produces at least n items +async fn assert_next_music_history>( + paginator: Paginator>, + query: Q, + n_items: usize, +) { + let mut p = paginator; + let query = query.as_ref(); + p.extend_limit(query, n_items).await.unwrap(); + assert_gte(p.items.len(), n_items, "items"); +} + #[track_caller] fn assert_frameset(frameset: &Frameset) { assert_gte(frameset.frame_height, 20, "frame height");