i18n supports multiple languages and locales.
Using react-i18next:
1import i18n from "i18next";2import { initReactI18next } from "react-i18next";3import en from "./locales/en.json";4import ru from "./locales/ru.json";56i18n.use(initReactI18next).init({7 resources: {8 en: { translation: en },9 ru: { translation: ru },10 },11 lng: "en",12 fallbackLng: "en",13});1415// Component16import { useTranslation } from "react-i18next";1718function App() {19 const { t, i18n } = useTranslation();2021 const toggleLanguage = () => {22 i18n.changeLanguage(i18n.language === "en" ? "ru" : "en");23 };2425 return (26 <div>27 <h1>{t("welcome")}</h1>28 <p>{t("description")}</p>29 <button onClick={toggleLanguage}>30 {i18n.language === "en" ? "RU" : "EN"}31 </button>32 </div>33 );34}
Translation files:
1// en.json2{3 "welcome": "Welcome",4 "description": "This is a multi-language app",5 "items": "{{count}} items"6}78// ru.json9{10 "welcome": "Добро пожаловать",11 "description": "Это многоязычное приложение",12 "items": "{{count}} элементов"13}
Pluralization:
1{t("items", { count: 5 })}2// "5 items" in English3// "5 элементов" in Russian
With interpolation:
1{t("greeting", { name: "Alice" })}2// "Hello, Alice!"