-
Projects
+
{t("project.project")}
}
@@ -86,7 +88,7 @@ export default function ProjectsPage() {
color="primary"
onClick={openDialogForCreate}
>
- New Project
+ {t("newProject")}
diff --git a/frontend/app/projects/ProjectsTable.tsx b/frontend/src/app/[locale]/projects/ProjectsTable.tsx
similarity index 100%
rename from frontend/app/projects/ProjectsTable.tsx
rename to frontend/src/app/[locale]/projects/ProjectsTable.tsx
diff --git a/frontend/app/projects/[projectId]/folders/FolderDialog.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/FolderDialog.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/FolderDialog.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/FolderDialog.tsx
diff --git a/frontend/app/projects/[projectId]/folders/FolderEditMenu.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/FolderEditMenu.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/FolderEditMenu.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/FolderEditMenu.tsx
diff --git a/frontend/app/projects/[projectId]/folders/FoldersPane.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/FoldersPane.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/FoldersPane.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/FoldersPane.tsx
diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/CasesPane.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/CasesPane.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/[folderId]/cases/CasesPane.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/CasesPane.tsx
diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/TestCaseTable.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/TestCaseTable.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/[folderId]/cases/TestCaseTable.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/TestCaseTable.tsx
diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseAttachmentsEditor.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseAttachmentsEditor.tsx
similarity index 97%
rename from frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseAttachmentsEditor.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseAttachmentsEditor.tsx
index ae0b53d..ad7ccec 100644
--- a/frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseAttachmentsEditor.tsx
+++ b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseAttachmentsEditor.tsx
@@ -1,5 +1,5 @@
import { Image, Button, Tooltip, Card, CardBody } from "@nextui-org/react";
-import { AttachmentType } from "../../../../../../../types/case";
+import { AttachmentType } from "../../../../../../../../types/case";
import { Trash, ArrowDownToLine } from "lucide-react";
type Props = {
diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseEditor.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseEditor.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseEditor.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseEditor.tsx
diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseStepsEditor.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseStepsEditor.tsx
similarity index 97%
rename from frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseStepsEditor.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseStepsEditor.tsx
index a403620..ca70cac 100644
--- a/frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseStepsEditor.tsx
+++ b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseStepsEditor.tsx
@@ -1,5 +1,5 @@
import { Textarea, Button, Tooltip } from "@nextui-org/react";
-import { StepType } from "../../../../../../../types/case";
+import { StepType } from "../../../../../../../../types/case";
import { Plus, Trash } from "lucide-react";
type Props = {
diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/attachmentControl.ts b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/attachmentControl.ts
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/attachmentControl.ts
rename to frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/attachmentControl.ts
diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/page.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/page.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/page.tsx
diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/stepControl.ts b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/stepControl.ts
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/[folderId]/cases/[caseId]/stepControl.ts
rename to frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/stepControl.ts
diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/caseControl.ts b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/caseControl.ts
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/[folderId]/cases/caseControl.ts
rename to frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/caseControl.ts
diff --git a/frontend/app/projects/[projectId]/folders/[folderId]/cases/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/page.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/[folderId]/cases/page.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/page.tsx
diff --git a/frontend/app/projects/[projectId]/folders/foldersControl.ts b/frontend/src/app/[locale]/projects/[projectId]/folders/foldersControl.ts
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/foldersControl.ts
rename to frontend/src/app/[locale]/projects/[projectId]/folders/foldersControl.ts
diff --git a/frontend/app/projects/[projectId]/folders/layout.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/layout.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/layout.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/layout.tsx
diff --git a/frontend/app/projects/[projectId]/folders/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/page.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/folders/page.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/folders/page.tsx
diff --git a/frontend/app/projects/[projectId]/home/home.tsx b/frontend/src/app/[locale]/projects/[projectId]/home/home.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/home/home.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/home/home.tsx
diff --git a/frontend/app/projects/[projectId]/home/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/home/page.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/home/page.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/home/page.tsx
diff --git a/frontend/app/projects/[projectId]/layout.tsx b/frontend/src/app/[locale]/projects/[projectId]/layout.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/layout.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/layout.tsx
diff --git a/frontend/app/projects/[projectId]/runs/RunsPage.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/RunsPage.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/runs/RunsPage.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/runs/RunsPage.tsx
diff --git a/frontend/app/projects/[projectId]/runs/RunsTable.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/RunsTable.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/runs/RunsTable.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/runs/RunsTable.tsx
diff --git a/frontend/app/projects/[projectId]/runs/[runId]/RunEditor.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/runs/[runId]/RunEditor.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx
diff --git a/frontend/app/projects/[projectId]/runs/[runId]/RunPregressDonutChart.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunPregressDonutChart.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/runs/[runId]/RunPregressDonutChart.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunPregressDonutChart.tsx
diff --git a/frontend/app/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx
diff --git a/frontend/app/projects/[projectId]/runs/[runId]/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/page.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/runs/[runId]/page.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/page.tsx
diff --git a/frontend/app/projects/[projectId]/runs/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/page.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/runs/page.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/runs/page.tsx
diff --git a/frontend/app/projects/[projectId]/runs/runsControl.ts b/frontend/src/app/[locale]/projects/[projectId]/runs/runsControl.ts
similarity index 100%
rename from frontend/app/projects/[projectId]/runs/runsControl.ts
rename to frontend/src/app/[locale]/projects/[projectId]/runs/runsControl.ts
diff --git a/frontend/app/projects/[projectId]/sidebar.tsx b/frontend/src/app/[locale]/projects/[projectId]/sidebar.tsx
similarity index 100%
rename from frontend/app/projects/[projectId]/sidebar.tsx
rename to frontend/src/app/[locale]/projects/[projectId]/sidebar.tsx
diff --git a/frontend/app/projects/layout.tsx b/frontend/src/app/[locale]/projects/layout.tsx
similarity index 100%
rename from frontend/app/projects/layout.tsx
rename to frontend/src/app/[locale]/projects/layout.tsx
diff --git a/frontend/app/projects/page.tsx b/frontend/src/app/[locale]/projects/page.tsx
similarity index 100%
rename from frontend/app/projects/page.tsx
rename to frontend/src/app/[locale]/projects/page.tsx
diff --git a/frontend/app/projects/projectsControl.ts b/frontend/src/app/[locale]/projects/projectsControl.ts
similarity index 100%
rename from frontend/app/projects/projectsControl.ts
rename to frontend/src/app/[locale]/projects/projectsControl.ts
diff --git a/frontend/app/providers.tsx b/frontend/src/app/[locale]/providers.tsx
similarity index 100%
rename from frontend/app/providers.tsx
rename to frontend/src/app/[locale]/providers.tsx
diff --git a/frontend/src/i18n.ts b/frontend/src/i18n.ts
new file mode 100644
index 0000000..e5f3170
--- /dev/null
+++ b/frontend/src/i18n.ts
@@ -0,0 +1,12 @@
+import { notFound } from "next/navigation";
+import { getRequestConfig } from "next-intl/server";
+
+const locales = ["en", "ja"];
+
+export default getRequestConfig(async ({ locale }) => {
+ if (!locales.includes(locale as any)) notFound();
+
+ return {
+ messages: (await import(`../messages/${locale}.json`)).default,
+ };
+});
diff --git a/frontend/src/middleware.ts b/frontend/src/middleware.ts
new file mode 100644
index 0000000..b02f1b8
--- /dev/null
+++ b/frontend/src/middleware.ts
@@ -0,0 +1,12 @@
+import createMiddleware from "next-intl/middleware";
+import { locales, localePrefix } from "./navigation";
+
+export default createMiddleware({
+ defaultLocale: "en",
+ localePrefix,
+ locales,
+});
+
+export const config = {
+ matcher: ["/", "/(ja|en)/:path*"],
+};
diff --git a/frontend/src/navigation.ts b/frontend/src/navigation.ts
new file mode 100644
index 0000000..5c5256b
--- /dev/null
+++ b/frontend/src/navigation.ts
@@ -0,0 +1,7 @@
+import { createSharedPathnamesNavigation } from "next-intl/navigation";
+
+export const locales = ["en", "ja"] as const;
+export const localePrefix = "always";
+
+export const { Link, redirect, usePathname, useRouter } =
+ createSharedPathnamesNavigation({ locales, localePrefix });