Developer guide
Recipe: Next.js site
Multilingual Next.js site with sitemap and hreflang.
tsx
// lib/cms.ts
const BASE = "https://cms.af/api/public/v1/example.com";
export async function cms<T>(lang: string, path: string): Promise<T> {
const r = await fetch(`${BASE}/${lang}/${path}`, { next: { revalidate: 60 } });
if (!r.ok) throw new Error(`CMS ${r.status}`);
return r.json();
}tsx
// app/[lang]/layout.tsx
export function generateStaticParams() { return [{ lang: "en" }, { lang: "fa" }, { lang: "ps" }]; }
export default function Layout({ children, params }: any) {
const rtl = params.lang !== "en";
return <html lang={params.lang} dir={rtl ? "rtl" : "ltr"}><body>{children}</body></html>;
}ts
// app/sitemap.ts
export default async function sitemap() {
const langs = ["en", "fa", "ps"];
const { data } = await cms<any>("en", "posts?per_page=50");
return data.flatMap((p: any) => langs.map((l) => ({ url: `https://example.com/${l}/blog/${p.slug}` })));
}