import { Link as I18nLink, Locale, LOCALES } from "@/i18n/routing"; import { getProducts } from "@/lib/getProducts"; import { constructMetadata } from "@/lib/metadata"; import { Product } from "@/types/product"; import { Metadata } from "next"; import { getTranslations } from "next-intl/server"; type Params = Promise<{ locale: string }>; type MetadataProps = { params: Params; }; export async function generateMetadata({ params, }: MetadataProps): Promise { const { locale } = await params; const t = await getTranslations({ locale, namespace: "Product" }); return constructMetadata({ page: "Product", title: "产品中心", description: "公司产品展示", locale: locale as Locale, path: `/product`, canonicalUrl: `/product`, }); } // 每页产品数量 const PRODUCTS_PER_PAGE = 8; export default async function Page({ params, searchParams, }: { params: Params; searchParams: { page?: string }; }) { const { locale } = await params; const t = await getTranslations("Product"); // 获取当前页码,默认第1页 let currentPage = parseInt(searchParams.page || "1"); if (isNaN(currentPage) || currentPage < 1) { currentPage = 1; } // 获取产品数据 const { products }: { products: Product[] } = await getProducts(locale); // 计算总页数 const totalProducts = products.length; const totalPages = Math.ceil(totalProducts / PRODUCTS_PER_PAGE); // 确保当前页码不超过总页数 const safeCurrentPage = Math.min(currentPage, totalPages); // 计算当前页的产品数据 const startIndex = (safeCurrentPage - 1) * PRODUCTS_PER_PAGE; const endIndex = startIndex + PRODUCTS_PER_PAGE; const currentProducts = products.slice(startIndex, endIndex); return (
{/* 面包屑导航 */}
{t("breadcrumb.home")} / {t("breadcrumb.product")}
{/* 产品标题区域 */}

{t("title")}

{/* 产品网格 */}
{currentProducts.map((product) => (
{product.title}

{product.title}

{t("learnMore")} >
))}
{/* 分页组件 */} {totalPages > 1 && (
)}
); } export async function generateStaticParams() { // 为每个语言生成首页 return LOCALES.map((locale) => ({ locale, })); }