Files
pasargad/src/app/[locale]/layout.tsx
T

71 lines
2.0 KiB
TypeScript

import Footer from '@/components/layout/footer/Footer';
import '@/app/globals.css';
import 'leaflet/dist/leaflet.css';
import { notFound } from 'next/navigation';
import { NextIntlClientProvider } from 'next-intl';
import type { IPageParams } from '@/models/layout.d';
import Head from 'next/head';
import { getTranslations } from 'next-intl/server';
import { host } from '@/config';
export async function generateMetadata({ params }: { params: IPageParams }) {
const { locale } = await params;
const t = await getTranslations({ locale });
const url = `${host}/${locale}`;
return {
title: {
default: t('meta.defaultTitle'),
template: t('meta.titleTemplate'),
},
description: t('meta.defaultDescription'),
openGraph: {
title: t('meta.defaultTitle'),
description: t('meta.defaultDescription'),
siteName: t('meta.siteName'),
type: 'website',
locale,
url,
},
// authors: [{ name: t('meta.author') }],
};
}
export default async function RootLayout({
children,
params,
}: Readonly<{
children: React.ReactNode;
params: IPageParams;
}>) {
const paramsData = await params;
const locale = paramsData.locale;
const fontClass = locale === 'fa' ? 'font-fa' : 'font-en';
let messages;
try {
messages = (await import(`../../../messages/${locale}.json`)).default;
} catch (error) {
notFound();
}
return (
<html lang={locale} dir={locale === 'fa' ? 'rtl' : 'ltr'}>
<Head>
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta property="og:site_name" content="کارخانه آجرپزی پاسارگاد" />
<meta name="author" content="پاسارگاد" />
<link rel="icon" href="/favicon.ico" />
</Head>
<body className={`min-h-svh w-full overflow-x-hidden ${fontClass}`}>
<NextIntlClientProvider locale={locale} messages={messages}>
{children}
<Footer />
</NextIntlClientProvider>
</body>
</html>
);
}