Implementing multi-language support in a React.js app typically involves using internationalization (i18n) libraries such as react-i18next
or react-intl
. These libraries provide tools for managing translations and rendering content based on the user's preferred language. Below is a basic example using react-i18next
:
react-i18next
:bashnpm install i18next react-i18next
Create translation files for each language you want to support. For example, you can have en.json
for English and fr.json
for French:
json// en.json
{
"welcome": "Welcome to my app!",
"hello": "Hello, {{name}}!",
"button": "Click me"
}
json// fr.json
{
"welcome": "Bienvenue dans mon application !",
"hello": "Bonjour, {{name}} !",
"button": "Cliquez ici"
}
jsx// App.js
import React from 'react';
import { useTranslation, initReactI18next } from 'react-i18next';
import i18n from 'i18next';
import LanguageSelector from './LanguageSelector';
import './i18n';
i18n.use(initReactI18next).init({
resources: {
en: {
translation: require('./locales/en.json')
},
fr: {
translation: require('./locales/fr.json')
}
},
lng: 'en', // Default language
fallbackLng: 'en', // Fallback language
interpolation: {
escapeValue: false // React already protects from XSS
}
});
const App = () => {
const { t } = useTranslation();
return (
<div>
<h1>{t('welcome')}</h1>
<p>{t('hello', { name: 'John' })}</p>
<button>{t('button')}</button>
<LanguageSelector />
</div>
);
};
export default App;
jsx// LanguageSelector.js
import React from 'react';
import { useTranslation } from 'react-i18next';
const LanguageSelector = () => {
const { i18n } = useTranslation();
const changeLanguage = (language) => {
i18n.changeLanguage(language);
};
return (
<div>
<button onClick={() => changeLanguage('en')}>English</button>
<button onClick={() => changeLanguage('fr')}>French</button>
</div>
);
};
export default LanguageSelector;
In this example:
useTranslation
hook is used to access translations in components.i18n
is initialized with translation resources and configuration.LanguageSelector
component allows users to switch between languages.This is a basic example to get you started. You can further enhance it by adding support for more languages, dynamic language detection, and handling complex translation scenarios.