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

Next.js如何通过可复用导航栏实现指定页面i18next多语言动态路由

可行实现方案

直接在导航栏组件内增加多语言路由白名单校验逻辑即可,不需要拆分导航栏组件,也能从根源避免构建时生成无效路由报错。

核心逻辑

提前声明仅支持多语言切换的页面路径集合,渲染语言切换链接前先判断当前页面是否在允许范围内:

  • 命中白名单(首页、关于页):正常拼接语言前缀生成对应路由链接
  • 未命中白名单:不生成带当前路径的语言前缀链接,可根据需求选择隐藏语言切换入口,或直接跳转对应语言的首页

实现代码

import Link from 'next/link';
import { useRouter } from 'next/router';

// 配置支持多语言的路由白名单,后续新增多语言页面直接往这里加路径即可
const ALLOWED_I18N_PATHS = new Set(['/', '/about']);

export default function NavBar() {
  const router = useRouter();
  const currentPath = router.route;
  const isSupportI18n = ALLOWED_I18N_PATHS.has(currentPath);

  return (
    <div className="nav-container">
      {/* 其余常规导航项逻辑保持原来的写法不变 */}
      
      {/* 语言切换区域 */}
      {isSupportI18n ? (
        <>
          <Link href={`/fr${currentPath}`}>French</Link>
          <Link href={`/es${currentPath}`}>Spanish</Link>
        </>
      ) : (
        // 非多语言页不需要语言入口就删掉下面这块,需要保留入口就直接跳转到对应语言首页
        <>
          <Link href="/fr">French</Link>
          <Link href="/es">Spanish</Link>
        </>
      )}
    </div>
  )
}

报错原因说明

next build 执行时会静态扫描所有Link标签的href属性,校验目标路由是否真实存在。之前的逻辑会在所有页面(比如未配置多语言的博客页、个人中心页)生成类似/fr/blog/xxx这类不存在的路由地址,直接触发构建错误。
加白名单判断后,仅在你实际配置了多语言路由的页面才会生成带前缀的合法链接,不会出现无效路由地址,构建自然可以正常通过。

如果后续要支持带动态参数的多语言页面,把白名单从Set改成正则匹配规则即可,维护成本很低,导航栏组件也可以保持全页面复用的特性,不需要拆分单独引入。


内容的提问来源于stack exchange,提问作者Mohammed Rehan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:51:26