Compare commits
No commits in common. "9ddf9a3ac4a9cabc055c568f0d7c6a3d0c547c75" and "c9433d721d152b0d66f967b777aeca55f49986d9" have entirely different histories.
9ddf9a3ac4
...
c9433d721d
11 changed files with 1845 additions and 11548 deletions
|
@ -12,6 +12,3 @@ indent_style = tab
|
|||
|
||||
[*.{json,md,rst,ini,yml,yaml,xml,html,js,jsx,ts,tsx,vue,kt}]
|
||||
indent_size = 2
|
||||
|
||||
[*.json]
|
||||
insert_final_newline = false
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -37,7 +37,7 @@ yesterday: PLmB6td997u3kUOrfFwkULZ910ho44oQSy
|
|||
5 days ago: PL3-sRm8xAzY9sDilvaWjCwCI0TkUzYdOG
|
||||
7 days ago: PLHr0jWPfopte182N54r1ra7tkRJC1fmPu
|
||||
|
||||
Jan PL1J-6JOckZtFjcni6Xj1pLYglJp6JCpKD 03.01.2020
|
||||
Jan PL1J-6JOckZtHxTA3hN5SK7gBQaFfKzeXr 01.01.2016
|
||||
Feb PL1J-6JOckZtETrbzwZE7mRIIK6BzWNLAs 07.02.2016
|
||||
Mar PL1J-6JOckZtG3AVdvBXhMO64mB2k3BtKi 09.03.2015
|
||||
Apr PL1J-6JOckZtE_rUpK24S6X5hOE4eQoprN 02.04.2017
|
||||
|
|
|
@ -1,20 +1,12 @@
|
|||
#![cfg(test)]
|
||||
|
||||
use std::{
|
||||
collections::{BTreeMap, HashMap},
|
||||
fs::File,
|
||||
hash::Hash,
|
||||
io::BufReader,
|
||||
path::Path,
|
||||
};
|
||||
use std::{collections::BTreeMap, fs::File, path::Path};
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
client::RustyTube,
|
||||
model::{locale::LANGUAGES, Country, Language},
|
||||
timeago::{self, TimeAgo},
|
||||
util,
|
||||
};
|
||||
|
||||
type CollectedDates = BTreeMap<Language, BTreeMap<DateCase, String>>;
|
||||
|
@ -38,7 +30,7 @@ enum DateCase {
|
|||
Dec,
|
||||
}
|
||||
|
||||
// #[test_log::test(tokio::test)]
|
||||
#[test_log::test(tokio::test)]
|
||||
async fn collect_dates() {
|
||||
let json_path = Path::new("testfiles/date/playlist_samples.json").to_path_buf();
|
||||
if json_path.exists() {
|
||||
|
@ -52,7 +44,7 @@ async fn collect_dates() {
|
|||
),
|
||||
(DateCase::Yesterday, "PLmB6td997u3kUOrfFwkULZ910ho44oQSy"),
|
||||
(DateCase::Ago, "PL7zsB-C3aNu2yRY2869T0zj1FhtRIu5am"),
|
||||
(DateCase::Jan, "PL1J-6JOckZtFjcni6Xj1pLYglJp6JCpKD"),
|
||||
(DateCase::Jan, "PL1J-6JOckZtHxTA3hN5SK7gBQaFfKzeXr"),
|
||||
(DateCase::Feb, "PL1J-6JOckZtETrbzwZE7mRIIK6BzWNLAs"),
|
||||
(DateCase::Mar, "PL1J-6JOckZtG3AVdvBXhMO64mB2k3BtKi"),
|
||||
(DateCase::Apr, "PL1J-6JOckZtE_rUpK24S6X5hOE4eQoprN"),
|
||||
|
@ -83,197 +75,3 @@ async fn collect_dates() {
|
|||
let file = File::create(json_path).unwrap();
|
||||
serde_json::to_writer_pretty(file, &collected_dates).unwrap();
|
||||
}
|
||||
|
||||
// #[test]
|
||||
fn write_samples_to_dict() {
|
||||
let json_path = Path::new("testfiles/date/playlist_samples.json").to_path_buf();
|
||||
let json_file = File::open(json_path).unwrap();
|
||||
let collected_dates: CollectedDates =
|
||||
serde_json::from_reader(BufReader::new(json_file)).unwrap();
|
||||
let mut dict = super::read_dict();
|
||||
let langs = dict.keys().map(|k| k.to_owned()).collect::<Vec<_>>();
|
||||
|
||||
let months = [
|
||||
DateCase::Jan,
|
||||
DateCase::Feb,
|
||||
DateCase::Mar,
|
||||
DateCase::Apr,
|
||||
DateCase::May,
|
||||
DateCase::Jun,
|
||||
DateCase::Jul,
|
||||
DateCase::Aug,
|
||||
DateCase::Sep,
|
||||
DateCase::Oct,
|
||||
DateCase::Nov,
|
||||
DateCase::Dec,
|
||||
];
|
||||
|
||||
let dates: [(u32, u32, u32); 12] = [
|
||||
(2020, 1, 3),
|
||||
(2016, 2, 7),
|
||||
(2015, 3, 9),
|
||||
(2017, 4, 2),
|
||||
(2014, 5, 22),
|
||||
(2014, 6, 28),
|
||||
(2014, 7, 2),
|
||||
(2015, 8, 23),
|
||||
(2018, 9, 16),
|
||||
(2014, 10, 31),
|
||||
(2016, 11, 3),
|
||||
(2021, 12, 24),
|
||||
];
|
||||
|
||||
for lang in langs {
|
||||
let mut datestr_tables = vec![collected_dates.get(&lang).unwrap()];
|
||||
dict.get(&lang)
|
||||
.unwrap()
|
||||
.equivalent
|
||||
.iter()
|
||||
.for_each(|l| datestr_tables.push(collected_dates.get(l).unwrap()));
|
||||
|
||||
let dict_entry = dict.entry(lang).or_default();
|
||||
let mut num_order = "".to_owned();
|
||||
|
||||
let collect_nd_tokens = match lang {
|
||||
Language::Ja
|
||||
| Language::ZhCn
|
||||
| Language::ZhHk
|
||||
| Language::ZhTw
|
||||
| Language::Ko
|
||||
| Language::Gu
|
||||
| Language::Pa
|
||||
| Language::Ur
|
||||
| Language::Uz
|
||||
| Language::Te
|
||||
| Language::PtPt
|
||||
// Singhalese YT translation is broken (today == tomorrow)
|
||||
| Language::Si => false,
|
||||
_ => true,
|
||||
};
|
||||
|
||||
dict_entry.months = BTreeMap::new();
|
||||
|
||||
if collect_nd_tokens {
|
||||
dict_entry.timeago_nd_tokens = BTreeMap::new();
|
||||
}
|
||||
|
||||
for datestr_table in &datestr_tables {
|
||||
let mut month_words: HashMap<String, usize> = HashMap::new();
|
||||
let mut td_words: HashMap<String, i8> = HashMap::new();
|
||||
|
||||
// Today/Yesterday
|
||||
{
|
||||
let mut parse = |string: &str, n: i8| {
|
||||
timeago::filter_str(string)
|
||||
.split_whitespace()
|
||||
.for_each(|word| {
|
||||
td_words
|
||||
.entry(word.to_owned())
|
||||
.and_modify(|e| *e = 0)
|
||||
.or_insert(n);
|
||||
});
|
||||
};
|
||||
|
||||
parse(datestr_table.get(&DateCase::Today).unwrap(), 1);
|
||||
parse(datestr_table.get(&DateCase::Yesterday).unwrap(), 2);
|
||||
parse(datestr_table.get(&DateCase::Ago).unwrap(), 0);
|
||||
parse(datestr_table.get(&DateCase::Jan).unwrap(), 0);
|
||||
}
|
||||
|
||||
// n days ago
|
||||
{
|
||||
let datestr = datestr_table.get(&DateCase::Ago).unwrap();
|
||||
let tago = timeago::parse(lang, &datestr);
|
||||
assert_eq!(
|
||||
tago,
|
||||
Some(TimeAgo {
|
||||
n: 3,
|
||||
unit: timeago::TimeUnit::Day
|
||||
}),
|
||||
"lang: {}, txt: {}",
|
||||
lang,
|
||||
datestr
|
||||
);
|
||||
}
|
||||
|
||||
// Absolute dates (Jan 3, 2020)
|
||||
months.iter().enumerate().for_each(|(n, m)| {
|
||||
let datestr = datestr_table.get(m).unwrap();
|
||||
|
||||
// Get order of numbers
|
||||
let nums = util::parse_numeric_vec::<u32>(&datestr);
|
||||
let date = dates[n];
|
||||
|
||||
let this_num_order = nums
|
||||
.iter()
|
||||
.map(|n| {
|
||||
if n == &date.0 {
|
||||
"Y"
|
||||
} else if n == &date.1 {
|
||||
"M"
|
||||
} else if n == &date.2 {
|
||||
"D"
|
||||
} else {
|
||||
panic!("invalid number {} in {}", n, datestr);
|
||||
}
|
||||
})
|
||||
.collect::<String>();
|
||||
|
||||
if num_order == "" {
|
||||
num_order = this_num_order;
|
||||
} else {
|
||||
assert_eq!(this_num_order, num_order, "lang: {}", lang);
|
||||
}
|
||||
|
||||
// Insert words into the map
|
||||
timeago::filter_str(&datestr)
|
||||
.split_whitespace()
|
||||
.for_each(|word| {
|
||||
month_words
|
||||
.entry(word.to_owned())
|
||||
.and_modify(|e| *e = 0)
|
||||
.or_insert(n + 1);
|
||||
});
|
||||
});
|
||||
|
||||
month_words.iter().for_each(|(word, m)| {
|
||||
if *m != 0 {
|
||||
dict_entry.months.insert(word.to_owned(), *m as u8);
|
||||
};
|
||||
});
|
||||
|
||||
if collect_nd_tokens {
|
||||
td_words.iter().for_each(|(word, n)| {
|
||||
match n {
|
||||
// Today
|
||||
1 => {
|
||||
dict_entry
|
||||
.timeago_nd_tokens
|
||||
.insert(word.to_owned(), "0D".to_owned());
|
||||
}
|
||||
// Yesterday
|
||||
2 => {
|
||||
dict_entry
|
||||
.timeago_nd_tokens
|
||||
.insert(word.to_owned(), "1D".to_owned());
|
||||
}
|
||||
_ => {}
|
||||
};
|
||||
});
|
||||
|
||||
if datestr_tables.len() == 1 {
|
||||
assert_eq!(
|
||||
dict_entry.timeago_nd_tokens.len(),
|
||||
2,
|
||||
"lang: {}, nd_tokens: {:?}",
|
||||
lang,
|
||||
&dict_entry.timeago_nd_tokens
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
dict_entry.date_order = num_order;
|
||||
}
|
||||
|
||||
super::write_dict(&dict);
|
||||
}
|
||||
|
|
|
@ -1,11 +1,31 @@
|
|||
#![cfg(test)]
|
||||
|
||||
use crate::{timeago::TimeUnit};
|
||||
use std::{
|
||||
collections::BTreeMap,
|
||||
fmt::Debug,
|
||||
fs::File,
|
||||
io::{BufReader},
|
||||
};
|
||||
|
||||
use crate::{model::Language, timeago::TimeUnit};
|
||||
use fancy_regex::Regex;
|
||||
use once_cell::sync::Lazy;
|
||||
use serde::Deserialize;
|
||||
|
||||
const DICT_PATH: &str = "testfiles/date/dictionary.json";
|
||||
const TARGET_FILE: &str = "src/dictionary.rs";
|
||||
|
||||
type Dictionary = BTreeMap<Language, DictEntry>;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct DictEntry {
|
||||
#[serde(default)]
|
||||
equivalent: Vec<Language>,
|
||||
#[serde(default)]
|
||||
by_char: bool,
|
||||
timeago_tokens: BTreeMap<String, String>,
|
||||
}
|
||||
|
||||
fn parse_tu(tu: &str) -> (u8, Option<TimeUnit>) {
|
||||
static TU_PATTERN: Lazy<Regex> = Lazy::new(|| Regex::new(r"^(\d*)(\w?)$").unwrap());
|
||||
match TU_PATTERN.captures(tu).unwrap() {
|
||||
|
@ -27,85 +47,51 @@ fn parse_tu(tu: &str) -> (u8, Option<TimeUnit>) {
|
|||
}
|
||||
}
|
||||
|
||||
fn read_dict() -> Dictionary {
|
||||
let json_file = File::open(DICT_PATH).unwrap();
|
||||
serde_json::from_reader(BufReader::new(json_file)).unwrap()
|
||||
}
|
||||
|
||||
// #[test]
|
||||
fn generate_dictionary() {
|
||||
let dict = super::read_dict();
|
||||
let dict = read_dict();
|
||||
|
||||
let code_head = r#"// This file is automatically generated. DO NOT EDIT.
|
||||
use crate::{
|
||||
model::Language,
|
||||
timeago::{TaToken, TimeUnit, DateCmp},
|
||||
timeago::{TaToken, TimeUnit},
|
||||
};
|
||||
|
||||
pub struct Entry {
|
||||
pub by_char: bool,
|
||||
pub timeago_tokens: phf::Map<&'static str, TaToken>,
|
||||
pub date_order: &'static [DateCmp],
|
||||
pub months: phf::Map<&'static str, u8>,
|
||||
pub timeago_nd_tokens: phf::Map<&'static str, TaToken>,
|
||||
}
|
||||
"#;
|
||||
|
||||
let mut code_timeago_tokens = r#"#[rustfmt::skip]
|
||||
pub fn entry(lang: Language) -> Entry {
|
||||
pub(crate) fn get_timeago_tokens(lang: Language) -> phf::Map<&'static str, TaToken> {
|
||||
match lang {
|
||||
"#
|
||||
.to_owned();
|
||||
|
||||
dict.iter().for_each(|(lang, entry)| {
|
||||
// Match selector
|
||||
// Create a map for the language
|
||||
let mut map = phf_codegen::Map::<&str>::new();
|
||||
|
||||
entry.timeago_tokens.iter().for_each(|(txt, tu_str)| {
|
||||
let (n, unit) = parse_tu(&tu_str);
|
||||
match unit {
|
||||
Some(unit) => map.entry(
|
||||
&txt,
|
||||
&format!("TaToken {{ n: {}, unit: Some(TimeUnit::{:?}) }}", n, unit),
|
||||
),
|
||||
None => map.entry(&txt, &format!("TaToken {{ n: {}, unit: None }}", n)),
|
||||
};
|
||||
});
|
||||
|
||||
let mut selector = format!("Language::{:?}", lang);
|
||||
entry.equivalent.iter().for_each(|eq| {
|
||||
selector += &format!(" | Language::{:?}", eq);
|
||||
});
|
||||
|
||||
// Timeago tokens
|
||||
let mut ta_tokens = phf_codegen::Map::<&str>::new();
|
||||
entry.timeago_tokens.iter().for_each(|(txt, tu_str)| {
|
||||
let (n, unit) = parse_tu(&tu_str);
|
||||
match unit {
|
||||
Some(unit) => ta_tokens.entry(
|
||||
&txt,
|
||||
&format!("TaToken {{ n: {}, unit: Some(TimeUnit::{:?}) }}", n, unit),
|
||||
),
|
||||
None => ta_tokens.entry(&txt, &format!("TaToken {{ n: {}, unit: None }}", n)),
|
||||
};
|
||||
});
|
||||
let code_map = &map.build().to_string().replace('\n', "\n ");
|
||||
|
||||
// Months
|
||||
let mut months = phf_codegen::Map::<&str>::new();
|
||||
entry.months.iter().for_each(|(txt, n_mon)| {
|
||||
months.entry(&txt, &n_mon.to_string());
|
||||
});
|
||||
|
||||
// Timeago(ND) tokens
|
||||
let mut ta_nd_tokens = phf_codegen::Map::<&str>::new();
|
||||
entry.timeago_nd_tokens.iter().for_each(|(txt, tu_str)| {
|
||||
let (n, unit) = parse_tu(&tu_str);
|
||||
match unit {
|
||||
Some(unit) => ta_nd_tokens.entry(
|
||||
&txt,
|
||||
&format!("TaToken {{ n: {}, unit: Some(TimeUnit::{:?}) }}", n, unit),
|
||||
),
|
||||
None => ta_nd_tokens.entry(&txt, &format!("TaToken {{ n: {}, unit: None }}", n)),
|
||||
};
|
||||
});
|
||||
|
||||
// Date order
|
||||
let mut date_order = "&[".to_owned();
|
||||
entry.date_order.chars().for_each(|c| {
|
||||
date_order += &format!("DateCmp::{}, ", c);
|
||||
});
|
||||
date_order = date_order.trim_end_matches([' ', ',']).to_owned() + "]";
|
||||
|
||||
let code_ta_tokens = &ta_tokens.build().to_string().replace('\n', "\n ");
|
||||
let code_ta_nd_tokens = &ta_nd_tokens.build().to_string().replace('\n', "\n ");
|
||||
let code_months = &months.build().to_string().replace('\n', "\n ");
|
||||
|
||||
code_timeago_tokens += &format!(
|
||||
"{} => Entry {{\n by_char: {:?},\n timeago_tokens: {},\n date_order: {},\n months: {},\n timeago_nd_tokens: {},\n }},\n ",
|
||||
selector, entry.by_char, code_ta_tokens, date_order, code_months, code_ta_nd_tokens
|
||||
);
|
||||
code_timeago_tokens += &format!("{} => {},\n ", selector, code_map);
|
||||
});
|
||||
|
||||
code_timeago_tokens = code_timeago_tokens.trim_end().to_owned() + "\n }\n}\n";
|
||||
|
|
|
@ -1,35 +1,4 @@
|
|||
#![cfg(test)]
|
||||
|
||||
use std::{collections::BTreeMap, fs::File, io::BufReader};
|
||||
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
||||
use crate::model::Language;
|
||||
mod collect_playlist_dates;
|
||||
mod gen_dictionary;
|
||||
mod gen_locales;
|
||||
|
||||
const DICT_PATH: &str = "testfiles/date/dictionary.json";
|
||||
|
||||
type Dictionary = BTreeMap<Language, DictEntry>;
|
||||
|
||||
#[derive(Debug, Default, Serialize, Deserialize)]
|
||||
#[serde(default)]
|
||||
struct DictEntry {
|
||||
equivalent: Vec<Language>,
|
||||
by_char: bool,
|
||||
timeago_tokens: BTreeMap<String, String>,
|
||||
date_order: String,
|
||||
months: BTreeMap<String, u8>,
|
||||
timeago_nd_tokens: BTreeMap<String, String>,
|
||||
}
|
||||
|
||||
fn read_dict() -> Dictionary {
|
||||
let json_file = File::open(DICT_PATH).unwrap();
|
||||
serde_json::from_reader(BufReader::new(json_file)).unwrap()
|
||||
}
|
||||
|
||||
fn write_dict(dict: &Dictionary) {
|
||||
let json_file = File::create(DICT_PATH).unwrap();
|
||||
serde_json::to_writer_pretty(json_file, dict).unwrap();
|
||||
}
|
||||
|
|
2787
src/dictionary.rs
2787
src/dictionary.rs
File diff suppressed because it is too large
Load diff
270
src/timeago.rs
270
src/timeago.rs
|
@ -1,6 +1,5 @@
|
|||
use std::{cmp::Ordering, ops::Mul};
|
||||
use std::cmp::Ordering;
|
||||
|
||||
use chrono::NaiveDate;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{dictionary, model::Language, util};
|
||||
|
@ -12,17 +11,11 @@ pub struct TimeAgo {
|
|||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
pub struct TaToken {
|
||||
pub(crate) struct TaToken {
|
||||
pub n: u8,
|
||||
pub unit: Option<TimeUnit>,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
enum ParsedDate {
|
||||
Absolute(NaiveDate),
|
||||
Relative(TimeAgo),
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
pub enum TimeUnit {
|
||||
|
@ -35,12 +28,6 @@ pub enum TimeUnit {
|
|||
Year,
|
||||
}
|
||||
|
||||
pub enum DateCmp {
|
||||
Y,
|
||||
M,
|
||||
D,
|
||||
}
|
||||
|
||||
impl TimeUnit {
|
||||
fn seconds(&self) -> u64 {
|
||||
match self {
|
||||
|
@ -79,43 +66,21 @@ impl PartialOrd for TimeAgo {
|
|||
}
|
||||
}
|
||||
|
||||
impl Mul<u8> for TimeAgo {
|
||||
type Output = Self;
|
||||
pub fn parse(lang: Language, textual_date: &str) -> Option<TimeAgo> {
|
||||
let mappings = dictionary::get_timeago_tokens(lang);
|
||||
|
||||
fn mul(self, rhs: u8) -> Self::Output {
|
||||
TimeAgo {
|
||||
n: self.n * rhs,
|
||||
unit: self.unit,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn filter_str(string: &str) -> String {
|
||||
string
|
||||
let filtered_str = textual_date
|
||||
.to_lowercase()
|
||||
.chars()
|
||||
.filter_map(|c| {
|
||||
if c == '\u{200b}' || c.is_ascii_digit() {
|
||||
None
|
||||
} else if c == '-' {
|
||||
Some(' ')
|
||||
} else {
|
||||
Some(c)
|
||||
}
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
.filter(|c| c != &'\u{200b}' && !c.is_ascii_digit())
|
||||
.collect::<String>();
|
||||
|
||||
fn parse_ta_token(entry: &dictionary::Entry, nd: bool, filtered_str: &str) -> Option<TimeAgo> {
|
||||
let tokens = match nd {
|
||||
true => &entry.timeago_nd_tokens,
|
||||
false => &entry.timeago_tokens,
|
||||
};
|
||||
let mut qu = 1;
|
||||
let mut qu: u8 = util::parse_numeric(&textual_date).unwrap_or(1);
|
||||
|
||||
if entry.by_char {
|
||||
match lang {
|
||||
Language::Ja | Language::ZhCn | Language::ZhHk | Language::ZhTw => {
|
||||
filtered_str.chars().find_map(|word| {
|
||||
tokens
|
||||
mappings
|
||||
.get(&word.to_string())
|
||||
.map(|t| match t.unit {
|
||||
Some(unit) => Some(TimeAgo { n: t.n * qu, unit }),
|
||||
|
@ -126,9 +91,9 @@ fn parse_ta_token(entry: &dictionary::Entry, nd: bool, filtered_str: &str) -> Op
|
|||
})
|
||||
.flatten()
|
||||
})
|
||||
} else {
|
||||
filtered_str.split_whitespace().find_map(|word| {
|
||||
tokens
|
||||
}
|
||||
_ => filtered_str.split_whitespace().find_map(|word| {
|
||||
mappings
|
||||
.get(word)
|
||||
.map(|t| match t.unit {
|
||||
Some(unit) => Some(TimeAgo { n: t.n * qu, unit }),
|
||||
|
@ -138,75 +103,7 @@ fn parse_ta_token(entry: &dictionary::Entry, nd: bool, filtered_str: &str) -> Op
|
|||
}
|
||||
})
|
||||
.flatten()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_textual_month(entry: &dictionary::Entry, filtered_str: &str) -> Option<u8> {
|
||||
if entry.by_char {
|
||||
// Chinese/Japanese dont use textual months
|
||||
None
|
||||
} else {
|
||||
filtered_str
|
||||
.split_whitespace()
|
||||
.find_map(|word| entry.months.get(word).map(|n| *n))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse(lang: Language, textual_date: &str) -> Option<TimeAgo> {
|
||||
let entry = dictionary::entry(lang);
|
||||
let filtered_str = filter_str(textual_date);
|
||||
|
||||
let qu: u8 = util::parse_numeric(&textual_date).unwrap_or(1);
|
||||
|
||||
parse_ta_token(&entry, false, &filtered_str).map(|ta| ta * qu)
|
||||
}
|
||||
|
||||
fn parse_date(lang: Language, textual_date: &str) -> Option<ParsedDate> {
|
||||
let entry = dictionary::entry(lang);
|
||||
let filtered_str = filter_str(textual_date);
|
||||
|
||||
let nums = util::parse_numeric_vec::<u16>(textual_date);
|
||||
|
||||
match nums.len() {
|
||||
0 => match parse_ta_token(&entry, true, &filtered_str) {
|
||||
Some(timeago) => Some(ParsedDate::Relative(timeago)),
|
||||
None => parse_ta_token(&entry, false, &filtered_str)
|
||||
.map(|timeago| ParsedDate::Relative(timeago)),
|
||||
},
|
||||
1 => parse_ta_token(&entry, false, &filtered_str)
|
||||
.map(|timeago| ParsedDate::Relative(timeago * nums[0] as u8)),
|
||||
2..=3 => {
|
||||
if nums.len() == entry.date_order.len() {
|
||||
let mut y: Option<u16> = None;
|
||||
let mut m: Option<u16> = None;
|
||||
let mut d: Option<u16> = 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),
|
||||
});
|
||||
|
||||
if m.is_none() {
|
||||
m = parse_textual_month(&entry, &filtered_str).map(|n| n as u16);
|
||||
}
|
||||
|
||||
match (y, m, d) {
|
||||
(Some(y), Some(m), Some(d)) => Some(ParsedDate::Absolute(NaiveDate::from_ymd(
|
||||
y.into(),
|
||||
m.into(),
|
||||
d.into(),
|
||||
))),
|
||||
_ => None,
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
_ => None,
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -228,8 +125,8 @@ mod tests {
|
|||
#[case] textual_date: &str,
|
||||
#[case] expect: Option<TimeAgo>,
|
||||
) {
|
||||
let time_ago = parse(lang, textual_date);
|
||||
assert_eq!(time_ago, expect);
|
||||
let secs_ago = parse(lang, textual_date);
|
||||
assert_eq!(secs_ago, expect);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -442,137 +339,4 @@ mod tests {
|
|||
|
||||
assert_eq!(n_cases, 1065)
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(Language::En, "Updated today", Some(ParsedDate::Relative(TimeAgo { n: 0, unit: TimeUnit::Day })))]
|
||||
#[case(Language::En, "Updated yesterday", Some(ParsedDate::Relative(TimeAgo { n: 1, unit: TimeUnit::Day })))]
|
||||
#[case(Language::En, "Updated 2 days ago", Some(ParsedDate::Relative(TimeAgo { n: 2, unit: TimeUnit::Day })))]
|
||||
#[case(Language::Si, "ඊයේ යාවත්කාලීන කරන ලදී", Some(ParsedDate::Relative(TimeAgo { n: 1, unit: TimeUnit::Day })))]
|
||||
#[case(
|
||||
Language::En,
|
||||
"Last updated on Jun 04, 2003",
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2003, 6, 4)))
|
||||
)]
|
||||
fn t_parse_date(
|
||||
#[case] lang: Language,
|
||||
#[case] textual_date: &str,
|
||||
#[case] expect: Option<ParsedDate>,
|
||||
) {
|
||||
let parsed_date = parse_date(lang, textual_date);
|
||||
assert_eq!(parsed_date, expect);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn t_parse_date_samples() {
|
||||
let json_path = Path::new("testfiles/date/playlist_samples.json");
|
||||
let json_file = File::open(json_path).unwrap();
|
||||
let date_samples: BTreeMap<Language, BTreeMap<String, String>> =
|
||||
serde_json::from_reader(BufReader::new(json_file)).unwrap();
|
||||
|
||||
date_samples.iter().for_each(|(lang, samples)| {
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Today").unwrap()),
|
||||
Some(ParsedDate::Relative(TimeAgo {
|
||||
n: 0,
|
||||
unit: TimeUnit::Day
|
||||
})),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Yesterday").unwrap()),
|
||||
Some(ParsedDate::Relative(TimeAgo {
|
||||
// YT's Singhalese translation has an error (yesterday == today)
|
||||
n: match lang {
|
||||
Language::Si => 0,
|
||||
_ => 1,
|
||||
},
|
||||
unit: TimeUnit::Day
|
||||
})),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Ago").unwrap()),
|
||||
Some(ParsedDate::Relative(TimeAgo {
|
||||
n: 3,
|
||||
unit: TimeUnit::Day
|
||||
})),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Jan").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2020, 1, 3))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Feb").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2016, 2, 7))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Mar").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2015, 3, 9))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Apr").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2017, 4, 2))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("May").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2014, 5, 22))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Jun").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2014, 6, 28))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Jul").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2014, 7, 2))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Aug").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2015, 8, 23))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Sep").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2018, 9, 16))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Oct").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2014, 10, 31))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Nov").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2016, 11, 3))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
assert_eq!(
|
||||
parse_date(*lang, samples.get("Dec").unwrap()),
|
||||
Some(ParsedDate::Absolute(NaiveDate::from_ymd(2021, 12, 24))),
|
||||
"lang: {}",
|
||||
lang
|
||||
);
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
42
src/util.rs
42
src/util.rs
|
@ -2,6 +2,7 @@ use std::{collections::BTreeMap, str::FromStr};
|
|||
|
||||
use anyhow::Result;
|
||||
use fancy_regex::Regex;
|
||||
use once_cell::sync::Lazy;
|
||||
use rand::Rng;
|
||||
use url::Url;
|
||||
|
||||
|
@ -58,36 +59,8 @@ pub fn parse_numeric<F>(string: &str) -> Result<F, F::Err>
|
|||
where
|
||||
F: FromStr,
|
||||
{
|
||||
let mut buf = String::new();
|
||||
for c in string.chars() {
|
||||
if c.is_ascii_digit() {
|
||||
buf.push(c);
|
||||
}
|
||||
}
|
||||
buf.parse()
|
||||
}
|
||||
|
||||
/// Parse all numbers occurring in a string and reurn them as a vec
|
||||
pub fn parse_numeric_vec<F>(string: &str) -> Vec<F>
|
||||
where
|
||||
F: FromStr,
|
||||
{
|
||||
let mut numbers = vec![];
|
||||
|
||||
let mut buf = String::new();
|
||||
for c in string.chars() {
|
||||
if c.is_ascii_digit() {
|
||||
buf.push(c);
|
||||
} else if !buf.is_empty() {
|
||||
buf.parse::<F>().map_or((), |n| numbers.push(n));
|
||||
buf.clear();
|
||||
}
|
||||
}
|
||||
if !buf.is_empty() {
|
||||
buf.parse::<F>().map_or((), |n| numbers.push(n));
|
||||
}
|
||||
|
||||
numbers
|
||||
static NUM_PATTERN: Lazy<Regex> = Lazy::new(|| Regex::new("\\D+").unwrap());
|
||||
NUM_PATTERN.replace_all(string, "").parse()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
@ -103,13 +76,4 @@ mod tests {
|
|||
let n = parse_numeric::<u32>(string).unwrap();
|
||||
assert_eq!(n, expect);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case("15.03.2022", vec![15, 3, 2022])]
|
||||
#[case("4 Hello World 2", vec![4, 2])]
|
||||
#[case("最后更新时间:2020年1月3日", vec![2020, 1, 3])]
|
||||
fn t_parse_numeric_vec(#[case] string: &str, #[case] expect: Vec<u32>) {
|
||||
let n = parse_numeric_vec::<u32>(string);
|
||||
assert_eq!(n, expect);
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -3,7 +3,7 @@
|
|||
"Today": "Vandag opgedateer",
|
||||
"Yesterday": "Gister opgedateer",
|
||||
"Ago": "3 dae gelede opgedateer",
|
||||
"Jan": "Laas opgedateer op 03 Jan. 2020",
|
||||
"Jan": "Laas opgedateer op 01 Jan. 2016",
|
||||
"Feb": "Laas opgedateer op 07 Feb. 2016",
|
||||
"Mar": "Laas opgedateer op 09 Mrt. 2015",
|
||||
"Apr": "Laas opgedateer op 02 Apr. 2017",
|
||||
|
@ -20,7 +20,7 @@
|
|||
"Today": "ዛሬ ዘምኗል",
|
||||
"Yesterday": "ትላንት ዘምኗል",
|
||||
"Ago": "ከ3 ቀናት በፊት ዘምኗል",
|
||||
"Jan": "ለመጨረሻ ጊዜ የዘመነው 3 ጃንዩ 2020",
|
||||
"Jan": "ለመጨረሻ ጊዜ የዘመነው 1 ጃንዩ 2016",
|
||||
"Feb": "ለመጨረሻ ጊዜ የዘመነው 7 ፌብሩ 2016",
|
||||
"Mar": "ለመጨረሻ ጊዜ የዘመነው 9 ማርች 2015",
|
||||
"Apr": "ለመጨረሻ ጊዜ የዘመነው 2 ኤፕሪ 2017",
|
||||
|
@ -37,7 +37,7 @@
|
|||
"Today": "تم التحديث اليوم",
|
||||
"Yesterday": "تم التحديث بالأمس",
|
||||
"Ago": "تم التحديث منذ 3 أيام",
|
||||
"Jan": "تم إجراء التعديل الأخير في 03/01/2020",
|
||||
"Jan": "تم إجراء التعديل الأخير في 01/01/2016",
|
||||
"Feb": "تم إجراء التعديل الأخير في 07/02/2016",
|
||||
"Mar": "تم إجراء التعديل الأخير في 09/03/2015",
|
||||
"Apr": "تم إجراء التعديل الأخير في 02/04/2017",
|
||||
|
@ -54,7 +54,7 @@
|
|||
"Today": "আজি আপডে’ট কৰা হৈছে",
|
||||
"Yesterday": "কালি আপডে’ট কৰা হৈছে",
|
||||
"Ago": "3 দিন আগতে আপডে’ট কৰা হৈছে",
|
||||
"Jan": "অন্তিমবাৰ 03-01-2020ত আপডে’ট কৰা হৈছিল",
|
||||
"Jan": "অন্তিমবাৰ 01-01-2016ত আপডে’ট কৰা হৈছিল",
|
||||
"Feb": "অন্তিমবাৰ 07-02-2016ত আপডে’ট কৰা হৈছিল",
|
||||
"Mar": "অন্তিমবাৰ 09-03-2015ত আপডে’ট কৰা হৈছিল",
|
||||
"Apr": "অন্তিমবাৰ 02-04-2017ত আপডে’ট কৰা হৈছিল",
|
||||
|
@ -71,7 +71,7 @@
|
|||
"Today": "Bugün güncəlləşdirildi",
|
||||
"Yesterday": "Dünən güncəlləşdirildi",
|
||||
"Ago": "3 gün əvvəl güncəlləşdirildi",
|
||||
"Jan": "Son güncəllənmə: 3 yan 2020",
|
||||
"Jan": "Son güncəllənmə: 1 yan 2016",
|
||||
"Feb": "Son güncəllənmə: 7 fev 2016",
|
||||
"Mar": "Son güncəllənmə: 9 mar 2015",
|
||||
"Apr": "Son güncəllənmə: 2 apr 2017",
|
||||
|
@ -88,7 +88,7 @@
|
|||
"Today": "Абноўлена сёння",
|
||||
"Yesterday": "Абноўлена ўчора",
|
||||
"Ago": "Абноўлена 3 дні таму",
|
||||
"Jan": "Дата апошняга абнаўлення: 3 сту 2020 г.",
|
||||
"Jan": "Дата апошняга абнаўлення: 1 сту 2016 г.",
|
||||
"Feb": "Дата апошняга абнаўлення: 7 лют 2016 г.",
|
||||
"Mar": "Дата апошняга абнаўлення: 9 сак 2015 г.",
|
||||
"Apr": "Дата апошняга абнаўлення: 2 кра 2017 г.",
|
||||
|
@ -105,7 +105,7 @@
|
|||
"Today": "Актуализирани днес",
|
||||
"Yesterday": "Актуализиран вчера",
|
||||
"Ago": "Актуализирани преди 3 дни",
|
||||
"Jan": "Последно актуализиран на 3.01.2020 г.",
|
||||
"Jan": "Последно актуализиран на 1.01.2016 г.",
|
||||
"Feb": "Последно актуализиран на 7.02.2016 г.",
|
||||
"Mar": "Последно актуализиран на 9.03.2015 г.",
|
||||
"Apr": "Последно актуализиран на 2.04.2017 г.",
|
||||
|
@ -122,7 +122,7 @@
|
|||
"Today": "আজ আপডেট হয়েছে",
|
||||
"Yesterday": "গতকাল আপডেট হয়েছে",
|
||||
"Ago": "3 দিন আগে আপডেট হয়েছে",
|
||||
"Jan": "3 জানু, 2020 এ সর্বশেষ আপডেট হয়েছে",
|
||||
"Jan": "1 জানু, 2016 এ সর্বশেষ আপডেট হয়েছে",
|
||||
"Feb": "7 ফেব, 2016 এ সর্বশেষ আপডেট হয়েছে",
|
||||
"Mar": "9 মার্চ, 2015 এ সর্বশেষ আপডেট হয়েছে",
|
||||
"Apr": "2 এপ্রিল, 2017 এ সর্বশেষ আপডেট হয়েছে",
|
||||
|
@ -139,7 +139,7 @@
|
|||
"Today": "Ažurirano danas",
|
||||
"Yesterday": "Ažurirano jučer",
|
||||
"Ago": "Ažurirano prije 3 dana",
|
||||
"Jan": "Zadnje ažuriranje 3. jan 2020.",
|
||||
"Jan": "Zadnje ažuriranje 1. jan 2016.",
|
||||
"Feb": "Zadnje ažuriranje 7. feb 2016.",
|
||||
"Mar": "Zadnje ažuriranje 9. mar 2015.",
|
||||
"Apr": "Zadnje ažuriranje 2. apr 2017.",
|
||||
|
@ -156,7 +156,7 @@
|
|||
"Today": "Actualitzada avui",
|
||||
"Yesterday": "Actualitzada ahir",
|
||||
"Ago": "Actualitzada fa 3 dies",
|
||||
"Jan": "Darrera actualització: 3 de gen. 2020",
|
||||
"Jan": "Darrera actualització: 1 de gen. 2016",
|
||||
"Feb": "Darrera actualització: 7 de febr. 2016",
|
||||
"Mar": "Darrera actualització: 9 de març 2015",
|
||||
"Apr": "Darrera actualització: 2 d’abr. 2017",
|
||||
|
@ -173,7 +173,7 @@
|
|||
"Today": "Aktualizováno dnes",
|
||||
"Yesterday": "Aktualizováno včera",
|
||||
"Ago": "Aktualizováno před 3 dny",
|
||||
"Jan": "Poslední aktualizace: 3. 1. 2020",
|
||||
"Jan": "Poslední aktualizace: 1. 1. 2016",
|
||||
"Feb": "Poslední aktualizace: 7. 2. 2016",
|
||||
"Mar": "Poslední aktualizace: 9. 3. 2015",
|
||||
"Apr": "Poslední aktualizace: 2. 4. 2017",
|
||||
|
@ -190,7 +190,7 @@
|
|||
"Today": "Opdateret i dag",
|
||||
"Yesterday": "Opdateret i går",
|
||||
"Ago": "Opdateret for 3 dage siden",
|
||||
"Jan": "Sidst opdateret d. 3. jan. 2020",
|
||||
"Jan": "Sidst opdateret d. 1. jan. 2016",
|
||||
"Feb": "Sidst opdateret d. 7. feb. 2016",
|
||||
"Mar": "Sidst opdateret d. 9. mar. 2015",
|
||||
"Apr": "Sidst opdateret d. 2. apr. 2017",
|
||||
|
@ -207,7 +207,7 @@
|
|||
"Today": "Heute aktualisiert",
|
||||
"Yesterday": "Gestern aktualisiert",
|
||||
"Ago": "Vor 3 Tagen aktualisiert",
|
||||
"Jan": "Zuletzt am 03.01.2020 aktualisiert",
|
||||
"Jan": "Zuletzt am 01.01.2016 aktualisiert",
|
||||
"Feb": "Zuletzt am 07.02.2016 aktualisiert",
|
||||
"Mar": "Zuletzt am 09.03.2015 aktualisiert",
|
||||
"Apr": "Zuletzt am 02.04.2017 aktualisiert",
|
||||
|
@ -224,7 +224,7 @@
|
|||
"Today": "Ενημερώθηκε σήμερα",
|
||||
"Yesterday": "Ενημερώθηκε χτες",
|
||||
"Ago": "Ενημερώθηκε πριν 3 ημέρες",
|
||||
"Jan": "Τελευταία ενημέρωση στις 3 Ιαν 2020",
|
||||
"Jan": "Τελευταία ενημέρωση στις 1 Ιαν 2016",
|
||||
"Feb": "Τελευταία ενημέρωση στις 7 Φεβ 2016",
|
||||
"Mar": "Τελευταία ενημέρωση στις 9 Μαρ 2015",
|
||||
"Apr": "Τελευταία ενημέρωση στις 2 Απρ 2017",
|
||||
|
@ -241,7 +241,7 @@
|
|||
"Today": "Updated today",
|
||||
"Yesterday": "Updated yesterday",
|
||||
"Ago": "Updated 3 days ago",
|
||||
"Jan": "Last updated on Jan 3, 2020",
|
||||
"Jan": "Last updated on Jan 1, 2016",
|
||||
"Feb": "Last updated on Feb 7, 2016",
|
||||
"Mar": "Last updated on Mar 9, 2015",
|
||||
"Apr": "Last updated on Apr 2, 2017",
|
||||
|
@ -258,7 +258,7 @@
|
|||
"Today": "Updated today",
|
||||
"Yesterday": "Updated yesterday",
|
||||
"Ago": "Updated 3 days ago",
|
||||
"Jan": "Last updated on 3 Jan 2020",
|
||||
"Jan": "Last updated on 1 Jan 2016",
|
||||
"Feb": "Last updated on 7 Feb 2016",
|
||||
"Mar": "Last updated on 9 Mar 2015",
|
||||
"Apr": "Last updated on 2 Apr 2017",
|
||||
|
@ -275,7 +275,7 @@
|
|||
"Today": "Updated today",
|
||||
"Yesterday": "Updated yesterday",
|
||||
"Ago": "Updated 3 days ago",
|
||||
"Jan": "Last updated on 03-Jan-2020",
|
||||
"Jan": "Last updated on 01-Jan-2016",
|
||||
"Feb": "Last updated on 07-Feb-2016",
|
||||
"Mar": "Last updated on 09-Mar-2015",
|
||||
"Apr": "Last updated on 02-Apr-2017",
|
||||
|
@ -292,7 +292,7 @@
|
|||
"Today": "Actualizado hoy",
|
||||
"Yesterday": "Actualizado ayer",
|
||||
"Ago": "Actualizado hace 3 días",
|
||||
"Jan": "Actualizado por última vez el 3 ene 2020",
|
||||
"Jan": "Actualizado por última vez el 1 ene 2016",
|
||||
"Feb": "Actualizado por última vez el 7 feb 2016",
|
||||
"Mar": "Actualizado por última vez el 9 mar 2015",
|
||||
"Apr": "Actualizado por última vez el 2 abr 2017",
|
||||
|
@ -309,7 +309,7 @@
|
|||
"Today": "Actualizada hoy",
|
||||
"Yesterday": "Actualizada ayer",
|
||||
"Ago": "Actualizada hace 3 días",
|
||||
"Jan": "Se actualizó por última vez el 3 ene 2020",
|
||||
"Jan": "Se actualizó por última vez el 1 ene 2016",
|
||||
"Feb": "Se actualizó por última vez el 7 feb 2016",
|
||||
"Mar": "Se actualizó por última vez el 9 mar 2015",
|
||||
"Apr": "Se actualizó por última vez el 2 abr 2017",
|
||||
|
@ -326,7 +326,7 @@
|
|||
"Today": "Actualizada hoy",
|
||||
"Yesterday": "Actualizada ayer",
|
||||
"Ago": "Actualizada hace 3 días",
|
||||
"Jan": "Se actualizó por última vez el 3 ene 2020",
|
||||
"Jan": "Se actualizó por última vez el 1 ene 2016",
|
||||
"Feb": "Se actualizó por última vez el 7 feb 2016",
|
||||
"Mar": "Se actualizó por última vez el 9 mar 2015",
|
||||
"Apr": "Se actualizó por última vez el 2 abr 2017",
|
||||
|
@ -343,7 +343,7 @@
|
|||
"Today": "Täna värskendatud",
|
||||
"Yesterday": "Eile värskendatud",
|
||||
"Ago": "Värskendatud 3 päeva tagasi",
|
||||
"Jan": "Viimati värskendatud 3. jaan 2020",
|
||||
"Jan": "Viimati värskendatud 1. jaan 2016",
|
||||
"Feb": "Viimati värskendatud 7. veebr 2016",
|
||||
"Mar": "Viimati värskendatud 9. märts 2015",
|
||||
"Apr": "Viimati värskendatud 2. apr 2017",
|
||||
|
@ -360,7 +360,7 @@
|
|||
"Today": "Gaur eguneratua",
|
||||
"Yesterday": "Atzo eguneratua",
|
||||
"Ago": "Duela 3 egun eguneratua",
|
||||
"Jan": "Azken eguneratze-data: 2020(e)ko urt. 3(a)",
|
||||
"Jan": "Azken eguneratze-data: 2016(e)ko urt. 1(a)",
|
||||
"Feb": "Azken eguneratze-data: 2016(e)ko ots. 7(a)",
|
||||
"Mar": "Azken eguneratze-data: 2015(e)ko mar. 9(a)",
|
||||
"Apr": "Azken eguneratze-data: 2017(e)ko api. 2(a)",
|
||||
|
@ -377,7 +377,7 @@
|
|||
"Today": "امروز بهروزرسانی شده",
|
||||
"Yesterday": "دیروز بهروزرسانی شده",
|
||||
"Ago": "3 روز پیش بهروزرسانی شده",
|
||||
"Jan": "آخرین تاریخ بهروزرسانی 3 ژانویه 2020",
|
||||
"Jan": "آخرین تاریخ بهروزرسانی 1 ژانویه 2016",
|
||||
"Feb": "آخرین تاریخ بهروزرسانی 7 فوریه 2016",
|
||||
"Mar": "آخرین تاریخ بهروزرسانی 9 مارس 2015",
|
||||
"Apr": "آخرین تاریخ بهروزرسانی 2 آوریل 2017",
|
||||
|
@ -394,7 +394,7 @@
|
|||
"Today": "Päivitetty tänään",
|
||||
"Yesterday": "Päivitetty eilen",
|
||||
"Ago": "Päivitetty 3 päivää sitten",
|
||||
"Jan": "Viimeksi päivitetty 3.1.2020",
|
||||
"Jan": "Viimeksi päivitetty 1.1.2016",
|
||||
"Feb": "Viimeksi päivitetty 7.2.2016",
|
||||
"Mar": "Viimeksi päivitetty 9.3.2015",
|
||||
"Apr": "Viimeksi päivitetty 2.4.2017",
|
||||
|
@ -411,7 +411,7 @@
|
|||
"Today": "Na-update ngayong araw",
|
||||
"Yesterday": "Na-update kahapon",
|
||||
"Ago": "Na-update 3 araw ang nakalipas",
|
||||
"Jan": "Huling na-update noong Ene 3, 2020",
|
||||
"Jan": "Huling na-update noong Ene 1, 2016",
|
||||
"Feb": "Huling na-update noong Peb 7, 2016",
|
||||
"Mar": "Huling na-update noong Mar 9, 2015",
|
||||
"Apr": "Huling na-update noong Abr 2, 2017",
|
||||
|
@ -428,7 +428,7 @@
|
|||
"Today": "Mise à jour aujourd'hui",
|
||||
"Yesterday": "Mise à jour hier",
|
||||
"Ago": "Mise à jour il y a 3 jours",
|
||||
"Jan": "Dernière modification le 3 janv. 2020",
|
||||
"Jan": "Dernière modification le 1 janv. 2016",
|
||||
"Feb": "Dernière modification le 7 févr. 2016",
|
||||
"Mar": "Dernière modification le 9 mars 2015",
|
||||
"Apr": "Dernière modification le 2 avr. 2017",
|
||||
|
@ -445,7 +445,7 @@
|
|||
"Today": "Mise à jour aujourd'hui",
|
||||
"Yesterday": "Mise à jour hier",
|
||||
"Ago": "Mise à jour il y a 3 jours",
|
||||
"Jan": "Dernière mise à jour le 3 janv. 2020",
|
||||
"Jan": "Dernière mise à jour le 1 janv. 2016",
|
||||
"Feb": "Dernière mise à jour le 7 févr. 2016",
|
||||
"Mar": "Dernière mise à jour le 9 mars 2015",
|
||||
"Apr": "Dernière mise à jour le 2 avr. 2017",
|
||||
|
@ -462,7 +462,7 @@
|
|||
"Today": "Actualizáronse hoxe",
|
||||
"Yesterday": "Actualizáronse onte",
|
||||
"Ago": "Actualizáronse hai 3 días",
|
||||
"Jan": "Última actualización: 3 de xan. de 2020",
|
||||
"Jan": "Última actualización: 1 de xan. de 2016",
|
||||
"Feb": "Última actualización: 7 de feb. de 2016",
|
||||
"Mar": "Última actualización: 9 de mar. de 2015",
|
||||
"Apr": "Última actualización: 2 de abr. de 2017",
|
||||
|
@ -479,7 +479,7 @@
|
|||
"Today": "આજે અપડેટ થયેલ",
|
||||
"Yesterday": "ગઈ કાલે અપડેટ થયેલ",
|
||||
"Ago": "3 દિવસ પહેલાં અપડેટ થયેલ",
|
||||
"Jan": "3 જાન્યુ, 2020 ના રોજ છેલ્લે અપડેટ કરાયેલ",
|
||||
"Jan": "1 જાન્યુ, 2016 ના રોજ છેલ્લે અપડેટ કરાયેલ",
|
||||
"Feb": "7 ફેબ્રુ, 2016 ના રોજ છેલ્લે અપડેટ કરાયેલ",
|
||||
"Mar": "9 માર્ચ, 2015 ના રોજ છેલ્લે અપડેટ કરાયેલ",
|
||||
"Apr": "2 એપ્રિલ, 2017 ના રોજ છેલ્લે અપડેટ કરાયેલ",
|
||||
|
@ -496,7 +496,7 @@
|
|||
"Today": "आज अपडेट किया गया",
|
||||
"Yesterday": "कल अपडेट किया गया",
|
||||
"Ago": "3 दिन पहले अपडेट किया गया",
|
||||
"Jan": "पिछली बार 3 जन॰ 2020 को अपडेट किया गया",
|
||||
"Jan": "पिछली बार 1 जन॰ 2016 को अपडेट किया गया",
|
||||
"Feb": "पिछली बार 7 फ़र॰ 2016 को अपडेट किया गया",
|
||||
"Mar": "पिछली बार 9 मार्च 2015 को अपडेट किया गया",
|
||||
"Apr": "पिछली बार 2 अप्रैल 2017 को अपडेट किया गया",
|
||||
|
@ -513,7 +513,7 @@
|
|||
"Today": "Ažurirano danas",
|
||||
"Yesterday": "Ažurirano jučer",
|
||||
"Ago": "Ažurirano prije 3 dana",
|
||||
"Jan": "Posljednje ažuriranje: 3. sij 2020.",
|
||||
"Jan": "Posljednje ažuriranje: 1. sij 2016.",
|
||||
"Feb": "Posljednje ažuriranje: 7. velj 2016.",
|
||||
"Mar": "Posljednje ažuriranje: 9. ožu 2015.",
|
||||
"Apr": "Posljednje ažuriranje: 2. tra 2017.",
|
||||
|
@ -530,7 +530,7 @@
|
|||
"Today": "Ma frissítve",
|
||||
"Yesterday": "Tegnap frissítve",
|
||||
"Ago": "3 napja frissítve",
|
||||
"Jan": "Utolsó frissítés: 2020. jan. 3.",
|
||||
"Jan": "Utolsó frissítés: 2016. jan. 1.",
|
||||
"Feb": "Utolsó frissítés: 2016. febr. 7.",
|
||||
"Mar": "Utolsó frissítés: 2015. márc. 9.",
|
||||
"Apr": "Utolsó frissítés: 2017. ápr. 2.",
|
||||
|
@ -547,7 +547,7 @@
|
|||
"Today": "Թարմացվել է այսօր",
|
||||
"Yesterday": "Թարմացվել է երեկ",
|
||||
"Ago": "Թարմացվել է 3 օր առաջ",
|
||||
"Jan": "Վերջին թարմացումը՝ 03 հնվ, 2020 թ.",
|
||||
"Jan": "Վերջին թարմացումը՝ 01 հնվ, 2016 թ.",
|
||||
"Feb": "Վերջին թարմացումը՝ 07 փտվ, 2016 թ.",
|
||||
"Mar": "Վերջին թարմացումը՝ 09 մրտ, 2015 թ.",
|
||||
"Apr": "Վերջին թարմացումը՝ 02 ապր, 2017 թ.",
|
||||
|
@ -564,7 +564,7 @@
|
|||
"Today": "Diperbarui hari ini",
|
||||
"Yesterday": "Diperbarui kemarin",
|
||||
"Ago": "Diperbarui 3 hari lalu",
|
||||
"Jan": "Terakhir diperbarui pada 3 Jan 2020",
|
||||
"Jan": "Terakhir diperbarui pada 1 Jan 2016",
|
||||
"Feb": "Terakhir diperbarui pada 7 Feb 2016",
|
||||
"Mar": "Terakhir diperbarui pada 9 Mar 2015",
|
||||
"Apr": "Terakhir diperbarui pada 2 Apr 2017",
|
||||
|
@ -581,7 +581,7 @@
|
|||
"Today": "Uppfært í dag",
|
||||
"Yesterday": "Uppfært í gær",
|
||||
"Ago": "Uppfært fyrir 3 dögum",
|
||||
"Jan": "Síðast uppfært þann 3. jan. 2020",
|
||||
"Jan": "Síðast uppfært þann 1. jan. 2016",
|
||||
"Feb": "Síðast uppfært þann 7. feb. 2016",
|
||||
"Mar": "Síðast uppfært þann 9. mar. 2015",
|
||||
"Apr": "Síðast uppfært þann 2. apr. 2017",
|
||||
|
@ -598,7 +598,7 @@
|
|||
"Today": "Aggiornata oggi",
|
||||
"Yesterday": "Aggiornata ieri",
|
||||
"Ago": "Aggiornata 3 giorni fa",
|
||||
"Jan": "Ultimo aggiornamento in data 3 gen 2020",
|
||||
"Jan": "Ultimo aggiornamento in data 1 gen 2016",
|
||||
"Feb": "Ultimo aggiornamento in data 7 feb 2016",
|
||||
"Mar": "Ultimo aggiornamento in data 9 mar 2015",
|
||||
"Apr": "Ultimo aggiornamento in data 2 apr 2017",
|
||||
|
@ -615,7 +615,7 @@
|
|||
"Today": "עודכן היום",
|
||||
"Yesterday": "עודכן אתמול",
|
||||
"Ago": "עודכן לפני 3 ימים",
|
||||
"Jan": "עודכן לאחרונה ב-3 בינו׳ 2020",
|
||||
"Jan": "עודכן לאחרונה ב-1 בינו׳ 2016",
|
||||
"Feb": "עודכן לאחרונה ב-7 בפבר׳ 2016",
|
||||
"Mar": "עודכן לאחרונה ב-9 במרץ 2015",
|
||||
"Apr": "עודכן לאחרונה ב-2 באפר׳ 2017",
|
||||
|
@ -632,7 +632,7 @@
|
|||
"Today": "本日更新",
|
||||
"Yesterday": "昨日更新",
|
||||
"Ago": "3 日前に更新",
|
||||
"Jan": "最終更新日: 2020/01/03",
|
||||
"Jan": "最終更新日: 2016/01/01",
|
||||
"Feb": "最終更新日: 2016/02/07",
|
||||
"Mar": "最終更新日: 2015/03/09",
|
||||
"Apr": "最終更新日: 2017/04/02",
|
||||
|
@ -649,7 +649,7 @@
|
|||
"Today": "განახლდა დღეს",
|
||||
"Yesterday": "განახლდა გუშინ",
|
||||
"Ago": "განახლდა 3 დღის წინ",
|
||||
"Jan": "ბოლოს განახლდა 3 იან. 2020-ში",
|
||||
"Jan": "ბოლოს განახლდა 1 იან. 2016-ში",
|
||||
"Feb": "ბოლოს განახლდა 7 თებ. 2016-ში",
|
||||
"Mar": "ბოლოს განახლდა 9 მარ. 2015-ში",
|
||||
"Apr": "ბოლოს განახლდა 2 აპრ. 2017-ში",
|
||||
|
@ -666,7 +666,7 @@
|
|||
"Today": "Бүгін жаңартылған",
|
||||
"Yesterday": "Кеше жаңартылған",
|
||||
"Ago": "3 күн бұрын жаңартылған",
|
||||
"Jan": "Соңғы рет 2020 ж. 03 қаң. күні жаңартылды",
|
||||
"Jan": "Соңғы рет 2016 ж. 01 қаң. күні жаңартылды",
|
||||
"Feb": "Соңғы рет 2016 ж. 07 ақп. күні жаңартылды",
|
||||
"Mar": "Соңғы рет 2015 ж. 09 нау. күні жаңартылды",
|
||||
"Apr": "Соңғы рет 2017 ж. 02 сәу. күні жаңартылды",
|
||||
|
@ -683,7 +683,7 @@
|
|||
"Today": "បានធ្វើបច្ចុប្បន្នភាពថ្ងៃនេះ",
|
||||
"Yesterday": "បានធ្វើបច្ចុប្បន្នភាពម្សិលមិញ",
|
||||
"Ago": "បានធ្វើបច្ចុប្បន្នភាព 3 ថ្ងៃមុន",
|
||||
"Jan": "បានធ្វើបច្ចុប្បន្នភាពចុងក្រោយនៅ 3 មករា 2020",
|
||||
"Jan": "បានធ្វើបច្ចុប្បន្នភាពចុងក្រោយនៅ 1 មករា 2016",
|
||||
"Feb": "បានធ្វើបច្ចុប្បន្នភាពចុងក្រោយនៅ 7 កុម្ភៈ 2016",
|
||||
"Mar": "បានធ្វើបច្ចុប្បន្នភាពចុងក្រោយនៅ 9 មីនា 2015",
|
||||
"Apr": "បានធ្វើបច្ចុប្បន្នភាពចុងក្រោយនៅ 2 មេសា 2017",
|
||||
|
@ -700,7 +700,7 @@
|
|||
"Today": "ಇಂದು ಅಪ್ಡೇಟ್ ಮಾಡಲಾಗಿದೆ",
|
||||
"Yesterday": "ನಿನ್ನೆ ಅಪ್ಡೇಟ್ ಮಾಡಲಾಗಿದೆ",
|
||||
"Ago": "3 ದಿನಗಳ ಹಿಂದೆ ಅಪ್ಡೇಟ್ ಮಾಡಲಾಗಿದೆ",
|
||||
"Jan": "ಕೊನೆಯದಾಗಿ ಅಪ್ಡೇಟ್ ಮಾಡಿದ್ದು ಜನವರಿ 3, 2020",
|
||||
"Jan": "ಕೊನೆಯದಾಗಿ ಅಪ್ಡೇಟ್ ಮಾಡಿದ್ದು ಜನವರಿ 1, 2016",
|
||||
"Feb": "ಕೊನೆಯದಾಗಿ ಅಪ್ಡೇಟ್ ಮಾಡಿದ್ದು ಫೆಬ್ರವರಿ 7, 2016",
|
||||
"Mar": "ಕೊನೆಯದಾಗಿ ಅಪ್ಡೇಟ್ ಮಾಡಿದ್ದು ಮಾರ್ಚ್ 9, 2015",
|
||||
"Apr": "ಕೊನೆಯದಾಗಿ ಅಪ್ಡೇಟ್ ಮಾಡಿದ್ದು ಏಪ್ರಿ 2, 2017",
|
||||
|
@ -717,7 +717,7 @@
|
|||
"Today": "업데이트: 오늘",
|
||||
"Yesterday": "업데이트: 1일 전",
|
||||
"Ago": "업데이트: 3일 전",
|
||||
"Jan": "최종 업데이트: 2020. 1. 3.",
|
||||
"Jan": "최종 업데이트: 2016. 1. 1.",
|
||||
"Feb": "최종 업데이트: 2016. 2. 7.",
|
||||
"Mar": "최종 업데이트: 2015. 3. 9.",
|
||||
"Apr": "최종 업데이트: 2017. 4. 2.",
|
||||
|
@ -734,7 +734,7 @@
|
|||
"Today": "Бүгүн жаңырды",
|
||||
"Yesterday": "Кечээ жаңырды",
|
||||
"Ago": "3 күн мурун жаңырды",
|
||||
"Jan": "Акыркы жолу 2020-ж., 3-янв. күнү жаңырган",
|
||||
"Jan": "Акыркы жолу 2016-ж., 1-янв. күнү жаңырган",
|
||||
"Feb": "Акыркы жолу 2016-ж., 7-фев. күнү жаңырган",
|
||||
"Mar": "Акыркы жолу 2015-ж., 9-мар. күнү жаңырган",
|
||||
"Apr": "Акыркы жолу 2017-ж., 2-апр. күнү жаңырган",
|
||||
|
@ -751,7 +751,7 @@
|
|||
"Today": "ອັບເດດມື້ນີ້",
|
||||
"Yesterday": "ອັບເດດມື້ວານນີ້",
|
||||
"Ago": "ອັບເດດ 3 ມື້ກ່ອນ",
|
||||
"Jan": "ອັບເດດຫຼ້າສຸດເມື່ອ 3 ມ.ກ. 2020",
|
||||
"Jan": "ອັບເດດຫຼ້າສຸດເມື່ອ 1 ມ.ກ. 2016",
|
||||
"Feb": "ອັບເດດຫຼ້າສຸດເມື່ອ 7 ກ.ພ. 2016",
|
||||
"Mar": "ອັບເດດຫຼ້າສຸດເມື່ອ 9 ມ.ນ. 2015",
|
||||
"Apr": "ອັບເດດຫຼ້າສຸດເມື່ອ 2 ມ.ສ. 2017",
|
||||
|
@ -768,7 +768,7 @@
|
|||
"Today": "Atnaujinta šiandien",
|
||||
"Yesterday": "Atnaujinta vakar",
|
||||
"Ago": "Atnaujinta prieš 3 d.",
|
||||
"Jan": "Paskutinį kartą atnaujinta 2020-01-03",
|
||||
"Jan": "Paskutinį kartą atnaujinta 2016-01-01",
|
||||
"Feb": "Paskutinį kartą atnaujinta 2016-02-07",
|
||||
"Mar": "Paskutinį kartą atnaujinta 2015-03-09",
|
||||
"Apr": "Paskutinį kartą atnaujinta 2017-04-02",
|
||||
|
@ -785,7 +785,7 @@
|
|||
"Today": "Atjaunināts šodien",
|
||||
"Yesterday": "Atjaunināts vakar",
|
||||
"Ago": "Atjaunināts pirms 3 dienām",
|
||||
"Jan": "Pēdējo reizi atjaunināts: 2020. gada 3. janv.",
|
||||
"Jan": "Pēdējo reizi atjaunināts: 2016. gada 1. janv.",
|
||||
"Feb": "Pēdējo reizi atjaunināts: 2016. gada 7. febr.",
|
||||
"Mar": "Pēdējo reizi atjaunināts: 2015. gada 9. marts",
|
||||
"Apr": "Pēdējo reizi atjaunināts: 2017. gada 2. apr.",
|
||||
|
@ -802,7 +802,7 @@
|
|||
"Today": "Ажурирано денес",
|
||||
"Yesterday": "Ажурирано вчера",
|
||||
"Ago": "Ажурирано пред 3 дена",
|
||||
"Jan": "Последно ажурирано на 3.1.2020",
|
||||
"Jan": "Последно ажурирано на 1.1.2016",
|
||||
"Feb": "Последно ажурирано на 7.2.2016",
|
||||
"Mar": "Последно ажурирано на 9.3.2015",
|
||||
"Apr": "Последно ажурирано на 2.4.2017",
|
||||
|
@ -819,7 +819,7 @@
|
|||
"Today": "ഇന്ന് അപ്ഡേറ്റ് ചെയ്തത്",
|
||||
"Yesterday": "ഇന്നലെ അപ്ഡേറ്റ് ചെയ്തത്",
|
||||
"Ago": "3 ദിവസം മുമ്പ് അപ്ഡേറ്റ് ചെയ്തത്",
|
||||
"Jan": "അവസാനം അപ്ഡേറ്റുചെയ്ത തീയതി 2020, ജനു 3",
|
||||
"Jan": "അവസാനം അപ്ഡേറ്റുചെയ്ത തീയതി 2016, ജനു 1",
|
||||
"Feb": "അവസാനം അപ്ഡേറ്റുചെയ്ത തീയതി 2016, ഫെബ്രു 7",
|
||||
"Mar": "അവസാനം അപ്ഡേറ്റുചെയ്ത തീയതി 2015, മാർ 9",
|
||||
"Apr": "അവസാനം അപ്ഡേറ്റുചെയ്ത തീയതി 2017, ഏപ്രി 2",
|
||||
|
@ -836,7 +836,7 @@
|
|||
"Today": "өнөөдөр шинэчлэгдсэн",
|
||||
"Yesterday": "өчигдөр шинэчлэгдсэн",
|
||||
"Ago": "3 өдрийн өмнө шинэчлэгдсэн",
|
||||
"Jan": "Сүүлд 2020 оны 1-р сарын 3-нд шинэчилсэн",
|
||||
"Jan": "Сүүлд 2016 оны 1-р сарын 1-нд шинэчилсэн",
|
||||
"Feb": "Сүүлд 2016 оны 2-р сарын 7-нд шинэчилсэн",
|
||||
"Mar": "Сүүлд 2015 оны 3-р сарын 9-нд шинэчилсэн",
|
||||
"Apr": "Сүүлд 2017 оны 4-р сарын 2-нд шинэчилсэн",
|
||||
|
@ -853,7 +853,7 @@
|
|||
"Today": "आज अपडेट केले",
|
||||
"Yesterday": "काल अपडेट केले",
|
||||
"Ago": "3 दिवसांपूर्वी अपडेट केले",
|
||||
"Jan": "3 जाने, 2020 रोजी अंतिम अपडेट",
|
||||
"Jan": "1 जाने, 2016 रोजी अंतिम अपडेट",
|
||||
"Feb": "7 फेब्रु, 2016 रोजी अंतिम अपडेट",
|
||||
"Mar": "9 मार्च, 2015 रोजी अंतिम अपडेट",
|
||||
"Apr": "2 एप्रि, 2017 रोजी अंतिम अपडेट",
|
||||
|
@ -870,7 +870,7 @@
|
|||
"Today": "Dikemas kini hari ini",
|
||||
"Yesterday": "Dikemas kini semalam",
|
||||
"Ago": "Dikemas kini 3 hari yang lalu",
|
||||
"Jan": "Terakhir dikemas kini pada 3 Jan 2020",
|
||||
"Jan": "Terakhir dikemas kini pada 1 Jan 2016",
|
||||
"Feb": "Terakhir dikemas kini pada 7 Feb 2016",
|
||||
"Mar": "Terakhir dikemas kini pada 9 Mac 2015",
|
||||
"Apr": "Terakhir dikemas kini pada 2 Apr 2017",
|
||||
|
@ -887,7 +887,7 @@
|
|||
"Today": "ယနေ့ အပ်ဒိတ်လုပ်ခဲ့သည်",
|
||||
"Yesterday": "မနေ့က အပ်ဒိတ်လုပ်ခဲ့သည်",
|
||||
"Ago": "ပြီးခဲ့သော 3 ရက်က အပ်ဒိတ်လုပ်ခဲ့သည်",
|
||||
"Jan": "2020- ဇန် 3 ရက်က နောက်ဆုံး အပ်ဒိတ်လုပ်ခဲ့ပါသည်",
|
||||
"Jan": "2016- ဇန် 1 ရက်က နောက်ဆုံး အပ်ဒိတ်လုပ်ခဲ့ပါသည်",
|
||||
"Feb": "2016- ဖေ 7 ရက်က နောက်ဆုံး အပ်ဒိတ်လုပ်ခဲ့ပါသည်",
|
||||
"Mar": "2015- မတ် 9 ရက်က နောက်ဆုံး အပ်ဒိတ်လုပ်ခဲ့ပါသည်",
|
||||
"Apr": "2017- ဧ 2 ရက်က နောက်ဆုံး အပ်ဒိတ်လုပ်ခဲ့ပါသည်",
|
||||
|
@ -904,7 +904,7 @@
|
|||
"Today": "आज अद्यावधिक गरिएको",
|
||||
"Yesterday": "हिजो अद्यावधिक गरिएको",
|
||||
"Ago": "3 दिन अघि अद्यावधिक गरिएको",
|
||||
"Jan": "2020 जनवरी 3 मा पछिल्लो पटक अद्यावधिक गरिएको",
|
||||
"Jan": "2016 जनवरी 1 मा पछिल्लो पटक अद्यावधिक गरिएको",
|
||||
"Feb": "2016 फेब्रुअरी 7 मा पछिल्लो पटक अद्यावधिक गरिएको",
|
||||
"Mar": "2015 मार्च 9 मा पछिल्लो पटक अद्यावधिक गरिएको",
|
||||
"Apr": "2017 अप्रिल 2 मा पछिल्लो पटक अद्यावधिक गरिएको",
|
||||
|
@ -921,7 +921,7 @@
|
|||
"Today": "Vandaag geüpdatet",
|
||||
"Yesterday": "Gisteren geüpdatet",
|
||||
"Ago": "3 dagen geleden geüpdatet",
|
||||
"Jan": "Laatst geüpdatet op 3 jan. 2020",
|
||||
"Jan": "Laatst geüpdatet op 1 jan. 2016",
|
||||
"Feb": "Laatst geüpdatet op 7 feb. 2016",
|
||||
"Mar": "Laatst geüpdatet op 9 mrt. 2015",
|
||||
"Apr": "Laatst geüpdatet op 2 apr. 2017",
|
||||
|
@ -938,7 +938,7 @@
|
|||
"Today": "Oppdatert i dag",
|
||||
"Yesterday": "Oppdatert i går",
|
||||
"Ago": "Oppdatert for 3 dager siden",
|
||||
"Jan": "Sist oppdatert 3. jan. 2020",
|
||||
"Jan": "Sist oppdatert 1. jan. 2016",
|
||||
"Feb": "Sist oppdatert 7. feb. 2016",
|
||||
"Mar": "Sist oppdatert 9. mar. 2015",
|
||||
"Apr": "Sist oppdatert 2. apr. 2017",
|
||||
|
@ -955,7 +955,7 @@
|
|||
"Today": "ଆଜି ଅପ୍ଡେଟ୍ ହୋଇଛି",
|
||||
"Yesterday": "ଗତକାଲି ଅପ୍ଡେଟ୍ ହୋଇଥିଲା",
|
||||
"Ago": "3 ଦିନ ପୂର୍ବରୁ ଅପ୍ଡେଟ୍ ହୋଇଥିଲା",
|
||||
"Jan": "ଜାନୁଆରୀ 3, 2020ରେ ଶେଷଥର ପାଇଁ ଅପଡେଟ୍ ହୋଇଛି",
|
||||
"Jan": "ଜାନୁଆରୀ 1, 2016ରେ ଶେଷଥର ପାଇଁ ଅପଡେଟ୍ ହୋଇଛି",
|
||||
"Feb": "ଫେବୃଆରୀ 7, 2016ରେ ଶେଷଥର ପାଇଁ ଅପଡେଟ୍ ହୋଇଛି",
|
||||
"Mar": "ମାର୍ଚ୍ଚ 9, 2015ରେ ଶେଷଥର ପାଇଁ ଅପଡେଟ୍ ହୋଇଛି",
|
||||
"Apr": "ଅପ୍ରେଲ 2, 2017ରେ ଶେଷଥର ପାଇଁ ଅପଡେଟ୍ ହୋଇଛି",
|
||||
|
@ -972,7 +972,7 @@
|
|||
"Today": "ਅੱਜ ਅੱਪਡੇਟ ਕੀਤਾ",
|
||||
"Yesterday": "ਬੀੇਤੇ ਕੱਲ ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ",
|
||||
"Ago": "3 ਦਿਨ ਪਹਿਲੇ ਅੱਪਡੇਟ ਕੀਤਾ",
|
||||
"Jan": "ਆਖਰੀ ਵਾਰ 3 ਜਨ 2020 ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ",
|
||||
"Jan": "ਆਖਰੀ ਵਾਰ 1 ਜਨ 2016 ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ",
|
||||
"Feb": "ਆਖਰੀ ਵਾਰ 7 ਫ਼ਰ 2016 ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ",
|
||||
"Mar": "ਆਖਰੀ ਵਾਰ 9 ਮਾਰਚ 2015 ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ",
|
||||
"Apr": "ਆਖਰੀ ਵਾਰ 2 ਅਪ੍ਰੈ 2017 ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ",
|
||||
|
@ -989,7 +989,7 @@
|
|||
"Today": "Zaktualizowano dzisiaj",
|
||||
"Yesterday": "Zaktualizowano wczoraj",
|
||||
"Ago": "Zaktualizowano 3 dni temu",
|
||||
"Jan": "Ostatnia aktualizacja: 3 sty 2020",
|
||||
"Jan": "Ostatnia aktualizacja: 1 sty 2016",
|
||||
"Feb": "Ostatnia aktualizacja: 7 lut 2016",
|
||||
"Mar": "Ostatnia aktualizacja: 9 mar 2015",
|
||||
"Apr": "Ostatnia aktualizacja: 2 kwi 2017",
|
||||
|
@ -1006,7 +1006,7 @@
|
|||
"Today": "Atualizada hoje",
|
||||
"Yesterday": "Atualizada ontem",
|
||||
"Ago": "Atualizada há 3 dias",
|
||||
"Jan": "Última atualização em 3 de jan. de 2020",
|
||||
"Jan": "Última atualização em 1 de jan. de 2016",
|
||||
"Feb": "Última atualização em 7 de fev. de 2016",
|
||||
"Mar": "Última atualização em 9 de mar. de 2015",
|
||||
"Apr": "Última atualização em 2 de abr. de 2017",
|
||||
|
@ -1023,7 +1023,7 @@
|
|||
"Today": "Atualizados hoje",
|
||||
"Yesterday": "Atualizado ontem",
|
||||
"Ago": "Atualizado(s) há 3 dias",
|
||||
"Jan": "Última atualização a 03/01/2020",
|
||||
"Jan": "Última atualização a 01/01/2016",
|
||||
"Feb": "Última atualização a 07/02/2016",
|
||||
"Mar": "Última atualização a 09/03/2015",
|
||||
"Apr": "Última atualização a 02/04/2017",
|
||||
|
@ -1040,7 +1040,7 @@
|
|||
"Today": "Actualizat astăzi",
|
||||
"Yesterday": "Actualizat ieri",
|
||||
"Ago": "Actualizat acum 3 zile",
|
||||
"Jan": "Ultima actualizare pe 3 ian. 2020",
|
||||
"Jan": "Ultima actualizare pe 1 ian. 2016",
|
||||
"Feb": "Ultima actualizare pe 7 feb. 2016",
|
||||
"Mar": "Ultima actualizare pe 9 mar. 2015",
|
||||
"Apr": "Ultima actualizare pe 2 apr. 2017",
|
||||
|
@ -1057,7 +1057,7 @@
|
|||
"Today": "Обновлено сегодня",
|
||||
"Yesterday": "Обновлено вчера",
|
||||
"Ago": "Обновлено 3 дня назад",
|
||||
"Jan": "Обновлен 3 янв. 2020 г.",
|
||||
"Jan": "Обновлен 1 янв. 2016 г.",
|
||||
"Feb": "Обновлен 7 февр. 2016 г.",
|
||||
"Mar": "Обновлен 9 мар. 2015 г.",
|
||||
"Apr": "Обновлен 2 апр. 2017 г.",
|
||||
|
@ -1074,7 +1074,7 @@
|
|||
"Today": "අද යාවත්කාලීන කෙරිණි",
|
||||
"Yesterday": "අද යාවත්කාලීන කෙරිණි",
|
||||
"Ago": "දින 3කට පෙර යාවත්කාලීන කෙරිණි",
|
||||
"Jan": "අවසන් වරට යාවත්කාලීන කළේ 2020 ජන 3",
|
||||
"Jan": "අවසන් වරට යාවත්කාලීන කළේ 2016 ජන 1",
|
||||
"Feb": "අවසන් වරට යාවත්කාලීන කළේ 2016 පෙබ 7",
|
||||
"Mar": "අවසන් වරට යාවත්කාලීන කළේ 2015 මාර්තු 9",
|
||||
"Apr": "අවසන් වරට යාවත්කාලීන කළේ 2017 අප්රේල් 2",
|
||||
|
@ -1091,7 +1091,7 @@
|
|||
"Today": "Aktualizované dnes",
|
||||
"Yesterday": "Aktualizované včera",
|
||||
"Ago": "Aktualizované pred 3 dňami",
|
||||
"Jan": "Naposledy aktualizované 3. 1. 2020",
|
||||
"Jan": "Naposledy aktualizované 1. 1. 2016",
|
||||
"Feb": "Naposledy aktualizované 7. 2. 2016",
|
||||
"Mar": "Naposledy aktualizované 9. 3. 2015",
|
||||
"Apr": "Naposledy aktualizované 2. 4. 2017",
|
||||
|
@ -1108,7 +1108,7 @@
|
|||
"Today": "Posodobljeno danes",
|
||||
"Yesterday": "Posodobljeno včeraj",
|
||||
"Ago": "Posodobljeno pred 3 dnevi",
|
||||
"Jan": "Datum zadnje posodobitve 3. jan. 2020",
|
||||
"Jan": "Datum zadnje posodobitve 1. jan. 2016",
|
||||
"Feb": "Datum zadnje posodobitve 7. feb. 2016",
|
||||
"Mar": "Datum zadnje posodobitve 9. mar. 2015",
|
||||
"Apr": "Datum zadnje posodobitve 2. apr. 2017",
|
||||
|
@ -1125,7 +1125,7 @@
|
|||
"Today": "Përditësuar sot",
|
||||
"Yesterday": "Përditësuar dje",
|
||||
"Ago": "Përditësuar 3 ditë më parë",
|
||||
"Jan": "Përditësuar së fundi më 3 jan 2020",
|
||||
"Jan": "Përditësuar së fundi më 1 jan 2016",
|
||||
"Feb": "Përditësuar së fundi më 7 shk 2016",
|
||||
"Mar": "Përditësuar së fundi më 9 mar 2015",
|
||||
"Apr": "Përditësuar së fundi më 2 pri 2017",
|
||||
|
@ -1142,7 +1142,7 @@
|
|||
"Today": "Ажурирано данас",
|
||||
"Yesterday": "Ажурирано јуче",
|
||||
"Ago": "Ажурирано пре 3 дана",
|
||||
"Jan": "Последњи пут ажурирано 3. 1. 2020.",
|
||||
"Jan": "Последњи пут ажурирано 1. 1. 2016.",
|
||||
"Feb": "Последњи пут ажурирано 7. 2. 2016.",
|
||||
"Mar": "Последњи пут ажурирано 9. 3. 2015.",
|
||||
"Apr": "Последњи пут ажурирано 2. 4. 2017.",
|
||||
|
@ -1159,7 +1159,7 @@
|
|||
"Today": "Ažurirano danas",
|
||||
"Yesterday": "Ažurirano juče",
|
||||
"Ago": "Ažurirano pre 3 dana",
|
||||
"Jan": "Poslednji put ažurirano 3. 1. 2020.",
|
||||
"Jan": "Poslednji put ažurirano 1. 1. 2016.",
|
||||
"Feb": "Poslednji put ažurirano 7. 2. 2016.",
|
||||
"Mar": "Poslednji put ažurirano 9. 3. 2015.",
|
||||
"Apr": "Poslednji put ažurirano 2. 4. 2017.",
|
||||
|
@ -1176,7 +1176,7 @@
|
|||
"Today": "Uppdaterades idag",
|
||||
"Yesterday": "Uppdaterades igår",
|
||||
"Ago": "Uppdaterades för 3 dagar sedan",
|
||||
"Jan": "Uppdaterades senast 3 jan. 2020",
|
||||
"Jan": "Uppdaterades senast 1 jan. 2016",
|
||||
"Feb": "Uppdaterades senast 7 feb. 2016",
|
||||
"Mar": "Uppdaterades senast 9 mars 2015",
|
||||
"Apr": "Uppdaterades senast 2 apr. 2017",
|
||||
|
@ -1193,7 +1193,7 @@
|
|||
"Today": "Zilizosasishwa leo",
|
||||
"Yesterday": "Zilizosasishwa jana",
|
||||
"Ago": "Zilizosasishwa siku 3 zilizopita",
|
||||
"Jan": "Ilisasishwa mara ya mwisho tarehe 3 Jan 2020",
|
||||
"Jan": "Ilisasishwa mara ya mwisho tarehe 1 Jan 2016",
|
||||
"Feb": "Ilisasishwa mara ya mwisho tarehe 7 Feb 2016",
|
||||
"Mar": "Ilisasishwa mara ya mwisho tarehe 9 Mac 2015",
|
||||
"Apr": "Ilisasishwa mara ya mwisho tarehe 2 Apr 2017",
|
||||
|
@ -1210,7 +1210,7 @@
|
|||
"Today": "இன்று புதுப்பிக்கப்பட்டது",
|
||||
"Yesterday": "நேற்று புதுப்பிக்கப்பட்டது",
|
||||
"Ago": "3 நாட்களுக்கு முன்பு புதுப்பிக்கப்பட்டது",
|
||||
"Jan": "3 ஜன., 2020 அன்று கடைசியாக புதுப்பிக்கப்பட்டது",
|
||||
"Jan": "1 ஜன., 2016 அன்று கடைசியாக புதுப்பிக்கப்பட்டது",
|
||||
"Feb": "7 பிப்., 2016 அன்று கடைசியாக புதுப்பிக்கப்பட்டது",
|
||||
"Mar": "9 மார்., 2015 அன்று கடைசியாக புதுப்பிக்கப்பட்டது",
|
||||
"Apr": "2 ஏப்., 2017 அன்று கடைசியாக புதுப்பிக்கப்பட்டது",
|
||||
|
@ -1227,7 +1227,7 @@
|
|||
"Today": "ఈ రోజు అప్డేట్ చేయబడింది",
|
||||
"Yesterday": "నిన్న అప్డేట్ చేయబడింది",
|
||||
"Ago": "3 రోజుల క్రితం అప్డేట్ చేయబడింది",
|
||||
"Jan": "చివరిగా 3 జన, 2020న అప్డేట్ చేయబడింది",
|
||||
"Jan": "చివరిగా 1 జన, 2016న అప్డేట్ చేయబడింది",
|
||||
"Feb": "చివరిగా 7 ఫిబ్ర, 2016న అప్డేట్ చేయబడింది",
|
||||
"Mar": "చివరిగా 9 మార్చి, 2015న అప్డేట్ చేయబడింది",
|
||||
"Apr": "చివరిగా 2 ఏప్రి, 2017న అప్డేట్ చేయబడింది",
|
||||
|
@ -1244,7 +1244,7 @@
|
|||
"Today": "อัปเดตแล้ววันนี้",
|
||||
"Yesterday": "อัปเดตแล้วเมื่อวาน",
|
||||
"Ago": "อัปเดตแล้วเมื่อ 3 วันที่ผ่านมา",
|
||||
"Jan": "อัปเดตล่าสุดเมื่อ 3 ม.ค. 2020",
|
||||
"Jan": "อัปเดตล่าสุดเมื่อ 1 ม.ค. 2016",
|
||||
"Feb": "อัปเดตล่าสุดเมื่อ 7 ก.พ. 2016",
|
||||
"Mar": "อัปเดตล่าสุดเมื่อ 9 มี.ค. 2015",
|
||||
"Apr": "อัปเดตล่าสุดเมื่อ 2 เม.ย. 2017",
|
||||
|
@ -1261,7 +1261,7 @@
|
|||
"Today": "Bugün güncellendi",
|
||||
"Yesterday": "Dün güncellendi",
|
||||
"Ago": "3 gün önce güncellendi",
|
||||
"Jan": "En son 3 Oca 2020 tarihinde güncellendi",
|
||||
"Jan": "En son 1 Oca 2016 tarihinde güncellendi",
|
||||
"Feb": "En son 7 Şub 2016 tarihinde güncellendi",
|
||||
"Mar": "En son 9 Mar 2015 tarihinde güncellendi",
|
||||
"Apr": "En son 2 Nis 2017 tarihinde güncellendi",
|
||||
|
@ -1278,7 +1278,7 @@
|
|||
"Today": "Оновлено сьогодні",
|
||||
"Yesterday": "Оновлено вчора",
|
||||
"Ago": "Оновлено 3 дні тому",
|
||||
"Jan": "Останнє оновлення: 3 січ. 2020 р.",
|
||||
"Jan": "Останнє оновлення: 1 січ. 2016 р.",
|
||||
"Feb": "Останнє оновлення: 7 лют. 2016 р.",
|
||||
"Mar": "Останнє оновлення: 9 бер. 2015 р.",
|
||||
"Apr": "Останнє оновлення: 2 квіт. 2017 р.",
|
||||
|
@ -1295,7 +1295,7 @@
|
|||
"Today": "آج اپ ڈیٹ کیا گیا",
|
||||
"Yesterday": "گزشتہ کل اپ ڈیٹ کیا گیا",
|
||||
"Ago": "3 دن پہلے اپ ڈیٹ کیا گیا",
|
||||
"Jan": "آخری بار 3 جنوری، 2020 کو اپ ڈیٹ کیا گیا",
|
||||
"Jan": "آخری بار 1 جنوری، 2016 کو اپ ڈیٹ کیا گیا",
|
||||
"Feb": "آخری بار 7 فروری، 2016 کو اپ ڈیٹ کیا گیا",
|
||||
"Mar": "آخری بار 9 مارچ، 2015 کو اپ ڈیٹ کیا گیا",
|
||||
"Apr": "آخری بار 2 اپریل، 2017 کو اپ ڈیٹ کیا گیا",
|
||||
|
@ -1312,7 +1312,7 @@
|
|||
"Today": "Bugun yangilandi",
|
||||
"Yesterday": "Kecha yangilangan",
|
||||
"Ago": "3 kun oldin yangilangan",
|
||||
"Jan": "Oxirgi yangilanish: 3-yan, 2020",
|
||||
"Jan": "Oxirgi yangilanish: 1-yan, 2016",
|
||||
"Feb": "Oxirgi yangilanish: 7-fev, 2016",
|
||||
"Mar": "Oxirgi yangilanish: 9-mar, 2015",
|
||||
"Apr": "Oxirgi yangilanish: 2-apr, 2017",
|
||||
|
@ -1329,7 +1329,7 @@
|
|||
"Today": "Cập nhật hôm nay",
|
||||
"Yesterday": "Cập nhật hôm qua",
|
||||
"Ago": "Cập nhật 3 ngày trước",
|
||||
"Jan": "Cập nhật lần cuối vào 3 thg 1, 2020",
|
||||
"Jan": "Cập nhật lần cuối vào 1 thg 1, 2016",
|
||||
"Feb": "Cập nhật lần cuối vào 7 thg 2, 2016",
|
||||
"Mar": "Cập nhật lần cuối vào 9 thg 3, 2015",
|
||||
"Apr": "Cập nhật lần cuối vào 2 thg 4, 2017",
|
||||
|
@ -1346,7 +1346,7 @@
|
|||
"Today": "今日更新",
|
||||
"Yesterday": "昨日更新",
|
||||
"Ago": "3 天前更新",
|
||||
"Jan": "最后更新时间:2020年1月3日",
|
||||
"Jan": "最后更新时间:2016年1月1日",
|
||||
"Feb": "最后更新时间:2016年2月7日",
|
||||
"Mar": "最后更新时间:2015年3月9日",
|
||||
"Apr": "最后更新时间:2017年4月2日",
|
||||
|
@ -1363,7 +1363,7 @@
|
|||
"Today": "今日更新",
|
||||
"Yesterday": "昨天更新",
|
||||
"Ago": "3 天前更新",
|
||||
"Jan": "上次更新時間:2020年1月3日",
|
||||
"Jan": "上次更新時間:2016年1月1日",
|
||||
"Feb": "上次更新時間:2016年2月7日",
|
||||
"Mar": "上次更新時間:2015年3月9日",
|
||||
"Apr": "上次更新時間:2017年4月2日",
|
||||
|
@ -1380,7 +1380,7 @@
|
|||
"Today": "今天更新",
|
||||
"Yesterday": "昨天更新",
|
||||
"Ago": "3 天前更新",
|
||||
"Jan": "上次更新日期:2020年1月3日",
|
||||
"Jan": "上次更新日期:2016年1月1日",
|
||||
"Feb": "上次更新日期:2016年2月7日",
|
||||
"Mar": "上次更新日期:2015年3月9日",
|
||||
"Apr": "上次更新日期:2017年4月2日",
|
||||
|
@ -1397,7 +1397,7 @@
|
|||
"Today": "Ibuyekezwe namuhla",
|
||||
"Yesterday": "Ibuyekezwe izolo",
|
||||
"Ago": "Ibuyekezwe ezinsukwini ezingu-3 ezidlule",
|
||||
"Jan": "Yagcina ibuyekezwe ngomhla ka-Jan 3, 2020",
|
||||
"Jan": "Yagcina ibuyekezwe ngomhla ka-Jan 1, 2016",
|
||||
"Feb": "Yagcina ibuyekezwe ngomhla ka-Feb 7, 2016",
|
||||
"Mar": "Yagcina ibuyekezwe ngomhla ka-Mas 9, 2015",
|
||||
"Apr": "Yagcina ibuyekezwe ngomhla ka-Eph 2, 2017",
|
||||
|
|
Loading…
Reference in a new issue