Internationalization with react-i18next
Documentation
Implementation
Install dependencies
javascript
yarn add react-i18next i18nextCreate the locale folder
Create a locales folder:
plain
├── src/
│ ├── locales/
│ │ ├── en-us.json
│ │ ├── zh-cn.json
│ │ └── index.tszh-cn.json stores Chinese translations:
json
{
"test words": "测试文字",
"school": "学校",
"welcome": "欢迎来首页"
}en-us.json stores English translations:
json
{
"test words": "test words",
"school": "School",
"welcome": "Welcome To Home"
}Tip: a key style like "test words": "测试文字" is often easier to read and helps reduce naming confusion.
Prepare initialization
Use index.ts to initialize i18n:
typescript
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import enUsTrans from "./en-us.json";
import zhCnTrans from "./zh-cn.json";
i18n.use(initReactI18next).init({
resources: {
en: {
translation: enUsTrans,
},
zh: {
translation: zhCnTrans,
},
},
detection: {
order: ["queryString", "cookie"],
caches: ["cookie"],
},
fallbackLng: "zh",
debug: false,
interpolation: {
escapeValue: false,
},
});
export default i18n;Initialize it at the app entry:
javascript
import ReactDOM from "react-dom/client";
import { I18nextProvider } from "react-i18next";
import App from "./App.tsx";
import i18n from "./locales/index.ts";
import "./index.css";
ReactDOM.createRoot(document.getElementById("root")!).render(
<I18nextProvider i18n={i18n}>
<App />
</I18nextProvider>
);Use it inside the project
javascript
import { useTranslation } from "react-i18next";
const TestPage = () => {
const { t } = useTranslation();
return <div>{t("test words")}</div>;
};
export default TestPage;Switch languages
javascript
import i18n from "../locales";
const lang = "en";
i18n.changeLanguage(lang);