import Link from 'next/link'; import type { Metadata } from 'next'; import { notFound } from 'next/navigation'; import { ArrowLeft } from 'lucide-react'; import { InlineTOC } from 'fumadocs-ui/components/inline-toc'; import { createRelativeLink } from 'fumadocs-ui/mdx'; import { getMDXComponents } from '@/components/mdx'; import { blogSource, formatBlogDate } from '@/lib/blog'; import { i18n, isLanguage, type Language } from '@/lib/i18n'; const copy: Record = { zh: { back: '返回开发者博客', team: 'Cursor Byok 开发团队' }, en: { back: 'Back to Developer Blog', team: 'The Cursor Byok team' }, }; export default async function BlogPostPage(props: PageProps<'/[lang]/blog/[slug]'>) { const { lang, slug } = await props.params; if (!isLanguage(lang)) notFound(); const page = blogSource.getPage([slug], lang); if (!page) notFound(); const t = copy[lang]; const prefix = `/${lang}`; const MDX = page.data.body; return (
{t.back}

{page.data.title}

{page.data.description}

{t.team}

); } export function generateStaticParams() { return i18n.languages.flatMap((lang) => blogSource.getPages(lang).map((page) => ({ lang, slug: page.slugs[0] })), ); } export async function generateMetadata( props: PageProps<'/[lang]/blog/[slug]'>, ): Promise { const { lang, slug } = await props.params; if (!isLanguage(lang)) notFound(); const page = blogSource.getPage([slug], lang); if (!page) notFound(); return { title: page.data.title, description: page.data.description, }; }