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

react-i18next显示翻译key而非对应文本值的解决方法

问题现象

create-react-app 项目接入 i18next 实现多语言时,页面DOM直接输出翻译keymeet_team,未展示对应key的翻译文本。

相关代码

入口配置 index.js

import React from "react";
import ReactDOM from "react-dom";
import "./index.scss";
import App from "./components/App/App";
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import LanguageDetector from "i18next-browser-languagedetector";
import HttpApi from "i18next-http-backend";

i18n
  .use(initReactI18next)
  .use(LanguageDetector)
  .use(HttpApi)
  .init({
    debug: true,
    fallbackLng: "ar",
    detection: {
      order: ["htmlTag", "cookie"],
      caches: ["cookie"],
    },
    backend: {
      loadPath: "../public/locales/{{lng}}/translation.json",
    },
    react: { useSuspense: false },
  });

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById("root")
);

翻译文件

阿拉伯语 locales/ar/translation.json

{
    "meet_team": "تعرفوا على فريقنا"
}

土耳其语 locales/tr/translation.json

{
    "meet_team": "ekipimizle tanışın"
}

业务组件 OurTeam

import { useTranslation } from 'react-i18next';

const OurTeam = () => {
  const { t } = useTranslation();
  return <h1 className="foo">{t("meet_team")}</h1>;
};
排查解决步骤

你已经开启了i18next的debug模式,先打开浏览器控制台查看i18next输出的运行日志,按以下优先级排查:

  • 首先修正翻译资源加载路径
    当前配置的loadPath: "../public/locales/{{lng}}/translation.json"路径错误。create-react-app 中public目录下的静态资源会被映射到站点根路径,不需要带../public前缀,正确路径配置为/locales/{{lng}}/translation.json。
    路径配置错误会导致HttpApi请求翻译文件返回404,i18next找不到对应key的翻译值时,默认直接返回key字符串。修改后打开浏览器网络面板,确认对应语言的translation.json请求返回200,响应内容为正确的JSON格式翻译内容。
  • 调整初始化挂载逻辑,避免资源未加载完成就渲染
    你关闭了Suspense模式,可能出现翻译资源还未异步加载完成,组件已经完成首次渲染的情况。可以等i18n初始化完成、资源加载完毕后再挂载React根节点,同时补充配置避免异常返回:
    i18n
      .use(initReactI18next)
      .use(LanguageDetector)
      .use(HttpApi)
      .init({
        debug: true,
        fallbackLng: "ar",
        returnNull: false,
        returnEmptyString: false,
        detection: {
          order: ["htmlTag", "cookie"],
          caches: ["cookie"],
        },
        backend: {
          loadPath: "/locales/{{lng}}/translation.json",
        },
        react: { useSuspense: false },
      })
      .then(() => {
        ReactDOM.render(
          <React.StrictMode>
            <App />
          </React.StrictMode>,
          document.getElementById("root")
        );
      });
    
  • 校验语言检测结果
    你配置的语言检测顺序为先读取html标签的lang属性,再读取cookie。先确认当前html标签的lang属性值是否为已配置翻译的ar或tr,如果检测到未配置翻译的语种,会回退到fallbackLng,若fallback语言的资源加载失败同样会直接返回key。可以在组件中打印i18n.language确认当前生效的语言编码。
  • 检查翻译文件格式合法性
    确认两个translation.json为标准JSON格式,不存在多余尾逗号、语法错误,否则JSON解析失败会导致翻译资源加载失效。

90%以上的同类问题都是静态资源路径配置错误导致的,优先检查loadPath配置和网络面板的资源请求状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:54:32