import type { Metadata } from 'next'; import { getSEOConfig } from '../../../lib/seo-config'; import NewsPageWrapper from '../../components/news/NewsPageWrapper'; // 静态生成时获取文章数据 async function getStaticNewsData(locale: string) { // 检查是否为静态导出模式 const isStaticMode = process.env.BUILD_MODE === 'static'; if (isStaticMode) { try { const { getStaticArticles, getStaticCategories } = await import('../../../lib/static-data'); const mappedLocale = locale === 'zh' ? 'zh-CN' : locale as 'zh-CN' | 'zh-TW' | 'en'; const articles = getStaticArticles(mappedLocale); const categories = getStaticCategories(mappedLocale); console.log(`[Static Build] Loaded ${articles.length} articles for locale ${mappedLocale}`); return { articles, categories }; } catch (error) { console.error('Error loading static data:', error); return { articles: [], categories: [] }; } } // 在开发模式或运行时模式,返回null让客户端组件自己获取数据 return null; } // Generate static params for supported locales export async function generateStaticParams() { return [ { locale: 'zh' }, { locale: 'zh-CN' }, { locale: 'zh-TW' }, { locale: 'en' }, ]; } // Generate metadata for the news page export async function generateMetadata({ params: { locale }, }: { params: { locale: string }; }): Promise { const language = locale === 'zh' ? 'zh-CN' : locale === 'zh-CN' ? 'zh-CN' : locale === 'zh-TW' ? 'zh-TW' : 'en'; const seo = getSEOConfig('news', language); return { title: seo.title, description: seo.description, keywords: seo.keywords, openGraph: { title: seo.openGraph?.title, description: seo.openGraph?.description, type: seo.openGraph?.type as any, images: seo.openGraph?.images, }, twitter: { card: seo.twitter?.card as any, title: seo.twitter?.title, description: seo.twitter?.description, images: seo.twitter?.images, }, alternates: { canonical: locale === 'zh' ? '/news' : `/${locale}/news`, languages: { 'zh-CN': '/news', 'zh-TW': '/zh-TW/news', en: '/en/news', }, }, }; } export default async function NewsPage({ params: { locale } }: { params: { locale: string } }) { // 获取静态数据(如果是静态模式) const staticData = await getStaticNewsData(locale); // 在静态模式下,确保数据被正确传递 if (staticData) { console.log(`[NewsPage] Passing ${staticData.articles.length} articles to wrapper component`); } return ( <> {/* 将数据序列化为JSON并嵌入页面,供客户端组件使用 */} {staticData && (