From dce0d9400b1448239e5fd9db2649f52de1ddc505 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 25 Oct 2025 23:11:02 +0300 Subject: [PATCH] chore(website/i18n): bring back root-level pages --- apps/website/src/i18n.spec.ts | 10 +++++++++- apps/website/src/i18n.ts | 7 +++++++ apps/website/src/index.tsx | 6 ++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/apps/website/src/i18n.spec.ts b/apps/website/src/i18n.spec.ts index e06cdba3c..eab06ba5a 100644 --- a/apps/website/src/i18n.spec.ts +++ b/apps/website/src/i18n.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { mapLocale, swapLocaleInUrl } from "./i18n"; +import { extractLocaleFromUrl, mapLocale, swapLocaleInUrl } from "./i18n"; describe("mapLocale", () => { it("maps Chinese", () => { @@ -21,3 +21,11 @@ describe("swapLocale", () => { expect(swapLocaleInUrl("/ro/", "en")).toStrictEqual("/en/"); }); }); + +describe("extractLocaleFromUrl", () => { + it("properly extracts locale", () => { + expect(extractLocaleFromUrl("/en/get-started")).toStrictEqual("en"); + expect(extractLocaleFromUrl("/get-started")).toStrictEqual(undefined); + expect(extractLocaleFromUrl("/")).toStrictEqual(undefined); + }); +}); diff --git a/apps/website/src/i18n.ts b/apps/website/src/i18n.ts index 291eca69b..435245217 100644 --- a/apps/website/src/i18n.ts +++ b/apps/website/src/i18n.ts @@ -41,3 +41,10 @@ export function swapLocaleInUrl(url: string, newLocale: string) { return components.join("/"); } } + +export function extractLocaleFromUrl(url: string) { + const localeId = url.split('/')[1]; + const correspondingLocale = LOCALES.find(l => l.id === localeId); + if (!correspondingLocale) return undefined; + return localeId; +} diff --git a/apps/website/src/index.tsx b/apps/website/src/index.tsx index 5bf94c392..8cbea3d0e 100644 --- a/apps/website/src/index.tsx +++ b/apps/website/src/index.tsx @@ -10,7 +10,7 @@ import SupportUs from './pages/SupportUs/SupportUs.js'; import { createContext } from 'preact'; import { useLayoutEffect, useState } from 'preact/hooks'; import { default as i18next, changeLanguage } from 'i18next'; -import { LOCALES, mapLocale } from './i18n'; +import { extractLocaleFromUrl, LOCALES, mapLocale } from './i18n'; import HttpApi from 'i18next-http-backend'; import { initReactI18next } from "react-i18next"; @@ -24,6 +24,8 @@ export function App(props: {repoStargazersCount: number}) {
+ + @@ -40,7 +42,7 @@ export function App(props: {repoStargazersCount: number}) { export function LocaleProvider({ children }) { const { path } = useLocation(); - const localeId = mapLocale(path.split('/')[1] || navigator.language); + const localeId = mapLocale(extractLocaleFromUrl(path) || navigator.language); const [ loaded, setLoaded ] = useState(false); useLayoutEffect(() => {