Show events of a configurable amount of past days (#3046)

Hi,

want to include a birthday calendar to my mirror which shows upcoming
birthdays and as a reminder birthdays of the last two days.
I used
[MMM-CalendarExt2](https://github.com/MMM-CalendarExt2/MMM-CalendarExt2)
for this job in the past but the module is not supported any more and
very complicated to configure.
I managed to style the default calendar module to my needs but what i am
missing is to display already past events within a configurable time
range.

I included the translations of "YESTERDAY" and "DAYBEFOREYESTERDAY" to
all translation files and modified the code to accept a new option
`pastDaysCount` which controls of how many days past events should be
displayed.

---------

Co-authored-by: Veeck <github@veeck.de>
This commit is contained in:
Thomas Hirschberger 2023-02-21 22:39:21 +01:00 committed by GitHub
parent 6d86ffade4
commit a23769156e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
46 changed files with 124 additions and 1 deletions

View File

@ -18,6 +18,7 @@ _This release is scheduled to be released on 2023-04-01._
- Added possibility to use your own templates in Alert module - Added possibility to use your own templates in Alert module
- Added error message if `<modulename>.js` file is missing in module folder to get a hint in the logs (#2403) - Added error message if `<modulename>.js` file is missing in module folder to get a hint in the logs (#2403)
- Added possibility to use environment variables in `config.js` (#1756) - Added possibility to use environment variables in `config.js` (#1756)
- Added option `pastDaysCount` to default calendar module to control of how many days past events should be displayed
- Added thai language to alert module - Added thai language to alert module
### Removed ### Removed

View File

@ -12,6 +12,7 @@ Module.register("calendar", {
maximumEntries: 10, // Total Maximum Entries maximumEntries: 10, // Total Maximum Entries
maximumNumberOfDays: 365, maximumNumberOfDays: 365,
limitDays: 0, // Limit the number of days shown, 0 = no limit limitDays: 0, // Limit the number of days shown, 0 = no limit
pastDaysCount: 0,
displaySymbol: true, displaySymbol: true,
defaultSymbol: "calendar-alt", // Fontawesome Symbol see https://fontawesome.com/cheatsheet?from=io defaultSymbol: "calendar-alt", // Fontawesome Symbol see https://fontawesome.com/cheatsheet?from=io
defaultSymbolClassName: "fas fa-fw fa-", defaultSymbolClassName: "fas fa-fw fa-",
@ -121,6 +122,7 @@ Module.register("calendar", {
const calendarConfig = { const calendarConfig = {
maximumEntries: calendar.maximumEntries, maximumEntries: calendar.maximumEntries,
maximumNumberOfDays: calendar.maximumNumberOfDays, maximumNumberOfDays: calendar.maximumNumberOfDays,
pastDaysCount: calendar.pastDaysCount,
broadcastPastEvents: calendar.broadcastPastEvents, broadcastPastEvents: calendar.broadcastPastEvents,
selfSignedCert: calendar.selfSignedCert selfSignedCert: calendar.selfSignedCert
}; };
@ -232,7 +234,10 @@ Module.register("calendar", {
const dateRow = document.createElement("tr"); const dateRow = document.createElement("tr");
dateRow.className = "dateheader normal"; dateRow.className = "dateheader normal";
if (event.today) dateRow.className += " today"; if (event.today) dateRow.className += " today";
else if (event.dayBeforeYesterday) dateRow.className += " dayBeforeYesterday";
else if (event.yesterday) dateRow.className += " yesterday";
else if (event.tomorrow) dateRow.className += " tomorrow"; else if (event.tomorrow) dateRow.className += " tomorrow";
else if (event.dayAfterTomorrow) dateRow.className += " dayAfterTomorrow";
const dateCell = document.createElement("td"); const dateCell = document.createElement("td");
dateCell.colSpan = "3"; dateCell.colSpan = "3";
@ -267,7 +272,10 @@ Module.register("calendar", {
eventWrapper.className = "event-wrapper normal event"; eventWrapper.className = "event-wrapper normal event";
if (event.today) eventWrapper.className += " today"; if (event.today) eventWrapper.className += " today";
else if (event.dayBeforeYesterday) eventWrapper.className += " dayBeforeYesterday";
else if (event.yesterday) eventWrapper.className += " yesterday";
else if (event.tomorrow) eventWrapper.className += " tomorrow"; else if (event.tomorrow) eventWrapper.className += " tomorrow";
else if (event.dayAfterTomorrow) eventWrapper.className += " dayAfterTomorrow";
const symbolWrapper = document.createElement("td"); const symbolWrapper = document.createElement("td");
@ -397,6 +405,8 @@ Module.register("calendar", {
// Full days events within the next two days // Full days events within the next two days
if (event.today) { if (event.today) {
timeWrapper.innerHTML = this.capFirst(this.translate("TODAY")); timeWrapper.innerHTML = this.capFirst(this.translate("TODAY"));
} else if (event.yesterday) {
timeWrapper.innerHTML = this.capFirst(this.translate("YESTERDAY"));
} else if (event.startDate - now < ONE_DAY && event.startDate - now > 0) { } else if (event.startDate - now < ONE_DAY && event.startDate - now > 0) {
timeWrapper.innerHTML = this.capFirst(this.translate("TOMORROW")); timeWrapper.innerHTML = this.capFirst(this.translate("TOMORROW"));
} else if (event.startDate - now < 2 * ONE_DAY && event.startDate - now > 0) { } else if (event.startDate - now < 2 * ONE_DAY && event.startDate - now > 0) {
@ -425,6 +435,12 @@ Module.register("calendar", {
// Full days events within the next two days // Full days events within the next two days
if (event.today) { if (event.today) {
timeWrapper.innerHTML = this.capFirst(this.translate("TODAY")); timeWrapper.innerHTML = this.capFirst(this.translate("TODAY"));
} else if (event.dayBeforeYesterday) {
if (this.translate("DAYBEFOREYESTERDAY") !== "DAYBEFOREYESTERDAY") {
timeWrapper.innerHTML = this.capFirst(this.translate("DAYBEFOREYESTERDAY"));
}
} else if (event.yesterday) {
timeWrapper.innerHTML = this.capFirst(this.translate("YESTERDAY"));
} else if (event.startDate - now < ONE_DAY && event.startDate - now > 0) { } else if (event.startDate - now < ONE_DAY && event.startDate - now > 0) {
timeWrapper.innerHTML = this.capFirst(this.translate("TOMORROW")); timeWrapper.innerHTML = this.capFirst(this.translate("TOMORROW"));
} else if (event.startDate - now < 2 * ONE_DAY && event.startDate - now > 0) { } else if (event.startDate - now < 2 * ONE_DAY && event.startDate - now > 0) {
@ -462,7 +478,10 @@ Module.register("calendar", {
const locationRow = document.createElement("tr"); const locationRow = document.createElement("tr");
locationRow.className = "event-wrapper-location normal xsmall light"; locationRow.className = "event-wrapper-location normal xsmall light";
if (event.today) locationRow.className += " today"; if (event.today) locationRow.className += " today";
else if (event.dayBeforeYesterday) locationRow.className += " dayBeforeYesterday";
else if (event.yesterday) locationRow.className += " yesterday";
else if (event.tomorrow) locationRow.className += " tomorrow"; else if (event.tomorrow) locationRow.className += " tomorrow";
else if (event.dayAfterTomorrow) locationRow.className += " dayAfterTomorrow";
if (this.config.displaySymbol) { if (this.config.displaySymbol) {
const symbolCell = document.createElement("td"); const symbolCell = document.createElement("td");
@ -558,6 +577,7 @@ Module.register("calendar", {
for (const calendarUrl in this.calendarData) { for (const calendarUrl in this.calendarData) {
const calendar = this.calendarData[calendarUrl]; const calendar = this.calendarData[calendarUrl];
let remainingEntries = this.maximumEntriesForUrl(calendarUrl); let remainingEntries = this.maximumEntriesForUrl(calendarUrl);
let maxPastDaysCompare = now - this.maximumPastDaysForUrl(calendarUrl) * ONE_DAY;
for (const e in calendar) { for (const e in calendar) {
const event = JSON.parse(JSON.stringify(calendar[e])); // clone object const event = JSON.parse(JSON.stringify(calendar[e])); // clone object
@ -566,7 +586,7 @@ Module.register("calendar", {
continue; continue;
} }
if (limitNumberOfEntries) { if (limitNumberOfEntries) {
if (event.endDate < now) { if (event.endDate < maxPastDaysCompare) {
continue; continue;
} }
if (this.config.hideOngoing && event.startDate < now) { if (this.config.hideOngoing && event.startDate < now) {
@ -581,7 +601,10 @@ Module.register("calendar", {
} }
event.url = calendarUrl; event.url = calendarUrl;
event.today = event.startDate >= today && event.startDate < today + ONE_DAY; event.today = event.startDate >= today && event.startDate < today + ONE_DAY;
event.dayBeforeYesterday = event.startDate >= today - ONE_DAY * 2 && event.startDate < today - ONE_DAY;
event.yesterday = event.startDate >= today - ONE_DAY && event.startDate < today;
event.tomorrow = !event.today && event.startDate >= today + ONE_DAY && event.startDate < today + 2 * ONE_DAY; event.tomorrow = !event.today && event.startDate >= today + ONE_DAY && event.startDate < today + 2 * ONE_DAY;
event.dayAfterTomorrow = !event.tomorrow && event.startDate >= today + ONE_DAY * 2 && event.startDate < today + 3 * ONE_DAY;
/* if sliceMultiDayEvents is set to true, multiday events (events exceeding at least one midnight) are sliced into days, /* if sliceMultiDayEvents is set to true, multiday events (events exceeding at least one midnight) are sliced into days,
* otherwise, esp. in dateheaders mode it is not clear how long these events are. * otherwise, esp. in dateheaders mode it is not clear how long these events are.
@ -681,6 +704,7 @@ Module.register("calendar", {
excludedEvents: calendarConfig.excludedEvents || this.config.excludedEvents, excludedEvents: calendarConfig.excludedEvents || this.config.excludedEvents,
maximumEntries: calendarConfig.maximumEntries || this.config.maximumEntries, maximumEntries: calendarConfig.maximumEntries || this.config.maximumEntries,
maximumNumberOfDays: calendarConfig.maximumNumberOfDays || this.config.maximumNumberOfDays, maximumNumberOfDays: calendarConfig.maximumNumberOfDays || this.config.maximumNumberOfDays,
pastDaysCount: calendarConfig.pastDaysCount || this.config.pastDaysCount,
fetchInterval: this.config.fetchInterval, fetchInterval: this.config.fetchInterval,
symbolClass: calendarConfig.symbolClass, symbolClass: calendarConfig.symbolClass,
titleClass: calendarConfig.titleClass, titleClass: calendarConfig.titleClass,
@ -803,6 +827,16 @@ Module.register("calendar", {
return this.getCalendarProperty(url, "maximumEntries", this.config.maximumEntries); return this.getCalendarProperty(url, "maximumEntries", this.config.maximumEntries);
}, },
/**
* Retrieves the maximum count of past days which events of should be displayed for a specific calendar url.
*
* @param {string} url The calendar url
* @returns {number} The maximum past days count
*/
maximumPastDaysForUrl: function (url) {
return this.getCalendarProperty(url, "pastDaysCount", this.config.pastDaysCount);
},
/** /**
* Helper method to retrieve the property for a specific calendar url. * Helper method to retrieve the property for a specific calendar url.
* *

View File

@ -16,6 +16,16 @@ describe("Calendar module", () => {
}); });
describe("Test css classes", () => { describe("Test css classes", () => {
it("has css class dayBeforeYesterday", async () => {
await helpers.startApplication("tests/configs/modules/calendar/custom.js", "03 Jan 2030 12:30:00 GMT");
await doTest(".dayBeforeYesterday");
});
it("has css class yesterday", async () => {
await helpers.startApplication("tests/configs/modules/calendar/custom.js", "02 Jan 2030 12:30:00 GMT");
await doTest(".yesterday");
});
it("has css class today", async () => { it("has css class today", async () => {
await helpers.startApplication("tests/configs/modules/calendar/custom.js", "01 Jan 2030 12:30:00 GMT"); await helpers.startApplication("tests/configs/modules/calendar/custom.js", "01 Jan 2030 12:30:00 GMT");
await doTest(".today"); await doTest(".today");
@ -25,5 +35,10 @@ describe("Calendar module", () => {
await helpers.startApplication("tests/configs/modules/calendar/custom.js", "31 Dec 2029 12:30:00 GMT"); await helpers.startApplication("tests/configs/modules/calendar/custom.js", "31 Dec 2029 12:30:00 GMT");
await doTest(".tomorrow"); await doTest(".tomorrow");
}); });
it("has css class dayAfterTomorrow", async () => {
await helpers.startApplication("tests/configs/modules/calendar/custom.js", "30 Dec 2029 12:30:00 GMT");
await doTest(".dayAfterTomorrow");
});
}); });
}); });

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Besig om te laai …", "LOADING": "Besig om te laai …",
"YESTERDAY": "Gister",
"TODAY": "Vandag", "TODAY": "Vandag",
"TOMORROW": "Môre", "TOMORROW": "Môre",
"DAYAFTERTOMORROW": "Oormôre", "DAYAFTERTOMORROW": "Oormôre",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Зареждане на …", "LOADING": "Зареждане на …",
"DAYBEFOREYESTERDAY": "Завчера",
"YESTERDAY": "Вчера",
"TODAY": "Днес", "TODAY": "Днес",
"TOMORROW": "Утре", "TOMORROW": "Утре",
"DAYAFTERTOMORROW": "Вдругиден", "DAYAFTERTOMORROW": "Вдругиден",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Carregant …", "LOADING": "Carregant …",
"YESTERDAY": "Ahir",
"TODAY": "Avui", "TODAY": "Avui",
"TOMORROW": "Demà", "TOMORROW": "Demà",
"DAYAFTERTOMORROW": "Demà passat", "DAYAFTERTOMORROW": "Demà passat",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Načítání …", "LOADING": "Načítání …",
"DAYBEFOREYESTERDAY": "Předevčírem",
"YESTERDAY": "Včera",
"TODAY": "Dnes", "TODAY": "Dnes",
"TOMORROW": "Zítra", "TOMORROW": "Zítra",
"DAYAFTERTOMORROW": "Pozítří", "DAYAFTERTOMORROW": "Pozítří",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Тиенет …", "LOADING": "Тиенет …",
"YESTERDAY": "Знон",
"TODAY": "Паян", "TODAY": "Паян",
"TOMORROW": "Ыран", "TOMORROW": "Ыран",
"DAYAFTERTOMORROW": "Виҫмине", "DAYAFTERTOMORROW": "Виҫмине",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Llwytho …", "LOADING": "Llwytho …",
"YESTERDAY": "Ddoe",
"TODAY": "Heddiw", "TODAY": "Heddiw",
"TOMORROW": "Yfory", "TOMORROW": "Yfory",
"DAYAFTERTOMORROW": "Drennydd", "DAYAFTERTOMORROW": "Drennydd",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Indlæser …", "LOADING": "Indlæser …",
"DAYBEFOREYESTERDAY": "Forgårs",
"YESTERDAY": "I går",
"TODAY": "I dag", "TODAY": "I dag",
"TOMORROW": "I morgen", "TOMORROW": "I morgen",
"DAYAFTERTOMORROW": "I overmorgen", "DAYAFTERTOMORROW": "I overmorgen",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Lade …", "LOADING": "Lade …",
"DAYBEFOREYESTERDAY": "Vorgestern",
"YESTERDAY": "Gestern",
"TODAY": "Heute", "TODAY": "Heute",
"TOMORROW": "Morgen", "TOMORROW": "Morgen",
"DAYAFTERTOMORROW": "Übermorgen", "DAYAFTERTOMORROW": "Übermorgen",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Φόρτωση …", "LOADING": "Φόρτωση …",
"DAYBEFOREYESTERDAY": "Προχθές",
"YESTERDAY": "Εχθές",
"TODAY": "Σήμερα", "TODAY": "Σήμερα",
"TOMORROW": "Αύριο", "TOMORROW": "Αύριο",
"RUNNING": "Λήγει σε", "RUNNING": "Λήγει σε",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Loading …", "LOADING": "Loading …",
"YESTERDAY": "Yesterday",
"TODAY": "Today", "TODAY": "Today",
"TOMORROW": "Tomorrow", "TOMORROW": "Tomorrow",
"RUNNING": "Ends in", "RUNNING": "Ends in",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Cargando …", "LOADING": "Cargando …",
"DAYBEFOREYESTERDAY": "Anteayer",
"YESTERDAY": "Ayer",
"TODAY": "Hoy", "TODAY": "Hoy",
"TOMORROW": "Mañana", "TOMORROW": "Mañana",
"DAYAFTERTOMORROW": "Pasado mañana", "DAYAFTERTOMORROW": "Pasado mañana",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Laen …", "LOADING": "Laen …",
"DAYBEFOREYESTERDAY": "Üleeile",
"YESTERDAY": "Eile",
"TODAY": "Täna", "TODAY": "Täna",
"TOMORROW": "Homme", "TOMORROW": "Homme",
"DAYAFTERTOMORROW": "Ülehomme", "DAYAFTERTOMORROW": "Ülehomme",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Lataa …", "LOADING": "Lataa …",
"DAYBEFOREYESTERDAY": "Toissapäivänä",
"YESTERDAY": "Eilen",
"TODAY": "Tänään", "TODAY": "Tänään",
"TOMORROW": "Huomenna", "TOMORROW": "Huomenna",
"DAYAFTERTOMORROW": "Ylihuomenna", "DAYAFTERTOMORROW": "Ylihuomenna",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Chargement…", "LOADING": "Chargement…",
"DAYBEFOREYESTERDAY": "Avant-hier",
"YESTERDAY": "Hier",
"TODAY": "Aujourd'hui", "TODAY": "Aujourd'hui",
"TOMORROW": "Demain", "TOMORROW": "Demain",
"DAYAFTERTOMORROW": "Après-demain", "DAYAFTERTOMORROW": "Après-demain",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Bezich mei laden …", "LOADING": "Bezich mei laden …",
"YESTERDAY": "Juster",
"TODAY": "Hjoed", "TODAY": "Hjoed",
"TOMORROW": "Moarn", "TOMORROW": "Moarn",
"DAYAFTERTOMORROW": "Oaremoarn", "DAYAFTERTOMORROW": "Oaremoarn",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Cargando …", "LOADING": "Cargando …",
"YESTERDAY": "Onte",
"TODAY": "Hoxe", "TODAY": "Hoxe",
"TOMORROW": "Mañá", "TOMORROW": "Mañá",
"DAYAFTERTOMORROW": "Pasado mañá", "DAYAFTERTOMORROW": "Pasado mañá",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "લોડ થઈ રહ્યું છે …", "LOADING": "લોડ થઈ રહ્યું છે …",
"YESTERDAY": "ગઇકાલે",
"TODAY": "આજે", "TODAY": "આજે",
"TOMORROW": "આવતી કાલે", "TOMORROW": "આવતી કાલે",
"DAYAFTERTOMORROW": "પરમ દિવસે", "DAYAFTERTOMORROW": "પરમ દિવસે",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "טוען...", "LOADING": "טוען...",
"DAYBEFOREYESTERDAY": "שלשום",
"YESTERDAY": "אתמול",
"TODAY": "היום", "TODAY": "היום",
"TOMORROW": "מחר", "TOMORROW": "מחר",
"DAYAFTERTOMORROW": "בעוד יומיים", "DAYAFTERTOMORROW": "בעוד יומיים",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "लोड हो रहा है …", "LOADING": "लोड हो रहा है …",
"DAYBEFOREYESTERDAY": "परसों",
"YESTERDAY": "कल",
"TODAY": "आज", "TODAY": "आज",
"TOMORROW": "आने वाला कल", "TOMORROW": "आने वाला कल",
"DAYAFTERTOMORROW": "2 दिनों में", "DAYAFTERTOMORROW": "2 दिनों में",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Učitavanje …", "LOADING": "Učitavanje …",
"DAYBEFOREYESTERDAY": "Prekjučer",
"YESTERDAY": "Jučer",
"TODAY": "Danas", "TODAY": "Danas",
"TOMORROW": "Sutra", "TOMORROW": "Sutra",
"DAYAFTERTOMORROW": "Prekosutra", "DAYAFTERTOMORROW": "Prekosutra",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Memuat …", "LOADING": "Memuat …",
"YESTERDAY": "Kemarin",
"TODAY": "Hari ini", "TODAY": "Hari ini",
"TOMORROW": "Besok", "TOMORROW": "Besok",
"DAYAFTERTOMORROW": "Lusa", "DAYAFTERTOMORROW": "Lusa",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Hleð upp …", "LOADING": "Hleð upp …",
"DAYBEFOREYESTERDAY": "Í fyrradag",
"YESTERDAY": "Í gær",
"TODAY": "Í dag", "TODAY": "Í dag",
"TOMORROW": "Á morgun", "TOMORROW": "Á morgun",
"DAYAFTERTOMORROW": "Ekki á morgun, heldur hinn", "DAYAFTERTOMORROW": "Ekki á morgun, heldur hinn",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Caricamento in corso …", "LOADING": "Caricamento in corso …",
"YESTERDAY": "Ieri",
"TODAY": "Oggi", "TODAY": "Oggi",
"TOMORROW": "Domani", "TOMORROW": "Domani",
"DAYAFTERTOMORROW": "Dopodomani", "DAYAFTERTOMORROW": "Dopodomani",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "ローディング …", "LOADING": "ローディング …",
"DAYBEFOREYESTERDAY": "おととい",
"YESTERDAY": "昨日",
"TODAY": "今日", "TODAY": "今日",
"TOMORROW": "明日", "TOMORROW": "明日",
"RUNNING": "で終わります", "RUNNING": "で終わります",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "로드 중 …", "LOADING": "로드 중 …",
"YESTERDAY": "어제",
"TODAY": "오늘", "TODAY": "오늘",
"TOMORROW": "내일", "TOMORROW": "내일",
"DAYAFTERTOMORROW": "모레", "DAYAFTERTOMORROW": "모레",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Kraunasi …", "LOADING": "Kraunasi …",
"DAYBEFOREYESTERDAY": "Užvakar",
"YESTERDAY": "Vakar",
"TODAY": "Šiandien", "TODAY": "Šiandien",
"TOMORROW": "Rytoj", "TOMORROW": "Rytoj",
"DAYAFTERTOMORROW": "Už 2 dienų", "DAYAFTERTOMORROW": "Už 2 dienų",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Tunggu Sebentar …", "LOADING": "Tunggu Sebentar …",
"YESTERDAY": "Semalam",
"TODAY": "Hari ini", "TODAY": "Hari ini",
"TOMORROW": "Esok", "TOMORROW": "Esok",
"DAYAFTERTOMORROW": "Lusa", "DAYAFTERTOMORROW": "Lusa",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Laster …", "LOADING": "Laster …",
"DAYBEFOREYESTERDAY": "I forgårs",
"YESTERDAY": "I går",
"TODAY": "I dag", "TODAY": "I dag",
"TOMORROW": "I morgen", "TOMORROW": "I morgen",
"DAYAFTERTOMORROW": "I overmorgen", "DAYAFTERTOMORROW": "I overmorgen",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Bezig met laden …", "LOADING": "Bezig met laden …",
"DAYBEFOREYESTERDAY": "Eergisteren",
"YESTERDAY": "Gisteren",
"TODAY": "Vandaag", "TODAY": "Vandaag",
"TOMORROW": "Morgen", "TOMORROW": "Morgen",
"DAYAFTERTOMORROW": "Overmorgen", "DAYAFTERTOMORROW": "Overmorgen",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Lastar …", "LOADING": "Lastar …",
"DAYBEFOREYESTERDAY": "I forgårs",
"YESTERDAY": "I går",
"TODAY": "I dag", "TODAY": "I dag",
"TOMORROW": "I morgon", "TOMORROW": "I morgon",
"DAYAFTERTOMORROW": "I overmorgon", "DAYAFTERTOMORROW": "I overmorgon",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Ładowanie …", "LOADING": "Ładowanie …",
"DAYBEFOREYESTERDAY": "Wczoraj",
"YESTERDAY": "Przedwczoraj",
"TODAY": "Dziś", "TODAY": "Dziś",
"TOMORROW": "Jutro", "TOMORROW": "Jutro",
"DAYAFTERTOMORROW": "Pojutrze", "DAYAFTERTOMORROW": "Pojutrze",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "پیلېدل", "LOADING": "پیلېدل",
"DAYBEFOREYESTERDAY": "پرون ورځ",
"YESTERDAY": "پرون",
"TODAY": "نن", "TODAY": "نن",
"TOMORROW": "سبا", "TOMORROW": "سبا",
"DAYAFTERTOMORROW": "بل سبا", "DAYAFTERTOMORROW": "بل سبا",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Carregando …", "LOADING": "Carregando …",
"DAYBEFOREYESTERDAY": "Anteontem",
"YESTERDAY": "Ontem",
"TODAY": "Hoje", "TODAY": "Hoje",
"TOMORROW": "Amanhã", "TOMORROW": "Amanhã",
"RUNNING": "Acaba em", "RUNNING": "Acaba em",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "A carregar …", "LOADING": "A carregar …",
"DAYBEFOREYESTERDAY": "Anteontem",
"YESTERDAY": "Ontem",
"TODAY": "Hoje", "TODAY": "Hoje",
"TOMORROW": "Amanhã", "TOMORROW": "Amanhã",
"DAYAFTERTOMORROW": "Depois de amanhã", "DAYAFTERTOMORROW": "Depois de amanhã",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Se încarcă …", "LOADING": "Se încarcă …",
"DAYBEFOREYESTERDAY": "Alaltaieri",
"YESTERDAY": "Ieri",
"TODAY": "Astăzi", "TODAY": "Astăzi",
"TOMORROW": "Mâine", "TOMORROW": "Mâine",
"DAYAFTERTOMORROW": "Poimâine", "DAYAFTERTOMORROW": "Poimâine",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Загрузка …", "LOADING": "Загрузка …",
"DAYBEFOREYESTERDAY": "Позавчера",
"YESTERDAY": "Вчера",
"TODAY": "Сегодня", "TODAY": "Сегодня",
"TOMORROW": "Завтра", "TOMORROW": "Завтра",
"DAYAFTERTOMORROW": "Послезавтра", "DAYAFTERTOMORROW": "Послезавтра",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Načítanie …", "LOADING": "Načítanie …",
"DAYBEFOREYESTERDAY": "Predvčerom",
"YESTERDAY": "Včera",
"TODAY": "Dnes", "TODAY": "Dnes",
"TOMORROW": "Zajtra", "TOMORROW": "Zajtra",
"DAYAFTERTOMORROW": "Pozajtra", "DAYAFTERTOMORROW": "Pozajtra",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Laddar …", "LOADING": "Laddar …",
"DAYBEFOREYESTERDAY": "",
"YESTERDAY": "I går",
"TODAY": "I dag", "TODAY": "I dag",
"TOMORROW": "I morgon", "TOMORROW": "I morgon",
"DAYAFTERTOMORROW": "I övermorgon", "DAYAFTERTOMORROW": "I övermorgon",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "loS …", "LOADING": "loS …",
"DAYBEFOREYESTERDAY": "cha'Hu'",
"YESTERDAY": "wa'Hu'",
"TODAY": "DaHjaj", "TODAY": "DaHjaj",
"TOMORROW": "wa'leS", "TOMORROW": "wa'leS",
"DAYAFTERTOMORROW": "cha'leS", "DAYAFTERTOMORROW": "cha'leS",

View File

@ -1,6 +1,7 @@
{ {
"LOADING": "Yükleniyor …", "LOADING": "Yükleniyor …",
"YESTERDAY": "Dün",
"TODAY": "Bugün", "TODAY": "Bugün",
"TOMORROW": "Yarın", "TOMORROW": "Yarın",
"DAYAFTERTOMORROW": "İki gün içinde", "DAYAFTERTOMORROW": "İki gün içinde",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "Завантаження …", "LOADING": "Завантаження …",
"DAYBEFOREYESTERDAY": "Позавчора",
"YESTERDAY": "вчора",
"TODAY": "Сьогодні", "TODAY": "Сьогодні",
"TOMORROW": "Завтра", "TOMORROW": "Завтра",
"DAYAFTERTOMORROW": "Післязавтра", "DAYAFTERTOMORROW": "Післязавтра",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "正在加载 …", "LOADING": "正在加载 …",
"DAYBEFOREYESTERDAY": "前天",
"YESTERDAY": "昨天",
"TODAY": "今天", "TODAY": "今天",
"TOMORROW": "明天", "TOMORROW": "明天",
"DAYAFTERTOMORROW": "后天", "DAYAFTERTOMORROW": "后天",

View File

@ -1,6 +1,8 @@
{ {
"LOADING": "正在載入 …", "LOADING": "正在載入 …",
"DAYBEFOREYESTERDAY": "前天",
"YESTERDAY": "昨天",
"TODAY": "今天", "TODAY": "今天",
"TOMORROW": "明天", "TOMORROW": "明天",
"DAYAFTERTOMORROW": "後天", "DAYAFTERTOMORROW": "後天",