I want the language abbreviation in the address to be created when changing the language, e.g. localhost:3000/firstpage/en
He would like someone to help me which libraries to use and how to go about it, because I don't even know how to start.
Here is a simple project structure
/src/i18n.js - i18n settings
import Backend from 'i18next-http-backend';
import LanguageDetector from 'i18next-browser-languagedetector'
import {initReactI18next} from 'react-i18next';
i18n.use(Backend)
.use(LanguageDetector)
.use(initReactI18next)
.init({
fallbackLng: 'pl',
debug: false,
detection: {
order: ['queryString', 'cookie'],
cache: ['cookie']
},
interpolation: {
escapeValue: false,
},
returnObjects: true
});
export default i18n;
/src/index.js
import React, { Suspense } from "react";
import ReactDOM from 'react-dom';
import App from './App';
import './i18n';
ReactDOM.render(
<Suspense fallback={<>Loading.. </>}>
<App />
</Suspense>,
document.getElementById('root')
);
/src/App.js
import React from "react";
import {BrowserRouter, Switch, Route} from 'react-router-dom';
import Header from './components/Header'
import HomePage from './components/Page/HomePage'
import FirstPage from './components/Page/FirstPage'
import SecondPage from './components/Page/SecondPage'
import './App.css'
export default function App() {
return (
<>
<BrowserRouter>
<Header/>
<Switch>
<Route exact path="/" component={HomePage} />
<Route path="/FirstPage" component={FirstPage} />
<Route path="/SecondPage" component={SecondPage} />
</Switch>
</BrowserRouter>
</>
)
}
/src/components/Header.js
import React from 'react'
import {Link} from "react-router-dom";
import { useTranslation } from 'react-i18next'
export default function Header() {
const {i18n} = useTranslation()
const changeLanguage = (language) => {
i18n.changeLanguage(language)
}
return (
<div>
Header:
<ul>
<li> <Link to="/"> HOME PAGE </Link></li>
<li> <Link to="/FirstPage"> First Page </Link></li>
<li> <Link to="/SecondPage"> Secon dPage </Link></li>
</ul>
<div>
Lang Selector
<ul>
<li>
<button onClick={() => changeLanguage("en") } >EN</button>
</li>
<li>
<button onClick={() => changeLanguage("pl") } >PL </button>
</li>
</ul>
</div>
</div>
)
}
/src/components/Page/FirstPage.js -- sample subpage
import React from 'react'
import { useTranslation } from 'react-i18next'
export default function FirstPage() {
const {t} = useTranslation()
return (
<div>
-- [FirstPage] --
<div>
- {t("FirstPage.Comment1")} <br/> <br/>
- {t("FirstPage.Comment2")}
</div>
</div>
)
}
/public/locales/en/translation.json - sample translation
{
"Home": {
"Hi": "Hello"
},
"FirstPage":{
"Comment1": "How are u?",
"Comment2": "Fine, and u?"
}
}