feat(website/i18n): language auto-detection

This commit is contained in:
Elian Doran 2025-10-25 21:39:02 +03:00
parent 71cd92e0b5
commit bc580f2a88
No known key found for this signature in database

View File

@ -8,7 +8,7 @@ import Footer from './components/Footer.js';
import GetStarted from './pages/GetStarted/get-started.js'; import GetStarted from './pages/GetStarted/get-started.js';
import SupportUs from './pages/SupportUs/SupportUs.js'; import SupportUs from './pages/SupportUs/SupportUs.js';
import { createContext } from 'preact'; import { createContext } from 'preact';
import { useEffect, useLayoutEffect, useState } from 'preact/hooks'; import { useLayoutEffect, useState } from 'preact/hooks';
import { default as i18next, changeLanguage } from 'i18next'; import { default as i18next, changeLanguage } from 'i18next';
import { LOCALES } from './i18n'; import { LOCALES } from './i18n';
import HttpApi from 'i18next-http-backend'; import HttpApi from 'i18next-http-backend';
@ -23,10 +23,13 @@ export function App(props: {repoStargazersCount: number}) {
<Header repoStargazersCount={props.repoStargazersCount} /> <Header repoStargazersCount={props.repoStargazersCount} />
<main> <main>
<Router> <Router>
<Route path="/" component={Home} />
<Route path="/:locale:/" component={Home} /> <Route path="/:locale:/" component={Home} />
<Route default component={NotFound} />
<Route path="/:locale:/get-started" component={GetStarted} /> <Route path="/:locale:/get-started" component={GetStarted} />
<Route path="/:locale:/support-us" component={SupportUs} /> <Route path="/:locale:/support-us" component={SupportUs} />
<Route default component={NotFound} />
</Router> </Router>
</main> </main>
<Footer /> <Footer />
@ -37,7 +40,7 @@ export function App(props: {repoStargazersCount: number}) {
export function LocaleProvider({ children }) { export function LocaleProvider({ children }) {
const { path } = useLocation(); const { path } = useLocation();
const localeId = path.split('/')[1] || 'en'; const localeId = path.split('/')[1] || navigator.language;
const [ loaded, setLoaded ] = useState(false); const [ loaded, setLoaded ] = useState(false);
useLayoutEffect(() => { useLayoutEffect(() => {