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

i18next始终返回回退语言,如何全局使用i18next.t?

问题原因与解决方案

问题核心在于全局i18next实例和请求绑定的i18n上下文是分离的:middleware.LanguageDetector仅在请求周期内检测并设置当前请求对应的i18n实例的语言(也就是req.t依赖的实例),但全局的i18next单例不会自动跟随请求切换语言,始终沿用初始配置的回退语言(这里是'en')。

解决方法

1. 请求上下文内使用:手动传入当前请求语言

在请求处理函数里(比如你的404路由),直接从请求对象中获取检测到的语言,传给i18next.t的参数即可:

app.all('*', (req: Request, res: Response) => {
  // LanguageDetector会将检测到的语言存到req.language或req.i18n.language
  const currentLng = req.language;
  res.status(404).json({
    status: i18next.t('errorStatus', { lng: currentLng }),
    message: i18next.t('error404', { lng: currentLng }),
  })
})

2. 非请求上下文使用:传递语言参数

如果是在请求处理之外的函数(比如工具类、服务层),需要将语言作为参数传入函数,再调用i18next.t时指定:

// 非请求上下文的工具函数
function getNotFoundError(lng: string) {
  return {
    status: i18next.t('errorStatus', { lng }),
    message: i18next.t('error404', { lng })
  }
}

// 在请求处理中调用工具函数
app.all('*', (req: Request, res: Response) => {
  const error = getNotFoundError(req.language);
  res.status(404).json(error);
})

3. 前置检查:确保语言文件有效

先确认locales/ar/translation.json文件存在、格式正确,且包含errorStatus和error404对应键值,避免因文件缺失或键不存在导致自动回退到英文。

内容的提问来源于stack exchange,提问作者Mohamed Sawah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:45:19