summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--locales/en-US.json20
-rw-r--r--locales/en.json20
-rw-r--r--locales/ja.json22
-rw-r--r--src/util/validation.ts41
4 files changed, 82 insertions, 21 deletions
diff --git a/locales/en-US.json b/locales/en-US.json
index b15933f..b193f6b 100644
--- a/locales/en-US.json
+++ b/locales/en-US.json
@@ -204,6 +204,26 @@
"sidebar.events": "View events",
"snappy": "Make it snappy.",
"upcomingevents": "Upcoming events",
+ "validation.eventdata.creatoremail": "Email address is invalid.",
+ "validation.eventdata.eventdescription": "Event description is required.",
+ "validation.eventdata.eventend": "Event end time is required.",
+ "validation.eventdata.eventgroupboolean": "Event group ID is required.",
+ "validation.eventdata.eventgroupedittoken": "Event group edit token is required.",
+ "validation.eventdata.eventlocation": "Event location is required.",
+ "validation.eventdata.eventname": "Event name is required.",
+ "validation.eventdata.eventstart": "Event start time is required.",
+ "validation.eventdata.eventurl": "Event link is invalid.",
+ "validation.eventdata.maxattendees": "Max number of attendees must be a number.",
+ "validation.eventdata.maxattendeesboolean": "Max number of attendees is required.",
+ "validation.eventdata.timezone": "Event timezone is required.",
+ "validation.eventtime.endisbefore": "End time must be in the future.",
+ "validation.eventtime.endyears": "Event duration cannot be longer than 1 year.",
+ "validation.eventtime.startisafter": "Start time must be before end time.",
+ "validation.eventtime.startisbefore": "Start time must be in the future.",
+ "validation.groupdata.creatoremail": "Email address is invalid.",
+ "validation.groupdata.eventgroupdescription": "Event group description is required.",
+ "validation.groupdata.eventgroupname": "Event group name is required.",
+ "validation.groupdata.eventgroupurl": "Group link is invalid.",
"wontshow": "Will not be shown anywhere (optional).",
"year-month-format": "MMMM YYYY",
"youremail": "Your email"
diff --git a/locales/en.json b/locales/en.json
index b15933f..b193f6b 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -204,6 +204,26 @@
"sidebar.events": "View events",
"snappy": "Make it snappy.",
"upcomingevents": "Upcoming events",
+ "validation.eventdata.creatoremail": "Email address is invalid.",
+ "validation.eventdata.eventdescription": "Event description is required.",
+ "validation.eventdata.eventend": "Event end time is required.",
+ "validation.eventdata.eventgroupboolean": "Event group ID is required.",
+ "validation.eventdata.eventgroupedittoken": "Event group edit token is required.",
+ "validation.eventdata.eventlocation": "Event location is required.",
+ "validation.eventdata.eventname": "Event name is required.",
+ "validation.eventdata.eventstart": "Event start time is required.",
+ "validation.eventdata.eventurl": "Event link is invalid.",
+ "validation.eventdata.maxattendees": "Max number of attendees must be a number.",
+ "validation.eventdata.maxattendeesboolean": "Max number of attendees is required.",
+ "validation.eventdata.timezone": "Event timezone is required.",
+ "validation.eventtime.endisbefore": "End time must be in the future.",
+ "validation.eventtime.endyears": "Event duration cannot be longer than 1 year.",
+ "validation.eventtime.startisafter": "Start time must be before end time.",
+ "validation.eventtime.startisbefore": "Start time must be in the future.",
+ "validation.groupdata.creatoremail": "Email address is invalid.",
+ "validation.groupdata.eventgroupdescription": "Event group description is required.",
+ "validation.groupdata.eventgroupname": "Event group name is required.",
+ "validation.groupdata.eventgroupurl": "Group link is invalid.",
"wontshow": "Will not be shown anywhere (optional).",
"year-month-format": "MMMM YYYY",
"youremail": "Your email"
diff --git a/locales/ja.json b/locales/ja.json
index 13b38eb..1dc10e4 100644
--- a/locales/ja.json
+++ b/locales/ja.json
@@ -174,7 +174,7 @@
"ml.requestmlbutton": "マジックリンクをリクエスト",
"ml.requestmldesc": "この Gathio インスタンスの管理者は、イベントの作成権限を特定のメールアドレスに限定しています。あなたのメールアドレスでの作成が許可されていれば、マジックリンクがメールで届くはずです。許可されていなければ、メールは届きません。",
"newevent.createnew": "イベントを作成",
- "newevent.groupattention": "イベントグループは、イベントのように自動削除されることはありません。しかし、{{siteName}} から削除されたイベントは",
+ "newevent.groupattention": "イベントグループは、イベントのように自動削除されることはありません。しかし、{{siteName}} から削除されたイベントは、当然ですが、イベントグループに表示されません。",
"newevent.groupdesc": "イベントグループは、リンクしたイベントをまとめる機能です。例えば、シリーズものの映画上映会、いくつかのイベントに分かれるフェス、音楽バンドのツアーなどに便利です。個々のイベントへの公開リンクのように、グループの公開リンクを共有することができます。また秘密の編集パスワード(グループ作成時にメール送信)を知っているメンバーは、今後のイベントをグループに追加することができます。",
"newevent.importevent": "既存のイベントをインポート",
"newevent.neweventbutton": "イベントを作成",
@@ -204,6 +204,26 @@
"sidebar.events": "イベント表示",
"snappy": "ズバッと。",
"upcomingevents": "今後のイベント",
+ "validation.eventdata.creatoremail": "メールアドレスが無効です。",
+ "validation.eventdata.eventdescription": "イベントの説明は必須です。",
+ "validation.eventdata.eventend": "終了日時は必須です。",
+ "validation.eventdata.eventgroupboolean": "イベントグループ ID は必須です。",
+ "validation.eventdata.eventgroupedittoken": "イベントグループの編集用秘密パスワードが必要です。",
+ "validation.eventdata.eventlocation": "場所は必須です。",
+ "validation.eventdata.eventname": "イベント名は必須です。",
+ "validation.eventdata.eventstart": "開始日時は必須です。",
+ "validation.eventdata.eventurl": "イベントリンクが無効です。",
+ "validation.eventdata.maxattendees": "定員は数字で入力してください。",
+ "validation.eventdata.maxattendeesboolean": "定員数は必須です。",
+ "validation.eventdata.timezone": "タイムゾーンは必須です。",
+ "validation.eventtime.endisbefore": "終了日時は未来にしてください。",
+ "validation.eventtime.endyears": "1 年を超えるイベントは作成できません。",
+ "validation.eventtime.startisafter": "開始日時は、終了日時より前にしてください。",
+ "validation.eventtime.startisbefore": "開始日時は未来にしてください。",
+ "validation.groupdata.creatoremail": "メールアドレスが無効です。",
+ "validation.groupdata.eventgroupdescription": "説明は必須です。",
+ "validation.groupdata.eventgroupname": "グループ名は必須です。",
+ "validation.groupdata.eventgroupurl": "グループのリンクが無効です。",
"wontshow": "どこにも表示しません ( 任意 )。",
"year-month-format": "YYYY年MMM",
"youremail": "あなたのメールアドレス"
diff --git a/src/util/validation.ts b/src/util/validation.ts
index a3bea63..0d82b88 100644
--- a/src/util/validation.ts
+++ b/src/util/validation.ts
@@ -1,3 +1,4 @@
+import i18next from "i18next";
import moment from "moment-timezone";
type Error = {
@@ -90,26 +91,26 @@ const validateUrl = (url: string) => {
export const validateEventTime = (start: Date, end: Date): Error | boolean => {
if (moment(start).isAfter(moment(end))) {
return {
- message: "Start time must be before end time.",
+ message: i18next.t('validation.eventtime.startisafter'),
field: "eventStart",
};
}
if (moment(start).isBefore(moment())) {
return {
- message: "Start time must be in the future.",
+ message: i18next.t('validation.eventtime.startisbefore'),
field: "eventStart",
};
}
if (moment(end).isBefore(moment())) {
return {
- message: "End time must be in the future.",
+ message: i18next.t('validation.eventtime.endisbefore'),
field: "eventEnd",
};
}
// Duration cannot be longer than 1 year
if (moment(end).diff(moment(start), "years") > 1) {
return {
- message: "Event duration cannot be longer than 1 year.",
+ message: i18next.t("validation.eventtime.endyears"),
field: "eventEnd",
};
}
@@ -130,25 +131,25 @@ export const validateEventData = (
const errors: Error[] = [];
if (!validatedData.eventName) {
errors.push({
- message: "Event name is required.",
+ message: i18next.t('validation.eventdata.eventname'),
field: "eventName",
});
}
if (!validatedData.eventLocation) {
errors.push({
- message: "Event location is required.",
+ message: i18next.t("validation.eventdata.eventlocation"),
field: "eventLocation",
});
}
if (!validatedData.eventStart) {
errors.push({
- message: "Event start time is required.",
+ message: i18next.t("validation.eventdata.eventstart"),
field: "eventStart",
});
}
if (!validatedData.eventEnd) {
errors.push({
- message: "Event end time is required.",
+ message: i18next.t("validation.eventdata.eventend"),
field: "eventEnd",
});
}
@@ -163,26 +164,26 @@ export const validateEventData = (
}
if (!validatedData.timezone) {
errors.push({
- message: "Event timezone is required.",
+ message: i18next.t("validation.eventdata.timezone"),
field: "timezone",
});
}
if (!validatedData.eventDescription) {
errors.push({
- message: "Event description is required.",
+ message: i18next.t("validation.eventdata.eventdescription"),
field: "eventDescription",
});
}
if (validatedData.eventGroupBoolean) {
if (!validatedData.eventGroupID) {
errors.push({
- message: "Event group ID is required.",
+ message: i18next.t("validation.eventdata.eventgroupboolean"),
field: "eventGroupID",
});
}
if (!validatedData.eventGroupEditToken) {
errors.push({
- message: "Event group edit token is required.",
+ message: i18next.t("validation.eventdata.eventgroupedittoken"),
field: "eventGroupEditToken",
});
}
@@ -190,13 +191,13 @@ export const validateEventData = (
if (validatedData.maxAttendeesBoolean) {
if (!validatedData.maxAttendees) {
errors.push({
- message: "Max number of attendees is required.",
+ message: i18next.t("validation.eventdata.maxattendeesboolean"),
field: "maxAttendees",
});
}
if (isNaN(validatedData.maxAttendees)) {
errors.push({
- message: "Max number of attendees must be a number.",
+ message: i18next.t("validation.eventdata.maxattendees"),
field: "maxAttendees",
});
}
@@ -204,7 +205,7 @@ export const validateEventData = (
if (validatedData.creatorEmail) {
if (!validateEmail(validatedData.creatorEmail)) {
errors.push({
- message: "Email address is invalid.",
+ message: i18next.t("validation.eventdata.creatoremail"),
field: "creatorEmail",
});
}
@@ -212,7 +213,7 @@ export const validateEventData = (
if (validatedData.eventURL) {
if (!validateUrl(validatedData.eventURL)) {
errors.push({
- message: "Event link is invalid.",
+ message: i18next.t("validation.eventdata.eventurl"),
field: "eventURL",
});
}
@@ -230,20 +231,20 @@ export const validateGroupData = (
const errors: Error[] = [];
if (!groupData.eventGroupName) {
errors.push({
- message: "Event group name is required.",
+ message: i18next.t("validation.groupdata.eventgroupname"),
field: "eventGroupName",
});
}
if (!groupData.eventGroupDescription) {
errors.push({
- message: "Event group description is required.",
+ message: i18next.t("validation.groupdata.eventgroupdescription"),
field: "eventGroupDescription",
});
}
if (groupData.creatorEmail) {
if (!validateEmail(groupData.creatorEmail)) {
errors.push({
- message: "Email address is invalid.",
+ message: i18next.t("validation.groupdata.creatoremail"),
field: "creatorEmail",
});
}
@@ -251,7 +252,7 @@ export const validateGroupData = (
if (groupData.eventGroupURL) {
if (!validateUrl(groupData.eventGroupURL)) {
errors.push({
- message: "Group link is invalid.",
+ message: i18next.t("validation.groupdata.eventgroupurl"),
field: "eventGroupURL",
});
}