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

Next.js使用next-i18next时如何配置多语言别名避免重复维护翻译文件

实现方案

方案1:通过next-i18next资源映射实现(推荐)

该方案无需修改请求逻辑,仅通过配置即可实现多地区指向同一套翻译资源:

  1. 调整next-i18next配置文件(通常为next-i18next.config.js或直接写在next.config.js中),补全所有需要支持的地区标识,同时新增localePath动态映射逻辑:
module.exports = {
  i18n: {
    defaultLocale: "en",
    // 补全所有需要支持的地区标识
    locales: ["en", "zh-CN", "zh-SG", "zh-TW", "zh-HK"],
  },
  // 动态返回翻译资源路径,实现多地区共用同一套翻译
  localePath: (locale, namespace) => {
    let targetLocale = locale
    // 简体地区统一映射到zh-CN资源
    if (locale === 'zh-SG') targetLocale = 'zh-CN'
    // 繁体地区统一映射到zh-TW资源
    if (locale === 'zh-HK') targetLocale = 'zh-TW'
    return `./public/locales/${targetLocale}/${namespace}.json`
  }
};
  1. 仅需在public/locales目录下维护3套翻译文件夹即可:en(英文)、zh-CN(简体中文)、zh-TW(繁体中文),无需新增zh-SG、zh-HK对应的翻译目录。

方案2:通过Middleware实现请求侧重写

如果不需要在URL中展示不同地区的locale标识(比如zh-SG用户直接显示/zh-CN/xxx路径),可以通过Next.js的Middleware实现请求时的语种映射,无需在i18n配置中声明所有地区:

  1. 在项目根目录新建middleware.js文件,写入以下逻辑:
import { NextResponse } from 'next/server'

export function middleware(request) {
  const acceptLang = request.headers.get('accept-language') || ''
  if (acceptLang.startsWith('zh')) {
    // 匹配简体地区
    if (acceptLang.includes('zh-CN') || acceptLang.includes('zh-SG')) {
      return NextResponse.rewrite(new URL(`/zh-CN${request.nextUrl.pathname}`, request.url))
    }
    // 匹配繁体地区
    if (['zh-TW', 'zh-HK', 'zh-MO'].some(lang => acceptLang.includes(lang))) {
      return NextResponse.rewrite(new URL(`/zh-TW${request.nextUrl.pathname}`, request.url))
    }
  }
  return NextResponse.next()
}

export const config = {
  // 排除不需要做语种检测的路径
  matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
}
  1. 对应调整i18n配置中的locales数组为["en", "zh-CN", "zh-TW"]即可,无需新增其他地区标识。

注意事项

  • 两种方案均不需要新增额外的翻译JSON文件,仅需维护简体、繁体、英文三套翻译资源即可。
  • 方案1会保留用户对应地区的locale标识在URL中,比如新加坡用户访问时路径为/zh-SG/xxx,如果需要统一URL路径,可以新增简单的重定向规则将zh-SG重定向到zh-CN、zh-HK重定向到zh-TW。

内容的提问来源于stack exchange,提问作者Jan Klimo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:06:00