casualroom/apps/fenghuo/web/app/[locale]/layout.tsx

38 lines
845 B
TypeScript
Executable File

import { notFound } from 'next/navigation';
import { I18N_CONFIG } from '@nice/i18n';
interface Props {
children: React.ReactNode;
params: Promise<{ locale: string }>;
}
// 使用统一的 i18n 配置
const { supportedLocales } = I18N_CONFIG;
// 生成静态参数
export async function generateStaticParams() {
return supportedLocales.map((locale) => ({ locale }));
}
export default async function LocaleLayout({ children, params }: Props) {
// 等待 params 解析
const { locale } = await params;
// 验证语言参数
if (!(supportedLocales as readonly string[]).includes(locale)) {
notFound();
}
// 在客户端设置 HTML lang 属性
return (
<>
<script
dangerouslySetInnerHTML={{
__html: `document.documentElement.lang = '${locale}';`
}}
/>
<div data-locale={locale}>{children}</div>
</>
);
}