From 333fa5bb94f47b691704d6ee66a53cbf5fcba3f7 Mon Sep 17 00:00:00 2001 From: mohadeseh safari Date: Mon, 12 May 2025 20:52:50 -0400 Subject: [PATCH] Add translations for PasswordPanel component in all locale files --- .../TabPanels/Account/PasswordPanel.jsx | 22 +++++++------- client/src/Pages/Account/index.jsx | 29 +++++++++++++------ client/src/locales/gb.json | 11 +++++++ client/src/locales/ru.json | 11 +++++++ client/src/locales/tr.json | 11 +++++++ 5 files changed, 64 insertions(+), 20 deletions(-) diff --git a/client/src/Components/TabPanels/Account/PasswordPanel.jsx b/client/src/Components/TabPanels/Account/PasswordPanel.jsx index 474058e66..553290f02 100644 --- a/client/src/Components/TabPanels/Account/PasswordPanel.jsx +++ b/client/src/Components/TabPanels/Account/PasswordPanel.jsx @@ -94,7 +94,7 @@ const PasswordPanel = () => { const action = await dispatch(update({ localData })); if (action.payload.success) { createToast({ - body: "Your password was changed successfully.", + body: t("passwordPanel.passwordChangedSuccess", "Your password was changed successfully."), }); setLocalData({ password: "", @@ -104,7 +104,7 @@ const PasswordPanel = () => { } else { // TODO: Check for other errors? createToast({ - body: "Your password input was incorrect.", + body: t("passwordPanel.passwordInputIncorrect", "Your password input was incorrect."), }); setErrors({ password: "*" + action.payload.msg + "." }); } @@ -148,12 +148,12 @@ const PasswordPanel = () => { component="h1" width="20ch" > - Current password + {t("passwordPanel.currentPassword", "Current password")} { component="h1" width="20ch" > - New password + {t("passwordPanel.newPassword", "New password")} { component="h1" width="20ch" > - Confirm new password + {t("passwordPanel.confirmNewPassword", "Confirm new password")} { )} @@ -232,7 +232,7 @@ const PasswordPanel = () => { color="accent" type="submit" loading={isLoading} - loadingIndicator="Saving..." + loadingIndicator={t("passwordPanel.saving", "Saving...")} disabled={ Object.keys(errors).length > 0 || Object.values(localData).filter((value) => value === "").length > 0 @@ -242,7 +242,7 @@ const PasswordPanel = () => { mt: theme.spacing(20), }} > - Save + {t("commonSave", "Save")} diff --git a/client/src/Pages/Account/index.jsx b/client/src/Pages/Account/index.jsx index c3e2be2f1..0f17d2d01 100644 --- a/client/src/Pages/Account/index.jsx +++ b/client/src/Pages/Account/index.jsx @@ -8,6 +8,7 @@ import TabContext from "@mui/lab/TabContext"; import ProfilePanel from "../../Components/TabPanels/Account/ProfilePanel"; import PasswordPanel from "../../Components/TabPanels/Account/PasswordPanel"; import TeamPanel from "../../Components/TabPanels/Account/TeamPanel"; +import { useTranslation } from "react-i18next"; import "./index.css"; /** @@ -24,24 +25,34 @@ const Account = ({ open = "profile" }) => { navigate(`/account/${newTab}`); }; const { user } = useSelector((state) => state.auth); + const { t } = useTranslation(); const requiredRoles = ["superadmin", "admin"]; - let tabList = ["Profile", "Password", "Team"]; + let tabList = [ + { name: t("menu.profile"), value: "profile" }, + { name: t("menu.password"), value: "password" }, + { name: t("menu.team"), value: "team" } + ]; const hideTeams = !requiredRoles.some((role) => user.role.includes(role)); if (hideTeams) { - tabList = ["Profile", "Password"]; + tabList = [ + { name: t("menu.profile"), value: "profile" }, + { name: t("menu.password"), value: "password" } + ]; } // Remove password for demo if (user.role.includes("demo")) { - tabList = ["Profile"]; + tabList = [ + { name: t("menu.profile"), value: "profile" } + ]; } const handleKeyDown = (event) => { - const currentIndex = tabList.findIndex((label) => label.toLowerCase() === tab); + const currentIndex = tabList.findIndex((item) => item.value === tab); if (event.key === "Tab") { const nextIndex = (currentIndex + 1) % tabList.length; - setFocusedTab(tabList[nextIndex].toLowerCase()); + setFocusedTab(tabList[nextIndex].value); } else if (event.key === "Enter") { event.preventDefault(); navigate(`/account/${focusedTab}`); @@ -60,13 +71,13 @@ const Account = ({ open = "profile" }) => { > - {tabList.map((label, index) => ( + {tabList.map((item, index) => ( handleFocus(label.toLowerCase())} + onFocus={() => handleFocus(item.value)} tabIndex={index} /> ))} diff --git a/client/src/locales/gb.json b/client/src/locales/gb.json index 1f952e691..fabfe58f7 100644 --- a/client/src/locales/gb.json +++ b/client/src/locales/gb.json @@ -519,5 +519,16 @@ "statusBreadCrumbsStatusPages": "Status Pages", "statusBreadCrumbsDetails": "Details", "incidentsPageTitle": "Incidents", + "passwordPanel": { + "passwordChangedSuccess": "Your password was changed successfully.", + "passwordInputIncorrect": "Your password input was incorrect.", + "currentPassword": "Current password", + "enterCurrentPassword": "Enter your current password", + "newPassword": "New password", + "enterNewPassword": "Enter your new password", + "confirmNewPassword": "Confirm new password", + "passwordRequirements": "New password must contain at least 8 characters and must have at least one uppercase letter, one lowercase letter, one number and one special character.", + "saving": "Saving..." + }, "uptimeCreateSelectURL": "Enter the URL or IP to monitor (e.g., https://example.com/ or 192.168.1.100) and add a clear display name that appears on the dashboard." } diff --git a/client/src/locales/ru.json b/client/src/locales/ru.json index 86999a16b..b89969b52 100644 --- a/client/src/locales/ru.json +++ b/client/src/locales/ru.json @@ -406,6 +406,17 @@ "uptimeCreateJsonPathQuery": "", "maintenanceTableActionMenuDialogTitle": "", "incidentsPageTitle": "Инциденты", + "passwordPanel": { + "passwordChangedSuccess": "Ваш пароль был успешно изменен.", + "passwordInputIncorrect": "Ваш пароль введен неверно.", + "currentPassword": "Текущий пароль", + "enterCurrentPassword": "Введите ваш текущий пароль", + "newPassword": "Новый пароль", + "enterNewPassword": "Введите ваш новый пароль", + "confirmNewPassword": "Подтвердите новый пароль", + "passwordRequirements": "Новый пароль должен содержать не менее 8 символов и должен иметь как минимум одну заглавную букву, одну строчную букву, одну цифру и один специальный символ.", + "saving": "Сохранение..." + }, "pageSpeedWarning": "Предупреждение: Вы не добавили ключ API Google PageSpeed. Без него монитор PageSpeed не будет работать.", "pageSpeedLearnMoreLink": "Нажмите здесь, чтобы узнать", "pageSpeedAddApiKey": "как добавить ваш ключ API.", diff --git a/client/src/locales/tr.json b/client/src/locales/tr.json index bb3e14192..d1a72162e 100644 --- a/client/src/locales/tr.json +++ b/client/src/locales/tr.json @@ -498,5 +498,16 @@ "statusBreadCrumbsStatusPages": "Durum Sayfaları", "statusBreadCrumbsDetails": "Detaylar", "incidentsPageTitle": "Olaylar", + "passwordPanel": { + "passwordChangedSuccess": "Şifreniz başarıyla değiştirildi.", + "passwordInputIncorrect": "Şifre girişiniz yanlış.", + "currentPassword": "Mevcut şifre", + "enterCurrentPassword": "Mevcut şifrenizi girin", + "newPassword": "Yeni şifre", + "enterNewPassword": "Yeni şifrenizi girin", + "confirmNewPassword": "Yeni şifreyi onaylayın", + "passwordRequirements": "Yeni şifre en az 8 karakter içermeli ve en az bir büyük harf, bir küçük harf, bir rakam ve bir özel karakter içermelidir.", + "saving": "Kaydediliyor..." + }, "uptimeCreateSelectURL": "İzlenecek URL veya IP adresini girin (örn. https://example.com/ veya 192.168.1.100) ve kontrol panelinde görünecek net bir görüntü adı ekleyin." }