Implement multi-languages in React
Today, we will show you how to implement multi-languages in React. Sometimes you may need to add multi-language support to a website or a react web application like English, Chinese, etc.
In this article, we’ll use the react-i18next internationalization framework for React App which is based on i18next.
Demo Application
We will create a multilingual sample application as shown below.

Output - Implement multi-languages in React - Clue Mediator
Steps to implement multi-languages in React
- Create a react app
 - Install dependencies
 - Add translation files
 - Configure the i18next
 - Initialize the i18next configuration
 - Translate component using react-i18next
 - Output
 
File Structure
- 
react-multi-lingual
- 
node_modules
 - 
public
- 
assets
- 
i18n
- 
translations
- en.json
 - zh-Hant.json
 
 
 - 
 
 - 
 
 - 
 - 
src
- 
components
- HelloWorld.js
 - LangSelector.js
 - ReactExample.js
 - ThankYou.js
 
 - 
App.js
 - 
i18n.js
 - 
index.css
 - 
index.js
 
 - 
 - 
package-lock.json
 - 
package.json
 
 - 
 
1. Create a react app
First of all, we will create a simple react application using the `create-react-app` npm package. Run the following command to create a react app.
npx create-react-app react-multi-lingual
Check the following link for more information.
2. Install dependencies
To integrate multi-languages in the react app, we have to install the react-i18next packages. Run the following command to install the dependencies.
npm install i18next react-i18next i18next-http-backend i18next-browser-languagedetector --save
3. Add translation files
Now, we have to add the following translation files in the public/assets/i18n/translations/ folder. You have to create directories for the translation files.
en.json
{
  "HELLO_WORLD": "Hello World!",
  "REACT_EXAMPLE": "This is a react example ({{count}}).",
  "THANK_YOU": "Thank you!"
}
zh-Hant.json
{
  "HELLO_WORLD": "你好,世界!",
  "REACT_EXAMPLE": "這是一個反應示例({{count}})。",
  "THANK_YOU": "謝謝!"
}
4. Configure the i18next
In this step, we will create the `i18next` initiation script. Let’s create a file named `i18n.js` under the src/ directory.
i18n.js
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import Backend from 'i18next-http-backend';
import LanguageDetector from 'i18next-browser-languagedetector';
i18n
  // load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)
  // learn more: https://github.com/i18next/i18next-http-backend
  .use(Backend)
  // detect user language
  // learn more: https://github.com/i18next/i18next-browser-languageDetector
  .use(LanguageDetector)
  // pass the i18n instance to react-i18next.
  .use(initReactI18next)
  // init i18next
  // for all options read: https://www.i18next.com/overview/configuration-options
  .init({
    lng: 'en',
    backend: {
      /* translation file path */
      loadPath: '/assets/i18n/{{ns}}/{{lng}}.json'
    },
    fallbackLng: 'en',
    debug: true,
    /* can have multiple namespace, in case you want to divide a huge translation into smaller pieces and load them on demand */
    ns: ['translations'],
    defaultNS: 'translations',
    keySeparator: false,
    interpolation: {
      escapeValue: false,
      formatSeparator: ','
    },
    react: {
      wait: true
    }
  });
export default i18n;
5. Initialize the i18next configuration
In this step, we will import the `i18n.js` in the `Index.js` file to initialize the i18next configuration. Here, we have to use the suspense component because `i18next` load resource files asynchronously and we have to wait until the loading is completed.
Index.js
import React, { Suspense } from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import './i18n';
ReactDOM.render(
  <react class="strictmode">
    <suspense fallback="{<span">Loading...}>
      <app>
    </app></suspense>
  </react>,
  document.getElementById('root')
);
6. Translate component using react-i18next
Let’s create three components for the demonstration under src/components/ directory.
- HelloWorld.js - Translate the component using the hooks.
 - ThankYou.js - Use the HOC to translate the component.
 - ReactExample.js - Use the Trans component to translate the complex react component.
 
We will also create a `LangSelector.js` component to manage the language selection for the react application.
LangSelector.js
import React, { useState } from 'react';
import { useTranslation } from 'react-i18next';
const LangSelector = () => {
  const { i18n } = useTranslation();
  const [selectedLang, setSelectedLang] = useState('en');
  const changeLanguage = (event) => {
    setSelectedLang(event.target.value);
    i18n.changeLanguage(event.target.value);
  }
  return (
    <div onchange={changeLanguage}>
      <label class="mr10"><input type="radio" value="en" name="language" checked =="=" 'en'}=""> English</label>
      <label><input type="radio" value="zh-Hant" name="language" checked =="=" 'zh-hant'}=""> Chinese (Traditional)</label>
    </div>
  )
}
export default LangSelector;
HelloWorld.js
import React from 'react';
import { useTranslation } from 'react-i18next';
const HelloWorld = () => {
  const { t } = useTranslation();
  return (
    <div>
      <b>{t('HELLO_WORLD')}</b>
    </div>
  )
}
export default HelloWorld;
ThankYou.js
import React from 'react';
import { withTranslation } from 'react-i18next';
const ThankYou = ({ t }) => {
  return (
    <div class="tks">
      <i>{t('THANK_YOU')}</i>
    </div>
  )
}
export default withTranslation()(ThankYou);
ReactExample.js
import React from 'react';
import { Trans, withTranslation } from 'react-i18next';
const ReactExample = () => {
  return (
    <div>
      <trans count="3">REACT_EXAMPLE</trans>
    </div>
  )
}
export default withTranslation()(ReactExample);
App.js
import React from 'react'
import HelloWorld from './components/HelloWorld';
import LangSelector from './components/LangSelector';
import ReactExample from './components/ReactExample';
import ThankYou from './components/ThankYou';
function App() {
  return (
    <react class="fragment">
      <h3>Implement multi-languages in React - <a href="https://www.cluemediator.com" target="_blank" rel="noopener noreferrer">Clue Mediator</a></h3>
      <langselector>
      <div class="app">
        <helloworld>
        <reactexample>
        <thankyou>
      </thankyou></reactexample></helloworld></div>
    </langselector></react>
  );
}
export default App;
7. Output
Run the react application and check the output in the browser.
That’s it for today.
Thank you for reading. Happy Coding..!! 🙂
