Update time macros
This commit is contained in:
@ -1,234 +1,342 @@
|
||||
{#
|
||||
set phrases to be used in the relative_time_period macro
|
||||
one list item per language, each time fraction contains a list with the singular, plural and abbriviated phrase
|
||||
set phrases to be used in the relative_time_period macro
|
||||
one list item per language, each time fraction contains a list with the short and several long forms of time units
|
||||
combine contains the text to combine the last time fraction, and error the text to display on wrong date input
|
||||
Plural forms for languages: https://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms
|
||||
asian: ja, vi, ko
|
||||
english: en, de, nl, sv, da, no, nb, nn, fo, es, pt, it, bg, el, fi, et, he, eo, hu, tr, ca
|
||||
french: pt_BR, fr
|
||||
latvian: lv
|
||||
irish: ga
|
||||
romanian: ro
|
||||
lithuanian: lv
|
||||
russian: ru, uk, be, sr, hr
|
||||
slovak: cs, sk
|
||||
polish: pl
|
||||
slovenian: sl
|
||||
arabic: ar
|
||||
#}
|
||||
{%- set _time_period_phrases = [
|
||||
{
|
||||
'language': 'en',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['year', 'years', 'yr'],
|
||||
'month': ['month', 'months', 'mth'],
|
||||
'week': ['week', 'weeks', 'wk'],
|
||||
'day': ['day', 'days', 'day'],
|
||||
'hour': ['hour', 'hours', 'hr'],
|
||||
'minute': ['minute', 'minutes', 'min'],
|
||||
'second': ['second', 'seconds', 'sec'],
|
||||
'millisecond': ['millisecond', 'milliseconds', 'ms'],
|
||||
'year': ['yr', 'year', 'years'],
|
||||
'month': ['mth', 'month', 'months'],
|
||||
'week': ['wk', 'week', 'weeks'],
|
||||
'day': ['day', 'day', 'days'],
|
||||
'hour': ['hr', 'hour', 'hours'],
|
||||
'minute': ['min', 'minute', 'minutes'],
|
||||
'second': ['sec', 'second', 'seconds'],
|
||||
'millisecond': ['ms', 'millisecond', 'milliseconds'],
|
||||
'combine': 'and',
|
||||
'error': 'Invalid date',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'pl',
|
||||
'plural_form': 'polish',
|
||||
'phrases': {
|
||||
'year': ['rok', 'lat', 'r'],
|
||||
'month': ['miesiąc', 'miesięcy', 'msc'],
|
||||
'week': ['tydzień', 'tygodni', 'tyg'],
|
||||
'day': ['dzień', 'dni', 'dzień'],
|
||||
'hour': ['godzina', 'godzin', 'godz'],
|
||||
'minute': ['minuta', 'minut', 'min'],
|
||||
'second': ['sekunda', 'sekund', 'sek'],
|
||||
'millisecond': ['milisekunda', 'milisekund', 'ms'],
|
||||
'year': ['r', 'rok', 'lata', 'lat'],
|
||||
'month': ['msc', 'miesiąc', 'miesiące', 'miesięcy'],
|
||||
'week': ['tyg', 'tydzień', 'tygodnie', 'tygodni'],
|
||||
'day': ['dzień', 'dzień', 'dni', 'dni'],
|
||||
'hour': ['godz', 'godzina', 'godziny', 'godzin'],
|
||||
'minute': ['min', 'minuta', 'minuty', 'minut'],
|
||||
'second': ['sek', 'sekunda', 'sekundy', 'sekund'],
|
||||
'millisecond': ['ms', 'milisekunda', 'milisekundy', 'milisekund'],
|
||||
'combine': 'i',
|
||||
'error': 'Niepoprawna data',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'fr',
|
||||
'plural_form': 'french',
|
||||
'phrases': {
|
||||
'year': ['année', 'années', 'an'],
|
||||
'year': ['an', 'année', 'années'],
|
||||
'month': ['mois', 'mois', 'mois'],
|
||||
'week': ['semaine', 'semaines', 'sem'],
|
||||
'day': ['jour', 'jours', 'j'],
|
||||
'hour': ['heure', 'heures', 'h'],
|
||||
'minute': ['minute', 'minutes', 'min'],
|
||||
'second': ['seconde', 'secondes', 'sec'],
|
||||
'millisecond': ['milliseconde', 'millisecondes', 'ms'],
|
||||
'week': ['sem', 'semaine', 'semaines'],
|
||||
'day': ['j', 'jour', 'jours'],
|
||||
'hour': ['h', 'heure', 'heures'],
|
||||
'minute': ['min', 'minute', 'minutes'],
|
||||
'second': ['sec', 'seconde', 'secondes'],
|
||||
'millisecond': ['ms', 'milliseconde', 'millisecondes'],
|
||||
'combine': 'et',
|
||||
'error': 'Date non valide',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'it',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['anno', 'anni', 'aa'],
|
||||
'month': ['mese', 'mesi', 'mm'],
|
||||
'week': ['settimana', 'settimane', 'set'],
|
||||
'day': ['giorno', 'giorni', 'gg'],
|
||||
'hour': ['ora', 'ore', 'h'],
|
||||
'minute': ['minuto', 'minuti', 'min'],
|
||||
'second': ['secondo', 'secondi', 'sec'],
|
||||
'millisecond': ['millisecondo', 'millisecondi', 'ms'],
|
||||
'year': ['aa', 'anno', 'anni'],
|
||||
'month': ['mm', 'mese', 'mesi'],
|
||||
'week': ['set', 'settimana', 'settimane'],
|
||||
'day': ['gg', 'giorno', 'giorni'],
|
||||
'hour': ['h', 'ora', 'ore'],
|
||||
'minute': ['min', 'minuto', 'minuti'],
|
||||
'second': ['sec', 'secondo', 'secondi'],
|
||||
'millisecond': ['ms', 'millisecondo', 'millisecondi'],
|
||||
'combine': 'e',
|
||||
'error': 'Data non valida',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'nb',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['år', 'år', 'år'],
|
||||
'month': ['måned', 'måneder', 'mnd'],
|
||||
'week': ['uke', 'uker', 'u'],
|
||||
'day': ['dag', 'dager', 'd'],
|
||||
'hour': ['time', 'timer', 't'],
|
||||
'minute': ['minutt', 'minutter', 'min'],
|
||||
'second': ['sekund', 'sekunder', 'sek'],
|
||||
'millisecond': ['millisekund', 'millisekunder', 'ms'],
|
||||
'month': ['mnd', 'måned', 'måneder'],
|
||||
'week': ['u', 'uke', 'uker'],
|
||||
'day': ['d', 'dag', 'dager'],
|
||||
'hour': ['t', 'time', 'timer'],
|
||||
'minute': ['min', 'minutt', 'minutter'],
|
||||
'second': ['sek', 'sekund', 'sekunder'],
|
||||
'millisecond': ['ms', 'millisekund', 'millisekunder'],
|
||||
'combine': 'og',
|
||||
'error': 'Ugyldig dato',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'nl',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['jaar', 'jaar', 'jr'],
|
||||
'month': ['maand', 'maanden', 'mnd'],
|
||||
'week': ['week', 'weken', 'wk'],
|
||||
'day': ['dag', 'dagen', 'dg'],
|
||||
'hour': ['uur', 'uur', 'u'],
|
||||
'minute': ['minuut', 'minuten', 'min'],
|
||||
'second': ['seconde', 'seconden', 'sec'],
|
||||
'millisecond': ['milliseconde', 'milliseconden', 'ms'],
|
||||
'year': ['jr', 'jaar', 'jaar'],
|
||||
'month': ['mnd', 'maand', 'maanden'],
|
||||
'week': ['wk', 'week', 'weken'],
|
||||
'day': ['dg', 'dag', 'dagen'],
|
||||
'hour': ['u', 'uur', 'uur'],
|
||||
'minute': ['min', 'minuut', 'minuten'],
|
||||
'second': ['sec', 'seconde', 'seconden'],
|
||||
'millisecond': ['ms', 'milliseconde', 'milliseconden'],
|
||||
'combine': 'en',
|
||||
'error': 'Ongeldige datum',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'nn',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['år', 'år', 'år'],
|
||||
'month': ['månad', 'månader', 'mnd'],
|
||||
'week': ['veke', 'veker', 'v'],
|
||||
'day': ['dag', 'dagar', 'd'],
|
||||
'hour': ['time', 'timar', 't'],
|
||||
'minute': ['minutt', 'minutt', 'min'],
|
||||
'second': ['sekund', 'sekund', 'sek'],
|
||||
'millisecond': ['millisekund', 'millisekund', 'ms'],
|
||||
'month': ['mnd', 'månad', 'månader'],
|
||||
'week': ['v', 'veke', 'veker'],
|
||||
'day': ['d', 'dag', 'dagar'],
|
||||
'hour': ['t', 'time', 'timar'],
|
||||
'minute': ['min', 'minutt', 'minutt'],
|
||||
'second': ['sek', 'sekund', 'sekund'],
|
||||
'millisecond': ['ms', 'millisekund', 'millisekund'],
|
||||
'combine': 'og',
|
||||
'error': 'Ugyldig dato',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'de',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['Jahr', 'Jahre', 'J.'],
|
||||
'month': ['Monat', 'Monate', 'M.'],
|
||||
'week': ['Woche', 'Wochen', 'Wo.'],
|
||||
'day': ['Tag', 'Tage', 'Tg.'],
|
||||
'hour': ['Stunde', 'Stunden', 'Std.'],
|
||||
'minute': ['Minute', 'Minuten', 'Min.'],
|
||||
'second': ['Sekunde', 'Sekunden', 'Sek.'],
|
||||
'millisecond': ['Millisekunde', 'Millisekunden', 'ms'],
|
||||
'year': ['J.', 'Jahr', 'Jahre'],
|
||||
'month': ['M.', 'Monat', 'Monate'],
|
||||
'week': ['Wo.', 'Woche', 'Wochen'],
|
||||
'day': ['Tg.', 'Tag', 'Tage'],
|
||||
'hour': ['Std.', 'Stunde', 'Stunden'],
|
||||
'minute': ['Min.', 'Minute', 'Minuten'],
|
||||
'second': ['Sek.', 'Sekunde', 'Sekunden'],
|
||||
'millisecond': ['ms', 'Millisekunde', 'Millisekunden'],
|
||||
'combine': 'und',
|
||||
'error': 'Falsches Datum',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'pt',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['ano', 'anos', 'aa'],
|
||||
'month': ['mês', 'meses', 'mm'],
|
||||
'week': ['semana', 'semanas', 'sem'],
|
||||
'day': ['dia', 'dias', 'd'],
|
||||
'hour': ['hora', 'horas', 'h'],
|
||||
'minute': ['minuto', 'minutos', 'min'],
|
||||
'second': ['segundo', 'segundos', 'seg'],
|
||||
'millisecond': ['millissegundo', 'millissegundos', 'ms'],
|
||||
'year': ['aa', 'ano', 'anos'],
|
||||
'month': ['mm', 'mês', 'meses'],
|
||||
'week': ['sem', 'semana', 'semanas'],
|
||||
'day': ['d', 'dia', 'dias'],
|
||||
'hour': ['h', 'hora', 'horas'],
|
||||
'minute': ['min', 'minuto', 'minutos'],
|
||||
'second': ['seg', 'segundo', 'segundos'],
|
||||
'millisecond': ['ms', 'millissegundo', 'millissegundos'],
|
||||
'combine': 'e',
|
||||
'error': 'Data Inválida',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'dk',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['år', 'år', 'år'],
|
||||
'month': ['måned', 'måneder', 'mnd'],
|
||||
'week': ['uge', 'uger', 'uge'],
|
||||
'day': ['dag', 'dage', 'dag'],
|
||||
'hour': ['time', 'timer', 't.'],
|
||||
'minute': ['minut', 'minuter', 'min.'],
|
||||
'second': ['sekund', 'sekunder', 'sek.'],
|
||||
'millisecond': ['millisekund', 'millisekunder', 'ms.'],
|
||||
'month': ['mnd', 'måned', 'måneder'],
|
||||
'week': ['uge', 'uge', 'uger'],
|
||||
'day': ['dag', 'dag', 'dage'],
|
||||
'hour': ['t.', 'time', 'timer'],
|
||||
'minute': ['min.', 'minut', 'minuter'],
|
||||
'second': ['sek.', 'sekund', 'sekunder'],
|
||||
'millisecond': ['ms.', 'millisekund', 'millisekunder'],
|
||||
'combine': 'og',
|
||||
'error': 'Ugyldig dato',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'sv',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['år', 'år', 'år'],
|
||||
'month': ['månad', 'månader', 'mån'],
|
||||
'week': ['vecka', 'veckor', 'v'],
|
||||
'day': ['dag', 'dagar', 'dag'],
|
||||
'hour': ['timme', 'timmar', 'tim'],
|
||||
'minute': ['minut', 'minuter', 'min'],
|
||||
'second': ['sekund', 'sekunder', 'sek'],
|
||||
'millisecond': ['millisekund', 'millisekunder', 'ms'],
|
||||
'month': ['mån', 'månad', 'månader'],
|
||||
'week': ['v', 'vecka', 'veckor'],
|
||||
'day': ['dag', 'dag', 'dagar'],
|
||||
'hour': ['tim', 'timme', 'timmar'],
|
||||
'minute': ['min', 'minut', 'minuter'],
|
||||
'second': ['sek', 'sekund', 'sekunder'],
|
||||
'millisecond': ['ms', 'millisekund', 'millisekunder'],
|
||||
'combine': 'och',
|
||||
'error': 'Ogiltigt datum',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'cs',
|
||||
'plural_form': 'slovak',
|
||||
'phrases': {
|
||||
'year': ['rok', 'roky', 'rok'],
|
||||
'month': ['měsíc', 'měsíce', 'měs'],
|
||||
'week': ['týden', 'týdny', 'týd'],
|
||||
'day': ['den', 'dny', 'd'],
|
||||
'hour': ['hodina', 'hodiny', 'hod'],
|
||||
'minute': ['minuta', 'minuty', 'min'],
|
||||
'second': ['sekunda', 'sekundy', 'sek'],
|
||||
'millisecond': ['millisekunda', 'millisekundy', 'ms'],
|
||||
'year': ['rok', 'rok', 'roky', 'let'],
|
||||
'month': ['měs', 'měsíc', 'měsíce', 'měsíců'],
|
||||
'week': ['týd', 'týden', 'týdny', 'týdnů'],
|
||||
'day': ['d', 'den', 'dny', 'dní'],
|
||||
'hour': ['hod', 'hodina', 'hodiny', 'hodin'],
|
||||
'minute': ['min', 'minuta', 'minuty', 'minut'],
|
||||
'second': ['sek', 'sekunda', 'sekundy', 'sekund'],
|
||||
'millisecond': ['ms', 'millisekunda', 'millisekundy', 'millisekund'],
|
||||
'combine': 'a',
|
||||
'error': 'špatný datum'
|
||||
'error': 'špatné datum'
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'fi',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['vuosi', 'vuotta', 'v'],
|
||||
'month': ['kuukausi', 'kuukautta', 'kk'],
|
||||
'week': ['viikko', 'viikkoa', 'vk'],
|
||||
'day': ['päivä', 'päivää', 'pv'],
|
||||
'hour': ['tunti', 'tuntia', 't'],
|
||||
'minute': ['minuutti', 'minuuttia', 'min'],
|
||||
'second': ['sekunti', 'sekuntia', 's'],
|
||||
'millisecond': ['millisekunti', 'millisekuntia', 'ms'],
|
||||
'year': ['v', 'vuosi', 'vuotta'],
|
||||
'month': ['kk', 'kuukausi', 'kuukautta'],
|
||||
'week': ['vk', 'viikko', 'viikkoa'],
|
||||
'day': ['pv', 'päivä', 'päivää'],
|
||||
'hour': ['t', 'tunti', 'tuntia'],
|
||||
'minute': ['min', 'minuutti', 'minuuttia'],
|
||||
'second': ['s', 'sekunti', 'sekuntia'],
|
||||
'millisecond': ['ms', 'millisekunti', 'millisekuntia'],
|
||||
'combine': 'ja',
|
||||
'error': 'Väärä päivämäärä',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'ru',
|
||||
'plural_form': 'russian',
|
||||
'phrases': {
|
||||
'year': ['год', 'года', 'г'],
|
||||
'month': ['месяц', 'месяцы', 'м'],
|
||||
'week': ['неделя', 'недели', 'н'],
|
||||
'day': ['день', 'дни', 'д'],
|
||||
'hour': ['час', 'часы', 'ч'],
|
||||
'minute': ['минута', 'минут', 'м'],
|
||||
'second': ['секунд', 'секунды', 'с'],
|
||||
'millisecond': ['милисекунд', 'милисекунды', 'мс'],
|
||||
'year': ['г', 'год', 'года', 'лет'],
|
||||
'month': ['м', 'месяц', 'месяца', 'месяцев'],
|
||||
'week': ['н', 'неделя', 'недели', 'недель'],
|
||||
'day': ['д', 'день', 'дня', 'дней'],
|
||||
'hour': ['ч', 'час', 'часа', 'часов'],
|
||||
'minute': ['м', 'минута', 'минуты', 'минут'],
|
||||
'second': ['с', 'секунда', 'секунды', 'секунд'],
|
||||
'millisecond': ['мс', 'милисекунда', 'милисекунды', 'милисекунд'],
|
||||
'combine': 'и',
|
||||
'error': 'Неверная дата',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'uk',
|
||||
'plural_form': 'russian',
|
||||
'phrases': {
|
||||
'year': ['рік', 'років', 'р'],
|
||||
'month': ['місяць', 'місяців', 'м'],
|
||||
'week': ['тиждень', 'тижнів', 'тижд'],
|
||||
'day': ['день', 'днів', 'дн'],
|
||||
'hour': ['годину', 'годин', 'год'],
|
||||
'minute': ['хвилину', 'хвилин', 'хв'],
|
||||
'second': ['секунду', 'секунд', 'сек'],
|
||||
'millisecond': ['мілісекунду', 'мілісекунд', 'мсек'],
|
||||
'year': ['р', 'рік', 'роки', 'років'],
|
||||
'month': ['м', 'місяць', 'місяці', 'місяців'],
|
||||
'week': ['тижд', 'тиждень', 'тижні', 'тижнів'],
|
||||
'day': ['дн', 'день', 'дні', 'днів'],
|
||||
'hour': ['год', 'година', 'години', 'годин'],
|
||||
'minute': ['хв', 'хвилина', 'хвилини', 'хвилин'],
|
||||
'second': ['сек', 'секунда', 'секунди', 'секунд'],
|
||||
'millisecond': ['мсек', 'мілісекунда', 'мілісекунди', 'мілісекунд'],
|
||||
'combine': 'та',
|
||||
'error': 'Недійсна дата',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'bg',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['г', 'година', 'години'],
|
||||
'month': ['м', 'месец', 'месеца'],
|
||||
'week': ['седм', 'седмица', 'седмици'],
|
||||
'day': ['д', 'ден', 'дни'],
|
||||
'hour': ['ч', 'час', 'часа'],
|
||||
'minute': ['м', 'минута', 'минути'],
|
||||
'second': ['с', 'секунда', 'секунди'],
|
||||
'millisecond': ['мс', 'милисекунда', 'милисекунди'],
|
||||
'combine': 'и',
|
||||
'error': 'Невалидна дата',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'vi',
|
||||
'plural_form': 'asian',
|
||||
'phrases': {
|
||||
'year': ['y', 'năm'],
|
||||
'month': ['m', 'tháng'],
|
||||
'week': ['w', 'tuần'],
|
||||
'day': ['d', 'ngày'],
|
||||
'hour': ['h', 'giờ'],
|
||||
'minute': ['m', 'phút', 'phút'],
|
||||
'second': ['s', 'giây'],
|
||||
'millisecond': ['ms', 'mili giây'],
|
||||
'combine': 'và',
|
||||
'error': 'Ngày không hợp lệ',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'es',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['a', 'año', 'años'],
|
||||
'month': ['m', 'mes', 'meses'],
|
||||
'week': ['sem', 'semana', 'semanas'],
|
||||
'day': ['d', 'día', 'días'],
|
||||
'hour': ['h', 'hora', 'horas'],
|
||||
'minute': ['min', 'minuto', 'minutos'],
|
||||
'second': ['s', 'segundo', 'segundos'],
|
||||
'millisecond': ['ms', 'milisegundo', 'milisegundos'],
|
||||
'combine': 'y',
|
||||
'error': 'Fecha inválida',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'he',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['שנה', 'שנה', 'שנים'],
|
||||
'month': ['חודש', 'חודש', 'חודשים'],
|
||||
'week': ['שבוע', 'שבוע', 'שבועות'],
|
||||
'day': ['יום', 'יום', 'ימים'],
|
||||
'hour': ['שעה', 'שעה', 'שעות'],
|
||||
'minute': ['דקה', 'דקה', 'דקות'],
|
||||
'second': ['שניה', 'שניה', 'שניות'],
|
||||
'millisecond': ['מילי', 'מילישניה', 'מילישניות'],
|
||||
'combine': 'ו',
|
||||
'error': 'תאריך לא חוקי',
|
||||
}
|
||||
},
|
||||
{
|
||||
'language': 'hu',
|
||||
'plural_form': 'english',
|
||||
'phrases': {
|
||||
'year': ['é', 'év', 'év'],
|
||||
'month': ['hó', 'hónap', 'hónap'],
|
||||
'week': ['hét', 'hét', 'hét'],
|
||||
'day': ['n', 'nap', 'nap'],
|
||||
'hour': ['ó', 'óra', 'óra'],
|
||||
'minute': ['p', 'perc', 'perc'],
|
||||
'second': ['mp', 'másodperc', 'másodperc'],
|
||||
'millisecond': ['ms', 'ezredmásodperc', 'ezredmásodperc'],
|
||||
'combine': 'és',
|
||||
'error': 'Érvénytelen dátum',
|
||||
}
|
||||
},
|
||||
] -%}
|
||||
|
||||
{# macro to convert the abbreviated input for the not_use and always_show lists to the full time part names #}
|
||||
@ -255,12 +363,14 @@
|
||||
{%- set date = date if date is datetime else date | as_datetime('invalid') -%}
|
||||
{%- set compare_date = compare_date if compare_date is datetime else compare_date | as_datetime('invalid') -%}
|
||||
{%- set time = time | bool(true) -%}
|
||||
{%- set parts = [parts | int(1), always_show | count] | max -%}
|
||||
{%- set parts = [parts | int(1), always_show | count] | max -%}
|
||||
{# create namespace to store debug data #}
|
||||
{%- set debug = namespace(debug="") -%}
|
||||
{# 1: check if date input is correct #}
|
||||
{%- if date is datetime and compare_date is datetime -%}
|
||||
{# convert date input to local or date only #}
|
||||
{%- set date = date | as_local if time else (date | as_local).date() -%}
|
||||
{%- set compare_date = compare_date | as_local if time else (compare_date | as_local).date() -%}
|
||||
{%- set compare_date = compare_date | as_local if time else (compare_date | as_local).date() -%}
|
||||
{# determine highest and lowest date #}
|
||||
{%- set date_max = [compare_date, date] | max -%}
|
||||
{%- set date_min = [compare_date, date] | min -%}
|
||||
@ -282,7 +392,7 @@
|
||||
{%- if not not_use in [['millisecond'], []] -%}
|
||||
{%- set not_use = _abbr_to_full(not_use) | from_json -%}
|
||||
{%- endif -%}
|
||||
{%- set not_use = not_use + ['hour', 'minute', 'second', 'millisecond' ] if not time else not_use -%}
|
||||
{%- set not_use = not_use + ['hour', 'minute', 'second', 'millisecond' ] if not time else not_use -%}
|
||||
{%- if always_show in [['all'], 'all'] -%}
|
||||
{%- set always_show = dur.keys() | list -%}
|
||||
{%- elif always_show != [] -%}
|
||||
@ -296,7 +406,7 @@
|
||||
{%- if do_use and ms < dur[do_use|last] -%}
|
||||
{{- {do_use | last: (ms / dur[do_use|last]) | round(0, round_mode)} | to_json -}}
|
||||
{%- else -%}
|
||||
{# check if it is needed to determine years #}
|
||||
{# check if it is needed to determine years #}
|
||||
{%- if ms >= dur.day * 365 -%}
|
||||
{#- set numer of years, and set highest date using this number of years #}
|
||||
{%- set yrs = date_max.year - date_min.year - (1 if date_max.replace(year=date_min.year) < date_min else 0) -%}
|
||||
@ -305,7 +415,7 @@
|
||||
{%- set ms_yrs = ms -%}
|
||||
{%- endif -%}
|
||||
{%- set yrs = yrs | default(0) -%}
|
||||
{# check if it is needed to determine months #}
|
||||
{# check if it is needed to determine months #}
|
||||
{%- set check_mth =
|
||||
ms >= dur.day * 28
|
||||
and 'month' in do_use
|
||||
@ -354,7 +464,7 @@
|
||||
{%- set first = keys | select('in', always_show | default([], true) + [first]) | first -%}
|
||||
{%- set to_use = keys[keys.index(first):] -%}
|
||||
{%- set to_output = to_use[:parts] -%}
|
||||
{%- set last = to_output | last |default('millisecond') -%}
|
||||
{%- set last = dur.items() | selectattr('0', 'in', to_output) | map(attribute='0') | list | last | default('millisecond') -%}
|
||||
{# 3: check if there is anything left to use #}
|
||||
{%- if to_use -%}
|
||||
{%- set to_output = to_use[:parts] -%}
|
||||
@ -365,9 +475,10 @@
|
||||
{%- set to_reject = to_use | reject('in', to_output) | reject('in', always_show) | list -%}
|
||||
{%- set not_use = not_use + to_output[as_check*-1:] + to_reject -%}
|
||||
{%- set to_output = to_output | reject('in', not_use) | list + always_show -%}
|
||||
{%- set to_output = keys | select('in', to_output) | list -%}
|
||||
{%- set to_output = keys | select('in', to_output) | list + ['extra']-%}
|
||||
{%- set output = time_split(date, parts, compare_date, not_use, always_show, time, round_mode) | from_json -%}
|
||||
{%- endif -%}
|
||||
|
||||
{# apply round if needed #}
|
||||
{%- if round_mode in ['common', 'ceil'] and last != 'millisecond' -%}
|
||||
{# determine first and last item with data #}
|
||||
@ -376,22 +487,59 @@
|
||||
{%- set remain_part = remain / dur[last] -%}
|
||||
{%- set to_round = 1 if remain_part >= 0.5 and round_mode == 'common' else remain_part | round(0, round_mode) -%}
|
||||
{%- set sec_to_add = ((dur[last] + (dur.day if last in ['year', 'month'] else 1) - remain) | round(0, 'ceil') * to_round) / 1000 -%}
|
||||
{%- set round_mode = 'floor' -%}
|
||||
{%- set date_max = [compare_date, date] | max + timedelta(seconds=sec_to_add) -%}
|
||||
{%- set date_min = [compare_date, date] | min -%}
|
||||
{%- set output = time_split(date_max, parts, date_min, not_use, always_show, time, round_mode) | from_json -%}
|
||||
{%- set output = time_split(date_max, parts, date_min, not_use, always_show, time, 'floor') | from_json -%}
|
||||
{%- set output = dict(output.items() | selectattr('0', 'in', do_use)) -%}
|
||||
{%- set keys = output.keys() | list -%}
|
||||
{%- set with_value = output.items() | rejectattr('1', 'eq', 0) | map(attribute='0') | list -%}
|
||||
{%- set first = with_value | first | default('millisecond') -%}
|
||||
{%- set first = keys | select('in', always_show | default([], true) + [first]) | first -%}
|
||||
{%- set to_use = keys[keys.index(first):] -%}
|
||||
{%- set to_output = to_use[:parts] -%}
|
||||
{%- endif -%}
|
||||
{# output result #}
|
||||
{%- set zero_values = output.items() | selectattr('1', 'eq', 0) | map(attribute='0') | list -%}
|
||||
{%- set reject_list = zero_values | reject('in', always_show) | list -%}
|
||||
{{- dict(output.items() | selectattr('0', 'in', to_output) | rejectattr('0', 'in', reject_list)) | default({always_return: 0}, true) | to_json -}}
|
||||
{%- else -%} {{- dict(error='No time parts left to output') | to_json -}}
|
||||
{{- dict(output.items() | selectattr('0', 'in', to_output) | rejectattr('0', 'in', reject_list), **dict(debug=debug.debug) if debug.debug else dict()) | default({always_return: 0}, true) | to_json-}}
|
||||
{%- else -%} {{- dict(error='No time parts left to output') -}}
|
||||
{%- endif -%} {# 3 #}
|
||||
{%- endif -%} {# 2 #}
|
||||
{%- else -%} {{- dict(error='Invalid date input') | to_json -}}
|
||||
{%- endif -%} {# 2 #}
|
||||
{%- else -%} {{- dict(error='Invalid date input')-}}
|
||||
{%- endif -%} {# 1 #}
|
||||
{%- endmacro -%}
|
||||
|
||||
{# macro for determining the time unit variant depending on the language #}
|
||||
{%- macro plural(number=0, rule='english') -%}
|
||||
{%- set mod100 = number % 100 -%}
|
||||
{%- set mod10 = number % 10 -%}
|
||||
{%- set form = 1 -%}
|
||||
{%- if rule == 'english' -%}
|
||||
{%- set form = 1 if number == 1 else 2 -%}
|
||||
{%- elif rule == 'french' -%}
|
||||
{%- set form = 1 if number <= 1 else 2 -%}
|
||||
{%- elif rule == 'latvian' -%}
|
||||
{%- set form = 1 if (mod10 == 1 and mod100 != 11) else 2 if number != 0 else 3 -%}
|
||||
{%- elif rule == 'irish' -%}
|
||||
{%- set form = 1 if number == 1 else 2 if number == 2 else 3 -%}
|
||||
{%- elif rule == 'romanian' -%}
|
||||
{%- set form = 1 if number == 1 else 2 if (number == 0 or (mod100 > 0 and mod100 < 20 )) else 3 -%}
|
||||
{%- elif rule == 'lithuanian' -%}
|
||||
{%- set form = 1 if (mod10 == 1 and mod100 != 11) else 2 if (mod10 >= 2 and (mod100 < 10 or mod100 >= 20)) else 3 -%}
|
||||
{%- elif rule == 'russian' -%}
|
||||
{%- set form = 1 if (mod10 == 1 and mod100 != 11) else 2 if (mod10 >= 2 and mod10 <= 4 and (mod100 < 10 or mod100 >= 20)) else 3 -%}
|
||||
{%- elif rule == 'slovak' -%}
|
||||
{%- set form = 1 if number == 1 else 2 if (number >= 2 and number <= 4) else 3 -%}
|
||||
{%- elif rule == 'polish' -%}
|
||||
{%- set form = 1 if number == 1 else 2 if (mod10 >= 2 and mod10 <= 4 and (mod100 < 10 or mod100 >= 20)) else 3 -%}
|
||||
{%- elif rule == 'slovenian' -%}
|
||||
{%- set form = 1 if mod100 == 1 else 2 if mod100 == 2 else 3 if (mod100 == 3 or mod100 == 4) else 4 -%}
|
||||
{%- elif rule == 'arabic' -%}
|
||||
{%- set form = 1 if number == 0 else 2 if number == 1 else 3 if number == 2 else 4 if (mod100 >= 3 and mod100 <= 10) else 5 if mod100 >= 11 else 6 -%}
|
||||
{%- endif -%}
|
||||
{{- form -}}
|
||||
{%- endmacro -%}
|
||||
|
||||
{# macro to output a timedelta in a readable format #}
|
||||
{%- macro relative_time_plus(date, parts=1, abbr=false, language='en', compare_date=now(), not_use=['millisecond'], always_show=[], time=true, round_mode='floor') -%}
|
||||
{#- select correct phrases bases on language input #}
|
||||
@ -399,6 +547,7 @@
|
||||
{%- set languages = phrases | map(attribute='language') | list -%}
|
||||
{%- set language = iif(language in languages, language, 'en') -%}
|
||||
{%- set phr = phrases | selectattr('language', 'eq', language) | map(attribute='phrases') | list | first -%}
|
||||
{%- set plural_form = phrases | selectattr('language', 'eq', language) | map(attribute='plural_form') | list | first -%}
|
||||
{%- set abbr = abbr | bool(false) -%}
|
||||
{# split timedelta #}
|
||||
{%- set time_parts = time_split(date, parts, compare_date, not_use, always_show, time, round_mode) | from_json -%}
|
||||
@ -409,9 +558,9 @@
|
||||
{# convert to phrases #}
|
||||
{%- set ns = namespace(phrases=[]) -%}
|
||||
{%- for i in time_parts.keys() -%}
|
||||
{%- set phr_abbr = phr[i][2] -%}
|
||||
{%- set phr_verb = phr[i][1] if time_parts[i] != 1 else phr[i][0] -%}
|
||||
{%- set phrase = '{} {}'.format(time_parts[i], phr_abbr if abbr else phr_verb) -%}
|
||||
{%- set plural_variant = plural(time_parts[i], plural_form) | int -%}
|
||||
{%- set phr_form = phr[i][0] if abbr else phr[i][plural_variant] -%}
|
||||
{%- set phrase = '{} {}'.format(time_parts[i], phr_form) -%}
|
||||
{%- set ns.phrases = ns.phrases + [phrase] -%}
|
||||
{%- endfor -%}
|
||||
{#- join phrases in a string, using phr.combine for the last item #}
|
||||
|
Reference in New Issue
Block a user