From 5d2c8369389013895264caf16e71d44bddabb22c Mon Sep 17 00:00:00 2001 From: physcik Date: Sat, 11 Apr 2026 16:40:22 +0500 Subject: Language toggle --- front/src/App.css | 11 +++++++++++ front/src/App.tsx | 25 +++++++++++++++++++------ front/src/Emelents/Elements.css | 3 ++- front/src/Emelents/IndexElement.tsx | 6 +++++- front/src/Emelents/Sidebar.tsx | 15 +++++++++++++-- front/src/Emelents/Topbar.tsx | 21 ++++++++++++++++++++- front/src/Locales/Context.tsx | 5 +++++ front/src/Locales/Language.ts | 5 +++++ front/src/Locales/Locales.ts | 30 ++++++++++++++++++++++++++++++ front/src/Locales/en_US.ts | 10 ++++++++++ front/src/Locales/ru_RU.ts | 10 ++++++++++ front/tsconfig.json | 3 +++ 12 files changed, 133 insertions(+), 11 deletions(-) create mode 100644 front/src/Locales/Context.tsx create mode 100644 front/src/Locales/Language.ts create mode 100644 front/src/Locales/Locales.ts create mode 100644 front/src/Locales/en_US.ts create mode 100644 front/src/Locales/ru_RU.ts diff --git a/front/src/App.css b/front/src/App.css index a971f8e..5cbbeb8 100644 --- a/front/src/App.css +++ b/front/src/App.css @@ -8,3 +8,14 @@ .App > div { padding: 10px; } + +.AppContents > div { + padding-left: 10px; +} + +.AppContents > div > h1 { + background-color: var(--colorscheme-black); + color: var(--colorscheme-white); + padding-left: 10px; + padding-right: 10px; +} diff --git a/front/src/App.tsx b/front/src/App.tsx index 0759d38..a685379 100644 --- a/front/src/App.tsx +++ b/front/src/App.tsx @@ -5,6 +5,8 @@ import { createBrowserRouter, RouterProvider } from 'react-router'; import IndexElement from './Emelents/IndexElement'; import ClassesList from './Emelents/ClassList'; import Topbar from './Emelents/Topbar'; +import { AllowedLanguages, LanguageContext } from './Locales/Context'; +import { useState } from 'react'; const router = createBrowserRouter([ { @@ -18,14 +20,25 @@ const router = createBrowserRouter([ ]); function App() { + const [lang, setLang] = useState("en"); + + function SetLanguage(newLang: AllowedLanguages) { + console.log(`Setting a new language ${newLang}...`); + setLang(newLang); + } + return ( -
- -
- - + +
+ +
+ + +
-
+ ); } diff --git a/front/src/Emelents/Elements.css b/front/src/Emelents/Elements.css index 8a50296..eb3c558 100644 --- a/front/src/Emelents/Elements.css +++ b/front/src/Emelents/Elements.css @@ -35,7 +35,7 @@ max-width: var(--width); min-height: 30px; padding: 5px; - margin-top: 0px; + margin: 0px; background-color: var(--colorscheme-black); color: var(--colorscheme-white); text-align: center; @@ -48,6 +48,7 @@ background-color: var(--colorscheme-white); color: var(--colorscheme-gray); margin: 20px; + text-transform: uppercase; } .SidebarContents > h1 { diff --git a/front/src/Emelents/IndexElement.tsx b/front/src/Emelents/IndexElement.tsx index 4eda815..9914e89 100644 --- a/front/src/Emelents/IndexElement.tsx +++ b/front/src/Emelents/IndexElement.tsx @@ -1,7 +1,11 @@ +import { useState } from "react"; +import { GetString } from "../Locales/Locales"; + function IndexElement() { + const [lang, setLang] = useState('en'); return (
-

Index element

+

{GetString("index", lang)}

); } diff --git a/front/src/Emelents/Sidebar.tsx b/front/src/Emelents/Sidebar.tsx index b138de6..4802e76 100644 --- a/front/src/Emelents/Sidebar.tsx +++ b/front/src/Emelents/Sidebar.tsx @@ -1,10 +1,21 @@ +import { useContext } from 'react'; +import { AllowedLanguages, LanguageContext } from '../Locales/Context'; +import { GetString } from '../Locales/Locales'; import './Elements.css'; -function Sidebar() { +type SidebarProps = { + setLang: (newLang: AllowedLanguages) => void; +}; + +function Sidebar({setLang}: SidebarProps) { + var language = useContext(LanguageContext); + return (