diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index e6c410b..b9fbf56 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -13,7 +13,7 @@ type props = { export default async function Home({ params }: props) { const { locale } = await params; - const projects = getAllProjects().filter((item) => item.ready); + const projects = getAllProjects(locale).filter((item) => item.ready); return (
@@ -25,4 +25,4 @@ export default async function Home({ params }: props) {
); -} +} \ No newline at end of file diff --git a/app/[locale]/works/[slug]/page.tsx b/app/[locale]/works/[slug]/page.tsx index 5890829..acb361b 100644 --- a/app/[locale]/works/[slug]/page.tsx +++ b/app/[locale]/works/[slug]/page.tsx @@ -14,22 +14,31 @@ type props = { }>; }; +const LOCALES = ["fr", "en"]; + export function generateStaticParams() { - return getProjectSlugs().flatMap((slug: any) => [ - { locale: "fr", slug }, - { locale: "en", slug }, - ]); + const paths: { locale: string; slug: string }[] = []; + + LOCALES.forEach((locale) => { + const slugs = getProjectSlugs(locale); + slugs.forEach((slug) => { + paths.push({ locale, slug }); + }); + }); + + return paths; } export default async function ProjectPage({ params }: props) { const { locale, slug } = await params; - const project = getProjectBySlug(slug); + + const project = getProjectBySlug(slug, locale); if (!project) { notFound(); } - const otherProjects = getAllProjects() + const otherProjects = getAllProjects(locale) .filter((item: any) => item.slug !== slug && item.ready) .slice(0, 2) .map((item: any) => ({ @@ -48,7 +57,6 @@ export default async function ProjectPage({ params }: props) { dateLabel={project.dateLabel} cover={project.cover} /> -
); -} +} \ No newline at end of file diff --git a/lib/projects/get-projects.ts b/lib/projects/get-projects.ts index c06ea3e..ce94ec4 100644 --- a/lib/projects/get-projects.ts +++ b/lib/projects/get-projects.ts @@ -3,22 +3,24 @@ import path from "node:path"; import matter from "gray-matter"; import { Project, ProjectFrontmatter } from "./types"; -const projectsDirectory = path.join(process.cwd(), "content/projects"); +const CONTENT_DIR = path.join(process.cwd(), "content/projects"); -function fileNameToSlug(fileName: string) { - return fileName.replace(/\.mdx$/, ""); -} +export function getProjectSlugs(locale: string) { + const localeDirectory = path.join(CONTENT_DIR, locale); + + if (!fs.existsSync(localeDirectory)) { + return []; + } -export function getProjectSlugs() { return fs - .readdirSync(projectsDirectory) + .readdirSync(localeDirectory) .filter((file) => file.endsWith(".mdx")) - .map(fileNameToSlug); + .map((fileName) => fileName.replace(/\.mdx$/, "")); } -export function getProjectBySlug(slug: string): Project | null { +export function getProjectBySlug(slug: string, locale: string): Project | null { const realSlug = slug.replace(/\.mdx$/, ""); - const fullPath = path.join(projectsDirectory, `${realSlug}.mdx`); + const fullPath = path.join(CONTENT_DIR, locale, `${realSlug}.mdx`); if (!fs.existsSync(fullPath)) { return null; @@ -34,9 +36,9 @@ export function getProjectBySlug(slug: string): Project | null { }; } -export function getAllProjects(): Project[] { - return getProjectSlugs() - .map((slug) => getProjectBySlug(slug)) +export function getAllProjects(locale: string): Project[] { + return getProjectSlugs(locale) + .map((slug) => getProjectBySlug(slug, locale)) .filter((project): project is Project => project !== null) .sort((a, b) => a.priority - b.priority); -} +} \ No newline at end of file