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

i18n中如何直接调用嵌套命名空间内的翻译键避免前缀冗余写法

问题解决方案

你想要的免前缀调用效果完全可以实现,不需要给每个翻译键加前缀,以下是两种可落地的实现方案:

方案1:拆分翻译文件为真实分层命名空间(推荐中大型项目使用)

i18next原生支持用路径格式定义命名空间,你只需要调整翻译文件的目录结构,把原本嵌套在contract.json里的index字段单独拆分为独立文件:

  • 原结构:locales/{{语言}}/contract.json 里嵌套index字段
  • 新结构:locales/{{语言}}/contract/index.json,文件内容直接为:
{
  "pageTitle": "Contract"
}

然后在调用时直接传入路径格式的命名空间即可:

const { t, i18n } = useTranslation('contract/index', { useSuspense: false });
// 直接调用无需前缀
t('pageTitle')

这种方式更符合大项目的翻译文件拆分规范,后续维护和扩展更清晰。

方案2:保留现有JSON结构,使用keyPrefix配置(无需调整现有文件)

如果你不想改动现有翻译文件的嵌套结构,可以直接使用useTranslation hook 自带的keyPrefix参数指定统一的键前缀:

const { t, i18n } = useTranslation('contract', { 
  useSuspense: false,
  keyPrefix: 'index'
});
// 直接调用无需前缀
t('pageTitle')

该配置会自动给当前hook返回的t函数的所有调用加上指定前缀,完全满足你的使用需求。

补充说明

你之前尝试的contract:index、contract.index写法不生效,是因为i18next中冒号是命名空间与翻译键的分隔符,仅在翻译键调用场景下生效,不能直接作为命名空间参数传入useTranslation。

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

相关产品推荐
方舟 Agent Plan

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

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