You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 国际化:生成Metadata时无法为不同语言设置独立标题

解决Next.js动态语言页面的metadata标题问题

在Next.js App Router中,静态metadata对象无法获取路由参数,所以要改用动态生成metadata的generateMetadata函数,它能直接拿到路由里的lang参数,实现多语言标题适配。

直接替换你原来的静态metadata代码,改成下面的写法:

import type { Metadata, ResolvingMetadata } from 'next';

// 定义路由参数类型
type PageProps = {
  params: { lang: string };
};

export async function generateMetadata(
  { params }: PageProps,
  parent: ResolvingMetadata
): Promise<Metadata> {
  // 维护各语言对应的标题,按需扩展
  const titleMap = {
    'zh': '发展里程',
    'zh-TW': '發展里程',
    'en': 'Milestones',
    'ko': '마일스톤'
  };

  // 匹配当前语言的标题,默认用英文兜底
  const currentTitle = titleMap[params.lang as keyof typeof titleMap] || 'Milestones';

  return {
    title: currentTitle
  };
}

关键说明

  • generateMetadata是App Router原生支持的动态metadata生成方法,支持异步操作,能直接访问params(路由参数)和searchParams(URL查询参数)
  • 用titleMap集中管理多语言标题,后续加新语言直接在对象里加键值对就行,维护起来方便
  • 加了默认值处理,避免遇到未定义的语言时标题为空

如果需要和布局里的全局标题前缀合并(比如网站名),可以利用parent参数获取父级metadata,再拼接:

// 获取父级layout的title
const parentMetadata = await parent;
const siteName = parentMetadata.title || 'My Site';

return {
  title: `${currentTitle} | ${siteName}`
};

内容的提问来源于stack exchange,提问作者MERN Stack Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:49:52