summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorINOUE Daisuke <inoue.daisuke@gmail.com>2025-03-22 22:55:46 +0900
committerINOUE Daisuke <inoue.daisuke@gmail.com>2025-04-08 22:20:58 +0900
commit73e8b168c3ffc4e3ffe30e50dd3e46ed70d909d8 (patch)
treee5a747906b5fda7c2b64210b9d9531a082dee14d
parent2449234e28aab435ffe28d567ece8c651d45d2b3 (diff)
some fix, moment.locale setting
-rw-r--r--locales/en-US.json6
-rw-r--r--locales/en.json6
-rw-r--r--locales/ja.json4
-rw-r--r--package.json1
-rw-r--r--pnpm-lock.yaml3
-rwxr-xr-xsrc/app.ts5
-rw-r--r--src/routes/frontend.ts6
-rw-r--r--views/partials/eventGroupForm.handlebars2
8 files changed, 20 insertions, 13 deletions
diff --git a/locales/en-US.json b/locales/en-US.json
index d397809..b15933f 100644
--- a/locales/en-US.json
+++ b/locales/en-US.json
@@ -84,7 +84,6 @@
"event.remaining_one": "{{count}} spot remaining - add yourself now!",
"event.remaining_other": "{{count}} spots remaining - add yourself now!",
"event.remaining_zero": "This event is at capacity.",
- "event.remove-attendee": "Remove {{ attendeeName }} from {{eventData.name}}",
"event.removeAttendee": "Remove attendee",
"event.removeattendeedesc": "Remove attendee from '{{eventData.name}}'",
"event.removeme": "Remove me",
@@ -109,8 +108,8 @@
"frontend.displaydate-sameday": "{{ startdate }} <span class=\"text-muted\">from<span> {{ starttime }} <span class=\"text-muted\">to</span> {{ endtime }}{{ timezone}}",
"frontend.elnumber": "({{count}} people)",
"frontend.eventattendees": "people",
+ "frontend.newevent": "New event",
"frontend.publicevents": "Public events",
- "frontend.sameday.to": "<span class=\"text-muted\"> to </span>",
"frontend.timeformat": "LT",
"group.about": "About",
"group.addevent": "To link an existing event to this group, copy and paste the two codes below into the 'Event Group' box when creating a new event or editing an existing event.",
@@ -124,6 +123,7 @@
"group.feedlinkdesc": "Paste this URL into your calendar app\nto subscribe to a live feed of events from this group.",
"group.hostedby": "Hosted by</span> {{eventGroupData.hostName}}",
"group.ICSexport": "Export as ICS",
+ "group.options": "Options",
"group.p.creatoremail": "Your email",
"group.p.del": "Delete this event group",
"group.p.delbutton": "Delete event group",
@@ -141,7 +141,7 @@
"group.subscribedesc": "Enter your email address (optional) to receive\nupdates\nwhenever a new event is created in this group.",
"group.subscribetitle": "Subscribe to updates",
"group.welcome": "Welcome to your event group! We've just sent you an email with your secret editing link, which you can also see in the address bar above. Haven't got the email? Check your spam or junk folder. To share your event group, use the link you can see just below this message - that way your attendees won't be able to edit or delete your event group!",
- "home.about": "About",
+ "home.about": "About {{ sn }}",
"home.aboutgathio": "About Gathio",
"home.attention": "But remember: all events are visible to anyone who knows the link, so probably don't use Gathio to plot your surprise birthday party or revolution. Or whatever, you do you.",
"home.autodelete": "If this instance automatically deletes its events, sometime after the event finishes, it's deleted from the database for ever, and your data goes with it.",
diff --git a/locales/en.json b/locales/en.json
index d397809..b15933f 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -84,7 +84,6 @@
"event.remaining_one": "{{count}} spot remaining - add yourself now!",
"event.remaining_other": "{{count}} spots remaining - add yourself now!",
"event.remaining_zero": "This event is at capacity.",
- "event.remove-attendee": "Remove {{ attendeeName }} from {{eventData.name}}",
"event.removeAttendee": "Remove attendee",
"event.removeattendeedesc": "Remove attendee from '{{eventData.name}}'",
"event.removeme": "Remove me",
@@ -109,8 +108,8 @@
"frontend.displaydate-sameday": "{{ startdate }} <span class=\"text-muted\">from<span> {{ starttime }} <span class=\"text-muted\">to</span> {{ endtime }}{{ timezone}}",
"frontend.elnumber": "({{count}} people)",
"frontend.eventattendees": "people",
+ "frontend.newevent": "New event",
"frontend.publicevents": "Public events",
- "frontend.sameday.to": "<span class=\"text-muted\"> to </span>",
"frontend.timeformat": "LT",
"group.about": "About",
"group.addevent": "To link an existing event to this group, copy and paste the two codes below into the 'Event Group' box when creating a new event or editing an existing event.",
@@ -124,6 +123,7 @@
"group.feedlinkdesc": "Paste this URL into your calendar app\nto subscribe to a live feed of events from this group.",
"group.hostedby": "Hosted by</span> {{eventGroupData.hostName}}",
"group.ICSexport": "Export as ICS",
+ "group.options": "Options",
"group.p.creatoremail": "Your email",
"group.p.del": "Delete this event group",
"group.p.delbutton": "Delete event group",
@@ -141,7 +141,7 @@
"group.subscribedesc": "Enter your email address (optional) to receive\nupdates\nwhenever a new event is created in this group.",
"group.subscribetitle": "Subscribe to updates",
"group.welcome": "Welcome to your event group! We've just sent you an email with your secret editing link, which you can also see in the address bar above. Haven't got the email? Check your spam or junk folder. To share your event group, use the link you can see just below this message - that way your attendees won't be able to edit or delete your event group!",
- "home.about": "About",
+ "home.about": "About {{ sn }}",
"home.aboutgathio": "About Gathio",
"home.attention": "But remember: all events are visible to anyone who knows the link, so probably don't use Gathio to plot your surprise birthday party or revolution. Or whatever, you do you.",
"home.autodelete": "If this instance automatically deletes its events, sometime after the event finishes, it's deleted from the database for ever, and your data goes with it.",
diff --git a/locales/ja.json b/locales/ja.json
index 44c0b63..13b38eb 100644
--- a/locales/ja.json
+++ b/locales/ja.json
@@ -84,7 +84,6 @@
"event.remaining_one": "残り {{count}} 枠 - 参加登録しましょう !",
"event.remaining_other": "残り {{count}} 枠 - 参加登録しましょう !",
"event.remaining_zero": "このイベントは満員です。",
- "event.remove-attendee": "'{{eventData.name}}' から {{ attendeeName }} を削除",
"event.removeAttendee": "参加者を削除",
"event.removeattendeedesc": "'{{eventData.name}}' から参加者を削除",
"event.removeme": "キャンセル ( 辞退 )",
@@ -109,8 +108,8 @@
"frontend.displaydate-sameday": "{{ startdate }} {{ starttime }} <span class=\"text-muted\">~</span> {{ endtime }}{{ timezone}}",
"frontend.elnumber": "( {{count}} 人 )",
"frontend.eventattendees": "人で",
+ "frontend.newevent": "イベントの作成",
"frontend.publicevents": "公開イベント",
- "frontend.sameday.to": " <span class=\"text-muted\"> ~ </span> ",
"frontend.timeformat": "LT",
"group.about": "このグループについて",
"group.addevent": "このグループにイベントをリンクするには、新しくイベントを作る際に、もしくは既存のイベントを編集して、以下の 2 つのコードをコピー・貼り付けします。",
@@ -124,6 +123,7 @@
"group.feedlinkdesc": "この URL をカレンダーアプリに登録することで、このグループのイベントスケジュールを購読できます。",
"group.hostedby": "主催 : ",
"group.ICSexport": "iCalendar ファイル",
+ "group.options": "オプション項目",
"group.p.creatoremail": "あなたのメールアドレス",
"group.p.del": "このイベントグループを削除する",
"group.p.delbutton": "イベントグループを削除",
diff --git a/package.json b/package.json
index 0182815..8465506 100644
--- a/package.json
+++ b/package.json
@@ -41,6 +41,7 @@
"jimp": "^0.16.13",
"jsdom": "^22.1.0",
"marked": "^12.0.2",
+ "moment": "^2.30.1",
"moment-timezone": "^0.5.45",
"mongoose": "^5.13.22",
"multer": "1.4.5-lts.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c45ff07..f78966b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -77,6 +77,9 @@ importers:
marked:
specifier: ^12.0.2
version: 12.0.2
+ moment:
+ specifier: ^2.30.1
+ version: 2.30.1
moment-timezone:
specifier: ^0.5.45
version: 0.5.45
diff --git a/src/app.ts b/src/app.ts
index 9301484..a71bf30 100755
--- a/src/app.ts
+++ b/src/app.ts
@@ -31,6 +31,7 @@ import {
activityPubContentType,
alternateActivityPubContentType,
} from "./lib/activitypub.js";
+import moment from "moment";
const app = express();
@@ -125,6 +126,10 @@ async function initializeApp() {
console.error('handlebars-i18next helper is not properly loaded');
}
+ i18next.on('languageChanged', function(lng) {
+ moment.locale(lng);
+ });
+
app.engine("handlebars", hbsInstance.engine);
app.set("view engine", "handlebars");
app.set("hbsInstance", hbsInstance);
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")) {
diff --git a/views/partials/eventGroupForm.handlebars b/views/partials/eventGroupForm.handlebars
index 3d13d69..0f30790 100644
--- a/views/partials/eventGroupForm.handlebars
+++ b/views/partials/eventGroupForm.handlebars
@@ -34,7 +34,7 @@
</div>
{{#if showPublicEventList}}
<div class="form-group">
- <label>Options</label>
+ <label>{{{t "group.options" }}}</label>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="publicGroupCheckbox" name="publicCheckbox" x-model="data.publicCheckbox">
<label class="form-check-label" for="publicGroupCheckbox">