From ebbadf94dd4b23b9ceabd402ed0886c4cd8c6062 Mon Sep 17 00:00:00 2001 From: physcik Date: Sat, 11 Apr 2026 17:12:18 +0500 Subject: Localization persistance --- front/src/App.tsx | 4 +++- front/src/Emelents/IndexElement.tsx | 10 ++++++---- front/src/Emelents/Sidebar.tsx | 8 ++++---- front/src/Emelents/Topbar.tsx | 4 ++-- front/src/Locales/Locales.ts | 18 ++++++++++++++---- 5 files changed, 29 insertions(+), 15 deletions(-) (limited to 'front/src') diff --git a/front/src/App.tsx b/front/src/App.tsx index a685379..6bfce7b 100644 --- a/front/src/App.tsx +++ b/front/src/App.tsx @@ -7,6 +7,7 @@ import ClassesList from './Emelents/ClassList'; import Topbar from './Emelents/Topbar'; import { AllowedLanguages, LanguageContext } from './Locales/Context'; import { useState } from 'react'; +import { ReadCurrentLocale, SaveCurrentLocale } from './Locales/Locales'; const router = createBrowserRouter([ { @@ -20,10 +21,11 @@ const router = createBrowserRouter([ ]); function App() { - const [lang, setLang] = useState("en"); + const [lang, setLang] = useState(ReadCurrentLocale()); function SetLanguage(newLang: AllowedLanguages) { console.log(`Setting a new language ${newLang}...`); + SaveCurrentLocale(newLang); setLang(newLang); } diff --git a/front/src/Emelents/IndexElement.tsx b/front/src/Emelents/IndexElement.tsx index 9914e89..2209fe1 100644 --- a/front/src/Emelents/IndexElement.tsx +++ b/front/src/Emelents/IndexElement.tsx @@ -1,11 +1,13 @@ -import { useState } from "react"; -import { GetString } from "../Locales/Locales"; +import { useContext, useState } from "react"; +import { LanguageContext } from "../Locales/Context"; +import { GetLocalizedString } from "../Locales/Locales"; function IndexElement() { - const [lang, setLang] = useState('en'); + var lang = useContext(LanguageContext); + return (
-

{GetString("index", lang)}

+

{GetLocalizedString("index", lang)}

); } diff --git a/front/src/Emelents/Sidebar.tsx b/front/src/Emelents/Sidebar.tsx index 4802e76..d94cef8 100644 --- a/front/src/Emelents/Sidebar.tsx +++ b/front/src/Emelents/Sidebar.tsx @@ -1,6 +1,6 @@ import { useContext } from 'react'; import { AllowedLanguages, LanguageContext } from '../Locales/Context'; -import { GetString } from '../Locales/Locales'; +import { GetLocalizedString } from '../Locales/Locales'; import './Elements.css'; type SidebarProps = { @@ -13,11 +13,11 @@ function Sidebar({setLang}: SidebarProps) { return ( ); diff --git a/front/src/Emelents/Topbar.tsx b/front/src/Emelents/Topbar.tsx index 667b42f..73e0e38 100644 --- a/front/src/Emelents/Topbar.tsx +++ b/front/src/Emelents/Topbar.tsx @@ -1,6 +1,6 @@ import { useContext } from "react"; import { LanguageContext } from "../Locales/Context"; -import { GetString } from "../Locales/Locales"; +import { GetLocalizedString } from "../Locales/Locales"; const defaultPathName = 'index'; @@ -12,7 +12,7 @@ function Topbar() {

View from the edge

-

{GetString(path, language)}

+

{GetLocalizedString(path, language)}

); diff --git a/front/src/Locales/Locales.ts b/front/src/Locales/Locales.ts index af76045..6e6a33e 100644 --- a/front/src/Locales/Locales.ts +++ b/front/src/Locales/Locales.ts @@ -1,5 +1,4 @@ -import { createContext } from 'vm'; -import { LanguageContext } from './Context'; +import { AllowedLanguages } from './Context'; import en_us from './en_US'; import Language from './Language'; import ru_ru from './ru_RU'; @@ -12,13 +11,14 @@ const nameToLocale = new Map([ ['ru', ru_ru], ]); -function getCurrentLocale(lang: string): Language { +function getCurrentLocale(lang: AllowedLanguages): Language { const outp = nameToLocale.get(lang); if (outp == undefined) return defaultLocale; return outp; } -export function GetString(query: string, lang: string): string { +export function GetLocalizedString(query: string, lang: AllowedLanguages): string { + query = query.toLowerCase(); const locale = getCurrentLocale(lang); const found = locale.LocalizedStrings.get(query); if (found == undefined) return defaultLocale.LocalizedStrings.get(query) || query; @@ -28,3 +28,13 @@ export function GetString(query: string, lang: string): string { export function SetLocale(locale: string, setLang: (x: string) => void) { if (nameToLocale.has(locale)) setLang(locale); } + +const StorageLanguageName = "language"; + +export function SaveCurrentLocale(lang: AllowedLanguages) { + localStorage.setItem(StorageLanguageName, lang) +} + +export function ReadCurrentLocale(): AllowedLanguages { + return localStorage.getItem(StorageLanguageName) as AllowedLanguages || "en"; +} -- cgit v1.3