47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import { getMetadataForLocale, resolveLocale, rtlLocales } from "@/config/i18n";
|
|
import type { Metadata } from "next";
|
|
import { ReactNode } from "react";
|
|
import { buildCanonical, buildLocaleAlternates, buildOpenGraph, buildTwitterCard } from "@/seo/seoUtils";
|
|
|
|
export async function generateMetadata({ params }: { params: { locale: string } }): Promise<Metadata> {
|
|
const locale = resolveLocale(params.locale);
|
|
const meta = getMetadataForLocale(locale);
|
|
const path = "/";
|
|
|
|
return {
|
|
title: meta.title,
|
|
description: meta.description,
|
|
alternates: {
|
|
canonical: buildCanonical(locale, path),
|
|
languages: buildLocaleAlternates(path)
|
|
},
|
|
openGraph: buildOpenGraph({
|
|
locale,
|
|
title: meta.title,
|
|
description: meta.description,
|
|
path
|
|
}),
|
|
twitter: buildTwitterCard({
|
|
title: meta.title,
|
|
description: meta.description
|
|
})
|
|
};
|
|
}
|
|
|
|
export default function LocaleLayout({
|
|
children,
|
|
params
|
|
}: {
|
|
children: ReactNode;
|
|
params: { locale: string };
|
|
}) {
|
|
const locale = resolveLocale(params.locale);
|
|
const dir = rtlLocales.includes(locale) ? "rtl" : "ltr";
|
|
|
|
return (
|
|
<div lang={locale} dir={dir} style={{ display: "contents" }}>
|
|
{children}
|
|
</div>
|
|
);
|
|
}
|