From c7000951fed6ac28e6067fa2330a7297478723cd Mon Sep 17 00:00:00 2001 From: Stavros Date: Wed, 19 Mar 2025 22:20:29 +0200 Subject: [PATCH] feat: add language selector --- .../language-selector/language-selector.tsx | 40 +++++++++++++++++++ site/src/components/layouts/layout.tsx | 14 ++++--- site/src/lib/i18n/i18n.ts | 1 - site/src/lib/i18n/locales.ts | 36 +++++++++++++++++ 4 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 site/src/components/language-selector/language-selector.tsx create mode 100644 site/src/lib/i18n/locales.ts diff --git a/site/src/components/language-selector/language-selector.tsx b/site/src/components/language-selector/language-selector.tsx new file mode 100644 index 0000000..95d018a --- /dev/null +++ b/site/src/components/language-selector/language-selector.tsx @@ -0,0 +1,40 @@ +import { ComboboxItem, Select } from "@mantine/core"; +import { useState } from "react"; +import i18n from "../../lib/i18n/i18n"; +import { + SupportedLanguage, + getLanguageName, + languages, +} from "../../lib/i18n/locales"; + +export const LanguageSelector = () => { + const [language, setLanguage] = useState({ + value: i18n.language, + label: getLanguageName(i18n.language as SupportedLanguage), + }); + + const languageOptions = Object.entries(languages).map(([code, name]) => ({ + value: code, + label: name, + })); + + const handleLanguageChange = (option: string) => { + i18n.changeLanguage(option as SupportedLanguage); + setLanguage({ + value: option, + label: getLanguageName(option as SupportedLanguage), + }); + }; + + return ( +