From 23e49c6e6e63a518e704f82879a5fdcf268c51d8 Mon Sep 17 00:00:00 2001 From: INOUE Daisuke Date: Tue, 8 Apr 2025 22:14:04 +0900 Subject: 1st stage, only language switch. Thank you, MomentQYC ( https://github.com/MomentQYC ). Your first attemt encourage me. --- src/routes/frontend.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/routes/frontend.ts') diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts index 14bb779..96d7587 100644 --- a/src/routes/frontend.ts +++ b/src/routes/frontend.ts @@ -8,7 +8,7 @@ import { instanceDescription, instanceRules, } from "../lib/config.js"; -import { addToLog, exportICal } from "../helpers.js"; +import { addToLog, exportIcal } from "../helpers.js"; import Event from "../models/Event.js"; import EventGroup, { IEventGroup } from "../models/EventGroup.js"; import { @@ -546,7 +546,7 @@ router.get( const events = await Event.find({ eventGroup: eventGroup._id, }).sort("start"); - const string = exportICal(events, eventGroup.name); + const string = exportIcal(events, eventGroup.name); res.set("Content-Type", "text/calendar").send(string); } } catch (err) { @@ -568,7 +568,7 @@ router.get("/export/event/:eventID", async (req: Request, res: Response) => { }).populate("eventGroup"); if (event) { - const string = exportICal([event], event.name); + const string = exportIcal([event], event.name); res.set("Content-Type", "text/calendar").send(string); } } catch (err) { @@ -594,7 +594,7 @@ router.get( const events = await Event.find({ eventGroup: eventGroup._id, }).sort("start"); - const string = exportICal(events, eventGroup.name); + const string = exportIcal(events, eventGroup.name); res.set("Content-Type", "text/calendar").send(string); } } catch (err) { -- cgit v1.2.3 From f2ee19f15a78125a1dc2ba8b9c175dd9831e5700 Mon Sep 17 00:00:00 2001 From: INOUE Daisuke Date: Thu, 20 Mar 2025 22:54:38 +0900 Subject: hidden attendees (? people) --- src/routes/frontend.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/routes/frontend.ts') diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts index 96d7587..40b5393 100644 --- a/src/routes/frontend.ts +++ b/src/routes/frontend.ts @@ -19,6 +19,7 @@ import MagicLink from "../models/MagicLink.js"; import { getConfigMiddleware } from "../lib/middleware.js"; import { getMessage } from "../util/messages.js"; import { EventListEvent, bucketEventsByMonth } from "../lib/event.js"; +import i18next from "i18next"; const router = Router(); @@ -257,7 +258,7 @@ router.get("/:eventID", async (req: Request, res: Response) => { el.id = el._id; } if (el.number && el.number > 1) { - el.name = `${el.name} (${el.number} people)`; + el.name = `${el.name} ${i18next.t("frontend.elnumber", { count: el.number })}`; } return { ...el, -- cgit v1.2.3 From 2449234e28aab435ffe28d567ece8c651d45d2b3 Mon Sep 17 00:00:00 2001 From: INOUE Daisuke Date: Sat, 22 Mar 2025 21:03:25 +0900 Subject: DateTime format, and some translation fix --- src/routes/frontend.ts | 91 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 33 deletions(-) (limited to 'src/routes/frontend.ts') diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts index 40b5393..6f9e00a 100644 --- a/src/routes/frontend.ts +++ b/src/routes/frontend.ts @@ -71,7 +71,7 @@ router.get("/new/:magicLinkToken", async (req: Request, res: Response) => { ...frontendConfig(res), message: { type: "danger", - text: "This magic link is invalid or has expired. Please request a new one here.", + text: i18next.t("magiclink-invalid"), }, }); } @@ -92,6 +92,7 @@ router.get("/events", async (_: Request, res: Response) => { .lean() .sort("start"); const updatedEvents: EventListEvent[] = events.map((event) => { + moment.locale(i18next.language); const startMoment = moment.tz(event.start, event.timezone); const endMoment = moment.tz(event.end, event.timezone); const isSameDay = startMoment.isSame(endMoment, "day"); @@ -101,9 +102,9 @@ router.get("/events", async (_: Request, res: Response) => { name: event.name, location: event.location, displayDate: isSameDay - ? startMoment.format("D MMM YYYY") - : `${startMoment.format("D MMM YYYY")} - ${endMoment.format( - "D MMM YYYY", + ? startMoment.format("LL") + : `${startMoment.format("LL")} - ${endMoment.format( + "LL", )}`, eventHasConcluded: endMoment.isBefore(moment.tz(event.timezone)), eventGroup: event.eventGroup as any as IEventGroup, @@ -133,7 +134,7 @@ router.get("/events", async (_: Request, res: Response) => { }); res.render("publicEventList", { - title: "Public events", + title: i18next.t("frontend.publicevents"), upcomingEvents: upcomingEventsInMonthBuckets, pastEvents: pastEventsInMonthBuckets, eventGroups: updatedEventGroups, @@ -155,31 +156,57 @@ router.get("/:eventID", async (req: Request, res: Response) => { } const parsedLocation = event.location.replace(/\s+/g, "+"); let displayDate; + moment.locale(i18next.language); + const dateformat = i18next.t("frontend.dateformat"); + const timeformat = i18next.t('frontend.timeformat'); if (moment.tz(event.end, event.timezone).isSame(event.start, "day")) { // Happening during one day - displayDate = - moment - .tz(event.start, event.timezone) - .format( - 'dddd D MMMM YYYY [from] h:mm a', - ) + - moment - .tz(event.end, event.timezone) - .format( - ' [to] h:mm a [](z)[]', - ); + displayDate = i18next.t("frontend.displaydate-sameday", + { + startdate: + moment + .tz(event.start, event.timezone) + .format(dateformat), + starttime: + moment + .tz(event.start, event.timezone) + .format(timeformat), + endtime: + moment + .tz(event.end, event.timezone) + .format(timeformat), + timezone: + i18next.t('frontend.sameday.timezone', + { tz: + moment + .tz(event.end, event.timezone) + .format('(z)',) + } ) + }); } else { - displayDate = - moment - .tz(event.start, event.timezone) - .format( - 'dddd D MMMM YYYY [at] h:mm a', - ) + - moment - .tz(event.end, event.timezone) - .format( - ' [] dddd D MMMM YYYY [at] h:mm a [](z)[]', - ); + displayDate = i18next.t("frontend.displaydate-days", + { + startdate: + moment + .tz(event.start, event.timezone) + .format(dateformat), + starttime: + moment + .tz(event.start, event.timezone) + .format(timeformat), + enddate: + moment + .tz(event.end, event.timezone) + .format(dateformat), + endtime: + moment + .tz(event.end, event.timezone) + .format(timeformat), + timezone: + moment + .tz(event.end, event.timezone) + .format('(z)',) + }); } let eventStartISO = moment.tz(event.start, "Etc/UTC").toISOString(); let eventEndISO = moment.tz(event.end, "Etc/UTC").toISOString(); @@ -430,8 +457,8 @@ router.get("/group/:eventGroupID", async (req: Request, res: Response) => { .sort("start"); const updatedEvents: EventListEvent[] = events.map((event) => { - const startMoment = moment.tz(event.start, event.timezone); - const endMoment = moment.tz(event.end, event.timezone); + const startMoment = moment.tz(event.start, event.timezone).locale(i18next.language); + const endMoment = moment.tz(event.end, event.timezone).locale(i18next.language); const isSameDay = startMoment.isSame(endMoment, "day"); return { @@ -439,10 +466,8 @@ router.get("/group/:eventGroupID", async (req: Request, res: Response) => { name: event.name, location: event.location, displayDate: isSameDay - ? startMoment.format("D MMM YYYY") - : `${startMoment.format("D MMM YYYY")} - ${endMoment.format( - "D MMM YYYY", - )}`, + ? startMoment.format("LL") + : `${startMoment.format("LL")} - ${endMoment.format("LL")}`, eventHasConcluded: endMoment.isBefore( moment.tz(event.timezone), ), -- cgit v1.2.3 From 73e8b168c3ffc4e3ffe30e50dd3e46ed70d909d8 Mon Sep 17 00:00:00 2001 From: INOUE Daisuke Date: Sat, 22 Mar 2025 22:55:46 +0900 Subject: some fix, moment.locale setting --- src/routes/frontend.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src/routes/frontend.ts') diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts index 6f9e00a..44d3a76 100644 --- a/src/routes/frontend.ts +++ b/src/routes/frontend.ts @@ -50,7 +50,7 @@ router.get("/new", (req: Request, res: Response) => { return res.render("createEventMagicLink", frontendConfig(res)); } return res.render("newevent", { - title: "New event", + title: i18next.t("frontend.newevent"), ...frontendConfig(res), }); }); @@ -76,7 +76,7 @@ router.get("/new/:magicLinkToken", async (req: Request, res: Response) => { }); } res.render("newevent", { - title: "New event", + title: i18next.t("frontend.newevent"), ...frontendConfig(res), magicLinkToken: req.params.magicLinkToken, creatorEmail: magicLink.email, @@ -92,7 +92,6 @@ router.get("/events", async (_: Request, res: Response) => { .lean() .sort("start"); const updatedEvents: EventListEvent[] = events.map((event) => { - moment.locale(i18next.language); const startMoment = moment.tz(event.start, event.timezone); const endMoment = moment.tz(event.end, event.timezone); const isSameDay = startMoment.isSame(endMoment, "day"); @@ -156,7 +155,6 @@ router.get("/:eventID", async (req: Request, res: Response) => { } const parsedLocation = event.location.replace(/\s+/g, "+"); let displayDate; - moment.locale(i18next.language); const dateformat = i18next.t("frontend.dateformat"); const timeformat = i18next.t('frontend.timeformat'); if (moment.tz(event.end, event.timezone).isSame(event.start, "day")) { -- cgit v1.2.3 From 61e2bfd5b1e7b601ca6e8d5f1f32b04b47697e7c Mon Sep 17 00:00:00 2001 From: INOUE Daisuke Date: Mon, 24 Mar 2025 21:36:57 +0900 Subject: some translation fix --- src/routes/frontend.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'src/routes/frontend.ts') diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts index 44d3a76..387cd65 100644 --- a/src/routes/frontend.ts +++ b/src/routes/frontend.ts @@ -174,12 +174,9 @@ router.get("/:eventID", async (req: Request, res: Response) => { .tz(event.end, event.timezone) .format(timeformat), timezone: - i18next.t('frontend.sameday.timezone', - { tz: - moment - .tz(event.end, event.timezone) - .format('(z)',) - } ) + moment + .tz(event.end, event.timezone) + .format(' (z)',) }); } else { displayDate = i18next.t("frontend.displaydate-days", -- cgit v1.2.3 From 1fd6a7d2249fdf6ba5ca9ced6ea43348ebe0941d Mon Sep 17 00:00:00 2001 From: INOUE Daisuke Date: Wed, 2 Apr 2025 01:49:11 +0900 Subject: rename translation keys as filestructure --- src/routes/frontend.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/routes/frontend.ts') diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts index 387cd65..16a44c8 100644 --- a/src/routes/frontend.ts +++ b/src/routes/frontend.ts @@ -71,7 +71,7 @@ router.get("/new/:magicLinkToken", async (req: Request, res: Response) => { ...frontendConfig(res), message: { type: "danger", - text: i18next.t("magiclink-invalid"), + text: i18next.t("routes.magiclink-invalid"), }, }); } -- cgit v1.2.3 From fb85d79dd2333cd6e0982e5ee0fdc1070ff99889 Mon Sep 17 00:00:00 2001 From: INOUE Daisuke Date: Wed, 28 May 2025 23:25:36 +0900 Subject: To pass final test --- src/routes/frontend.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/routes/frontend.ts') diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts index a64bce4..fca14c6 100644 --- a/src/routes/frontend.ts +++ b/src/routes/frontend.ts @@ -175,7 +175,7 @@ router.get("/:eventID", async (req: Request, res: Response) => { timezone: moment .tz(event.end, event.timezone) - .format(' (z)',) + .format('(z)',) }); } else { displayDate = i18next.t("frontend.displaydate-days", -- cgit v1.2.3