Search code examples
reactjslocalizationi18nextreact-i18next

react-i18next the key name is displayed instead of it's value


I'm trying to use different languages for my react-creat-app project and I'm facing this problem where the key name is shown in DOM instead of its value.

index.js looks like this :

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 looks like this :

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

locales/tr/translation.json looks like this :

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

The component I want to translate looks like this :

import { useTranslation } from 'react-i18next';

const OurTeam = () => {
  const { t } = useTranslation();
  return <h1 className="foo">{t("meet_team")}</h1>;
};

what is displayed on the page is this :

meet_team

How can I resolve this issue?


Solution

  • The problem was at index.js :

     loadPath: "../public/locales/{{lng}}/translation.json",
    

    changing it to :

    loadPath: "/locales/{{lng}}/translation.json", 
    

    has fixed the problem