CloudTech/app/[locale]/layout.tsx

65 lines
2.4 KiB
TypeScript
Raw Normal View History

2025-09-16 18:00:27 +08:00
'use client';
import type { Metadata } from 'next';
import '../globals.css';
import { useEffect, useState } from 'react';
interface LayoutProps {
children: React.ReactNode;
params: { locale: string };
}
export default function LocaleLayout({ children, params }: LayoutProps) {
// 直接使用 params.locale避免水合错误
const locale = params.locale || 'zh-CN';
useEffect(() => {
// 同步URL中的语言参数和localStorage
if (params.locale) {
localStorage.setItem('language', params.locale);
document.documentElement.lang = params.locale;
}
// 监听语言变化
const handleLanguageChange = () => {
const savedLang = localStorage.getItem('language') || params.locale || 'zh-CN';
if (savedLang !== locale) {
// 如果localStorage中的语言与URL不匹配重定向到正确的URL
window.location.href = `/${savedLang}${window.location.pathname.substring(window.location.pathname.indexOf('/', 1))}`;
}
};
window.addEventListener('storage', handleLanguageChange);
return () => {
window.removeEventListener('storage', handleLanguageChange);
};
}, [params.locale, locale]);
return (
<html lang={locale} data-oid="igtjek8">
<head data-oid="zmps16q">
<meta
name="viewport"
content="width=device-width, initial-scale=1"
data-oid="j0q4_yq"
/>
<meta name="robots" content="index, follow" data-oid="t1vprk8" />
<meta name="author" content="CloudTech" data-oid="h-qxvx6" />
<title data-oid="niq1f62">CloudTech - Professional Cloud Computing Platform</title>
<meta
name="description"
content="CloudTech provides professional cloud computing services for enterprise digital transformation"
data-oid="p-1zq94"
/>
<meta
name="keywords"
content="cloud computing, cloud services, digital transformation"
data-oid="xi3azhs"
/>
</head>
<body className="" data-oid="s4f3g.0">
{children}
</body>
</html>
);
}