diff options
-rw-r--r-- | locales/en-US.json | 20 | ||||
-rw-r--r-- | locales/en.json | 20 | ||||
-rw-r--r-- | locales/ja.json | 22 | ||||
-rw-r--r-- | src/util/validation.ts | 41 |
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", }); } |