CloudTech/app/[locale]/layout.tsx
2025-09-16 18:00:27 +08:00

65 lines
2.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'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>
);
}