diff --git a/Client/src/Components/LanguageSelector.jsx b/Client/src/Components/LanguageSelector.jsx index 7a809065f..ca8e9207c 100644 --- a/Client/src/Components/LanguageSelector.jsx +++ b/Client/src/Components/LanguageSelector.jsx @@ -1,17 +1,16 @@ -import { useState } from "react"; import { useTranslation } from "react-i18next"; import { Box, MenuItem, Select, Stack } from "@mui/material"; import { useTheme } from "@emotion/react"; import "flag-icons/css/flag-icons.min.css"; +import { useSelector } from "react-redux"; const LanguageSelector = () => { const { i18n } = useTranslation(); const theme = useTheme(); - const [language, setLanguage] = useState(i18n.language || "gb"); + const { language } = useSelector((state) => state.ui); const handleChange = (event) => { const newLang = event.target.value; - setLanguage(newLang); i18n.changeLanguage(newLang); }; diff --git a/Client/src/Features/UI/uiSlice.js b/Client/src/Features/UI/uiSlice.js index 4565c6c5d..5731307ec 100644 --- a/Client/src/Features/UI/uiSlice.js +++ b/Client/src/Features/UI/uiSlice.js @@ -23,6 +23,7 @@ const initialState = { greeting: { index: 0, lastUpdate: null }, timezone: "America/Toronto", distributedUptimeEnabled: false, + language: "gb", }; const uiSlice = createSlice({ @@ -51,6 +52,9 @@ const uiSlice = createSlice({ setTimezone(state, action) { state.timezone = action.payload.timezone; }, + setLanguage(state, action) { + state.language = action.payload; + }, }, }); @@ -62,4 +66,5 @@ export const { setGreeting, setTimezone, setDistributedUptimeEnabled, + setLanguage, } = uiSlice.actions; diff --git a/Client/src/Utils/i18n.js b/Client/src/Utils/i18n.js index f7528f4b5..6243a2599 100644 --- a/Client/src/Utils/i18n.js +++ b/Client/src/Utils/i18n.js @@ -1,5 +1,7 @@ import i18n from "i18next"; import { initReactI18next } from "react-i18next"; +import { setLanguage } from "../Features/UI/uiSlice"; +import store from "../store"; const primaryLanguage = "gb"; @@ -13,11 +15,12 @@ Object.keys(translations).forEach((path) => { }; }); -const savedLanguage = localStorage.getItem("language") || primaryLanguage; +const savedLanguage = store.getState()?.ui?.language; +const initialLanguage = savedLanguage || primaryLanguage; i18n.use(initReactI18next).init({ resources, - lng: savedLanguage, + lng: initialLanguage, fallbackLng: primaryLanguage, debug: import.meta.env.MODE === "development", ns: ["translation"], @@ -28,7 +31,7 @@ i18n.use(initReactI18next).init({ }); i18n.on("languageChanged", (lng) => { - localStorage.setItem("language", lng); + store.dispatch(setLanguage(lng)); }); export default i18n;