+ {bracketProgression ? (
+
+ ) : null}
Save changes
diff --git a/app/form/SendouForm.tsx b/app/form/SendouForm.tsx
index 908ccd6f8..5f53b8961 100644
--- a/app/form/SendouForm.tsx
+++ b/app/form/SendouForm.tsx
@@ -4,6 +4,7 @@ import { flushSync } from "react-dom";
import { useTranslation } from "react-i18next";
import type { FetcherWithComponents } from "react-router";
import { useFetcher, useLocation } from "react-router";
+import { isPlainObject } from "remeda";
import type { z } from "zod";
import { FormMessage } from "~/components/FormMessage";
import { SubmitButton } from "~/components/SubmitButton";
@@ -632,10 +633,12 @@ function buildInitialValues(
const defaultValue = defaultValues?.[key as keyof typeof defaultValues];
if (defaultValue !== undefined) {
if (formField?.type === "array" && Array.isArray(defaultValue)) {
+ // only object-array (fieldset) items get a stable `_key`; spreading would
+ // collapse non-plain objects like `Date` into `{}`, so leave those intact
result[key] = (defaultValue as unknown[]).map((item) =>
- typeof item === "object" && item !== null
+ isPlainObject(item)
? {
- ...(item as Record),
+ ...item,
_key: crypto.randomUUID(),
}
: item,
diff --git a/app/form/fields/ArrayFormField.module.css b/app/form/fields/ArrayFormField.module.css
index 36ea747e1..2f477af8a 100644
--- a/app/form/fields/ArrayFormField.module.css
+++ b/app/form/fields/ArrayFormField.module.css
@@ -35,4 +35,5 @@
.removeButton {
height: var(--field-size);
+ align-self: flex-end;
}
diff --git a/app/utils/dates.ts b/app/utils/dates.ts
index 522cfd2b5..453d2dfbf 100644
--- a/app/utils/dates.ts
+++ b/app/utils/dates.ts
@@ -197,18 +197,6 @@ function prefixZero(number: number) {
return number < 10 ? `0${number}` : number;
}
-/**
- * Retrieves a new Date object that is offset by several hours.
- *
- * NOTE: it is important that we work with & return a copy of the date here,
- * otherwise we will just be mutating the original date passed into this function.
- */
-export function getDateWithHoursOffset(date: Date, hoursOffset: number) {
- const copiedDate = new Date(date.getTime());
- copiedDate.setHours(date.getHours() + hoursOffset);
- return copiedDate;
-}
-
export function getDateAtNextFullHour(date: Date) {
const copiedDate = new Date(date.getTime());
if (
diff --git a/app/utils/remix.server.ts b/app/utils/remix.server.ts
index 4ed7a0e65..ba42a0fa8 100644
--- a/app/utils/remix.server.ts
+++ b/app/utils/remix.server.ts
@@ -1,15 +1,12 @@
import type { FileUpload } from "@remix-run/form-data-parser";
import { parseFormData as parseMultipartFormData } from "@remix-run/form-data-parser";
import type { Namespace, TFunction } from "i18next";
-import { nanoid } from "nanoid";
import type { Ok, Result } from "neverthrow";
import type { Params, UIMatch } from "react-router";
import { data, redirect } from "react-router";
import type { z } from "zod";
import type { navItems } from "~/components/layout/nav-items";
import { ServerConfig } from "~/config.server";
-import { uploadStreamToS3 } from "~/features/img-upload/s3.server";
-import invariant from "./invariant";
import { logger } from "./logger";
export function notFoundIfFalsy(value: T | null | undefined): T {
@@ -387,58 +384,3 @@ export async function safeParseMultipartFormData(
throw err;
}
}
-
-export async function uploadImageIfSubmitted({
- request,
- fileNamePrefix,
-}: {
- request: Request;
- fileNamePrefix: string;
-}) {
- const preDecidedFilename = `${fileNamePrefix}-${nanoid()}-${Date.now()}`;
-
- const uploadHandler = async (fileUpload: FileUpload) => {
- if (fileUpload.fieldName === "img") {
- const [, ending] = fileUpload.name.split(".");
- invariant(ending);
- const newFilename = `${preDecidedFilename}.${ending}`;
-
- const uploadedFileLocation = await uploadStreamToS3(
- fileUpload.stream(),
- newFilename,
- );
- return uploadedFileLocation;
- }
- return null;
- };
-
- let formData: FormData;
-
- try {
- formData = await safeParseMultipartFormData(request, uploadHandler);
- const imgSrc = formData.get("img") as string | null;
- if (!imgSrc) {
- throw new TypeError("No image submitted");
- }
-
- const urlParts = imgSrc.split("/");
- const fileName = urlParts[urlParts.length - 1];
- invariant(fileName);
-
- return {
- avatarFileName: fileName,
- formData,
- };
- } catch (err) {
- // user did not submit image
- if (err instanceof TypeError) {
- return {
- avatarFileName: undefined,
- // @ts-expect-error: TODO: jank but temporary jank. Later lets refactor to a more general and robust way of sending images
- formData,
- };
- }
-
- throw err;
- }
-}
diff --git a/e2e/calendar.spec.ts b/e2e/calendar.spec.ts
index 157118197..80e7ac641 100644
--- a/e2e/calendar.spec.ts
+++ b/e2e/calendar.spec.ts
@@ -1,6 +1,14 @@
import type { Page } from "@playwright/test";
import { NZAP_TEST_ID } from "~/db/seed/constants";
-import { calendarPage } from "~/utils/urls";
+import { calendarNewBaseSchema } from "~/features/calendar/calendar-new-schemas";
+import {
+ CALENDAR_NEW_PAGE,
+ calendarPage,
+ TOURNAMENT_NEW_PAGE,
+ tournamentBracketsPage,
+ tournamentInfoPage,
+ tournamentRulesPage,
+} from "~/utils/urls";
import {
expect,
expectIsHydrated,
@@ -10,6 +18,56 @@ import {
seed,
test,
} from "./helpers/playwright";
+import { createFormHelpers } from "./helpers/playwright-form";
+
+// the `date` datetime inputs use the array item's label ("Date"), not the
+// array's own label, so they're driven directly rather than via the form helper
+async function fillFirstDate(page: Page, date: Date) {
+ const fill = (segment: string, value: string) =>
+ page
+ .getByRole("spinbutton", { name: new RegExp(`^${segment}, Date`) })
+ .first()
+ .fill(value);
+
+ const hours = date.getHours();
+ await fill("year", String(date.getFullYear()));
+ await fill("month", String(date.getMonth() + 1));
+ await fill("day", String(date.getDate()));
+ await fill("hour", String(hours % 12 || 12));
+ await fill("minute", date.getMinutes().toString().padStart(2, "0"));
+ await fill("AM/PM", hours >= 12 ? "PM" : "AM");
+}
+
+// the TO map pool grid exposes each map as a mode button inside a group labelled
+// by its stage name, so a small pool is built by clicking a few of them
+async function fillBasicMapPool(
+ page: Page,
+ maps: Array<{ stage: string; mode: string }>,
+) {
+ for (const { stage, mode } of maps) {
+ await page
+ .getByRole("group", { name: stage })
+ .getByRole("button", { name: mode })
+ .click();
+ }
+}
+
+// a freshly added bracket is already a follow-up (sources default on), so it only
+// needs its name, format and source placements filled in
+async function addFollowUpBracket(
+ page: Page,
+ {
+ name,
+ format,
+ placements,
+ }: { name: string; format: string; placements: string },
+) {
+ await page.getByTestId("add-bracket-button").click();
+
+ await page.getByLabel("Bracket's name").last().fill(name);
+ await page.getByLabel("Format").last().selectOption(format);
+ await page.getByTestId("placements-input").last().fill(placements);
+}
const SENDOU_INK_TOURNAMENTS_COUNT = 6;
@@ -140,4 +198,77 @@ test.describe("Calendar", () => {
await gb.context.close();
}
});
+
+ test("creates a new calendar event", async ({ page }) => {
+ await seed(page);
+ await impersonate(page);
+ await navigate({ page, url: CALENDAR_NEW_PAGE });
+
+ const form = createFormHelpers(page, calendarNewBaseSchema);
+
+ await form.fill("name", "Test Calendar Event");
+ await fillFirstDate(page, new Date(2027, 0, 15, 17, 0));
+ await form.fill("bracketUrl", "https://sendou.ink/test-bracket");
+
+ await form.submit();
+
+ await expect(page).toHaveURL(/\/calendar\/\d+/);
+ });
+
+ test("creates a new tournament with a map pool and follow-up bracket", async ({
+ page,
+ }) => {
+ await seed(page);
+ await impersonate(page);
+ await navigate({ page, url: TOURNAMENT_NEW_PAGE });
+
+ const form = createFormHelpers(page, calendarNewBaseSchema);
+
+ const startTime = new Date(2027, 0, 15, 17, 0);
+ const mapPool = [
+ { stage: "Scorch Gorge", mode: "Splat Zones" },
+ { stage: "Eeltail Alley", mode: "Tower Control" },
+ { stage: "Hagglefish Market", mode: "Rainmaker" },
+ ];
+
+ await form.fill("name", "Test Tournament");
+ await form.fill("description", "An automated test tournament");
+ await fillFirstDate(page, startTime);
+ await form.fill("discordInviteCode", "test-invite");
+
+ // flip a tournament setting away from its default
+ await form.check("requireInGameNames");
+
+ // "Picked by TO" allows an arbitrary map pool, unlike the validated tiebreaker modes
+ await form.select("toToolsMode", "TO");
+ await fillBasicMapPool(page, mapPool);
+
+ await addFollowUpBracket(page, {
+ name: "Underground bracket",
+ format: "Single-elimination",
+ placements: "-1",
+ });
+
+ await form.submit();
+
+ await expect(page).toHaveURL(/\/to\/\d+/);
+ const tournamentId = Number(page.url().match(/\/to\/(\d+)/)?.[1]);
+
+ // start time round-trips (match the machine-readable ISO so it's timezone-agnostic)
+ await navigate({ page, url: tournamentInfoPage(tournamentId) });
+ await expect(
+ page.locator(`time[datetime="${startTime.toISOString()}"]`).first(),
+ ).toBeVisible();
+
+ // the follow-up bracket shows up (the tab label drops the "bracket" suffix)
+ await navigate({ page, url: tournamentBracketsPage({ tournamentId }) });
+ await expect(page.getByRole("tab", { name: "Underground" })).toBeVisible();
+
+ // the TO map pool round-trips onto the rules page
+ await navigate({ page, url: tournamentRulesPage(tournamentId) });
+ for (const { stage, mode } of mapPool) {
+ await expect(page.getByText(stage, { exact: true })).toBeVisible();
+ await expect(page.getByAltText(mode).first()).toBeVisible();
+ }
+ });
});
diff --git a/e2e/helpers/playwright-form.ts b/e2e/helpers/playwright-form.ts
index 25d5ae8d1..ad49f0db0 100644
--- a/e2e/helpers/playwright-form.ts
+++ b/e2e/helpers/playwright-form.ts
@@ -92,6 +92,14 @@ export function createFormHelpers(
return resolveTranslation(metadata.label);
};
+ // match the whole label (allowing the trailing space and optional required " *" the
+ // Label component always renders) so a short label like "Name" doesn't also pick up
+ // "Bracket's name" or "Require in-game names"
+ const byLabel = (label: string) => {
+ const escaped = label.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+ return page.getByLabel(new RegExp(`^${escaped} *\\*?$`, "i"));
+ };
+
const getItemLabel = (name: string, itemValue: string): string => {
const metadata = getFieldMetadata(name);
if (!metadata || !("items" in metadata) || !Array.isArray(metadata.items)) {
@@ -117,12 +125,12 @@ export function createFormHelpers(
async fill(name, value) {
const label = getLabel(String(name));
- await page.getByLabel(label).fill(value);
+ await byLabel(label).fill(value);
},
async check(name) {
const label = getLabel(String(name));
- const locator = page.getByLabel(label);
+ const locator = byLabel(label);
const isChecked = await locator.isChecked();
if (!isChecked) {
await locator.click({ force: true });
@@ -131,7 +139,7 @@ export function createFormHelpers(
async uncheck(name) {
const label = getLabel(String(name));
- const locator = page.getByLabel(label);
+ const locator = byLabel(label);
const isChecked = await locator.isChecked();
if (isChecked) {
await locator.click({ force: true });
@@ -167,7 +175,7 @@ export function createFormHelpers(
async select(name, optionValue) {
const label = getLabel(String(name));
- const locator = page.getByLabel(label);
+ const locator = byLabel(label);
const tagName = await locator.evaluate((el) => el.tagName.toLowerCase());
const metadata = getFieldMetadata(String(name));
diff --git a/e2e/org.spec.ts b/e2e/org.spec.ts
index 0cf13780b..81ab0462a 100644
--- a/e2e/org.spec.ts
+++ b/e2e/org.spec.ts
@@ -89,9 +89,7 @@ test.describe("Tournament Organization", () => {
await page.getByTestId("admin-tab").click();
await page.getByTestId("edit-event-info-button").click();
- await expect(page.getByTestId("calendar-event-name-input")).toHaveValue(
- "PICNIC #2",
- );
+ await expect(page.getByLabel(/^Name *\*?$/)).toHaveValue("PICNIC #2");
});
test("banned player cannot join a tournament of that organization", async ({
diff --git a/locales/da/forms.json b/locales/da/forms.json
index 640b862c7..194137ba0 100644
--- a/locales/da/forms.json
+++ b/locales/da/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/de/forms.json b/locales/de/forms.json
index ec36e3319..1b8c8c1c4 100644
--- a/locales/de/forms.json
+++ b/locales/de/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/en/forms.json b/locales/en/forms.json
index 315dd0378..151516aee 100644
--- a/locales/en/forms.json
+++ b/locales/en/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "Reason for cancellation",
"bottomTexts.scrimCancelReasonHelp": "Explain why you are cancelling the scrim. This will be visible to the other team.",
"bottomTexts.bioMarkdown": "Supports Markdown",
+ "bottomTexts.tournamentStartTime": "Start times for additional brackets are set in the tournament format section below",
"labels.division": "Division",
"options.division.both": "Both divisions",
"options.division.tentatek": "Tentatek only",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "Checked in team can't go below the minimum roster size",
"regImportTeam": "Import team",
"labels.regImportSourceTournament": "Tournament",
- "errors.regImportTournamentRequired": "Select a tournament"
+ "errors.regImportTournamentRequired": "Select a tournament",
+ "labels.organization": "Organization",
+ "labels.rules": "Rules",
+ "labels.dates": "Dates",
+ "labels.date": "Date",
+ "labels.bracketUrl": "Bracket URL",
+ "labels.discordInvite": "Discord server invite URL",
+ "labels.tags": "Tags",
+ "labels.badges": "Badge prizes",
+ "labels.regClosesAt": "Registration closes at",
+ "labels.playersCount": "Players count",
+ "labels.maxTeamSize": "Max team size",
+ "labels.ranked": "Ranked",
+ "labels.splattercolorScreenToggle": "Splattercolor Screen toggle",
+ "labels.lfgTab": "LFG tab",
+ "labels.autonomousSubs": "Autonomous subs",
+ "labels.requireInGameNames": "Require in-game names",
+ "labels.invitational": "Invitational",
+ "labels.test": "Test",
+ "labels.draft": "Draft",
+ "labels.requireSendouQ": "Require SendouQ participation",
+ "labels.mapPickingStyle": "Map picking style",
+ "bottomTexts.regClosesAt": "All times relative to the reported tournament start time e.g. \"30 minutes\" means \"30 minutes before event start time\". After registration closes only TO's can make changes to team rosters.",
+ "bottomTexts.maxTeamSize": "Maximum number of players that can be registered per team. Doesn't apply to tournament organizers. Default is 6.",
+ "bottomTexts.avatarValidation": "Note that for non-patrons there is a validation process before avatar is shown.",
+ "bottomTexts.ranked": "Ranked tournaments affect SP. Tournaments that don't have open registration (skill capped) or \"gimmick tournaments\" must always be hosted as unranked. Any tournament hosted during off-season is always unranked no matter what is chosen here.",
+ "bottomTexts.splattercolorScreen": "Ban Splattercolor Screen in matches depending on the teams' preferences.",
+ "bottomTexts.lfgTab": "Allow participants to look for more members via the LFG feature and sign up as subs (after registration is closed).",
+ "bottomTexts.autonomousSubs": "If enabled teams can add subs on their own while the tournament is in progress. When disabled needs to be done by the TO's.",
+ "bottomTexts.requireInGameNames": "If enabled players can't join the tournament without an in-game name (e.g. Sendou#1234). Players can't change the IGNs after the registration closes.",
+ "bottomTexts.invitational": "No open registration or subs list. All teams must be added by the organizer.",
+ "bottomTexts.test": "Test tournaments don't appear on the calendar, don't send notifications to players, and won't show up in players' profiles or results",
+ "bottomTexts.draftInfo": "Draft tournaments are hidden and only visible to organizers. The tournament must be opened (by disabling this toggle) before any bracket can be started.",
+ "bottomTexts.requireSendouQ": "Players must have played enough SendouQ matches this season to register",
+ "options.toToolsMode.ALL": "Prepicked by teams - All modes",
+ "options.toToolsMode.SZ": "Prepicked by teams - SZ only",
+ "options.toToolsMode.TC": "Prepicked by teams - TC only",
+ "options.toToolsMode.RM": "Prepicked by teams - RM only",
+ "options.toToolsMode.CB": "Prepicked by teams - CB only",
+ "options.toToolsMode.TO": "Picked by TO",
+ "options.regClosesAt.0": "At the start time",
+ "options.regClosesAt.5min": "5 minutes",
+ "options.regClosesAt.10min": "10 minutes",
+ "options.regClosesAt.15min": "15 minutes",
+ "options.regClosesAt.30min": "30 minutes",
+ "options.regClosesAt.1h": "1 hour",
+ "options.regClosesAt.1h30min": "1 hour 30 minutes",
+ "options.regClosesAt.2h": "2 hours",
+ "options.regClosesAt.3h": "3 hours",
+ "options.regClosesAt.6h": "6 hours",
+ "options.regClosesAt.12h": "12 hours",
+ "options.regClosesAt.18h": "18 hours",
+ "options.regClosesAt.24h": "24 hours",
+ "options.regClosesAt.48h": "48 hours",
+ "options.regClosesAt.72h": "72 hours",
+ "errors.allModePool": "Map pool must contain a map for each ranked mode if using \"Prepicked by teams - All modes\"",
+ "errors.bracketUrlRequired": "Bracket URL is required",
+ "errors.bracketProgressionRequired": "Bracket progression must be set for tournaments",
+ "errors.maxMembersRange": "Max team size must be between 4 and 10"
}
diff --git a/locales/es-ES/forms.json b/locales/es-ES/forms.json
index 34f93f800..ff1ba5d0d 100644
--- a/locales/es-ES/forms.json
+++ b/locales/es-ES/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "Motivo de la cancelación",
"bottomTexts.scrimCancelReasonHelp": "Explica por qué cancelas el scrim. Esto será visible para el otro equipo.",
"bottomTexts.bioMarkdown": "Compatible con Markdown",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "División",
"options.division.both": "Ambas divisiones",
"options.division.tentatek": "Solo Tentatek",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/es-US/forms.json b/locales/es-US/forms.json
index 5c718f7e6..181832366 100644
--- a/locales/es-US/forms.json
+++ b/locales/es-US/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/fr-CA/forms.json b/locales/fr-CA/forms.json
index 98b6080f3..facafc2ef 100644
--- a/locales/fr-CA/forms.json
+++ b/locales/fr-CA/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/fr-EU/forms.json b/locales/fr-EU/forms.json
index c27d8ebb0..785f15b61 100644
--- a/locales/fr-EU/forms.json
+++ b/locales/fr-EU/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/he/forms.json b/locales/he/forms.json
index 43cafd36e..256be064a 100644
--- a/locales/he/forms.json
+++ b/locales/he/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/it/forms.json b/locales/it/forms.json
index 2d1879109..b5cd8f0cb 100644
--- a/locales/it/forms.json
+++ b/locales/it/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/ja/forms.json b/locales/ja/forms.json
index 6af7634ea..d85f459ac 100644
--- a/locales/ja/forms.json
+++ b/locales/ja/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/ko/forms.json b/locales/ko/forms.json
index ce6d6c06b..17c84137e 100644
--- a/locales/ko/forms.json
+++ b/locales/ko/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/nl/forms.json b/locales/nl/forms.json
index 12e7bf49a..74a437675 100644
--- a/locales/nl/forms.json
+++ b/locales/nl/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/pl/forms.json b/locales/pl/forms.json
index 17721ebaa..f4233b324 100644
--- a/locales/pl/forms.json
+++ b/locales/pl/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/pt-BR/forms.json b/locales/pt-BR/forms.json
index 2135d211a..5b44072c9 100644
--- a/locales/pt-BR/forms.json
+++ b/locales/pt-BR/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/ru/forms.json b/locales/ru/forms.json
index 22766854e..71c532518 100644
--- a/locales/ru/forms.json
+++ b/locales/ru/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "",
"bottomTexts.scrimCancelReasonHelp": "",
"bottomTexts.bioMarkdown": "",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "",
"options.division.both": "",
"options.division.tentatek": "",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "",
"regImportTeam": "",
"labels.regImportSourceTournament": "",
- "errors.regImportTournamentRequired": ""
+ "errors.regImportTournamentRequired": "",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}
diff --git a/locales/zh/forms.json b/locales/zh/forms.json
index 341663624..1f72de2c7 100644
--- a/locales/zh/forms.json
+++ b/locales/zh/forms.json
@@ -214,6 +214,7 @@
"labels.scrimCancelReason": "取消原因",
"bottomTexts.scrimCancelReasonHelp": "请说明取消这场对抗战的原因。该内容将对另一支队伍公开。",
"bottomTexts.bioMarkdown": "支持 Markdown 语法",
+ "bottomTexts.tournamentStartTime": "",
"labels.division": "组别",
"options.division.both": "均可",
"options.division.tentatek": "仅限艾洛眼",
@@ -299,5 +300,63 @@
"errors.regCheckedInBelowMinRoster": "已签到的队伍,其名单人数不能低于最低限制",
"regImportTeam": "导入队伍",
"labels.regImportSourceTournament": "赛事",
- "errors.regImportTournamentRequired": "请选择一个赛事"
+ "errors.regImportTournamentRequired": "请选择一个赛事",
+ "labels.organization": "",
+ "labels.rules": "",
+ "labels.dates": "",
+ "labels.date": "",
+ "labels.bracketUrl": "",
+ "labels.discordInvite": "",
+ "labels.tags": "",
+ "labels.badges": "",
+ "labels.regClosesAt": "",
+ "labels.playersCount": "",
+ "labels.maxTeamSize": "",
+ "labels.ranked": "",
+ "labels.splattercolorScreenToggle": "",
+ "labels.lfgTab": "",
+ "labels.autonomousSubs": "",
+ "labels.requireInGameNames": "",
+ "labels.invitational": "",
+ "labels.test": "",
+ "labels.draft": "",
+ "labels.requireSendouQ": "",
+ "labels.mapPickingStyle": "",
+ "bottomTexts.regClosesAt": "",
+ "bottomTexts.maxTeamSize": "",
+ "bottomTexts.avatarValidation": "",
+ "bottomTexts.ranked": "",
+ "bottomTexts.splattercolorScreen": "",
+ "bottomTexts.lfgTab": "",
+ "bottomTexts.autonomousSubs": "",
+ "bottomTexts.requireInGameNames": "",
+ "bottomTexts.invitational": "",
+ "bottomTexts.test": "",
+ "bottomTexts.draftInfo": "",
+ "bottomTexts.requireSendouQ": "",
+ "options.toToolsMode.ALL": "",
+ "options.toToolsMode.SZ": "",
+ "options.toToolsMode.TC": "",
+ "options.toToolsMode.RM": "",
+ "options.toToolsMode.CB": "",
+ "options.toToolsMode.TO": "",
+ "options.regClosesAt.0": "",
+ "options.regClosesAt.5min": "",
+ "options.regClosesAt.10min": "",
+ "options.regClosesAt.15min": "",
+ "options.regClosesAt.30min": "",
+ "options.regClosesAt.1h": "",
+ "options.regClosesAt.1h30min": "",
+ "options.regClosesAt.2h": "",
+ "options.regClosesAt.3h": "",
+ "options.regClosesAt.6h": "",
+ "options.regClosesAt.12h": "",
+ "options.regClosesAt.18h": "",
+ "options.regClosesAt.24h": "",
+ "options.regClosesAt.48h": "",
+ "options.regClosesAt.72h": "",
+ "errors.allModePool": "",
+ "errors.bracketUrlRequired": "",
+ "errors.bracketProgressionRequired": "",
+ "errors.maxMembersRange": ""
}