diff --git a/client/src/Components/GenericFallback/NetworkError.jsx b/client/src/Components/GenericFallback/NetworkError.jsx index b26037a57..ddffa1c31 100644 --- a/client/src/Components/GenericFallback/NetworkError.jsx +++ b/client/src/Components/GenericFallback/NetworkError.jsx @@ -1,8 +1,11 @@ import { Typography } from "@mui/material"; import { useTheme } from "@emotion/react"; +import { useTranslation } from "react-i18next"; const NetworkError = () => { const theme = useTheme(); + const { t } = useTranslation(); + return ( <> { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - Network error + {t("common.toasts.networkError")} - Please check your connection + {t("common.toasts.checkConnection")} ); }; diff --git a/client/src/Components/Sidebar/index.jsx b/client/src/Components/Sidebar/index.jsx index 6073f428d..f1c512771 100644 --- a/client/src/Components/Sidebar/index.jsx +++ b/client/src/Components/Sidebar/index.jsx @@ -338,7 +338,7 @@ function Sidebar() { mt={theme.spacing(2)} sx={{ opacity: 0.8, fontWeight: 500 }} > - Checkmate + {t("common.appName")} diff --git a/client/src/Components/TabPanels/Account/PasswordPanel.jsx b/client/src/Components/TabPanels/Account/PasswordPanel.jsx index 88604c72b..84d16e8b0 100644 --- a/client/src/Components/TabPanels/Account/PasswordPanel.jsx +++ b/client/src/Components/TabPanels/Account/PasswordPanel.jsx @@ -4,7 +4,7 @@ import { useTheme } from "@emotion/react"; import { Box, Stack, Typography, Button } from "@mui/material"; import { PasswordEndAdornment } from "../../Inputs/TextInput/Adornments"; import TextInput from "../../Inputs/TextInput"; -import { credentials } from "../../../Validation/validation"; +import { newOrChangedCredentials } from "../../../Validation/validation"; import Alert from "../../Alert"; import { update } from "../../../Features/Auth/authSlice"; import { useDispatch, useSelector } from "react-redux"; @@ -61,7 +61,7 @@ const PasswordPanel = () => { [name]: true, }; - const validation = credentials.validate( + const validation = newOrChangedCredentials.validate( { ...updatedData }, { abortEarly: false, context: { password: updatedData.newPassword } } ); @@ -79,7 +79,7 @@ const PasswordPanel = () => { const handleSubmit = async (event) => { event.preventDefault(); - const { error } = credentials.validate(localData, { + const { error } = newOrChangedCredentials.validate(localData, { abortEarly: false, context: { password: localData.newPassword }, }); diff --git a/client/src/Components/TabPanels/Account/ProfilePanel.jsx b/client/src/Components/TabPanels/Account/ProfilePanel.jsx index 53a8a8d77..ad6d15b98 100644 --- a/client/src/Components/TabPanels/Account/ProfilePanel.jsx +++ b/client/src/Components/TabPanels/Account/ProfilePanel.jsx @@ -5,7 +5,7 @@ import { Box, Button, Divider, Stack, Typography } from "@mui/material"; import Avatar from "../../Avatar"; import TextInput from "../../Inputs/TextInput"; import ImageUpload from "../../Inputs/ImageUpload"; -import { credentials } from "../../../Validation/validation"; +import { newOrChangedCredentials } from "../../../Validation/validation"; import { useDispatch, useSelector } from "react-redux"; import { clearAuthState, deleteUser, update } from "../../../Features/Auth/authSlice"; import { clearUptimeMonitorState } from "../../../Features/UptimeMonitors/uptimeMonitorsSlice"; @@ -58,7 +58,7 @@ const ProfilePanel = () => { [name]: value, })); - validateField({ [name]: value }, credentials, name); + validateField({ [name]: value }, newOrChangedCredentials, name); }; // Validates input against provided schema and updates error state @@ -240,7 +240,7 @@ const ProfilePanel = () => { gap={SPACING_GAP} > - {t("email")} + {t("auth.common.inputs.email.label")} { email: newEmail, })); - const validation = credentials.validate({ email: newEmail }, { abortEarly: false }); + const validation = newOrChangedCredentials.validate( + { email: newEmail }, + { abortEarly: false } + ); setErrors((prev) => { const updatedErrors = { ...prev }; @@ -142,7 +145,7 @@ const TeamPanel = () => { if (!toInvite.role.includes("user") || !toInvite.role.includes("admin")) setToInvite((prev) => ({ ...prev, role: ["user"] })); - const { error } = credentials.validate( + const { error } = newOrChangedCredentials.validate( { email: toInvite.email }, { abortEarly: false, diff --git a/client/src/Components/ThemeSwitch/index.jsx b/client/src/Components/ThemeSwitch/index.jsx index 6c879b289..5efb17419 100644 --- a/client/src/Components/ThemeSwitch/index.jsx +++ b/client/src/Components/ThemeSwitch/index.jsx @@ -14,10 +14,12 @@ import SunAndMoonIcon from "./SunAndMoonIcon"; import { useDispatch, useSelector } from "react-redux"; import { setMode } from "../../Features/UI/uiSlice"; import "./index.css"; +import { useTranslation } from "react-i18next"; const ThemeSwitch = ({ width = 48, height = 48, color }) => { const mode = useSelector((state) => state.ui.mode); const dispatch = useDispatch(); + const { t } = useTranslation(); const toggleTheme = () => { dispatch(setMode(mode === "light" ? "dark" : "light")); @@ -26,7 +28,7 @@ const ThemeSwitch = ({ width = 48, height = 48, color }) => { return ( { const toastFail = [ { - body: "Email not found.", + body: t("auth.forgotPassword.toasts.emailNotFound"), }, { - body: "Redirecting in 3...", + body: t("auth.forgotPassword.toasts.redirect").replace("", "3"), }, { - body: "Redirecting in 2...", + body: t("auth.forgotPassword.toasts.redirect").replace("", "2"), }, { - body: "Redirecting in 1...", + body: t("auth.forgotPassword.toasts.redirect").replace("", "1"), }, ]; @@ -62,19 +62,19 @@ const CheckEmail = () => { const action = await dispatch(forgotPassword(form)); if (action.payload.success) { createToast({ - body: `Instructions sent to ${form.email}.`, + body: t("auth.forgotPassword.toasts.sent").replace("", form.email), }); setDisabled(false); } else { if (action.payload) { // dispatch errors createToast({ - body: action.payload.msg, + body: action.payload.msg, // FIXME: Potential untranslated string }); } else { // unknown errors createToast({ - body: "Unknown error.", + body: t("common.toasts.unknownError"), }); } } @@ -118,7 +118,7 @@ const CheckEmail = () => { gap={theme.spacing(4)} > - Checkmate + {t("common.appName")} { svgHeight={24} mb={theme.spacing(4)} > - + - {t("authCheckEmailTitle")} + {t("auth.forgotPassword.heading")} - {t("authCheckEmailDescription")}{" "} - - {email || "username@email.com"} - + + {email || "username@email.com"} + + ), + }} + /> - {t("authCheckEmailDidntReceiveEmail")}{" "} - + ), }} - > - {t("authCheckEmailClickToResend")} - + /> @@ -207,15 +217,21 @@ const CheckEmail = () => { textAlign="center" p={theme.spacing(12)} > - {t("goBackTo")} - - {t("authLoginTitle")} + + + ), + }} + /> diff --git a/client/src/Pages/Auth/ForgotPassword.jsx b/client/src/Pages/Auth/ForgotPassword.jsx index 6a31092c9..2a887756e 100644 --- a/client/src/Pages/Auth/ForgotPassword.jsx +++ b/client/src/Pages/Auth/ForgotPassword.jsx @@ -4,14 +4,14 @@ import { createToast } from "../../Utils/toastUtils"; import { useDispatch, useSelector } from "react-redux"; import { forgotPassword } from "../../Features/Auth/authSlice"; import { useEffect, useState } from "react"; -import { credentials } from "../../Validation/validation"; +import { newOrChangedCredentials } from "../../Validation/validation"; import { useNavigate } from "react-router-dom"; import TextInput from "../../Components/Inputs/TextInput"; import Logo from "../../assets/icons/checkmate-icon.svg?react"; import Key from "../../assets/icons/key.svg?react"; import Background from "../../assets/Images/background-grid.svg?react"; import IconBox from "../../Components/IconBox"; -import { useTranslation } from "react-i18next"; +import { Trans, useTranslation } from "react-i18next"; import "./index.css"; const ForgotPassword = () => { @@ -35,14 +35,14 @@ const ForgotPassword = () => { const handleSubmit = async (event) => { event.preventDefault(); - const { error } = credentials.validate(form, { abortEarly: false }); + const { error } = newOrChangedCredentials.validate(form, { abortEarly: false }); if (error) { // validation errors const err = error.details && error.details.length > 0 - ? error.details[0].message - : "Error validating data."; + ? error.details[0].message // FIXME: Possibly untranslated string + : t("auth.common.errors.validation"); setErrors({ email: err }); createToast({ body: err, @@ -53,18 +53,18 @@ const ForgotPassword = () => { sessionStorage.setItem("email", form.email); navigate("/check-email"); createToast({ - body: `Instructions sent to ${form.email}.`, + body: t("auth.forgotPassword.toasts.sent").replace("", form.email), }); } else { if (action.payload) { // dispatch errors createToast({ - body: action.payload.msg, + body: action.payload.msg, // FIXME: Potentially untranslated string }); } else { // unknown errors createToast({ - body: "Unknown error.", + body: t("common.toasts.unknownError"), }); } } @@ -75,7 +75,10 @@ const ForgotPassword = () => { const { value } = event.target; setForm({ email: value }); - const { error } = credentials.validate({ email: value }, { abortEarly: false }); + const { error } = newOrChangedCredentials.validate( + { email: value }, + { abortEarly: false } + ); if (error) setErrors({ email: error.details[0].message }); else delete errors.email; @@ -120,7 +123,7 @@ const ForgotPassword = () => { gap={theme.spacing(4)} > - Checkmate + {t("common.appName")} { svgHeight={24} mb={theme.spacing(4)} > - + - {t("authForgotPasswordTitle")} - {t("authForgotPasswordInstructions")} + {t("auth.forgotPassword.heading")} + {t("auth.forgotPassword.subheadings.stepOne")} { @@ -207,15 +210,21 @@ const ForgotPassword = () => { textAlign="center" p={theme.spacing(12)} > - {t("goBackTo")} - - {t("authLoginTitle")} + + + ), + }} + /> diff --git a/client/src/Pages/Auth/Login/Components/EmailStep.jsx b/client/src/Pages/Auth/Login/Components/EmailStep.jsx index 45babead1..f3f56ec26 100644 --- a/client/src/Pages/Auth/Login/Components/EmailStep.jsx +++ b/client/src/Pages/Auth/Login/Components/EmailStep.jsx @@ -35,8 +35,8 @@ const EmailStep = ({ form, errors, onSubmit, onChange }) => { position="relative" > - {t("authLoginTitle")} - {t("authLoginEnterEmail")} + {t("auth.login.heading")} + {t("auth.login.subheadings.stepOne")} { (e.target.value = e.target.value.toLowerCase())} onChange={onChange} error={errors.email ? true : false} - helperText={errors.email ? t(errors.email) : ""} + helperText={errors.email ? t(errors.email) : ""} // Localization keys are in validation.js ref={inputRef} /> { }, }} > - {t("continue")} + {t("auth.common.navigation.continue")} diff --git a/client/src/Pages/Auth/Login/Components/ForgotPasswordLabel.jsx b/client/src/Pages/Auth/Login/Components/ForgotPasswordLabel.jsx index a9cb17d7c..5fc2430c7 100644 --- a/client/src/Pages/Auth/Login/Components/ForgotPasswordLabel.jsx +++ b/client/src/Pages/Auth/Login/Components/ForgotPasswordLabel.jsx @@ -1,7 +1,7 @@ import { Box, Typography, useTheme } from "@mui/material"; import PropTypes from "prop-types"; import { useNavigate } from "react-router"; -import { useTranslation } from "react-i18next"; +import { Trans, useTranslation } from "react-i18next"; const ForgotPasswordLabel = ({ email, errorEmail }) => { const theme = useTheme(); @@ -22,16 +22,20 @@ const ForgotPasswordLabel = ({ email, errorEmail }) => { display="inline-block" color={theme.palette.primary.main} > - {t("authForgotPasswordTitle")} - - - {t("authForgotPasswordResetPassword")} + + ), + }} + /> ); diff --git a/client/src/Pages/Auth/Login/Components/PasswordStep.jsx b/client/src/Pages/Auth/Login/Components/PasswordStep.jsx index 1fbdf93f0..5aa56fbb0 100644 --- a/client/src/Pages/Auth/Login/Components/PasswordStep.jsx +++ b/client/src/Pages/Auth/Login/Components/PasswordStep.jsx @@ -38,8 +38,8 @@ const PasswordStep = ({ form, errors, onSubmit, onChange, onBack }) => { textAlign="center" > - {t("authLoginTitle")} - {t("authLoginEnterPassword")} + {t("auth.login.heading")} + {t("auth.login.subheadings.stepTwo")} { } /> @@ -95,7 +95,7 @@ const PasswordStep = ({ form, errors, onSubmit, onChange, onBack }) => { }} > - {t("commonBack")}{" "} + {t("auth.common.navigation.back")}{" "} diff --git a/client/src/Pages/Auth/Login/Login.jsx b/client/src/Pages/Auth/Login/Login.jsx index 5df2ed011..d2be3af35 100644 --- a/client/src/Pages/Auth/Login/Login.jsx +++ b/client/src/Pages/Auth/Login/Login.jsx @@ -2,7 +2,7 @@ import { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { Box, Stack, Typography } from "@mui/material"; import { useTheme } from "@emotion/react"; -import { credentials } from "../../../Validation/validation"; +import { loginCredentials } from "../../../Validation/validation"; import { login } from "../../../Features/Auth/authSlice"; import { useDispatch, useSelector } from "react-redux"; import { createToast } from "../../../Utils/toastUtils"; @@ -15,7 +15,7 @@ import PasswordStep from "./Components/PasswordStep"; import ThemeSwitch from "../../../Components/ThemeSwitch"; import ForgotPasswordLabel from "./Components/ForgotPasswordLabel"; import LanguageSelector from "../../../Components/LanguageSelector"; -import { useTranslation } from "react-i18next"; +import { Trans, useTranslation } from "react-i18next"; const DEMO = import.meta.env.VITE_APP_DEMO; @@ -59,7 +59,7 @@ const Login = () => { [name]: lowerCasedValue, })); - const { error } = credentials.validate( + const { error } = loginCredentials.validate( { [name]: lowerCasedValue }, { abortEarly: false } ); @@ -76,22 +76,22 @@ const Login = () => { event.preventDefault(); if (step === 0) { - const { error } = credentials.validate( + const { error } = loginCredentials.validate( { email: form.email }, { abortEarly: false } ); if (error) { const errorMessage = error.details[0].message; const translatedMessage = errorMessage.startsWith("auth") - ? t(errorMessage) - : errorMessage; + ? t(errorMessage) // Localization keys are in validation.js + : errorMessage; // FIXME: Potential untranslated string setErrors((prev) => ({ ...prev, email: translatedMessage })); createToast({ body: translatedMessage }); } else { setStep(1); } } else if (step === 1) { - const { error } = credentials.validate(form, { abortEarly: false }); + const { error } = loginCredentials.validate(form, { abortEarly: false }); if (error) { // validation errors @@ -104,31 +104,31 @@ const Login = () => { body: error.details && error.details.length > 0 ? error.details[0].message.startsWith("auth") - ? t(error.details[0].message) - : error.details[0].message - : t("Error validating data."), + ? t(error.details[0].message) // Localization keys are in validation.js + : error.details[0].message // FIXME: Potential untranslated string + : t("auth.common.errors.validation"), }); } else { const action = await dispatch(login(form)); if (action.payload.success) { navigate("/uptime"); createToast({ - body: t("welcomeBack"), + body: t("auth.login.toasts.success"), }); } else { if (action.payload) { if (action.payload.msg === "Incorrect password") setErrors({ - password: "The password you provided does not match our records", + password: t("auth.common.fields.password.errors.incorrect"), }); // dispatch errors createToast({ - body: action.payload.msg, + body: t("auth.login.toasts.incorrectPassword"), }); } else { // unknown errors createToast({ - body: "Unknown error.", + body: t("common.toasts.unknownError"), }); } } @@ -174,7 +174,7 @@ const Login = () => { gap={theme.spacing(4)} > - Checkmate + {t("common.appName")} { display="inline-block" color={theme.palette.primary.main} > - {t("doNotHaveAccount")} - - navigate("/register")} - > - {t("registerHere")} + navigate("/register")} + /> + ), + }} + /> diff --git a/client/src/Pages/Auth/NewPasswordConfirmed.jsx b/client/src/Pages/Auth/NewPasswordConfirmed.jsx index 57a4aaf25..db03f7de3 100644 --- a/client/src/Pages/Auth/NewPasswordConfirmed.jsx +++ b/client/src/Pages/Auth/NewPasswordConfirmed.jsx @@ -8,7 +8,7 @@ import Background from "../../assets/Images/background-grid.svg?react"; import ConfirmIcon from "../../assets/icons/check-outlined.svg?react"; import Logo from "../../assets/icons/checkmate-icon.svg?react"; import IconBox from "../../Components/IconBox"; -import { useTranslation } from "react-i18next"; +import { Trans, useTranslation } from "react-i18next"; import "./index.css"; const NewPasswordConfirmed = () => { @@ -54,7 +54,7 @@ const NewPasswordConfirmed = () => { gap={theme.spacing(4)} > - Checkmate + {t("common.appName")} { svgHeight={24} mb={theme.spacing(4)} > - + - {t("passwordreset")} - {t("authNewPasswordConfirmed")} + {t("auth.forgotPassword.heading")} + + {t("auth.forgotPassword.subheadings.stepFour")} + @@ -118,15 +120,21 @@ const NewPasswordConfirmed = () => { textAlign="center" p={theme.spacing(12)} > - {t("goBackTo")} - - {t("authLoginTitle")} + + + ), + }} + /> diff --git a/client/src/Pages/Auth/Register/Register.jsx b/client/src/Pages/Auth/Register/Register.jsx index ffa1dd0ad..390aa6e36 100644 --- a/client/src/Pages/Auth/Register/Register.jsx +++ b/client/src/Pages/Auth/Register/Register.jsx @@ -8,7 +8,7 @@ import { StepOne } from "./StepOne"; import { StepTwo } from "./StepTwo"; import { StepThree } from "./StepThree"; import { networkService } from "../../../main"; -import { credentials } from "../../../Validation/validation"; +import { newOrChangedCredentials } from "../../../Validation/validation"; import { createToast } from "../../../Utils/toastUtils"; import { register } from "../../../Features/Auth/authSlice"; import Background from "../../../assets/Images/background-grid.svg?react"; @@ -35,11 +35,15 @@ const LandingPage = ({ isSuperAdmin, onSignup }) => { textAlign="center" > - {t("signUp")} + + {isSuperAdmin + ? t("auth.registration.heading.superAdmin") + : t("auth.registration.heading.user")} + {isSuperAdmin - ? t("authRegisterCreateSuperAdminAccount") - : t("authRegisterCreateAccount")} + ? t("auth.registration.description.superAdmin") + : t("auth.registration.description.user")} @@ -62,13 +66,15 @@ const LandingPage = ({ isSuperAdmin, onSignup }) => { }} > - {t("authRegisterSignUpWithEmail")} + {isSuperAdmin + ? t("auth.registration.gettingStartedButton.superAdmin") + : t("auth.registration.gettingStartedButton.user")} { * @returns {Object | undefined} - Returns the validation error object if there are validation errors; otherwise, `undefined`. */ const validateForm = (data, options = {}) => { - const { error } = credentials.validate(data, { + const { error } = newOrChangedCredentials.validate(data, { abortEarly: false, ...options, }); @@ -189,7 +195,8 @@ const Register = ({ isSuperAdmin }) => { newErrors[err.path[0]] = err.message; }); setErrors(newErrors); - createToast({ body: error.details[0].message || "Error validating data." }); + // Localization keys are in validation.js + createToast({ body: t(error.details[0].message || "auth.common.errors.validation") }); }; const handleStepOne = async (e) => { @@ -246,7 +253,7 @@ const Register = ({ isSuperAdmin }) => { const authToken = action.payload.data; navigate("/uptime"); createToast({ - body: "Welcome! Your account was created successfully.", + body: t("auth.registration.toasts.success"), }); } else { if (action.payload) { @@ -255,7 +262,7 @@ const Register = ({ isSuperAdmin }) => { }); } else { createToast({ - body: "Unknown error.", + body: t("common.toasts.unknownError"), }); } } @@ -271,7 +278,7 @@ const Register = ({ isSuperAdmin }) => { [name]: lowerCasedValue, })); - const { error } = credentials.validate( + const { error } = newOrChangedCredentials.validate( { [name]: lowerCasedValue }, { abortEarly: false, context: { password: form.password } } ); @@ -316,7 +323,7 @@ const Register = ({ isSuperAdmin }) => { gap={theme.spacing(4)} > - {t("commonAppName")} + {t("common.appName")} { /> ) : step === 1 ? ( { /> ) : step === 2 ? ( { /> ) : step === 3 ? ( { p={theme.spacing(12)} > - {t("authRegisterAlreadyHaveAccount")} - - { - navigate("/login"); - }} - sx={{ userSelect: "none", color: theme.palette.accent.main }} - > - {t("authRegisterLoginLink")} + { + navigate("/login"); + }} + sx={{ userSelect: "none", color: theme.palette.accent.main }} + /> + ), + }} + /> diff --git a/client/src/Pages/Auth/Register/StepOne/index.jsx b/client/src/Pages/Auth/Register/StepOne/index.jsx index cb66f6704..575a9132f 100644 --- a/client/src/Pages/Auth/Register/StepOne/index.jsx +++ b/client/src/Pages/Auth/Register/StepOne/index.jsx @@ -7,6 +7,7 @@ import TextInput from "../../../../Components/Inputs/TextInput"; import { useTranslation } from "react-i18next"; StepOne.propTypes = { + isSuperAdmin: PropTypes.bool, form: PropTypes.object, errors: PropTypes.object, onSubmit: PropTypes.func, @@ -18,6 +19,7 @@ StepOne.propTypes = { * Renders the first step of the sign up process. * * @param {Object} props + * @param {boolean} props.isSuperAdmin - Whether the user is creating and admin account * @param {Object} props.form - Form state object. * @param {Object} props.errors - Object containing form validation errors. * @param {Function} props.onSubmit - Callback function to handle form submission. @@ -26,7 +28,7 @@ StepOne.propTypes = { * @returns {JSX.Element} */ -function StepOne({ form, errors, onSubmit, onChange, onBack }) { +function StepOne({ isSuperAdmin, form, errors, onSubmit, onChange, onBack }) { const theme = useTheme(); const inputRef = useRef(null); const { t } = useTranslation(); @@ -45,8 +47,12 @@ function StepOne({ form, errors, onSubmit, onChange, onBack }) { textAlign="center" > - {t("signUp")} - {t("authRegisterStepOnePersonalDetails")} + + {isSuperAdmin + ? t("auth.registration.heading.superAdmin") + : t("auth.registration.heading.user")} + + {t("auth.registration.subheadings.stepOne")} - {t("commonBack")} + {t("auth.common.navigation.back")} diff --git a/client/src/Pages/Auth/Register/StepThree/index.jsx b/client/src/Pages/Auth/Register/StepThree/index.jsx index 1af8a60dc..c81ae08a7 100644 --- a/client/src/Pages/Auth/Register/StepThree/index.jsx +++ b/client/src/Pages/Auth/Register/StepThree/index.jsx @@ -8,6 +8,7 @@ import Check from "../../../../Components/Check/Check"; import { useValidatePassword } from "../../hooks/useValidatePassword"; import { useTranslation } from "react-i18next"; StepThree.propTypes = { + isSuperAdmin: PropTypes.bool, onSubmit: PropTypes.func, onBack: PropTypes.func, }; @@ -16,11 +17,12 @@ StepThree.propTypes = { * Renders the third step of the sign up process. * * @param {Object} props + * @param {boolean} props.isSuperAdmin - Whether the user is creating and admin account * @param {Function} props.onSubmit - Callback function to handle form submission. * @param {Function} props.onBack - Callback function to handle "Back" button click. * @returns {JSX.Element} */ -function StepThree({ onSubmit, onBack }) { +function StepThree({ isSuperAdmin, onSubmit, onBack }) { const theme = useTheme(); const inputRef = useRef(null); const { t } = useTranslation(); @@ -39,8 +41,12 @@ function StepThree({ onSubmit, onBack }) { textAlign="center" > - {t("signUp")} - {t("createPassword")} + + {isSuperAdmin + ? t("auth.registration.heading.superAdmin") + : t("auth.registration.heading.user")} + + {t("auth.registration.subheadings.stepThree")} @@ -141,7 +153,7 @@ function StepThree({ onSubmit, onBack }) { }} > - {t("commonBack")} + {t("auth.common.navigation.back")} diff --git a/client/src/Pages/Auth/Register/StepTwo/index.jsx b/client/src/Pages/Auth/Register/StepTwo/index.jsx index 4fa0e8ebc..306a2b750 100644 --- a/client/src/Pages/Auth/Register/StepTwo/index.jsx +++ b/client/src/Pages/Auth/Register/StepTwo/index.jsx @@ -7,6 +7,7 @@ import TextInput from "../../../../Components/Inputs/TextInput"; import { useTranslation } from "react-i18next"; StepTwo.propTypes = { + isSuperAdmin: PropTypes.bool, form: PropTypes.object, errors: PropTypes.object, onSubmit: PropTypes.func, @@ -18,6 +19,7 @@ StepTwo.propTypes = { * Renders the second step of the sign up process. * * @param {Object} props + * @param {boolean} props.isSuperAdmin - Whether the user is creating and admin account * @param {Object} props.form - Form state object. * @param {Object} props.errors - Object containing form validation errors. * @param {Function} props.onSubmit - Callback function to handle form submission. @@ -25,7 +27,7 @@ StepTwo.propTypes = { * @param {Function} props.onBack - Callback function to handle "Back" button click. * @returns {JSX.Element} */ -function StepTwo({ form, errors, onSubmit, onChange, onBack }) { +function StepTwo({ isSuperAdmin, form, errors, onSubmit, onChange, onBack }) { const theme = useTheme(); const inputRef = useRef(null); const { t } = useTranslation(); @@ -43,8 +45,12 @@ function StepTwo({ form, errors, onSubmit, onChange, onBack }) { textAlign="center" > - {t("signUp")} - {t("enterEmail")} + + {isSuperAdmin + ? t("auth.registration.heading.superAdmin") + : t("auth.registration.heading.user")} + + {t("auth.registration.subheadings.stepTwo")} (e.target.value = e.target.value.toLowerCase())} onChange={onChange} error={errors.email ? true : false} - helperText={ - errors.email && - (errors.email.includes("required") - ? t("authRegisterEmailRequired") - : errors.email.includes("valid email") - ? t("authRegisterEmailInvalid") - : t(errors.email)) - } + helperText={t(errors.email)} // Localization keys are in validation.js ref={inputRef} /> - {t("commonBack")} + {t("auth.common.navigation.back")} diff --git a/client/src/Pages/Auth/SetNewPassword.jsx b/client/src/Pages/Auth/SetNewPassword.jsx index 4467a4adf..b4899f47c 100644 --- a/client/src/Pages/Auth/SetNewPassword.jsx +++ b/client/src/Pages/Auth/SetNewPassword.jsx @@ -6,7 +6,7 @@ import { useTheme } from "@emotion/react"; import { Box, Stack, Typography, Button } from "@mui/material"; import { setNewPassword } from "../../Features/Auth/authSlice"; import { createToast } from "../../Utils/toastUtils"; -import { credentials } from "../../Validation/validation"; +import { newOrChangedCredentials } from "../../Validation/validation"; import Check from "../../Components/Check/Check"; import TextInput from "../../Components/Inputs/TextInput"; import { PasswordEndAdornment } from "../../Components/Inputs/TextInput/Adornments"; @@ -16,7 +16,7 @@ import Logo from "../../assets/icons/checkmate-icon.svg?react"; import Background from "../../assets/Images/background-grid.svg?react"; import "./index.css"; import { useValidatePassword } from "./hooks/useValidatePassword"; -import { useTranslation } from "react-i18next"; +import { Trans, useTranslation } from "react-i18next"; const SetNewPassword = () => { const navigate = useNavigate(); @@ -34,7 +34,7 @@ const SetNewPassword = () => { const handleSubmit = async (e) => { e.preventDefault(); - const { error } = credentials.validate(form, { + const { error } = newOrChangedCredentials.validate(form, { abortEarly: false, context: { password: form.password }, }); @@ -43,20 +43,20 @@ const SetNewPassword = () => { createToast({ body: error.details && error.details.length > 0 - ? error.details[0].message - : "Error validating data.", + ? error.details[0].message // FIXME: Potential untranslated string + : t("auth.common.errors.validation"), }); } else { const action = await dispatch(setNewPassword({ token, form })); if (action.payload.success) { navigate("/new-password-confirmed"); createToast({ - body: "Your password was reset successfully.", + body: t("auth.forgotPassword.toasts.success"), }); } else { const errorMessage = action.payload - ? action.payload.msg - : "Unable to reset password. Please try again later or contact support."; + ? action.payload.msg // FIXME: Potential untranslated string + : t("auth.forgotPassword.toasts.error"); createToast({ body: errorMessage, }); @@ -98,7 +98,7 @@ const SetNewPassword = () => { gap={theme.spacing(4)} > - {t("commonAppName")} + {t("common.appName")} { svgHeight={24} mb={theme.spacing(4)} > - + - {t("authSetNewPasswordTitle")} - {t("authSetNewPasswordDescription")} + {t("auth.forgotPassword.heading")} + {t("auth.forgotPassword.subheadings.stepThree")} { id={passwordId} type="password" name="password" - label={t("commonPassword")} + label={t("auth.common.inputs.password.label")} isRequired={true} placeholder="••••••••" value={form.password} onChange={handleChange} error={errors.password ? true : false} - helperText={errors.password} + helperText={ + errors.password === "auth.common.inputs.password.errors.empty" + ? t(errors.password) + : "" + } // Other errors are related to required password conditions and are visualized below the input endAdornment={} /> @@ -185,13 +189,13 @@ const SetNewPassword = () => { id={confirmPasswordId} type="password" name="confirm" - label={t("authSetNewPasswordConfirmPassword")} + label={t("auth.common.inputs.passwordConfirm.label")} isRequired={true} - placeholder="••••••••" + placeholder={t("auth.common.inputs.passwordConfirm.placeholder")} value={form.confirm} onChange={handleChange} error={errors.confirm ? true : false} - helperText={errors.confirm} + helperText={t(errors.confirm)} // Localization keys are in validation.js endAdornment={} /> @@ -200,33 +204,37 @@ const SetNewPassword = () => { mb={theme.spacing(12)} > @@ -243,7 +251,7 @@ const SetNewPassword = () => { } sx={{ width: "100%", maxWidth: 400 }} > - {t("authSetNewPasswordResetPassword")} + {t("auth.forgotPassword.buttons.resetPassword")} @@ -251,15 +259,21 @@ const SetNewPassword = () => { textAlign="center" p={theme.spacing(12)} > - {t("goBackTo")} — - navigate("/login")} - sx={{ userSelect: "none" }} - > - {t("authLoginTitle")} + + navigate("/login")} + sx={{ userSelect: "none" }} + /> + ), + }} + /> diff --git a/client/src/Pages/Auth/hooks/useValidatePassword.jsx b/client/src/Pages/Auth/hooks/useValidatePassword.jsx index b49d0944b..102d8d73e 100644 --- a/client/src/Pages/Auth/hooks/useValidatePassword.jsx +++ b/client/src/Pages/Auth/hooks/useValidatePassword.jsx @@ -1,5 +1,5 @@ import { useMemo, useState } from "react"; -import { credentials } from "../../../Validation/validation"; +import { newOrChangedCredentials } from "../../../Validation/validation"; const getFeedbackStatus = (form, errors, field, criteria) => { const fieldErrors = errors[field]; @@ -36,7 +36,7 @@ function useValidatePassword() { validateValue.password = form.password; } - const { error } = credentials.validate(validateValue, validateOptions); + const { error } = newOrChangedCredentials.validate(validateValue, validateOptions); const errors = error?.details.map((error) => ({ path: error.path[0], type: error.type, diff --git a/client/src/Pages/Infrastructure/Create/index.jsx b/client/src/Pages/Infrastructure/Create/index.jsx index ab5df3086..3e439a6e0 100644 --- a/client/src/Pages/Infrastructure/Create/index.jsx +++ b/client/src/Pages/Infrastructure/Create/index.jsx @@ -322,7 +322,7 @@ const CreateInfrastructureMonitor = () => { diff --git a/client/src/Pages/Infrastructure/Details/index.jsx b/client/src/Pages/Infrastructure/Details/index.jsx index f7f96f931..fefb7d2aa 100644 --- a/client/src/Pages/Infrastructure/Details/index.jsx +++ b/client/src/Pages/Infrastructure/Details/index.jsx @@ -46,9 +46,9 @@ const InfrastructureDetails = () => { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - {t("networkError")} + {t("common.toasts.networkError")} - {t("checkConnection")} + {t("common.toasts.checkConnection")} ); } diff --git a/client/src/Pages/Infrastructure/Monitors/index.jsx b/client/src/Pages/Infrastructure/Monitors/index.jsx index 9797736c4..bfba843c0 100644 --- a/client/src/Pages/Infrastructure/Monitors/index.jsx +++ b/client/src/Pages/Infrastructure/Monitors/index.jsx @@ -66,9 +66,9 @@ const InfrastructureMonitors = () => { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - {t("networkError")} + {t("common.toasts.networkError")} - {t("checkConnection")} + {t("common.toasts.checkConnection")} ); } diff --git a/client/src/Pages/Maintenance/index.jsx b/client/src/Pages/Maintenance/index.jsx index eccc95b50..f155680a5 100644 --- a/client/src/Pages/Maintenance/index.jsx +++ b/client/src/Pages/Maintenance/index.jsx @@ -58,9 +58,9 @@ const Maintenance = () => { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - {t("networkError")} + {t("common.toasts.networkError")} - {t("checkConnection")} + {t("common.toasts.checkConnection")} ); } diff --git a/client/src/Pages/PageSpeed/Details/index.jsx b/client/src/Pages/PageSpeed/Details/index.jsx index d429858d2..5724f12a1 100644 --- a/client/src/Pages/PageSpeed/Details/index.jsx +++ b/client/src/Pages/PageSpeed/Details/index.jsx @@ -52,9 +52,9 @@ const PageSpeedDetails = () => { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - {t("networkError")} + {t("common.toasts.networkError")} - {t("checkConnection")} + {t("common.toasts.checkConnection")} ); } diff --git a/client/src/Pages/PageSpeed/Monitors/index.jsx b/client/src/Pages/PageSpeed/Monitors/index.jsx index bd40aedff..808541cee 100644 --- a/client/src/Pages/PageSpeed/Monitors/index.jsx +++ b/client/src/Pages/PageSpeed/Monitors/index.jsx @@ -35,9 +35,9 @@ const PageSpeed = () => { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - {t("networkError")} + {t("common.toasts.networkError")} - {t("checkConnection")} + {t("common.toasts.checkConnection")} ); } diff --git a/client/src/Pages/ServerUnreachable.jsx b/client/src/Pages/ServerUnreachable.jsx index e7d81926e..7ab96dd96 100644 --- a/client/src/Pages/ServerUnreachable.jsx +++ b/client/src/Pages/ServerUnreachable.jsx @@ -28,13 +28,13 @@ const ServerUnreachable = () => { // If successful, show toast and navigate to login page createToast({ - body: t("backendReconnected", "Connection to server restored"), + body: t("errorPages.serverUnreachable.toasts.reconnected"), }); navigate("/login"); } catch (error) { // If still unreachable, stay on this page and show toast createToast({ - body: t("backendStillUnreachable", "Server is still unreachable"), + body: t("errorPages.serverUnreachable.toasts.stillUnreachable"), }); } finally { setIsCheckingConnection(false); @@ -71,7 +71,7 @@ const ServerUnreachable = () => { gap={theme.spacing(4)} > - Checkmate + {t("common.appName")} { > @@ -131,10 +131,7 @@ const ServerUnreachable = () => { align="center" color={theme.palette.primary.contrastTextSecondary} > - {t( - "backendUnreachableMessage", - "The Checkmate server is not responding. Please check your deployment configuration or try again later." - )} + {t("errorPages.serverUnreachable.description")} @@ -156,8 +153,8 @@ const ServerUnreachable = () => { }} > {isCheckingConnection - ? t("retryingConnection", "Retrying Connection...") - : t("retryConnection", "Retry Connection")} + ? t("errorPages.serverUnreachable.retryButton.processing") + : t("errorPages.serverUnreachable.retryButton.default")} diff --git a/client/src/Pages/Settings/SettingsAbout.jsx b/client/src/Pages/Settings/SettingsAbout.jsx index 121b732f8..6acadd444 100644 --- a/client/src/Pages/Settings/SettingsAbout.jsx +++ b/client/src/Pages/Settings/SettingsAbout.jsx @@ -20,7 +20,9 @@ const SettingsAbout = () => { - Checkmate {2.1} + + {t("common.appName")} {2.1} + {t("settingsDevelopedBy")} diff --git a/client/src/Pages/StatusPage/Create/index.jsx b/client/src/Pages/StatusPage/Create/index.jsx index d1bb8d196..50535cd90 100644 --- a/client/src/Pages/StatusPage/Create/index.jsx +++ b/client/src/Pages/StatusPage/Create/index.jsx @@ -208,9 +208,9 @@ const CreateStatusPage = () => { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - {t("networkError")} + {t("common.toasts.networkError")} - {t("checkConnection")} + {t("common.toasts.checkConnection")} ); } diff --git a/client/src/Pages/StatusPage/Status/index.jsx b/client/src/Pages/StatusPage/Status/index.jsx index 341c6d731..ee1ec436c 100644 --- a/client/src/Pages/StatusPage/Status/index.jsx +++ b/client/src/Pages/StatusPage/Status/index.jsx @@ -69,9 +69,9 @@ const PublicStatus = () => { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - {t("networkError")} + {t("common.toasts.networkError")} - {t("checkConnection")} + {t("common.toasts.checkConnection")} ); } diff --git a/client/src/Pages/StatusPage/StatusPages/index.jsx b/client/src/Pages/StatusPage/StatusPages/index.jsx index 095023d76..650307bdb 100644 --- a/client/src/Pages/StatusPage/StatusPages/index.jsx +++ b/client/src/Pages/StatusPage/StatusPages/index.jsx @@ -32,9 +32,9 @@ const StatusPages = () => { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - {t("networkError")} + {t("common.toasts.networkError")} - {t("checkConnection")} + {t("common.toasts.checkConnection")} ); } diff --git a/client/src/Pages/Uptime/Details/index.jsx b/client/src/Pages/Uptime/Details/index.jsx index 5ad8bd61b..570b687d5 100644 --- a/client/src/Pages/Uptime/Details/index.jsx +++ b/client/src/Pages/Uptime/Details/index.jsx @@ -95,9 +95,9 @@ const UptimeDetails = () => { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - {t("networkError")} + {t("common.toasts.networkError")} - {t("checkConnection")} + {t("common.toasts.checkConnection")} ); } diff --git a/client/src/Pages/Uptime/Monitors/index.jsx b/client/src/Pages/Uptime/Monitors/index.jsx index ce9123816..793731190 100644 --- a/client/src/Pages/Uptime/Monitors/index.jsx +++ b/client/src/Pages/Uptime/Monitors/index.jsx @@ -158,9 +158,9 @@ const UptimeMonitors = () => { marginY={theme.spacing(4)} color={theme.palette.primary.contrastTextTertiary} > - {t("networkError")} + {t("common.toasts.networkError")} - {t("checkConnection")} + {t("common.toasts.checkConnection")} ); } diff --git a/client/src/Validation/validation.js b/client/src/Validation/validation.js index d94f7c49a..2826605c8 100644 --- a/client/src/Validation/validation.js +++ b/client/src/Validation/validation.js @@ -9,10 +9,9 @@ const nameSchema = joi .trim() .pattern(/^[\p{L}\p{M}''\- ]+$/u) .messages({ - "string.empty": "Name is required", - "string.max": "Name must be less than 50 characters", - "string.pattern.base": - "Name must contain only letters, spaces, apostrophes, or hyphens", + "string.empty": "auth.common.inputs.firstName.errors.empty", + "string.max": "auth.common.inputs.firstName.errors.length", + "string.pattern.base": "auth.common.inputs.firstName.errors.pattern", }); const lastnameSchema = joi @@ -21,13 +20,12 @@ const lastnameSchema = joi .trim() .pattern(/^[\p{L}\p{M}''\- ]+$/u) .messages({ - "string.empty": "Surname is required", - "string.max": "Surname must be less than 50 characters", - "string.pattern.base": - "Surname must contain only letters, spaces, apostrophes, or hyphens", + "string.empty": "auth.common.inputs.lastName.errors.empty", + "string.max": "auth.common.inputs.lastName.errors.length", + "string.pattern.base": "auth.common.inputs.lastName.errors.pattern", }); -const passwordSchema = joi +const newPasswordSchema = joi .string() .trim() .min(8) @@ -56,34 +54,28 @@ const passwordSchema = joi return value; }) .messages({ - "string.empty": "Password is required", - "string.min": "Password must be at least 8 characters long", - uppercase: "Password must contain at least one uppercase letter", - lowercase: "Password must contain at least one lowercase letter", - number: "Password must contain at least one number", - special: "Password must contain at least one special character", + "string.empty": "auth.common.inputs.password.errors.empty", + "string.min": "auth.common.inputs.password.errors.length", + uppercase: "auth.common.inputs.password.errors.uppercase", + lowercase: "auth.common.inputs.password.errors.lowercase", + number: "auth.common.inputs.password.errors.number", + special: "auth.common.inputs.password.errors.special", }); -const credentials = joi.object({ +const newOrChangedCredentials = joi.object({ firstName: nameSchema, lastName: lastnameSchema, email: joi .string() .trim() .email({ tlds: { allow: false } }) - .custom((value, helpers) => { - const lowercasedValue = value.toLowerCase(); - if (value !== lowercasedValue) { - return helpers.message("Email must be in lowercase"); - } - return lowercasedValue; - }) + .lowercase() .messages({ - "string.empty": "authRegisterEmailRequired", - "string.email": "authRegisterEmailInvalid", + "string.empty": "auth.common.inputs.email.errors.empty", + "string.email": "auth.common.inputs.email.errors.invalid", }), - password: passwordSchema, - newPassword: passwordSchema, + password: newPasswordSchema, + newPassword: newPasswordSchema, confirm: joi .string() .trim() @@ -95,14 +87,29 @@ const credentials = joi.object({ return value; }) .messages({ - "string.empty": "This field can't be empty", - different: "Passwords do not match", + "string.empty": "auth.common.inputs.passwordConfirm.errors.empty", + different: "auth.common.inputs.passwordConfirm.errors.different", }), role: joi.array(), teamId: joi.string().allow("").optional(), inviteToken: joi.string().allow(""), }); +const loginCredentials = joi.object({ + email: joi + .string() + .trim() + .email({ tlds: { allow: false } }) + .lowercase() + .messages({ + "string.empty": "auth.common.inputs.email.errors.empty", + "string.email": "auth.common.inputs.email.errors.invalid", + }), + password: joi.string().messages({ + "string.empty": "auth.common.inputs.password.errors.empty", + }), +}); + const monitorValidation = joi.object({ url: joi.when("type", { is: "docker", @@ -397,7 +404,8 @@ const infrastructureMonitorValidation = joi.object({ }); export { - credentials, + newOrChangedCredentials, + loginCredentials, imageValidation, monitorValidation, settingsValidation, diff --git a/client/src/locales/ar.json b/client/src/locales/ar.json deleted file mode 100644 index 765627912..000000000 --- a/client/src/locales/ar.json +++ /dev/null @@ -1,562 +0,0 @@ -{ - "dontHaveAccount": "", - "email": "", - "forgotPassword": "", - "password": "", - "signUp": "", - "submit": "", - "title": "", - "continue": "", - "enterEmail": "", - "authLoginTitle": "", - "authLoginEnterPassword": "", - "commonPassword": "", - "commonBack": "", - "authForgotPasswordTitle": "", - "authForgotPasswordResetPassword": "", - "createPassword": "", - "createAPassword": "", - "authRegisterAlreadyHaveAccount": "", - "commonAppName": "", - "authLoginEnterEmail": "", - "authRegisterTitle": "", - "authRegisterStepOneTitle": "", - "authRegisterStepOneDescription": "", - "authRegisterStepTwoTitle": "", - "authRegisterStepTwoDescription": "", - "authRegisterStepThreeTitle": "", - "authRegisterStepThreeDescription": "", - "authForgotPasswordDescription": "", - "authForgotPasswordSendInstructions": "", - "authForgotPasswordBackTo": "", - "authCheckEmailTitle": "", - "authCheckEmailDescription": "", - "authCheckEmailResendEmail": "", - "authCheckEmailBackTo": "", - "goBackTo": "", - "authCheckEmailDidntReceiveEmail": "", - "authCheckEmailClickToResend": "", - "authSetNewPasswordTitle": "", - "authSetNewPasswordDescription": "", - "authSetNewPasswordNewPassword": "", - "authSetNewPasswordConfirmPassword": "", - "confirmPassword": "", - "authSetNewPasswordResetPassword": "", - "authSetNewPasswordBackTo": "", - "authPasswordMustBeAtLeast": "", - "authPasswordCharactersLong": "", - "authPasswordMustContainAtLeast": "", - "authPasswordSpecialCharacter": "", - "authPasswordOneNumber": "", - "authPasswordUpperCharacter": "", - "authPasswordLowerCharacter": "", - "authPasswordConfirmAndPassword": "", - "authPasswordMustMatch": "", - "authRegisterCreateAccount": "", - "authRegisterCreateSuperAdminAccount": "", - "authRegisterSignUpWithEmail": "", - "authRegisterBySigningUp": "", - "distributedStatusHeaderText": "", - "distributedStatusSubHeaderText": "", - "settingsGeneralSettings": "", - "settingsDisplayTimezone": "", - "settingsDisplayTimezoneDescription": "", - "settingsAppearance": "", - "settingsAppearanceDescription": "", - "settingsThemeMode": "", - "settingsLanguage": "", - "settingsDistributedUptime": "", - "settingsDistributedUptimeDescription": "", - "settingsEnabled": "", - "settingsDisabled": "", - "settingsHistoryAndMonitoring": "", - "settingsHistoryAndMonitoringDescription": "", - "settingsTTLLabel": "", - "settingsTTLOptionalLabel": "", - "settingsClearAllStats": "", - "settingsClearAllStatsButton": "", - "settingsClearAllStatsDialogTitle": "", - "settingsClearAllStatsDialogDescription": "", - "settingsClearAllStatsDialogConfirm": "", - "settingsDemoMonitors": "", - "settingsDemoMonitorsDescription": "", - "settingsAddDemoMonitors": "", - "settingsAddDemoMonitorsButton": "", - "settingsRemoveAllMonitors": "", - "settingsRemoveAllMonitorsButton": "", - "settingsRemoveAllMonitorsDialogTitle": "", - "settingsRemoveAllMonitorsDialogConfirm": "", - "settingsWallet": "", - "settingsWalletDescription": "", - "settingsAbout": "", - "settingsDevelopedBy": "", - "settingsSave": "", - "settingsSuccessSaved": "", - "settingsFailedToSave": "", - "settingsStatsCleared": "", - "settingsFailedToClearStats": "", - "settingsDemoMonitorsAdded": "", - "settingsFailedToAddDemoMonitors": "", - "settingsMonitorsDeleted": "", - "settingsFailedToDeleteMonitors": "", - "starPromptTitle": "", - "starPromptDescription": "", - "https": "", - "http": "", - "monitor": "", - "aboutus": "", - "now": "", - "delete": "", - "configure": "", - "networkError": "", - "responseTime": "", - "ms": "", - "bar": "", - "area": "", - "country": "", - "city": "", - "response": "", - "checkConnection": "", - "passwordreset": "", - "authRegisterStepOnePersonalDetails": "", - "authCheckEmailOpenEmailButton": "", - "authNewPasswordConfirmed": "", - "monitorStatusUp": "", - "monitorStatusDown": "", - "webhookSendSuccess": "", - "webhookSendError": "", - "webhookUnsupportedPlatform": "", - "distributedRightCategoryTitle": "", - "distributedStatusServerMonitors": "", - "distributedStatusServerMonitorsDescription": "", - "distributedUptimeCreateSelectURL": "", - "distributedUptimeCreateChecks": "", - "distributedUptimeCreateChecksDescription": "", - "distributedUptimeCreateIncidentNotification": "", - "distributedUptimeCreateIncidentDescription": "", - "distributedUptimeCreateAdvancedSettings": "", - "distributedUptimeDetailsNoMonitorHistory": "", - "distributedUptimeDetailsFooterHeading": "", - "distributedUptimeDetailsFooterBuilt": "", - "distributedUptimeDetailsFooterSolana": "", - "distributedUptimeDetailsMonitorHeader": "", - "distributedUptimeDetailsStatusHeaderUptime": "", - "distributedUptimeDetailsStatusHeaderLastUpdate": "", - "notifications": { - "enableNotifications": "", - "testNotification": "", - "addOrEditNotifications": "", - "slack": { - "label": "", - "description": "", - "webhookLabel": "", - "webhookPlaceholder": "", - "webhookRequired": "" - }, - "discord": { - "label": "", - "description": "", - "webhookLabel": "", - "webhookPlaceholder": "", - "webhookRequired": "" - }, - "telegram": { - "label": "", - "description": "", - "tokenLabel": "", - "tokenPlaceholder": "", - "chatIdLabel": "", - "chatIdPlaceholder": "", - "fieldsRequired": "" - }, - "webhook": { - "label": "", - "description": "", - "urlLabel": "", - "urlPlaceholder": "", - "urlRequired": "" - }, - "testNotificationDevelop": "", - "integrationButton": "", - "testSuccess": "", - "testFailed": "", - "unsupportedType": "", - "networkError": "" - }, - "testLocale": "", - "add": "", - "monitors": "", - "distributedUptimeStatusCreateStatusPage": "", - "distributedUptimeStatusCreateStatusPageAccess": "", - "distributedUptimeStatusCreateStatusPageReady": "", - "distributedUptimeStatusBasicInfoHeader": "", - "distributedUptimeStatusBasicInfoDescription": "", - "distributedUptimeStatusLogoHeader": "", - "distributedUptimeStatusLogoDescription": "", - "distributedUptimeStatusLogoUploadButton": "", - "distributedUptimeStatusStandardMonitorsHeader": "", - "distributedUptimeStatusStandardMonitorsDescription": "", - "distributedUptimeStatusCreateYour": "", - "distributedUptimeStatusEditYour": "", - "distributedUptimeStatusPublishedLabel": "", - "distributedUptimeStatusCompanyNameLabel": "", - "distributedUptimeStatusPageAddressLabel": "", - "distributedUptimeStatus30Days": "", - "distributedUptimeStatus60Days": "", - "distributedUptimeStatus90Days": "", - "distributedUptimeStatusPageNotSetUp": "", - "distributedUptimeStatusContactAdmin": "", - "distributedUptimeStatusPageNotPublic": "", - "distributedUptimeStatusPageDeleteDialog": "", - "distributedUptimeStatusPageDeleteConfirm": "", - "distributedUptimeStatusPageDeleteDescription": "", - "distributedUptimeStatusDevices": "", - "distributedUptimeStatusUpt": "", - "distributedUptimeStatusUptBurned": "", - "distributedUptimeStatusUptLogo": "", - "incidentsTableNoIncidents": "", - "incidentsTablePaginationLabel": "", - "incidentsTableMonitorName": "", - "incidentsTableStatus": "", - "incidentsTableDateTime": "", - "incidentsTableStatusCode": "", - "incidentsTableMessage": "", - "incidentsOptionsHeader": "", - "incidentsOptionsHeaderFilterBy": "", - "incidentsOptionsHeaderFilterAll": "", - "incidentsOptionsHeaderFilterDown": "", - "incidentsOptionsHeaderFilterCannotResolve": "", - "incidentsOptionsHeaderShow": "", - "incidentsOptionsHeaderLastHour": "", - "incidentsOptionsHeaderLastDay": "", - "incidentsOptionsHeaderLastWeek": "", - "incidentsOptionsPlaceholderAllServers": "", - "infrastructureCreateYour": "", - "infrastructureCreateGeneralSettingsDescription": "", - "infrastructureServerRequirement": "", - "infrastructureCustomizeAlerts": "", - "infrastructureAlertNotificationDescription": "", - "infrastructureCreateMonitor": "", - "infrastructureProtocol": "", - "infrastructureServerUrlLabel": "", - "infrastructureDisplayNameLabel": "", - "infrastructureAuthorizationSecretLabel": "", - "gb": "", - "mb": "", - "mem": "", - "memoryUsage": "", - "cpu": "", - "cpuUsage": "", - "cpuTemperature": "", - "diskUsage": "", - "used": "", - "total": "", - "cores": "", - "frequency": "", - "status": "", - "cpuPhysical": "", - "cpuLogical": "", - "cpuFrequency": "", - "avgCpuTemperature": "", - "memory": "", - "disk": "", - "uptime": "", - "os": "", - "host": "", - "actions": "", - "integrations": "", - "integrationsPrism": "", - "integrationsSlack": "", - "integrationsSlackInfo": "", - "integrationsDiscord": "", - "integrationsDiscordInfo": "", - "integrationsZapier": "", - "integrationsZapierInfo": "", - "commonSave": "", - "createYour": "", - "createMonitor": "", - "pause": "", - "resume": "", - "editing": "", - "url": "", - "access": "", - "timezone": "", - "features": "", - "administrator": "", - "loginHere": "", - "displayName": "", - "urlMonitor": "", - "portToMonitor": "", - "websiteMonitoring": "", - "websiteMonitoringDescription": "", - "pingMonitoring": "", - "pingMonitoringDescription": "", - "dockerContainerMonitoring": "", - "dockerContainerMonitoringDescription": "", - "portMonitoring": "", - "portMonitoringDescription": "", - "createMaintenanceWindow": "", - "createMaintenance": "", - "editMaintenance": "", - "maintenanceWindowName": "", - "friendlyNameInput": "", - "friendlyNamePlaceholder": "", - "maintenanceRepeat": "", - "maintenance": "", - "duration": "", - "addMonitors": "", - "window": "", - "cancel": "", - "message": "", - "low": "", - "high": "", - "statusCode": "", - "date&Time": "", - "type": "", - "statusPageName": "", - "publicURL": "", - "repeat": "", - "edit": "", - "createA": "", - "remove": "", - "maintenanceWindowDescription": "", - "startTime": "", - "timeZoneInfo": "", - "monitorsToApply": "", - "nextWindow": "", - "notFoundButton": "", - "pageSpeedConfigureSettingsDescription": "", - "monitorDisplayName": "", - "whenNewIncident": "", - "notifySMS": "", - "notifyEmails": "", - "seperateEmails": "", - "checkFrequency": "", - "matchMethod": "", - "expectedValue": "", - "deleteDialogTitle": "", - "deleteDialogDescription": "", - "pageSpeedMonitor": "", - "shown": "", - "ago": "", - "companyName": "", - "pageSpeedDetailsPerformanceReport": "", - "pageSpeedDetailsPerformanceReportCalculator": "", - "checkingEvery": "", - "statusPageCreateSettings": "", - "basicInformation": "", - "statusPageCreateBasicInfoDescription": "", - "statusPageCreateSelectTimeZoneDescription": "", - "statusPageCreateAppearanceDescription": "", - "statusPageCreateSettingsCheckboxLabel": "", - "statusPageCreateBasicInfoStatusPageAddress": "", - "statusPageCreateTabsContent": "", - "statusPageCreateTabsContentDescription": "", - "statusPageCreateTabsContentFeaturesDescription": "", - "showCharts": "", - "showUptimePercentage": "", - "removeLogo": "", - "statusPageStatus": "", - "statusPageStatusContactAdmin": "", - "statusPageStatusNotPublic": "", - "statusPageStatusNoPage": "", - "statusPageStatusServiceStatus": "", - "deleteStatusPage": "", - "deleteStatusPageConfirm": "", - "deleteStatusPageDescription": "", - "uptimeCreate": "", - "uptimeCreateJsonPath": "", - "uptimeCreateJsonPathQuery": "", - "maintenanceTableActionMenuDialogTitle": "", - "infrastructureEditYour": "", - "infrastructureEditMonitor": "", - "infrastructureMonitorCreated": "", - "infrastructureMonitorUpdated": "", - "errorInvalidTypeId": "", - "errorInvalidFieldId": "", - "inviteNoTokenFound": "", - "pageSpeedWarning": "", - "pageSpeedLearnMoreLink": "", - "pageSpeedAddApiKey": "", - "update": "", - "invalidFileFormat": "", - "invalidFileSize": "", - "ClickUpload": "", - "DragandDrop": "", - "MaxSize": "", - "SupportedFormats": "", - "FirstName": "", - "LastName": "", - "EmailDescriptionText": "", - "YourPhoto": "", - "PhotoDescriptionText": "", - "save": "", - "DeleteDescriptionText": "", - "DeleteAccountWarning": "", - "DeleteWarningTitle": "", - "authRegisterFirstName": "", - "authRegisterLastName": "", - "authRegisterEmail": "", - "authRegisterEmailRequired": "", - "bulkImport": { - "title": "", - "selectFileTips": "", - "selectFileDescription": "", - "selectFile": "", - "parsingFailed": "", - "uploadSuccess": "", - "validationFailed": "", - "noFileSelected": "", - "fallbackPage": "" - }, - "welcomeBack": "", - "authRegisterLoginLink": "", - "validationNameRequired": "", - "validationNameTooLong": "", - "validationNameInvalidCharacters": "", - "settingsSystemReset": "", - "settingsSystemResetDescription": "", - "DeleteAccountTitle": "", - "DeleteAccountButton": "", - "authRegisterEmailInvalid": "", - "publicLink": "", - "doNotHaveAccount": "", - "registerHere": "", - "backendUnreachable": "", - "backendUnreachableMessage": "", - "backendUnreachableError": "", - "retryConnection": "", - "retryingConnection": "", - "backendReconnected": "", - "backendStillUnreachable": "", - "backendConnectionError": "", - "maskedPageSpeedKeyPlaceholder": "", - "pageSpeedApiKeyFieldTitle": "", - "pageSpeedApiKeyFieldLabel": "", - "pageSpeedApiKeyFieldDescription": "", - "pageSpeedApiKeyFieldResetLabel": "", - "reset": "", - "ignoreTLSError": "", - "tlsErrorIgnored": "", - "ignoreTLSErrorDescription": "", - "createNew": "", - "greeting": { - "prepend": "", - "append": "", - "overview": "" - }, - "monitorStatus": { - "up": "", - "down": "", - "paused": "" - }, - "roles": { - "superAdmin": "", - "admin": "", - "teamMember": "", - "demoUser": "" - }, - "teamPanel": { - "teamMembers": "", - "filter": { - "all": "", - "member": "" - }, - "inviteTeamMember": "", - "inviteNewTeamMember": "", - "inviteDescription": "", - "email": "", - "selectRole": "", - "inviteLink": "", - "cancel": "", - "noMembers": "", - "getToken": "", - "emailToken": "", - "table": { - "name": "", - "email": "", - "role": "", - "created": "" - } - }, - "monitorState": { - "paused": "", - "resumed": "", - "active": "" - }, - "menu": { - "uptime": "", - "pagespeed": "", - "infrastructure": "", - "distributedUptime": "", - "incidents": "", - "statusPages": "", - "maintenance": "", - "integrations": "", - "settings": "", - "support": "", - "discussions": "", - "docs": "", - "changelog": "", - "profile": "", - "password": "", - "team": "", - "logOut": "" - }, - "settingsEmail": "", - "settingsEmailDescription": "", - "settingsEmailHost": "", - "settingsEmailPort": "", - "settingsEmailAddress": "", - "settingsEmailPassword": "", - "settingsEmailUser": "", - "settingsEmailFieldResetLabel": "", - "state": "", - "statusBreadCrumbsStatusPages": "", - "statusBreadCrumbsDetails": "", - "authForgotPasswordInstructions": "", - "settingsThemeModeLight": "", - "settingsThemeModeDark": "", - "settingsClearAllStatsDialogCancel": "", - "commonSaving": "", - "navControls": "", - "incidentsPageTitle": "", - "passwordPanel": { - "passwordChangedSuccess": "", - "passwordInputIncorrect": "", - "currentPassword": "", - "enterCurrentPassword": "", - "newPassword": "", - "enterNewPassword": "", - "confirmNewPassword": "", - "passwordRequirements": "", - "saving": "" - }, - "settingsEmailConnectionHost": "", - "sendTestEmail": "", - "emailSent": "", - "failedToSendEmail": "", - "settingsTestEmail": "", - "settingsTestEmailSuccess": "", - "settingsTestEmailFailed": "", - "settingsTestEmailFailedWithReason": "", - "settingsTestEmailUnknownError": "", - "settingsEmailRequiredFields": "", - "statusMsg": { - "paused": "", - "up": "", - "down": "", - "pending": "" - }, - "settingsURLTitle": "", - "settingsURLDescription": "", - "settingsURLSelectTitle": "", - "settingsURLEnabled": "", - "settingURLDisabled": "", - "uptimeGeneralInstructions": { - "http": "", - "ping": "", - "docker": "", - "port": "" - } -} diff --git a/client/src/locales/cs.json b/client/src/locales/cs.json index ac728160e..60bc510f0 100644 --- a/client/src/locales/cs.json +++ b/client/src/locales/cs.json @@ -1,75 +1,203 @@ { - "dontHaveAccount": "", - "email": "E-mail", - "forgotPassword": "Zapomenuté heslo", - "password": "", - "signUp": "Registace", - "submit": "Odeslat", + "common": { + "appName": "Checkmate", + "monitoringAgentName": "Capture", + "buttons": { + "toggleTheme": "Přepnout mezi světlým a tmavým motivem" + }, + "toasts": { + "networkError": "Chyba připojení k síti", + "checkConnection": "Zkontrolujte prosím své připojení k síti", + "unknownError": "Nastala neznámá chyba" + } + }, + "auth": { + "common": { + "navigation": { + "continue": "Pokračovat", + "back": "Zpět" + }, + "inputs": { + "email": { + "label": "E-mail", + "placeholder": "jan.novak@domena.cz", + "errors": { + "empty": "Zadejte prosím e-mailovou adresu", + "invalid": "Překontrolujte si prosím správnost zadané e-mailové adresy" + } + }, + "password": { + "label": "Heslo", + "rules": { + "length": { + "beginning": "Heslo musí být dlouhé alespoň", + "highlighted": "8 znaků" + }, + "special": { + "beginning": "Heslo musí obsahovat alespoň", + "highlighted": "1 speciální znak" + }, + "number": { + "beginning": "Heslo musí obsahovat alespoň", + "highlighted": "1 číslo" + }, + "uppercase": { + "beginning": "Heslo musí obsahovat alespoň", + "highlighted": "1 velké písmeno" + }, + "lowercase": { + "beginning": "Heslo musí obsahovat alespoň", + "highlighted": "1 malé písmeno" + }, + "match": { + "beginning": "Obě hesla se", + "highlighted": "musí shodovat" + } + }, + "errors": { + "empty": "Zadejte prosím heslo", + "length": "Heslo musí být dlouhé alespoň 8 znaků", + "uppercase": "Heslo musí obsahovat alespoň 1 velké písmeno", + "lowercase": "Heslo musí obsahovat alespoň 1 malé písmeno", + "number": "Heslo musí obsahovat alespoň 1 číslo", + "special": "Heslo musí obsahovat alespoň 1 speciální znak", + "incorrect": "Zadané heslo neodpovídá tomu, co bylo nastaveno" + } + }, + "passwordConfirm": { + "label": "Potvrzení hesla", + "placeholder": "Pro ověření správnosti zadejte heslo ještě jednou", + "errors": { + "empty": "Zadejte prosím své heslo ještě jednou, aby mohla být potvrzena jeho správnost (odhalí překlepy)", + "different": "Zadaná hesla se liší, takže je nejspíše jedno z nich špatně zapsané" + } + }, + "firstName": { + "label": "Jméno", + "placeholder": "Jan", + "errors": { + "empty": "Zadejte prosím své křestní jméno", + "length": "Jméno se musí vejít do 50 znaků", + "pattern": "Součástí jména mohou být pouze písmena, mezery apostrofy nebo spojovníky" + } + }, + "lastName": { + "label": "Příjmení", + "placeholder": "Novák", + "errors": { + "empty": "Zadejte prosím své příjmení", + "length": "Příjmení se musí vejít do 50 znaků", + "pattern": "Součástí příjmení mohou být pouze písmena, mezery apostrofy nebo spojovníky" + } + } + }, + "errors": { + "validation": "Nastala chyba při ověřování dat." + } + }, + "login": { + "heading": "Přihlášení", + "subheadings": { + "stepOne": "Zadejte svůj e-mail", + "stepTwo": "Zadejte své heslo" + }, + "links": { + "forgotPassword": "Zapomněli jste heslo? Obnovte si ho", + "register": "Ještě nemáte účet? Zaregistrujte se" + }, + "toasts": { + "success": "Vítejte zpět", + "incorrectPassword": "Nesprávné heslo" + } + }, + "registration": { + "heading": { + "superAdmin": "Vytvoření superadministrátora", + "user": "Registrace" + }, + "subheadings": { + "stepOne": "Zadejte své osobní údaje", + "stepTwo": "Zadejte svůj e-mail", + "stepThree": "Nastavte si heslo" + }, + "description": { + "superAdmin": "Pro začátek vytvořte účet superadministrátora", + "user": "Zaregistrujte se jako uživatel a požádejte svého superadministrátora, aby vám přidělil oprávnění k hlídačům" + }, + "gettingStartedButton": { + "superAdmin": "Vytvořit účet superadministrátora", + "user": "Zaregistrovat se jako běžný uživatel" + }, + "termsAndPolicies": "Vytvořením účtu souhlasíte s našimi Podmínkami použití (anglicky) a Podmínkami zpracování osobních údajů (anglicky).", + "links": { + "login": "Máte již vytvořený účet? Přihlašte se" + }, + "toasts": { + "success": "Vítejte! Váš účet byl úspěšně vytvořen." + } + }, + "forgotPassword": { + "heading": "Zapomenuté heslo", + "subheadings": { + "stepOne": "Nebojte se, zašleme vám pokyny pro obnovení hesla.", + "stepTwo": "Odkaz pro obnovení hesla byl odeslán na ", + "stepThree": "Nové heslo se musí lišit od těch, které jste již použili.", + "stepFour": "Heslo bylo úspěšně obnoveno. Klepněte na tlačítko a dojde k čarovnému přihlášení." + }, + "buttons": { + "openEmail": "Otevřít e-mailovou aplikaci", + "resetPassword": "Obnovit heslo" + }, + "imageAlts": { + "passwordKey": "Ikonka přístupového klíče", + "email": "Ikonka e-mailu", + "lock": "Ikonka zámku", + "passwordConfirm": "Ikonka potvrzeného hesla" + }, + "links": { + "login": "Vrátit se k Přihlášení", + "resend": "Nedorazil vám e-mail? Klepněte pro opětovné zaslání" + }, + "toasts": { + "sent": "Instrukce vám dorazí na .", + "emailNotFound": "Nepodařilo se nalézt e-mailovou adresu.", + "redirect": "Přesměrování proběhne za ...", + "success": "Heslo bylo úspěšně obnoveno.", + "error": "Obnova hesla se nepodařila. Zkuste to prosím znovu nebo kontaktujte podporu." + } + } + }, + "errorPages": { + "serverUnreachable": { + "toasts": { + "reconnected": "Podařilo se úspěšně obnovit spojení se serverem", + "stillUnreachable": "Server je stále nedosažitelný. Zkuste to prosím později." + }, + "alertBox": "Chyba připojení k serveru", + "description": "Nepodařilo se připojit k serveru. Zkontrolujte si prosím internetové připojení a pokud problém přetrvává, ověřte konfiguraci aplikace Checkmate.", + "retryButton": { + "default": "Zkusit se znovu připojit", + "processing": "Probíhá připojování…" + } + } + }, + "submit": "", "title": "", - "continue": "Pokračovat", - "enterEmail": "Zadejte svůj e-mail", - "authLoginTitle": "Přihlášení", - "authLoginEnterPassword": "Zadejte své heslo", - "commonPassword": "Heslo", - "commonBack": "Zpět", - "authForgotPasswordTitle": "Zapomněli jste heslo?", - "authForgotPasswordResetPassword": "Resetovat heslo", "createPassword": "", - "createAPassword": "", - "authRegisterAlreadyHaveAccount": "Máte již účet?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "Zadejte svůj e-mail", - "authRegisterTitle": "Vytvoření účtu", - "authRegisterStepOneTitle": "", - "authRegisterStepOneDescription": "Začněte tím, že zadáte své údaje", - "authRegisterStepTwoTitle": "", - "authRegisterStepTwoDescription": "Řekněte nám o sobě víc", - "authRegisterStepThreeTitle": "Téměř hotovo!", - "authRegisterStepThreeDescription": "Zkontrolujte své údaje", - "authForgotPasswordDescription": "Není se čeho obávat, zašleme vám instrukce k obnově.", - "authForgotPasswordSendInstructions": "", - "authForgotPasswordBackTo": "", - "authCheckEmailTitle": "", - "authCheckEmailDescription": "Odkaz pro obnovu hesla zašleme na", - "authCheckEmailResendEmail": "Znovu odeslat e-mail", - "authCheckEmailBackTo": "", - "goBackTo": "", - "authCheckEmailDidntReceiveEmail": "Neobdrželi jste e-mail?", - "authCheckEmailClickToResend": "Klepněte pro opětovné odeslání", - "authSetNewPasswordTitle": "Nastavení nového hesla", - "authSetNewPasswordDescription": "Nové heslo se musí lišit od těch, které jste použili dříve.", - "authSetNewPasswordNewPassword": "Nové heslo", - "authSetNewPasswordConfirmPassword": "", - "confirmPassword": "", - "authSetNewPasswordResetPassword": "Resetovat heslo", - "authSetNewPasswordBackTo": "", - "authPasswordMustBeAtLeast": "Musí být alespoň", - "authPasswordCharactersLong": "", - "authPasswordMustContainAtLeast": "", - "authPasswordSpecialCharacter": "", - "authPasswordOneNumber": "", - "authPasswordUpperCharacter": "", - "authPasswordLowerCharacter": "", - "authPasswordConfirmAndPassword": "", - "authPasswordMustMatch": "", - "authRegisterCreateAccount": "", - "authRegisterCreateSuperAdminAccount": "Začněte tím, že si vytvoříte účet superadministrátora", - "authRegisterSignUpWithEmail": "Registrovat přes e-mail", - "authRegisterBySigningUp": "Registrací souhlasíte s našimi", "distributedStatusHeaderText": "", "distributedStatusSubHeaderText": "", - "settingsGeneralSettings": "Obecná nastavení", + "settingsGeneralSettings": "", "settingsDisplayTimezone": "", "settingsDisplayTimezoneDescription": "", - "settingsAppearance": "Vzhled", + "settingsAppearance": "", "settingsAppearanceDescription": "", "settingsThemeMode": "", - "settingsLanguage": "Jazyk", + "settingsLanguage": "", "settingsDistributedUptime": "", "settingsDistributedUptimeDescription": "", - "settingsEnabled": "Zapnuto", - "settingsDisabled": "Vypnuto", - "settingsHistoryAndMonitoring": "Historie a monitorování", + "settingsEnabled": "", + "settingsDisabled": "", + "settingsHistoryAndMonitoring": "", "settingsHistoryAndMonitoringDescription": "", "settingsTTLLabel": "", "settingsTTLOptionalLabel": "", @@ -89,10 +217,10 @@ "settingsWallet": "", "settingsWalletDescription": "", "settingsAbout": "", - "settingsDevelopedBy": "Vyvinuto společností Bluewave Labs.", - "settingsSave": "Uložit", - "settingsSuccessSaved": "Nastavení bylo úspěšně uloženo", - "settingsFailedToSave": "Nepodařilo se uložit nastavení", + "settingsDevelopedBy": "", + "settingsSave": "", + "settingsSuccessSaved": "", + "settingsFailedToSave": "", "settingsStatsCleared": "", "settingsFailedToClearStats": "", "settingsDemoMonitorsAdded": "", @@ -108,7 +236,6 @@ "now": "", "delete": "", "configure": "", - "networkError": "", "responseTime": "", "ms": "", "bar": "", @@ -116,11 +243,6 @@ "country": "", "city": "", "response": "", - "checkConnection": "", - "passwordreset": "", - "authRegisterStepOnePersonalDetails": "Zadejte své osobní údaje", - "authCheckEmailOpenEmailButton": "", - "authNewPasswordConfirmed": "", "monitorStatusUp": "", "monitorStatusDown": "", "webhookSendSuccess": "", @@ -394,10 +516,6 @@ "DeleteDescriptionText": "", "DeleteAccountWarning": "", "DeleteWarningTitle": "", - "authRegisterFirstName": "", - "authRegisterLastName": "", - "authRegisterEmail": "", - "authRegisterEmailRequired": "", "bulkImport": { "title": "", "selectFileTips": "", @@ -409,27 +527,11 @@ "noFileSelected": "", "fallbackPage": "" }, - "welcomeBack": "", - "authRegisterLoginLink": "", - "validationNameRequired": "", - "validationNameTooLong": "", - "validationNameInvalidCharacters": "", "settingsSystemReset": "", "settingsSystemResetDescription": "", "DeleteAccountTitle": "", "DeleteAccountButton": "", - "authRegisterEmailInvalid": "", "publicLink": "", - "doNotHaveAccount": "", - "registerHere": "", - "backendUnreachable": "", - "backendUnreachableMessage": "", - "backendUnreachableError": "", - "retryConnection": "", - "retryingConnection": "", - "backendReconnected": "", - "backendStillUnreachable": "", - "backendConnectionError": "", "maskedPageSpeedKeyPlaceholder": "", "pageSpeedApiKeyFieldTitle": "", "pageSpeedApiKeyFieldLabel": "", @@ -514,7 +616,6 @@ "state": "", "statusBreadCrumbsStatusPages": "", "statusBreadCrumbsDetails": "", - "authForgotPasswordInstructions": "", "settingsThemeModeLight": "", "settingsThemeModeDark": "", "settingsClearAllStatsDialogCancel": "", diff --git a/client/src/locales/de.json b/client/src/locales/de.json index 948748de3..8aa520e29 100644 --- a/client/src/locales/de.json +++ b/client/src/locales/de.json @@ -1,61 +1,188 @@ { - "dontHaveAccount": "Noch kein Konto", - "email": "E-Mail", - "forgotPassword": "Passwort vergessen", - "password": "passwort", - "signUp": "Registrieren", + "common": { + "appName": "Checkmate", + "monitoringAgentName": "Capture", + "buttons": { + "toggleTheme": "" + }, + "toasts": { + "networkError": "", + "checkConnection": "", + "unknownError": "" + } + }, + "auth": { + "common": { + "navigation": { + "continue": "Weiter", + "back": "Zurück" + }, + "inputs": { + "email": { + "label": "E-Mail", + "placeholder": "", + "errors": { + "empty": "", + "invalid": "" + } + }, + "password": { + "label": "Passwort", + "rules": { + "length": { + "beginning": "", + "highlighted": "" + }, + "special": { + "beginning": "", + "highlighted": "" + }, + "number": { + "beginning": "", + "highlighted": "" + }, + "uppercase": { + "beginning": "", + "highlighted": "" + }, + "lowercase": { + "beginning": "", + "highlighted": "" + }, + "match": { + "beginning": "", + "highlighted": "" + } + }, + "errors": { + "empty": "", + "length": "", + "uppercase": "", + "lowercase": "", + "number": "", + "special": "", + "incorrect": "" + } + }, + "passwordConfirm": { + "label": "", + "placeholder": "", + "errors": { + "empty": "", + "different": "" + } + }, + "firstName": { + "label": "", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + }, + "lastName": { + "label": "", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + } + }, + "errors": { + "validation": "" + } + }, + "login": { + "heading": "Anmelden", + "subheadings": { + "stepOne": "", + "stepTwo": "Geben Sie Ihr Passwort ein" + }, + "links": { + "forgotPassword": "Passwort vergessen? Passwort zurücksetzen", + "register": "" + }, + "toasts": { + "success": "", + "incorrectPassword": "" + } + }, + "registration": { + "heading": { + "superAdmin": "", + "user": "Registrieren" + }, + "subheadings": { + "stepOne": "", + "stepTwo": "", + "stepThree": "Erstelle dein Passwort" + }, + "description": { + "superAdmin": "", + "user": "" + }, + "gettingStartedButton": { + "superAdmin": "", + "user": "" + }, + "termsAndPolicies": "", + "links": { + "login": "" + }, + "toasts": { + "success": "" + } + }, + "forgotPassword": { + "heading": "Passwort zurücksetzen", + "subheadings": { + "stepOne": "", + "stepTwo": "", + "stepThree": "", + "stepFour": "" + }, + "buttons": { + "openEmail": "", + "resetPassword": "" + }, + "imageAlts": { + "passwordKey": "", + "email": "", + "lock": "", + "passwordConfirm": "" + }, + "links": { + "login": "", + "resend": "" + }, + "toasts": { + "sent": "", + "emailNotFound": "", + "redirect": "", + "success": "", + "error": "" + } + } + }, + "errorPages": { + "serverUnreachable": { + "toasts": { + "reconnected": "", + "stillUnreachable": "" + }, + "alertBox": "", + "description": "", + "retryButton": { + "default": "", + "processing": "" + } + } + }, "submit": "Absenden", "title": "Titel", - "continue": "Weiter", - "enterEmail": "Geben Sie Ihre E-Mail-Adresse ein", - "authLoginTitle": "Anmelden", - "authLoginEnterPassword": "Geben Sie Ihr Passwort ein", - "commonPassword": "Passwort", - "commonBack": "Zurück", - "authForgotPasswordTitle": "Passwort vergessen?", - "authForgotPasswordResetPassword": "Passwort zurücksetzen", - "createPassword": "Erstelle dein Passwort", - "createAPassword": "Passwort", - "authRegisterAlreadyHaveAccount": "Hast du schon eine Account?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "", - "authRegisterTitle": "", - "authRegisterStepOneTitle": "", - "authRegisterStepOneDescription": "", - "authRegisterStepTwoTitle": "", - "authRegisterStepTwoDescription": "", - "authRegisterStepThreeTitle": "", - "authRegisterStepThreeDescription": "", - "authForgotPasswordDescription": "", - "authForgotPasswordSendInstructions": "", - "authForgotPasswordBackTo": "", - "authCheckEmailTitle": "", - "authCheckEmailDescription": "", - "authCheckEmailResendEmail": "", - "authCheckEmailBackTo": "", - "goBackTo": "", - "authCheckEmailDidntReceiveEmail": "", - "authCheckEmailClickToResend": "", - "authSetNewPasswordTitle": "", - "authSetNewPasswordDescription": "", - "authSetNewPasswordNewPassword": "", - "authSetNewPasswordConfirmPassword": "", - "confirmPassword": "", - "authSetNewPasswordResetPassword": "", - "authSetNewPasswordBackTo": "", - "authPasswordMustBeAtLeast": "", - "authPasswordCharactersLong": "", - "authPasswordMustContainAtLeast": "", - "authPasswordSpecialCharacter": "", - "authPasswordOneNumber": "", - "authPasswordUpperCharacter": "", - "authPasswordLowerCharacter": "", - "authPasswordConfirmAndPassword": "", - "authPasswordMustMatch": "", - "authRegisterCreateAccount": "", - "authRegisterCreateSuperAdminAccount": "", - "authRegisterSignUpWithEmail": "", - "authRegisterBySigningUp": "", "distributedStatusHeaderText": "", "distributedStatusSubHeaderText": "", "settingsGeneralSettings": "", @@ -108,7 +235,6 @@ "now": "", "delete": "", "configure": "", - "networkError": "", "responseTime": "", "ms": "", "bar": "", @@ -116,11 +242,6 @@ "country": "", "city": "", "response": "", - "checkConnection": "", - "passwordreset": "", - "authRegisterStepOnePersonalDetails": "", - "authCheckEmailOpenEmailButton": "", - "authNewPasswordConfirmed": "", "monitorStatusUp": "", "monitorStatusDown": "", "webhookSendSuccess": "", @@ -394,10 +515,6 @@ "DeleteDescriptionText": "", "DeleteAccountWarning": "", "DeleteWarningTitle": "", - "authRegisterFirstName": "", - "authRegisterLastName": "", - "authRegisterEmail": "", - "authRegisterEmailRequired": "", "bulkImport": { "title": "", "selectFileTips": "", @@ -409,27 +526,11 @@ "noFileSelected": "", "fallbackPage": "" }, - "welcomeBack": "", - "authRegisterLoginLink": "", - "validationNameRequired": "", - "validationNameTooLong": "", - "validationNameInvalidCharacters": "", "settingsSystemReset": "", "settingsSystemResetDescription": "", "DeleteAccountTitle": "", "DeleteAccountButton": "", - "authRegisterEmailInvalid": "", "publicLink": "", - "doNotHaveAccount": "", - "registerHere": "", - "backendUnreachable": "", - "backendUnreachableMessage": "", - "backendUnreachableError": "", - "retryConnection": "", - "retryingConnection": "", - "backendReconnected": "", - "backendStillUnreachable": "", - "backendConnectionError": "", "maskedPageSpeedKeyPlaceholder": "", "pageSpeedApiKeyFieldTitle": "", "pageSpeedApiKeyFieldLabel": "", @@ -514,7 +615,6 @@ "state": "", "statusBreadCrumbsStatusPages": "", "statusBreadCrumbsDetails": "", - "authForgotPasswordInstructions": "", "settingsThemeModeLight": "", "settingsThemeModeDark": "", "settingsClearAllStatsDialogCancel": "", diff --git a/client/src/locales/en.json b/client/src/locales/en.json index 12442246c..63802c7dc 100644 --- a/client/src/locales/en.json +++ b/client/src/locales/en.json @@ -1,61 +1,188 @@ { - "dontHaveAccount": "Don't have account", - "email": "E-mail", - "forgotPassword": "Forgot Password", - "password": "Password", - "signUp": "Sign Up", + "common": { + "appName": "Checkmate", + "monitoringAgentName": "Capture", + "buttons": { + "toggleTheme": "Toggles light & dark" + }, + "toasts": { + "networkError": "Network error", + "checkConnection": "Please check your connection", + "unknownError": "Unknown error" + } + }, + "auth": { + "common": { + "navigation": { + "continue": "Continue", + "back": "Back" + }, + "inputs": { + "email": { + "label": "Email", + "placeholder": "jordan.ellis@domain.com", + "errors": { + "empty": "To continue, please enter your email address", + "invalid": "Please recheck validity of entered email address" + } + }, + "password": { + "label": "Password", + "rules": { + "length": { + "beginning": "Must be at least", + "highlighted": "8 characters long" + }, + "special": { + "beginning": "Must contain at least", + "highlighted": "one special character" + }, + "number": { + "beginning": "Must contain at least", + "highlighted": "one number" + }, + "uppercase": { + "beginning": "Must contain at least", + "highlighted": "one upper character" + }, + "lowercase": { + "beginning": "Must contain at least", + "highlighted": "one lower character" + }, + "match": { + "beginning": "Confirm password and password", + "highlighted": "must match" + } + }, + "errors": { + "empty": "Please enter your password", + "length": "Password must be at least 8 characters long", + "uppercase": "Password must contain at least 1 uppercase letter", + "lowercase": "Password must contain at least 1 lowercase letter", + "number": "Password must contain at least 1 number", + "special": "Password must contain at least 1 special character", + "incorrect": "The password you provided does not match our records" + } + }, + "passwordConfirm": { + "label": "Confirm password", + "placeholder": "Re-enter password to confirm", + "errors": { + "empty": "Please enter your password again for confirmation (helps with typos)", + "different": "Entered passwords don't match, so one of them is probably mistyped" + } + }, + "firstName": { + "label": "Name", + "placeholder": "Jordan", + "errors": { + "empty": "Please enter your name", + "length": "Name must be less than 50 characters", + "pattern": "Name must contain only letters, spaces, apostrophes, or hyphens" + } + }, + "lastName": { + "label": "Surname", + "placeholder": "Ellis", + "errors": { + "empty": "Please enter your surname", + "length": "Surname must be less than 50 characters", + "pattern": "Surname must contain only letters, spaces, apostrophes, or hyphens" + } + } + }, + "errors": { + "validation": "Error validating data." + } + }, + "login": { + "heading": "Log In", + "subheadings": { + "stepOne": "Enter your email", + "stepTwo": "Enter your password" + }, + "links": { + "forgotPassword": "Forgot password? Reset password", + "register": "Do not have an account? Register here" + }, + "toasts": { + "success": "Welcome back! You're successfully logged in.", + "incorrectPassword": "Incorrect password" + } + }, + "registration": { + "heading": { + "superAdmin": "Create super admin", + "user": "Sign Up" + }, + "subheadings": { + "stepOne": "Enter your personal details", + "stepTwo": "Enter your email", + "stepThree": "Create your password" + }, + "description": { + "superAdmin": "Create your super admin account to get started", + "user": "Sign up as a user and ask super admin for access to your monitors" + }, + "gettingStartedButton": { + "superAdmin": "Create super admin account", + "user": "Sign up regular user" + }, + "termsAndPolicies": "By creating an account, you agree to our Terms of Service and Privacy Policy.", + "links": { + "login": "Already have an account? Log In" + }, + "toasts": { + "success": "Welcome! Your account was created successfully." + } + }, + "forgotPassword": { + "heading": "Forgot password?", + "subheadings": { + "stepOne": "No worries, we'll send you reset instructions.", + "stepTwo": "We sent a password reset link to ", + "stepThree": "Your new password must be different from previously used passwords.", + "stepFour": "Your password has been successfully reset. Click below to log in magically." + }, + "buttons": { + "openEmail": "Open email app", + "resetPassword": "Reset password" + }, + "imageAlts": { + "passwordKey": "Password key icon", + "email": "Email icon", + "lock": "Lock icon", + "passwordConfirm": "Password confirm icon" + }, + "links": { + "login": "Go back to Log In", + "resend": "Didn't receive the email? Click to resend" + }, + "toasts": { + "sent": "Instructions sent to .", + "emailNotFound": "Email not found.", + "redirect": "Redirecting in ...", + "success": "Your password was reset successfully.", + "error": "Unable to reset password. Please try again later or contact support." + } + } + }, + "errorPages": { + "serverUnreachable": { + "toasts": { + "reconnected": "Successfully reconnected to the server.", + "stillUnreachable": "Server is still unreachable. Please try again later." + }, + "alertBox": "Server Connection Error", + "description": "We're unable to connect to the server. Please check your internet connection or verify your deployment configuration if the problem persists.", + "retryButton": { + "default": "Retry connection", + "processing": "Connecting..." + } + } + }, "submit": "Submit", "title": "Title", - "continue": "Continue", - "enterEmail": "Enter your email", - "authLoginTitle": "Log In", - "authLoginEnterPassword": "Enter your password", - "commonPassword": "Password", - "commonBack": "Back", - "authForgotPasswordTitle": "Forgot password?", - "authForgotPasswordResetPassword": "Reset password", - "createPassword": "Create your password", - "createAPassword": "Password", - "authRegisterAlreadyHaveAccount": "Already have an account?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "Enter your email", - "authRegisterTitle": "Create an account", - "authRegisterStepOneTitle": "Create your account", - "authRegisterStepOneDescription": "Enter your details to get started", - "authRegisterStepTwoTitle": "Set up your profile", - "authRegisterStepTwoDescription": "Tell us more about yourself", - "authRegisterStepThreeTitle": "Almost done!", - "authRegisterStepThreeDescription": "Review your information", - "authForgotPasswordDescription": "No worries, we'll send you reset instructions.", - "authForgotPasswordSendInstructions": "Send instructions", - "authForgotPasswordBackTo": "Back to", - "authCheckEmailTitle": "Check your email", - "authCheckEmailDescription": "We sent a password reset link to", - "authCheckEmailResendEmail": "Resend email", - "authCheckEmailBackTo": "Back to", - "goBackTo": "Go back to", - "authCheckEmailDidntReceiveEmail": "Didn't receive the email?", - "authCheckEmailClickToResend": "Click to resend", - "authSetNewPasswordTitle": "Set new password", - "authSetNewPasswordDescription": "Your new password must be different from previously used passwords.", - "authSetNewPasswordNewPassword": "New password", - "authSetNewPasswordConfirmPassword": "Confirm password", - "confirmPassword": "Re-enter password to confirm", - "authSetNewPasswordResetPassword": "Reset password", - "authSetNewPasswordBackTo": "Back to", - "authPasswordMustBeAtLeast": "Must be at least", - "authPasswordCharactersLong": "8 characters long", - "authPasswordMustContainAtLeast": "Must contain at least", - "authPasswordSpecialCharacter": "one special character", - "authPasswordOneNumber": "one number", - "authPasswordUpperCharacter": "one upper character", - "authPasswordLowerCharacter": "one lower character", - "authPasswordConfirmAndPassword": "Confirm password and password", - "authPasswordMustMatch": "Passwords must match", - "authRegisterCreateAccount": "Create your account to get started", - "authRegisterCreateSuperAdminAccount": "Create your super admin account to get started", - "authRegisterSignUpWithEmail": "Create super admin account", - "authRegisterBySigningUp": "By creating an account, you agree to our Terms of Service and Privacy Policy.", "distributedStatusHeaderText": "Real-time, real-device coverage", "distributedStatusSubHeaderText": "Powered by millions devices worldwide, view a system performance by global region, country or city", "settingsGeneralSettings": "General settings", @@ -104,7 +231,6 @@ "now": "Now", "delete": "Delete", "configure": "Configure", - "networkError": "Network error", "responseTime": "Response time", "ms": "ms", "bar": "Bar", @@ -112,11 +238,6 @@ "country": "COUNTRY", "city": "CITY", "response": "RESPONSE", - "checkConnection": "Please check your connection", - "passwordreset": "Password Reset", - "authRegisterStepOnePersonalDetails": "Enter your personal details", - "authCheckEmailOpenEmailButton": "Open email app", - "authNewPasswordConfirmed": "Your password has been successfully reset. Click below to log in magically.", "monitorStatusUp": "Monitor {name} ({url}) is now UP and responding", "monitorStatusDown": "Monitor {name} ({url}) is DOWN and not responding", "webhookSendSuccess": "Webhook notification sent successfully", @@ -386,10 +507,6 @@ "DeleteDescriptionText": "This will remove the account and all associated data from the server. This isn't reversible.", "DeleteAccountWarning": "Removing your account means you won't be able to sign in again and all your data will be removed. This isn't reversible.", "DeleteWarningTitle": "Really remove this account?", - "authRegisterFirstName": "Name", - "authRegisterLastName": "Surname", - "authRegisterEmail": "Email", - "authRegisterEmailRequired": "To continue, please enter your email address", "bulkImport": { "title": "Bulk Import", "selectFileTips": "Select CSV file to upload", @@ -401,27 +518,11 @@ "noFileSelected": "No file selected", "fallbackPage": "Import a file to upload a list of servers in bulk" }, - "welcomeBack": "Welcome back! You're successfully logged in.", - "authRegisterLoginLink": "Log In", - "validationNameRequired": "Please enter your name", - "validationNameTooLong": "Name should be less than 50 characters", - "validationNameInvalidCharacters": "Please use only letters, spaces, apostrophes, or hyphens", "settingsSystemReset": "System reset", "settingsSystemResetDescription": "Remove all monitors from your system.", "DeleteAccountTitle": "Remove account", "DeleteAccountButton": "Remove account", - "authRegisterEmailInvalid": "Please enter a valid email address", "publicLink": "Public link", - "doNotHaveAccount": "Do not have an account?", - "registerHere": "Register here", - "backendUnreachable": "Server Connection Error", - "backendUnreachableMessage": "We're unable to connect to the server. Please check your internet connection or verify your deployment configuration if the problem persists.", - "backendUnreachableError": "Cannot connect to the server. Please try again later.", - "retryConnection": "Retry connection", - "retryingConnection": "Connecting...", - "backendReconnected": "Successfully reconnected to the server.", - "backendStillUnreachable": "Server is still unreachable. Please try again later.", - "backendConnectionError": "Error connecting to the server. Please check your network connection.", "maskedPageSpeedKeyPlaceholder": "*************************************", "pageSpeedApiKeyFieldTitle": "Google PageSpeed API key", "pageSpeedApiKeyFieldLabel": "PageSpeed API key", @@ -505,7 +606,6 @@ "state": "State", "statusBreadCrumbsStatusPages": "Status Pages", "statusBreadCrumbsDetails": "Details", - "authForgotPasswordInstructions": "No worries, we'll send you reset instructions.", "settingsThemeModeLight": "Light", "settingsThemeModeDark": "Dark", "settingsClearAllStatsDialogCancel": "Cancel", diff --git a/client/src/locales/es.json b/client/src/locales/es.json index a278312af..0abc46c8c 100644 --- a/client/src/locales/es.json +++ b/client/src/locales/es.json @@ -1,61 +1,188 @@ { - "dontHaveAccount": "No tengo una cuenta", - "email": "Correo electronico", - "forgotPassword": "He olvidado mi contraseña", - "password": "Contraseña", - "signUp": "Registrarse", + "common": { + "appName": "Checkmate", + "monitoringAgentName": "Capture", + "buttons": { + "toggleTheme": "" + }, + "toasts": { + "networkError": "", + "checkConnection": "", + "unknownError": "" + } + }, + "auth": { + "common": { + "navigation": { + "continue": "Continuar", + "back": "Atras" + }, + "inputs": { + "email": { + "label": "Correo electronico", + "placeholder": "", + "errors": { + "empty": "", + "invalid": "" + } + }, + "password": { + "label": "Contraseña", + "rules": { + "length": { + "beginning": "", + "highlighted": "8 caracteres de longitud" + }, + "special": { + "beginning": "", + "highlighted": "" + }, + "number": { + "beginning": "", + "highlighted": "un numero" + }, + "uppercase": { + "beginning": "", + "highlighted": "" + }, + "lowercase": { + "beginning": "", + "highlighted": "" + }, + "match": { + "beginning": "", + "highlighted": "" + } + }, + "errors": { + "empty": "", + "length": "", + "uppercase": "", + "lowercase": "", + "number": "", + "special": "", + "incorrect": "" + } + }, + "passwordConfirm": { + "label": "Confirmar contraseña", + "placeholder": "", + "errors": { + "empty": "", + "different": "" + } + }, + "firstName": { + "label": "", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + }, + "lastName": { + "label": "", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + } + }, + "errors": { + "validation": "" + } + }, + "login": { + "heading": "Inicio de session", + "subheadings": { + "stepOne": "Introduce tu correo electronico", + "stepTwo": "Introduce tu contraseña" + }, + "links": { + "forgotPassword": "¿Has olvidado tu contraseña? Restablecer contraseña", + "register": "" + }, + "toasts": { + "success": "", + "incorrectPassword": "" + } + }, + "registration": { + "heading": { + "superAdmin": "", + "user": "Registrarse" + }, + "subheadings": { + "stepOne": "", + "stepTwo": "Introduce tu correo electronico", + "stepThree": "Crear contraseña" + }, + "description": { + "superAdmin": "", + "user": "" + }, + "gettingStartedButton": { + "superAdmin": "", + "user": "" + }, + "termsAndPolicies": "", + "links": { + "login": "" + }, + "toasts": { + "success": "" + } + }, + "forgotPassword": { + "heading": "¿Has olvidado tu contraseña?", + "subheadings": { + "stepOne": "", + "stepTwo": "Hemos enviado un link para reiniciar la contraseña a ", + "stepThree": "", + "stepFour": "" + }, + "buttons": { + "openEmail": "", + "resetPassword": "Restablecer contraseña" + }, + "imageAlts": { + "passwordKey": "", + "email": "", + "lock": "", + "passwordConfirm": "" + }, + "links": { + "login": "Volver a Inicio de session", + "resend": "No has recibido el correo electronico? Presiona para reenviar" + }, + "toasts": { + "sent": "", + "emailNotFound": "", + "redirect": "", + "success": "", + "error": "" + } + } + }, + "errorPages": { + "serverUnreachable": { + "toasts": { + "reconnected": "", + "stillUnreachable": "" + }, + "alertBox": "", + "description": "", + "retryButton": { + "default": "", + "processing": "" + } + } + }, "submit": "Enviar", "title": "Titulo", - "continue": "Continuar", - "enterEmail": "Introduce tu email", - "authLoginTitle": "Inicio de session", - "authLoginEnterPassword": "Introduce tu contraseña", - "commonPassword": "Contraseña", - "commonBack": "Atras", - "authForgotPasswordTitle": "¿Has olvidado tu contraseña?", - "authForgotPasswordResetPassword": "Restablecer contraseña", - "createPassword": "Crear contraseña", - "createAPassword": "Contraseña", - "authRegisterAlreadyHaveAccount": "Ya tienes un cuenta?", - "commonAppName": "", - "authLoginEnterEmail": "Introduce tu correo electronico", - "authRegisterTitle": "Crear una cuenta", - "authRegisterStepOneTitle": "Crea tu cuenta", - "authRegisterStepOneDescription": "", - "authRegisterStepTwoTitle": "Configura tu perfil", - "authRegisterStepTwoDescription": "Cuentano mas sobre ti", - "authRegisterStepThreeTitle": "Ya casi estamos!", - "authRegisterStepThreeDescription": "Revisa tu informacion", - "authForgotPasswordDescription": "", - "authForgotPasswordSendInstructions": "Enviar instrucciones", - "authForgotPasswordBackTo": "Volver a", - "authCheckEmailTitle": "Comprueba tu correo", - "authCheckEmailDescription": "Hemos enviado un link para reiniciar la contraseña a", - "authCheckEmailResendEmail": "Reenviar correo", - "authCheckEmailBackTo": "Volver a", - "goBackTo": "Volver a", - "authCheckEmailDidntReceiveEmail": "No has recibido el correo electronico?", - "authCheckEmailClickToResend": "Presiona para reenviar", - "authSetNewPasswordTitle": "Configurar nueva contraseña", - "authSetNewPasswordDescription": "", - "authSetNewPasswordNewPassword": "Nueva contraseña", - "authSetNewPasswordConfirmPassword": "Confirmar contraseña", - "confirmPassword": "", - "authSetNewPasswordResetPassword": "Restablecer contraseña", - "authSetNewPasswordBackTo": "Volver a", - "authPasswordMustBeAtLeast": "", - "authPasswordCharactersLong": "8 caracteres de longitud", - "authPasswordMustContainAtLeast": "", - "authPasswordSpecialCharacter": "", - "authPasswordOneNumber": "un numero", - "authPasswordUpperCharacter": "", - "authPasswordLowerCharacter": "", - "authPasswordConfirmAndPassword": "", - "authPasswordMustMatch": "", - "authRegisterCreateAccount": "", - "authRegisterCreateSuperAdminAccount": "", - "authRegisterSignUpWithEmail": "", - "authRegisterBySigningUp": "", "distributedStatusHeaderText": "", "distributedStatusSubHeaderText": "", "settingsGeneralSettings": "", @@ -108,7 +235,6 @@ "now": "", "delete": "", "configure": "", - "networkError": "", "responseTime": "", "ms": "", "bar": "", @@ -116,11 +242,6 @@ "country": "", "city": "", "response": "", - "checkConnection": "", - "passwordreset": "", - "authRegisterStepOnePersonalDetails": "", - "authCheckEmailOpenEmailButton": "", - "authNewPasswordConfirmed": "", "monitorStatusUp": "", "monitorStatusDown": "", "webhookSendSuccess": "", @@ -394,10 +515,6 @@ "DeleteDescriptionText": "", "DeleteAccountWarning": "", "DeleteWarningTitle": "", - "authRegisterFirstName": "", - "authRegisterLastName": "", - "authRegisterEmail": "", - "authRegisterEmailRequired": "", "bulkImport": { "title": "", "selectFileTips": "", @@ -409,27 +526,11 @@ "noFileSelected": "", "fallbackPage": "" }, - "welcomeBack": "", - "authRegisterLoginLink": "", - "validationNameRequired": "", - "validationNameTooLong": "", - "validationNameInvalidCharacters": "", "settingsSystemReset": "", "settingsSystemResetDescription": "", "DeleteAccountTitle": "", "DeleteAccountButton": "", - "authRegisterEmailInvalid": "", "publicLink": "", - "doNotHaveAccount": "", - "registerHere": "", - "backendUnreachable": "", - "backendUnreachableMessage": "", - "backendUnreachableError": "", - "retryConnection": "", - "retryingConnection": "", - "backendReconnected": "", - "backendStillUnreachable": "", - "backendConnectionError": "", "maskedPageSpeedKeyPlaceholder": "", "pageSpeedApiKeyFieldTitle": "", "pageSpeedApiKeyFieldLabel": "", @@ -514,7 +615,6 @@ "state": "", "statusBreadCrumbsStatusPages": "", "statusBreadCrumbsDetails": "", - "authForgotPasswordInstructions": "", "settingsThemeModeLight": "", "settingsThemeModeDark": "", "settingsClearAllStatsDialogCancel": "", diff --git a/client/src/locales/fi.json b/client/src/locales/fi.json index 7f6ffa2ba..bd6f9a81f 100644 --- a/client/src/locales/fi.json +++ b/client/src/locales/fi.json @@ -1,61 +1,188 @@ { - "dontHaveAccount": "Ei tiliä", - "email": "Sähköposti", - "forgotPassword": "Unohtunut salasana", - "password": "Salasana", - "signUp": "Rekisteröidy", + "common": { + "appName": "Checkmate", + "monitoringAgentName": "Capture", + "buttons": { + "toggleTheme": "" + }, + "toasts": { + "networkError": "Verkkovirhe", + "checkConnection": "Tarkista yhteytesi", + "unknownError": "" + } + }, + "auth": { + "common": { + "navigation": { + "continue": "Jatka", + "back": "Takaisin" + }, + "inputs": { + "email": { + "label": "Sähköposti", + "placeholder": "", + "errors": { + "empty": "Syötä sähköpostiosoitteesi jatkaaksesi", + "invalid": "Kirjoita kelvollinen sähköpostiosoite" + } + }, + "password": { + "label": "Salasana", + "rules": { + "length": { + "beginning": "Vähintään", + "highlighted": "8 merkkiä pitkä" + }, + "special": { + "beginning": "Tulee sisältää vähintään", + "highlighted": "yksi erikoismerkki" + }, + "number": { + "beginning": "Tulee sisältää vähintään", + "highlighted": "yksi numero" + }, + "uppercase": { + "beginning": "Tulee sisältää vähintään", + "highlighted": "yksi pieni kirjain" + }, + "lowercase": { + "beginning": "Tulee sisältää vähintään", + "highlighted": "yksi iso kirjain" + }, + "match": { + "beginning": "Vahvista salasana ja salasana", + "highlighted": "" + } + }, + "errors": { + "empty": "", + "length": "", + "uppercase": "", + "lowercase": "", + "number": "", + "special": "", + "incorrect": "" + } + }, + "passwordConfirm": { + "label": "Vahvista salasana", + "placeholder": "Syötä salasana uudelleen", + "errors": { + "empty": "", + "different": "" + } + }, + "firstName": { + "label": "Nimi", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + }, + "lastName": { + "label": "Sukunimi", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + } + }, + "errors": { + "validation": "" + } + }, + "login": { + "heading": "Kirjaudu", + "subheadings": { + "stepOne": "Syötä salasanasi", + "stepTwo": "Syötä salasanasi" + }, + "links": { + "forgotPassword": "Unohditko salasanasi? Nollaa salasana", + "register": "Onko sinulla tili? Rekisteröidy tästä" + }, + "toasts": { + "success": "Tervetuloa takaisin! Olet kirjautunut sisään.", + "incorrectPassword": "" + } + }, + "registration": { + "heading": { + "superAdmin": "", + "user": "Rekisteröidy" + }, + "subheadings": { + "stepOne": "Syötä henkilökohtaiset tietosi", + "stepTwo": "Syötä salasanasi", + "stepThree": "Luo salasanasi" + }, + "description": { + "superAdmin": "Luo pääkäyttäjän tili aloittaaksesi", + "user": "" + }, + "gettingStartedButton": { + "superAdmin": "Luo pääkäyttäjän tili", + "user": "" + }, + "termsAndPolicies": "Luomalla tilin hyväksyt Käyttöehdot ja Tietosuojakäytännön.", + "links": { + "login": "Onko sinulla jo tili? Kirjaudu" + }, + "toasts": { + "success": "" + } + }, + "forgotPassword": { + "heading": "Unohditko salasanasi?", + "subheadings": { + "stepOne": "Ei hätää, lähetämme sinulle ohjeet salasanan palauttamiseen.", + "stepTwo": "Lähetimme salasanan nollauslinkin osoitteeseen ", + "stepThree": "Uuden salasanan pitää olla eri kuin aiemmin käyttämäsi.", + "stepFour": "Salasanasi on onnistuneesti nollattu. Klikkaa alta kirjautuaksesi taianomaisesti." + }, + "buttons": { + "openEmail": "Avaa sähköpostisovellus", + "resetPassword": "Nollaa salasana" + }, + "imageAlts": { + "passwordKey": "", + "email": "", + "lock": "", + "passwordConfirm": "" + }, + "links": { + "login": "Palaa edelliseen Kirjaudu", + "resend": "Etkö saanut sähköpostia? Klikkaa lähettääksesi uudelleen" + }, + "toasts": { + "sent": "", + "emailNotFound": "", + "redirect": "", + "success": "", + "error": "" + } + } + }, + "errorPages": { + "serverUnreachable": { + "toasts": { + "reconnected": "", + "stillUnreachable": "" + }, + "alertBox": "", + "description": "", + "retryButton": { + "default": "", + "processing": "Yhdistetään..." + } + } + }, "submit": "Lähetä", "title": "Otsikko", - "continue": "Jatka", - "enterEmail": "Syötä sähköpostiosoitteesi", - "authLoginTitle": "Kirjaudu", - "authLoginEnterPassword": "Syötä salasanasi", - "commonPassword": "Salasana", - "commonBack": "Takaisin", - "authForgotPasswordTitle": "Unohditko salasanasi?", - "authForgotPasswordResetPassword": "Nollaa salasana", - "createPassword": "Luo salasanasi", - "createAPassword": "Salasana", - "authRegisterAlreadyHaveAccount": "Onko sinulla jo tili?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "Syötä salasanasi", - "authRegisterTitle": "Luo tili", - "authRegisterStepOneTitle": "Luo tilisi", - "authRegisterStepOneDescription": "Kirjoita tietosi aloittaaksesi", - "authRegisterStepTwoTitle": "Määritä profiilisi", - "authRegisterStepTwoDescription": "Kerro meille lisää itsestäsi", - "authRegisterStepThreeTitle": "Melkein valmis!", - "authRegisterStepThreeDescription": "Tarkista tietosi", - "authForgotPasswordDescription": "Ei hätää, lähetämme sinulle salasanan nollausohjeet.", - "authForgotPasswordSendInstructions": "Lähetä ohjeet", - "authForgotPasswordBackTo": "Palaa", - "authCheckEmailTitle": "Tarkista sähköpostisi", - "authCheckEmailDescription": "Lähetimme salasanan nollauslinkin osoitteeseen", - "authCheckEmailResendEmail": "Lähetä sähköposti uudelleen", - "authCheckEmailBackTo": "Palaa", - "goBackTo": "Palaa edelliseen", - "authCheckEmailDidntReceiveEmail": "Etkö saanut sähköpostia?", - "authCheckEmailClickToResend": "Klikkaa lähettääksesi uudelleen", - "authSetNewPasswordTitle": "Aseta uusi salasana", - "authSetNewPasswordDescription": "Uuden salasanan pitää olla eri kuin aiemmin käyttämäsi.", - "authSetNewPasswordNewPassword": "Uusi salasana", - "authSetNewPasswordConfirmPassword": "Vahvista salasana", - "confirmPassword": "Syötä salasana uudelleen", - "authSetNewPasswordResetPassword": "Nollaa salasana", - "authSetNewPasswordBackTo": "Takaisin", - "authPasswordMustBeAtLeast": "Vähintään", - "authPasswordCharactersLong": "8 merkkiä pitkä", - "authPasswordMustContainAtLeast": "Tulee sisältää vähintään", - "authPasswordSpecialCharacter": "yksi erikoismerkki", - "authPasswordOneNumber": "yksi numero", - "authPasswordUpperCharacter": "yksi pieni kirjain", - "authPasswordLowerCharacter": "yksi iso kirjain", - "authPasswordConfirmAndPassword": "Vahvista salasana ja salasana", - "authPasswordMustMatch": "Salasanojen on oltava samat", - "authRegisterCreateAccount": "Luo tili aloittaaksesi", - "authRegisterCreateSuperAdminAccount": "Luo pääkäyttäjän tili aloittaaksesi", - "authRegisterSignUpWithEmail": "Luo pääkäyttäjän tili", - "authRegisterBySigningUp": "Luomalla tilin hyväksyt Käyttöehdot ja Tietosuojakäytännön.", "distributedStatusHeaderText": "Reaaliaikainen kattavuus oikeilla laitteilla", "distributedStatusSubHeaderText": "Miljoonien laitteiden voimin ympäri maailman näet järjestelmän suorituskyvyn maailman alueittain, maittain tai kaupungeittain", "settingsGeneralSettings": "Yleiset asetukset", @@ -108,7 +235,6 @@ "now": "Nyt", "delete": "Poista", "configure": "Määritä", - "networkError": "Verkkovirhe", "responseTime": "Vasteaika", "ms": "ms", "bar": "Palkki", @@ -116,11 +242,6 @@ "country": "MAA", "city": "KAUPUNKI", "response": "Vastaus", - "checkConnection": "Tarkista yhteytesi", - "passwordreset": "Salasanan nollaus", - "authRegisterStepOnePersonalDetails": "Syötä henkilökohtaiset tietosi", - "authCheckEmailOpenEmailButton": "Avaa sähköpostisovellus", - "authNewPasswordConfirmed": "Salasanasi on onnistuneesti nollattu. Klikkaa alta kirjautuaksesi taianomaisesti.", "monitorStatusUp": "Valvontakohde {name} ({url}) on nyt toiminnassa ja vastaa", "monitorStatusDown": "Valvontakohde {name} ({url}) ei ole toiminnassa, eikä vastaa", "webhookSendSuccess": "Webhook-ilmoitus lähetettiin onnistuneesti", @@ -394,10 +515,6 @@ "DeleteDescriptionText": "", "DeleteAccountWarning": "", "DeleteWarningTitle": "Haluatko todella poistaa tämän tilin?", - "authRegisterFirstName": "Nimi", - "authRegisterLastName": "Sukunimi", - "authRegisterEmail": "Sähköpostiosoite", - "authRegisterEmailRequired": "Syötä sähköpostiosoitteesi jatkaaksesi", "bulkImport": { "title": "", "selectFileTips": "", @@ -409,27 +526,11 @@ "noFileSelected": "Ei valittua tiedostoa", "fallbackPage": "" }, - "welcomeBack": "Tervetuloa takaisin! Olet kirjautunut sisään.", - "authRegisterLoginLink": "Kirjaudu", - "validationNameRequired": "Kirjoita nimesi", - "validationNameTooLong": "Nimen tulee olla alle 50 merkkiä", - "validationNameInvalidCharacters": "Käytäthän vain kirjaimia, välilyöntejä, heittomerkkejä tai yhdysmerkkejä", "settingsSystemReset": "Järjestelmän palautus", "settingsSystemResetDescription": "", "DeleteAccountTitle": "Poista tili", "DeleteAccountButton": "Poista tili", - "authRegisterEmailInvalid": "Kirjoita kelvollinen sähköpostiosoite", "publicLink": "Julkinen linkki", - "doNotHaveAccount": "Onko sinulla tili?", - "registerHere": "Rekisteröidy tästä", - "backendUnreachable": "", - "backendUnreachableMessage": "", - "backendUnreachableError": "", - "retryConnection": "", - "retryingConnection": "Yhdistetään...", - "backendReconnected": "", - "backendStillUnreachable": "", - "backendConnectionError": "", "maskedPageSpeedKeyPlaceholder": "*************************************", "pageSpeedApiKeyFieldTitle": "Google PageSpeed API-avain", "pageSpeedApiKeyFieldLabel": "PageSpeed API-avain", @@ -514,7 +615,6 @@ "state": "Tila", "statusBreadCrumbsStatusPages": "Tilasivut", "statusBreadCrumbsDetails": "Tiedot", - "authForgotPasswordInstructions": "Ei hätää, lähetämme sinulle ohjeet salasanan palauttamiseen.", "settingsThemeModeLight": "Vaalea", "settingsThemeModeDark": "Tumma", "settingsClearAllStatsDialogCancel": "Peruuta", diff --git a/client/src/locales/fr.json b/client/src/locales/fr.json index d31e73f48..a4c31b5c6 100644 --- a/client/src/locales/fr.json +++ b/client/src/locales/fr.json @@ -1,61 +1,188 @@ { - "dontHaveAccount": "Vous n'avez pas de compte", - "email": "E-mail", - "forgotPassword": "Mot de passe oublié", - "password": "mot de passe", - "signUp": "S'inscrire", + "common": { + "appName": "Checkmate", + "monitoringAgentName": "Capture", + "buttons": { + "toggleTheme": "" + }, + "toasts": { + "networkError": "", + "checkConnection": "Vérifiez votre connexion", + "unknownError": "" + } + }, + "auth": { + "common": { + "navigation": { + "continue": "Continuer", + "back": "Retour" + }, + "inputs": { + "email": { + "label": "E-mail", + "placeholder": "", + "errors": { + "empty": "Pour continuer, veuillez saisir votre adresse e-mail", + "invalid": "Veuillez saisir une adresse e-mail valide" + } + }, + "password": { + "label": "Mot de passe", + "rules": { + "length": { + "beginning": "Doit faire au moins", + "highlighted": "8 caractères" + }, + "special": { + "beginning": "Doit contenir au moins", + "highlighted": "un caractère spécial" + }, + "number": { + "beginning": "Doit contenir au moins", + "highlighted": "un nombre" + }, + "uppercase": { + "beginning": "Doit contenir au moins", + "highlighted": "une lettre majuscule" + }, + "lowercase": { + "beginning": "Doit contenir au moins", + "highlighted": "une lettre minuscule" + }, + "match": { + "beginning": "Confirmer le mot de passe", + "highlighted": "" + } + }, + "errors": { + "empty": "", + "length": "", + "uppercase": "", + "lowercase": "", + "number": "", + "special": "", + "incorrect": "" + } + }, + "passwordConfirm": { + "label": "Confirmer le mot de passe", + "placeholder": "Confirmez votre mot de passe", + "errors": { + "empty": "", + "different": "" + } + }, + "firstName": { + "label": "Prénom", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + }, + "lastName": { + "label": "Nom", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + } + }, + "errors": { + "validation": "" + } + }, + "login": { + "heading": "Se connecter", + "subheadings": { + "stepOne": "Entrez votre e-mail", + "stepTwo": "Entrez votre mot de passe" + }, + "links": { + "forgotPassword": "Mot de passe oublié ? Réinitialiser le mot de passe", + "register": "" + }, + "toasts": { + "success": "Bienvenue ! Vous êtes connecté avec succès.", + "incorrectPassword": "" + } + }, + "registration": { + "heading": { + "superAdmin": "", + "user": "S'inscrire" + }, + "subheadings": { + "stepOne": "Saisissez vos infos", + "stepTwo": "Entrez votre e-mail", + "stepThree": "Créez votre mot de passe" + }, + "description": { + "superAdmin": "Créez votre compte Super admin pour commencer", + "user": "" + }, + "gettingStartedButton": { + "superAdmin": "S'inscrire avec E-mail", + "user": "" + }, + "termsAndPolicies": "En vous inscrivant, vous acceptez nos", + "links": { + "login": "Vous avez un compte ? Se connecter" + }, + "toasts": { + "success": "" + } + }, + "forgotPassword": { + "heading": "Mot de passe oublié ?", + "subheadings": { + "stepOne": "Nous vous enverrons des instructions de réinitialisation.", + "stepTwo": "Nous avons envoyé un lien de réinitialisation à ", + "stepThree": "Votre nouveau mot de passe doit être différent des anciens mots de passes utilisés.", + "stepFour": "Votre mot de passe a été réinitialisé avec succès. Cliquez ci-dessous pour vous connecter." + }, + "buttons": { + "openEmail": "Ouvrir l'appli mail", + "resetPassword": "Réinitialiser le mot de passe" + }, + "imageAlts": { + "passwordKey": "", + "email": "", + "lock": "", + "passwordConfirm": "" + }, + "links": { + "login": "Retourner à Se connecter", + "resend": "Vous n'avez pas reçu l'e-mail ? Cliquez pour renvoyer" + }, + "toasts": { + "sent": "", + "emailNotFound": "", + "redirect": "", + "success": "", + "error": "" + } + } + }, + "errorPages": { + "serverUnreachable": { + "toasts": { + "reconnected": "Reconnexion au serveur réussie.", + "stillUnreachable": "Le serveur est toujours inaccessible. Veuillez réessayer plus tard." + }, + "alertBox": "Erreur de connexion au serveur", + "description": "", + "retryButton": { + "default": "", + "processing": "" + } + } + }, "submit": "Envoyer", "title": "Titre", - "continue": "Continuer", - "enterEmail": "Entrez votre adresse e-mail", - "authLoginTitle": "Se connecter", - "authLoginEnterPassword": "Entrez votre mot de passe", - "commonPassword": "Mot de passe", - "commonBack": "Retour", - "authForgotPasswordTitle": "Mot de passe oublié ?", - "authForgotPasswordResetPassword": "Réinitialiser le mot de passe", - "createPassword": "Créez votre mot de passe", - "createAPassword": "Créer un mot de passe", - "authRegisterAlreadyHaveAccount": "Vous avez un compte ?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "Entrez votre e-mail", - "authRegisterTitle": "Créer un compte", - "authRegisterStepOneTitle": "Créez votre compte", - "authRegisterStepOneDescription": "Entrez vos informations pour commencer", - "authRegisterStepTwoTitle": "Créer votre profil", - "authRegisterStepTwoDescription": "Parlez-nous un peu de vous", - "authRegisterStepThreeTitle": "Presque fini !", - "authRegisterStepThreeDescription": "Vérifiez vos infos", - "authForgotPasswordDescription": "Pas d'inquiétude, nous allons vous envoyer des instructions de réinitialisation.", - "authForgotPasswordSendInstructions": "Envoyer les instructions", - "authForgotPasswordBackTo": "Retourner à", - "authCheckEmailTitle": "Vérifiez votre e-mail", - "authCheckEmailDescription": "Nous avons envoyé un lien de réinitialisation à", - "authCheckEmailResendEmail": "Renvoyer le mail", - "authCheckEmailBackTo": "Retourner à", - "goBackTo": "Retourner à", - "authCheckEmailDidntReceiveEmail": "Vous n'avez pas reçu l'e-mail ?", - "authCheckEmailClickToResend": "Cliquez pour renvoyer", - "authSetNewPasswordTitle": "Définir un nouveau mot de passe", - "authSetNewPasswordDescription": "Votre nouveau mot de passe doit être différent des anciens mots de passes utilisés.", - "authSetNewPasswordNewPassword": "Nouveau mot de passe", - "authSetNewPasswordConfirmPassword": "Confirmer le mot de passe", - "confirmPassword": "Confirmez votre mot de passe", - "authSetNewPasswordResetPassword": "Réinitialiser le mot de passe", - "authSetNewPasswordBackTo": "Retourner à", - "authPasswordMustBeAtLeast": "Doit faire au moins", - "authPasswordCharactersLong": "8 caractères", - "authPasswordMustContainAtLeast": "Doit contenir au moins", - "authPasswordSpecialCharacter": "un caractère spécial", - "authPasswordOneNumber": "un nombre", - "authPasswordUpperCharacter": "une lettre majuscule", - "authPasswordLowerCharacter": "une lettre minuscule", - "authPasswordConfirmAndPassword": "Confirmer le mot de passe", - "authPasswordMustMatch": "doit correspondre", - "authRegisterCreateAccount": "Créez votre compte pour commencer", - "authRegisterCreateSuperAdminAccount": "Créez votre compte Super admin pour commencer", - "authRegisterSignUpWithEmail": "S'inscrire avec E-mail", - "authRegisterBySigningUp": "En vous inscrivant, vous acceptez nos", "distributedStatusHeaderText": "", "distributedStatusSubHeaderText": "", "settingsGeneralSettings": "Paramètres généraux", @@ -108,7 +235,6 @@ "now": "", "delete": "Supprimer", "configure": "", - "networkError": "", "responseTime": "", "ms": "", "bar": "", @@ -116,11 +242,6 @@ "country": "PAYS", "city": "VILLE", "response": "", - "checkConnection": "Vérifiez votre connexion", - "passwordreset": "", - "authRegisterStepOnePersonalDetails": "Saisissez vos infos", - "authCheckEmailOpenEmailButton": "Ouvrir l'appli mail", - "authNewPasswordConfirmed": "Votre mot de passe a été réinitialisé avec succès. Cliquez ci-dessous pour vous connecter.", "monitorStatusUp": "", "monitorStatusDown": "", "webhookSendSuccess": "", @@ -394,10 +515,6 @@ "DeleteDescriptionText": "", "DeleteAccountWarning": "", "DeleteWarningTitle": "Vous supprimez vraiment ce compte ?", - "authRegisterFirstName": "Prénom", - "authRegisterLastName": "Nom", - "authRegisterEmail": "Email", - "authRegisterEmailRequired": "Pour continuer, veuillez saisir votre adresse e-mail", "bulkImport": { "title": "", "selectFileTips": "", @@ -409,27 +526,11 @@ "noFileSelected": "", "fallbackPage": "" }, - "welcomeBack": "Bienvenue ! Vous êtes connecté avec succès.", - "authRegisterLoginLink": "Se connecter", - "validationNameRequired": "Veuillez saisir votre nom", - "validationNameTooLong": "", - "validationNameInvalidCharacters": "Veuillez utiliser uniquement des lettres, des espaces, des apostrophes ou des traits d'union", "settingsSystemReset": "", "settingsSystemResetDescription": "", "DeleteAccountTitle": "Supprimer le compte", "DeleteAccountButton": "Supprimer le compte", - "authRegisterEmailInvalid": "Veuillez saisir une adresse e-mail valide", "publicLink": "", - "doNotHaveAccount": "", - "registerHere": "", - "backendUnreachable": "Erreur de connexion au serveur", - "backendUnreachableMessage": "", - "backendUnreachableError": "Impossible de se connecter au serveur. Veuillez réessayer plus tard.", - "retryConnection": "", - "retryingConnection": "", - "backendReconnected": "Reconnexion au serveur réussie.", - "backendStillUnreachable": "Le serveur est toujours inaccessible. Veuillez réessayer plus tard.", - "backendConnectionError": "Erreur de connexion au serveur. Veuillez vérifier votre connexion réseau.", "maskedPageSpeedKeyPlaceholder": "", "pageSpeedApiKeyFieldTitle": "", "pageSpeedApiKeyFieldLabel": "", @@ -514,7 +615,6 @@ "state": "", "statusBreadCrumbsStatusPages": "", "statusBreadCrumbsDetails": "", - "authForgotPasswordInstructions": "Nous vous enverrons des instructions de réinitialisation.", "settingsThemeModeLight": "Clair", "settingsThemeModeDark": "Sombre", "settingsClearAllStatsDialogCancel": "Annuler", diff --git a/client/src/locales/pt-BR.json b/client/src/locales/pt-BR.json index fdc3e50a6..e90c89a62 100644 --- a/client/src/locales/pt-BR.json +++ b/client/src/locales/pt-BR.json @@ -1,61 +1,188 @@ { - "dontHaveAccount": "Não tenho conta", - "email": "E-mail", - "forgotPassword": "Esqueci a senha", - "password": "Senha", - "signUp": "Inscreva-se", + "common": { + "appName": "Checkmate", + "monitoringAgentName": "Capture", + "buttons": { + "toggleTheme": "" + }, + "toasts": { + "networkError": "Erro de rede", + "checkConnection": "Verifique sua conexão", + "unknownError": "" + } + }, + "auth": { + "common": { + "navigation": { + "continue": "Continuar", + "back": "Voltar" + }, + "inputs": { + "email": { + "label": "E-mail", + "placeholder": "", + "errors": { + "empty": "Para continuar, insira seu endereço de e-mail", + "invalid": "Por favor, insira um endereço de e-mail válido" + } + }, + "password": { + "label": "Senha", + "rules": { + "length": { + "beginning": "Deve ser pelo menos", + "highlighted": "8 caracteres de comprimento" + }, + "special": { + "beginning": "Deve conter pelo menos", + "highlighted": "um caractere especial" + }, + "number": { + "beginning": "Deve conter pelo menos", + "highlighted": "um número" + }, + "uppercase": { + "beginning": "Deve conter pelo menos", + "highlighted": "um caractere maiúsculo" + }, + "lowercase": { + "beginning": "Deve conter pelo menos", + "highlighted": "um caractere minúsculo" + }, + "match": { + "beginning": "Confirme a senha", + "highlighted": "" + } + }, + "errors": { + "empty": "", + "length": "", + "uppercase": "", + "lowercase": "", + "number": "", + "special": "", + "incorrect": "" + } + }, + "passwordConfirm": { + "label": "Confirme sua senha", + "placeholder": "Digite a senha novamente para confirmar", + "errors": { + "empty": "", + "different": "" + } + }, + "firstName": { + "label": "Nome", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + }, + "lastName": { + "label": "Sobrenome", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + } + }, + "errors": { + "validation": "" + } + }, + "login": { + "heading": "Login", + "subheadings": { + "stepOne": "Insira seu e-mail", + "stepTwo": "Digite sua senha" + }, + "links": { + "forgotPassword": "Esqueceu a senha? Redefinir a senha", + "register": "Ainda não tem uma conta? Registre-se aqui" + }, + "toasts": { + "success": "Bem-vindo de volta! Você fez login com sucesso.", + "incorrectPassword": "" + } + }, + "registration": { + "heading": { + "superAdmin": "", + "user": "Inscreva-se" + }, + "subheadings": { + "stepOne": "Insira seus dados pessoais", + "stepTwo": "Insira seu e-mail", + "stepThree": "Criar sua senha" + }, + "description": { + "superAdmin": "Crie sua conta de super admin para começar", + "user": "" + }, + "gettingStartedButton": { + "superAdmin": "Criar conta de super admin", + "user": "" + }, + "termsAndPolicies": "Ao criar uma conta, você concorda com nossos Termos de Serviço e Política de Privacidade.", + "links": { + "login": "Já possui uma conta? Login" + }, + "toasts": { + "success": "" + } + }, + "forgotPassword": { + "heading": "Esqueceu a senha?", + "subheadings": { + "stepOne": "Não se preocupe, enviaremos instruções de redefinição.", + "stepTwo": "Enviamos um link para redefinir a senha para ", + "stepThree": "Sua nova senha deve ser diferente das senhas usadas anteriormente.", + "stepFour": "Sua senha foi redefinida com sucesso. Clique abaixo para fazer login magicamente." + }, + "buttons": { + "openEmail": "Abra o aplicativo de e-mail", + "resetPassword": "Redefinir senha" + }, + "imageAlts": { + "passwordKey": "", + "email": "", + "lock": "", + "passwordConfirm": "" + }, + "links": { + "login": "Volte para Login", + "resend": "Não recebeu o e-mail? Clique para reenviar" + }, + "toasts": { + "sent": "", + "emailNotFound": "", + "redirect": "", + "success": "", + "error": "" + } + } + }, + "errorPages": { + "serverUnreachable": { + "toasts": { + "reconnected": "Reconectado ao servidor com sucesso.", + "stillUnreachable": "O servidor ainda está inacessível. Tente novamente mais tarde." + }, + "alertBox": "Erro de conexão com o servidor", + "description": "Não conseguimos conectar ao servidor. Verifique sua conexão com a internet ou sua configuração de implantação se o problema persistir.", + "retryButton": { + "default": "Reconectar", + "processing": "Conectando..." + } + } + }, "submit": "Enviar", "title": "Título", - "continue": "Continuar", - "enterEmail": "Insira seu e-mail", - "authLoginTitle": "Login", - "authLoginEnterPassword": "Digite sua senha", - "commonPassword": "Senha", - "commonBack": "Voltar", - "authForgotPasswordTitle": "Esqueceu a senha?", - "authForgotPasswordResetPassword": "Redefinir a senha", - "createPassword": "Criar sua senha", - "createAPassword": "Senha", - "authRegisterAlreadyHaveAccount": "Já possui uma conta?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "Insira seu e-mail", - "authRegisterTitle": "Criar uma conta", - "authRegisterStepOneTitle": "Crie sua conta", - "authRegisterStepOneDescription": "Insira seus dados para começar", - "authRegisterStepTwoTitle": "Configure seu perfil", - "authRegisterStepTwoDescription": "Conte-nos mais sobre você", - "authRegisterStepThreeTitle": "Quase pronto!", - "authRegisterStepThreeDescription": "Revise suas informações", - "authForgotPasswordDescription": "Não se preocupe, enviaremos instruções de redefinição.", - "authForgotPasswordSendInstructions": "Enviar instruções", - "authForgotPasswordBackTo": "Voltar para", - "authCheckEmailTitle": "Verifique seu e-mail", - "authCheckEmailDescription": "Enviamos um link para redefinir a senha para", - "authCheckEmailResendEmail": "Reenviar e-mail", - "authCheckEmailBackTo": "Voltar para", - "goBackTo": "Volte para", - "authCheckEmailDidntReceiveEmail": "Não recebeu o e-mail?", - "authCheckEmailClickToResend": "Clique para reenviar", - "authSetNewPasswordTitle": "Definir nova senha", - "authSetNewPasswordDescription": "Sua nova senha deve ser diferente das senhas usadas anteriormente.", - "authSetNewPasswordNewPassword": "Nova senha", - "authSetNewPasswordConfirmPassword": "Confirme sua senha", - "confirmPassword": "Digite a senha novamente para confirmar", - "authSetNewPasswordResetPassword": "Redefinir senha", - "authSetNewPasswordBackTo": "Voltar para", - "authPasswordMustBeAtLeast": "Deve ser pelo menos", - "authPasswordCharactersLong": "8 caracteres de comprimento", - "authPasswordMustContainAtLeast": "Deve conter pelo menos", - "authPasswordSpecialCharacter": "um caractere especial", - "authPasswordOneNumber": "um número", - "authPasswordUpperCharacter": "um caractere maiúsculo", - "authPasswordLowerCharacter": "um caractere minúsculo", - "authPasswordConfirmAndPassword": "Confirme a senha", - "authPasswordMustMatch": "As senhas devem corresponder", - "authRegisterCreateAccount": "Crie sua conta para começar", - "authRegisterCreateSuperAdminAccount": "Crie sua conta de super admin para começar", - "authRegisterSignUpWithEmail": "Criar conta de super admin", - "authRegisterBySigningUp": "Ao criar uma conta, você concorda com nossos Termos de Serviço e Política de Privacidade.", "distributedStatusHeaderText": "Cobertura em tempo real e em dispositivos reais", "distributedStatusSubHeaderText": "Impulsionado por milhões de dispositivos em todo o mundo, visualize o desempenho do sistema por região global, país ou cidade", "settingsGeneralSettings": "Configurações gerais", @@ -107,7 +234,6 @@ "now": "Agora", "delete": "Deletar", "configure": "Configurar", - "networkError": "Erro de rede", "responseTime": "Tempo de resposta", "ms": "ms", "bar": "Bar", @@ -115,11 +241,6 @@ "country": "PAÍS", "city": "CIDADE", "response": "RESPOSTA", - "checkConnection": "Verifique sua conexão", - "passwordreset": "Redefinição de senha", - "authRegisterStepOnePersonalDetails": "Insira seus dados pessoais", - "authCheckEmailOpenEmailButton": "Abra o aplicativo de e-mail", - "authNewPasswordConfirmed": "Sua senha foi redefinida com sucesso. Clique abaixo para fazer login magicamente.", "monitorStatusUp": "O monitor {name} ({url}) agora está ATIVO e respondendo", "monitorStatusDown": "O monitor {name} ({url}) está INATIVO e não está respondendo", "webhookSendSuccess": "Notificação de webhook enviada com sucesso", @@ -393,10 +514,6 @@ "DeleteDescriptionText": "Isso removerá a conta e todos os dados associados do servidor. Essa ação não é reversível.", "DeleteAccountWarning": "Remover sua conta significa que você não poderá fazer login novamente e todos os seus dados serão removidos. Isso não é reversível.", "DeleteWarningTitle": "Deseja realmente remover esta conta?", - "authRegisterFirstName": "Nome", - "authRegisterLastName": "Sobrenome", - "authRegisterEmail": "E-mail", - "authRegisterEmailRequired": "Para continuar, insira seu endereço de e-mail", "bulkImport": { "title": "Bulk Import", "selectFileTips": "Selecione o arquivo CSV para enviar", @@ -408,27 +525,11 @@ "noFileSelected": "Nenhum arquivo selecionado", "fallbackPage": "Importe um arquivo para enviar uma lista de servidores em massa" }, - "welcomeBack": "Bem-vindo de volta! Você fez login com sucesso.", - "authRegisterLoginLink": "Login", - "validationNameRequired": "Por favor digite seu nome", - "validationNameTooLong": "O nome deve ter menos de 50 caracteres", - "validationNameInvalidCharacters": "Por favor, use apenas letras, espaços, apóstrofos ou hifens", "settingsSystemReset": "Resetar sistema", "settingsSystemResetDescription": "Remova todos os monitores do seu sistema.", "DeleteAccountTitle": "Remover conta", "DeleteAccountButton": "Remover conta", - "authRegisterEmailInvalid": "Por favor, insira um endereço de e-mail válido", "publicLink": "Link publico", - "doNotHaveAccount": "Ainda não tem uma conta?", - "registerHere": "Registre-se aqui", - "backendUnreachable": "Erro de conexão com o servidor", - "backendUnreachableMessage": "Não conseguimos conectar ao servidor. Verifique sua conexão com a internet ou sua configuração de implantação se o problema persistir.", - "backendUnreachableError": "Não foi possível conectar ao servidor. Tente novamente mais tarde.", - "retryConnection": "Reconectar", - "retryingConnection": "Conectando...", - "backendReconnected": "Reconectado ao servidor com sucesso.", - "backendStillUnreachable": "O servidor ainda está inacessível. Tente novamente mais tarde.", - "backendConnectionError": "Erro ao conectar ao servidor. Verifique sua conexão de internet.", "maskedPageSpeedKeyPlaceholder": "*************************************", "pageSpeedApiKeyFieldTitle": "Google PageSpeed API key", "pageSpeedApiKeyFieldLabel": "PageSpeed API key", @@ -513,7 +614,6 @@ "state": "Estado", "statusBreadCrumbsStatusPages": "Pagina de status", "statusBreadCrumbsDetails": "Detalhes", - "authForgotPasswordInstructions": "Não se preocupe, enviaremos instruções de redefinição.", "settingsThemeModeLight": "Claro", "settingsThemeModeDark": "Escuro", "settingsClearAllStatsDialogCancel": "Cancelar", diff --git a/client/src/locales/ru.json b/client/src/locales/ru.json index fce8fd6ab..9c74921a1 100644 --- a/client/src/locales/ru.json +++ b/client/src/locales/ru.json @@ -1,61 +1,188 @@ { - "dontHaveAccount": "Нет аккаунта", - "email": "Почта", - "forgotPassword": "Забыли пароль", - "password": "пароль", - "signUp": "Зарегистрироваться", + "common": { + "appName": "Checkmate", + "monitoringAgentName": "Capture", + "buttons": { + "toggleTheme": "" + }, + "toasts": { + "networkError": "Ошибка сети", + "checkConnection": "Пожалуйста, проверьте ваше соединение", + "unknownError": "" + } + }, + "auth": { + "common": { + "navigation": { + "continue": "Продолжить", + "back": "Назад" + }, + "inputs": { + "email": { + "label": "Почта", + "placeholder": "", + "errors": { + "empty": "Чтобы продолжить, пожалуйста, введите свой адрес электронной почты", + "invalid": "Пожалуйста, введите действительный адрес электронной почты" + } + }, + "password": { + "label": "пароль", + "rules": { + "length": { + "beginning": "Должно быть как минимум", + "highlighted": "длиной 8 символов" + }, + "special": { + "beginning": "Должен содержать как минимум", + "highlighted": "один специальный символ" + }, + "number": { + "beginning": "Должен содержать как минимум", + "highlighted": "одно число" + }, + "uppercase": { + "beginning": "Должен содержать как минимум", + "highlighted": "один верхний символ" + }, + "lowercase": { + "beginning": "Должен содержать как минимум", + "highlighted": "один нижний символ" + }, + "match": { + "beginning": "Подтвердите пароль и пароль", + "highlighted": "" + } + }, + "errors": { + "empty": "", + "length": "", + "uppercase": "", + "lowercase": "", + "number": "", + "special": "", + "incorrect": "" + } + }, + "passwordConfirm": { + "label": "Подтвердите пароль", + "placeholder": "Подтвердите ваш пароль", + "errors": { + "empty": "", + "different": "" + } + }, + "firstName": { + "label": "Имя", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + }, + "lastName": { + "label": "Фамилия", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + } + }, + "errors": { + "validation": "" + } + }, + "login": { + "heading": "Войти", + "subheadings": { + "stepOne": "Введите свой email", + "stepTwo": "Введите свой пароль" + }, + "links": { + "forgotPassword": "Забыли пароль? Сбросить пароль", + "register": "У вас нет учетной записи? Зарегистрируйтесь здесь" + }, + "toasts": { + "success": "Добро пожаловать обратно! Вы успешно вошли в систему.", + "incorrectPassword": "" + } + }, + "registration": { + "heading": { + "superAdmin": "", + "user": "Зарегистрироваться" + }, + "subheadings": { + "stepOne": "Введите свои личные данные", + "stepTwo": "Введите свой email", + "stepThree": "Создайте свой пароль" + }, + "description": { + "superAdmin": "Создайте учетную запись суперадминистратора, чтобы начать работу", + "user": "" + }, + "gettingStartedButton": { + "superAdmin": "Зарегистрироваться по электронной почте", + "user": "" + }, + "termsAndPolicies": "Регистрируясь, вы соглашаетесь с нашими", + "links": { + "login": "Уже есть аккаунт? Войти" + }, + "toasts": { + "success": "" + } + }, + "forgotPassword": { + "heading": "Забыли пароль?", + "subheadings": { + "stepOne": "Не беспокойтесь, мы вышлем вам инструкции по сбросу настроек.", + "stepTwo": "Мы отправили ссылку для сброса пароля ", + "stepThree": "Ваш новый пароль должен отличаться от ранее использованных паролей.", + "stepFour": "Ваш пароль успешно сброшен. Нажмите ниже, чтобы войти в систему магическим образом." + }, + "buttons": { + "openEmail": "Откройте приложение почты", + "resetPassword": "Сбросить пароль" + }, + "imageAlts": { + "passwordKey": "", + "email": "", + "lock": "", + "passwordConfirm": "" + }, + "links": { + "login": "Назад к Войти", + "resend": "Не получили письмо? Нажмите, чтобы отправить повторно" + }, + "toasts": { + "sent": "", + "emailNotFound": "", + "redirect": "", + "success": "", + "error": "" + } + } + }, + "errorPages": { + "serverUnreachable": { + "toasts": { + "reconnected": "Успешно подключен к серверу.", + "stillUnreachable": "Сервер по-прежнему недоступен. Пожалуйста, повторите попытку позже." + }, + "alertBox": "Ошибка подключения к серверу", + "description": "Нам не удается подключиться к серверу. Пожалуйста, проверьте подключение к Интернету или конфигурацию вашего развертывания, если проблема не устранена.", + "retryButton": { + "default": "Повторите попытку подключения", + "processing": "Подключение..." + } + } + }, "submit": "Подтвердить", "title": "Название", - "continue": "Продолжить", - "enterEmail": "Введите свой email", - "authLoginTitle": "Войти", - "authLoginEnterPassword": "Введите свой пароль", - "commonPassword": "Пароль", - "commonBack": "Назад", - "authForgotPasswordTitle": "Забыли пароль?", - "authForgotPasswordResetPassword": "Сбросить пароль", - "createPassword": "Создайте свой пароль", - "createAPassword": "Создайте пароль", - "authRegisterAlreadyHaveAccount": "Уже есть аккаунт?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "Введите свой email", - "authRegisterTitle": "Создать аккаунт", - "authRegisterStepOneTitle": "Создайте свой аккаут", - "authRegisterStepOneDescription": "Введите свои данные, чтобы начать", - "authRegisterStepTwoTitle": "Настройте свой профиль", - "authRegisterStepTwoDescription": "Расскажите нам о себе", - "authRegisterStepThreeTitle": "Почти готово!", - "authRegisterStepThreeDescription": "Проверьте свою информацию", - "authForgotPasswordDescription": "Не волнуйтесь, мы вышлем вам инструкции по сбросу настроек.", - "authForgotPasswordSendInstructions": "Отправить инструкции", - "authForgotPasswordBackTo": "Назад к", - "authCheckEmailTitle": "Проверьте свою почту", - "authCheckEmailDescription": "Мы отправили ссылку для сброса пароля", - "authCheckEmailResendEmail": "Отправить письмо повторно", - "authCheckEmailBackTo": "Назад к", - "goBackTo": "Назад к", - "authCheckEmailDidntReceiveEmail": "Не получили письмо?", - "authCheckEmailClickToResend": "Нажмите, чтобы отправить повторно", - "authSetNewPasswordTitle": "Установите новый пароль", - "authSetNewPasswordDescription": "Ваш новый пароль должен отличаться от ранее использованных паролей.", - "authSetNewPasswordNewPassword": "Новый пароль", - "authSetNewPasswordConfirmPassword": "Подтвердите пароль", - "confirmPassword": "Подтвердите ваш пароль", - "authSetNewPasswordResetPassword": "Сбросить пароль", - "authSetNewPasswordBackTo": "Назад к", - "authPasswordMustBeAtLeast": "Должно быть как минимум", - "authPasswordCharactersLong": "длиной 8 символов", - "authPasswordMustContainAtLeast": "Должен содержать как минимум", - "authPasswordSpecialCharacter": "один специальный символ", - "authPasswordOneNumber": "одно число", - "authPasswordUpperCharacter": "один верхний символ", - "authPasswordLowerCharacter": "один нижний символ", - "authPasswordConfirmAndPassword": "Подтвердите пароль и пароль", - "authPasswordMustMatch": "должен совпадать", - "authRegisterCreateAccount": "Создайте свою учетную запись, чтобы начать", - "authRegisterCreateSuperAdminAccount": "Создайте учетную запись суперадминистратора, чтобы начать работу", - "authRegisterSignUpWithEmail": "Зарегистрироваться по электронной почте", - "authRegisterBySigningUp": "Регистрируясь, вы соглашаетесь с нашими", "distributedStatusHeaderText": "Охват реального времени и реального устройства", "distributedStatusSubHeaderText": "Работает на миллионах устройств по всему миру, просматривайте производительность системы по глобальному региону, стране или городу", "settingsGeneralSettings": "Общие настройки", @@ -104,7 +231,6 @@ "now": "Сейчас", "delete": "Удалить", "configure": "Настроить", - "networkError": "Ошибка сети", "responseTime": "Время ответа:", "ms": "мс", "bar": "Bar", @@ -112,11 +238,6 @@ "country": "СТРАНА", "city": "ГОРОД", "response": "ОТВЕТ", - "checkConnection": "Пожалуйста, проверьте ваше соединение", - "passwordreset": "Сброс пароля", - "authRegisterStepOnePersonalDetails": "Введите свои личные данные", - "authCheckEmailOpenEmailButton": "Откройте приложение почты", - "authNewPasswordConfirmed": "Ваш пароль успешно сброшен. Нажмите ниже, чтобы войти в систему магическим образом.", "monitorStatusUp": "Монитор {name} ({url}) теперь включен и отвечает", "monitorStatusDown": "Монитор {name} ({url}) ОТКЛЮЧЕН и не отвечает", "webhookSendSuccess": "Уведомление Webhook успешно отправлено", @@ -389,10 +510,6 @@ "DeleteDescriptionText": "Это приведет к удалению учетной записи и всех связанных с ней данных с сервера. Это необратимо.", "DeleteAccountWarning": "Удаление вашей учетной записи означает, что вы не сможете снова войти в систему, и все ваши данные будут удалены. Это необратимо.", "DeleteWarningTitle": "Действительно удаляете эту учетную запись?", - "authRegisterFirstName": "Имя", - "authRegisterLastName": "Фамилия", - "authRegisterEmail": "Email", - "authRegisterEmailRequired": "Чтобы продолжить, пожалуйста, введите свой адрес электронной почты", "bulkImport": { "title": "Массовый импорт", "selectFileTips": "Выберите CSV-файл для загрузки", @@ -404,27 +521,11 @@ "noFileSelected": "Файл не выбран", "fallbackPage": "Импортируйте файл для массовой загрузки списка серверов" }, - "welcomeBack": "Добро пожаловать обратно! Вы успешно вошли в систему.", - "authRegisterLoginLink": "Войти", - "validationNameRequired": "Пожалуйста, введите свое имя", - "validationNameTooLong": "Длина имени не должна превышать 50 символов", - "validationNameInvalidCharacters": "Пожалуйста, используйте только буквы, пробелы, апострофы или дефисы", "settingsSystemReset": "Сброс системы", "settingsSystemResetDescription": "Удалите все мониторы из вашей системы.", "DeleteAccountTitle": "Удалить аккаунт", "DeleteAccountButton": "Удалить аккаунт", - "authRegisterEmailInvalid": "Пожалуйста, введите действительный адрес электронной почты", "publicLink": "Публичная ссылка", - "doNotHaveAccount": "У вас нет учетной записи?", - "registerHere": "Зарегистрируйтесь здесь", - "backendUnreachable": "Ошибка подключения к серверу", - "backendUnreachableMessage": "Нам не удается подключиться к серверу. Пожалуйста, проверьте подключение к Интернету или конфигурацию вашего развертывания, если проблема не устранена.", - "backendUnreachableError": "Не удается подключиться к серверу. Пожалуйста, повторите попытку позже.", - "retryConnection": "Повторите попытку подключения", - "retryingConnection": "Подключение...", - "backendReconnected": "Успешно подключен к серверу.", - "backendStillUnreachable": "Сервер по-прежнему недоступен. Пожалуйста, повторите попытку позже.", - "backendConnectionError": "Ошибка подключения к серверу. Пожалуйста, проверьте свое сетевое подключение.", "maskedPageSpeedKeyPlaceholder": "*************************************", "pageSpeedApiKeyFieldTitle": "Ключ API Google PageSpeed", "pageSpeedApiKeyFieldLabel": "Ключ API PageSpeed", @@ -509,7 +610,6 @@ "state": "Состояние", "statusBreadCrumbsStatusPages": "Страницы статуса", "statusBreadCrumbsDetails": "Подробности", - "authForgotPasswordInstructions": "Не беспокойтесь, мы вышлем вам инструкции по сбросу настроек.", "settingsThemeModeLight": "Светлая", "settingsThemeModeDark": "Тёмная", "settingsClearAllStatsDialogCancel": "Отменить", diff --git a/client/src/locales/tr.json b/client/src/locales/tr.json index fb1be3c57..28b9bd346 100644 --- a/client/src/locales/tr.json +++ b/client/src/locales/tr.json @@ -1,61 +1,188 @@ { - "dontHaveAccount": "Hesabınız yok mu", - "email": "E-posta", - "forgotPassword": "Parolamı unuttum", - "password": "Parola", - "signUp": "Kayıt Ol", + "common": { + "appName": "Checkmate", + "monitoringAgentName": "Capture", + "buttons": { + "toggleTheme": "" + }, + "toasts": { + "networkError": "Ağ hatası", + "checkConnection": "Lütfen bağlantınızı kontrol edin", + "unknownError": "" + } + }, + "auth": { + "common": { + "navigation": { + "continue": "Devam Et", + "back": "Geri" + }, + "inputs": { + "email": { + "label": "E-posta", + "placeholder": "", + "errors": { + "empty": "Devam etmek için lütfen e-posta adresinizi girin", + "invalid": "Lütfen geçerli bir eposta hesabı girin" + } + }, + "password": { + "label": "Parola", + "rules": { + "length": { + "beginning": "En az", + "highlighted": "8 karakter uzunluğunda olmalı" + }, + "special": { + "beginning": "En az içermeli", + "highlighted": "bir özel karakter" + }, + "number": { + "beginning": "En az içermeli", + "highlighted": "bir rakam" + }, + "uppercase": { + "beginning": "En az içermeli", + "highlighted": "bir büyük harf" + }, + "lowercase": { + "beginning": "En az içermeli", + "highlighted": "bir küçük harf" + }, + "match": { + "beginning": "Onay şifresi ve şifre", + "highlighted": "" + } + }, + "errors": { + "empty": "", + "length": "", + "uppercase": "", + "lowercase": "", + "number": "", + "special": "", + "incorrect": "" + } + }, + "passwordConfirm": { + "label": "Parolayı onayla", + "placeholder": "Parolanızı onaylayın", + "errors": { + "empty": "", + "different": "" + } + }, + "firstName": { + "label": "İsim", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + }, + "lastName": { + "label": "Soyisim", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + } + }, + "errors": { + "validation": "" + } + }, + "login": { + "heading": "Giriş Yap", + "subheadings": { + "stepOne": "E-posta adresinizi girin", + "stepTwo": "Parolanızı girin" + }, + "links": { + "forgotPassword": "Parolanızı mı unuttunuz? Parola sıfırla", + "register": "Bir hesabınız yok mu? Buradan kayıt olun" + }, + "toasts": { + "success": "Tekrar hoş geldiniz! Başarıyla giriş yaptınız.", + "incorrectPassword": "" + } + }, + "registration": { + "heading": { + "superAdmin": "", + "user": "Kayıt Ol" + }, + "subheadings": { + "stepOne": "Kişisel bilgilerinizi girin", + "stepTwo": "E-posta adresinizi girin", + "stepThree": "Parolanızı oluşturun" + }, + "description": { + "superAdmin": "Super admin hesabınızı oluşturmak için devam edin", + "user": "" + }, + "gettingStartedButton": { + "superAdmin": "E-posta ile kayıt ol", + "user": "" + }, + "termsAndPolicies": "", + "links": { + "login": "Zaten hesabınız var mı? Giriş yap" + }, + "toasts": { + "success": "" + } + }, + "forgotPassword": { + "heading": "Parolanızı mı unuttunuz?", + "subheadings": { + "stepOne": "Endişelenmeyin, size sıfırlama talimatlarını göndereceğiz.", + "stepTwo": " adresine şifre sıfırlama bağlantısı gönderdik", + "stepThree": "Yeni şifreniz daha önce kullanılan şifrelerden farklı olmalıdır.", + "stepFour": "Parolanız başarıyla sıfırlandı. Otomatik olarak giriş yapmak için aşağıya tıklayın." + }, + "buttons": { + "openEmail": "Eposta uygulamasını aç", + "resetPassword": "Parola sıfırla" + }, + "imageAlts": { + "passwordKey": "", + "email": "", + "lock": "", + "passwordConfirm": "" + }, + "links": { + "login": "Geri dön Giriş Yap", + "resend": "E-posta almadınız mı? Yeniden göndermek için tıklayın" + }, + "toasts": { + "sent": "", + "emailNotFound": "", + "redirect": "", + "success": "", + "error": "" + } + } + }, + "errorPages": { + "serverUnreachable": { + "toasts": { + "reconnected": "Sunucuya başarıyla yeniden bağlanıldı.", + "stillUnreachable": "Sunucuya hala ulaşılamıyor. Lütfen daha sonra tekrar deneyin." + }, + "alertBox": "Sunucu bağlantı hatası", + "description": "Sunucuya bağlanamıyoruz. Lütfen internet bağlantınızı kontrol edin veya sorun devam ederse dağıtım yapılandırmanızı doğrulayın.", + "retryButton": { + "default": "Bağlantıyı yeniden deneyin", + "processing": "Bağlanıyor..." + } + } + }, "submit": "Gönder", "title": "Başlık", - "continue": "Devam Et", - "enterEmail": "E-posta adresinizi girin", - "authLoginTitle": "Giriş Yap", - "authLoginEnterPassword": "Parolanızı girin", - "commonPassword": "Parola", - "commonBack": "Geri", - "authForgotPasswordTitle": "Parolanızı mı unuttunuz?", - "authForgotPasswordResetPassword": "Parola sıfırla", - "createPassword": "Parolanızı oluşturun", - "createAPassword": "Bir parola oluşturun", - "authRegisterAlreadyHaveAccount": "Zaten hesabınız var mı?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "E-posta adresinizi girin", - "authRegisterTitle": "Hesap oluştur", - "authRegisterStepOneTitle": "Hesabınızı oluşturun", - "authRegisterStepOneDescription": "Başlamak için bilgilerinizi girin", - "authRegisterStepTwoTitle": "Profilinizi ayarlayın", - "authRegisterStepTwoDescription": "Kendiniz hakkında daha fazla bilgi verin", - "authRegisterStepThreeTitle": "Neredeyse bitti!", - "authRegisterStepThreeDescription": "Bilgilerinizi gözden geçirin", - "authForgotPasswordDescription": "Endişelenmeyin, size sıfırlama talimatlarını göndereceğiz.", - "authForgotPasswordSendInstructions": "Talimatları gönder", - "authForgotPasswordBackTo": "Geri dön", - "authCheckEmailTitle": "E-postanızı kontrol edin", - "authCheckEmailDescription": "{{email}} adresine şifre sıfırlama bağlantısı gönderdik", - "authCheckEmailResendEmail": "E-postayı yeniden gönder", - "authCheckEmailBackTo": "Geri dön", - "goBackTo": "Geri dön", - "authCheckEmailDidntReceiveEmail": "E-posta almadınız mı?", - "authCheckEmailClickToResend": "Yeniden göndermek için tıklayın", - "authSetNewPasswordTitle": "Yeni şifre belirle", - "authSetNewPasswordDescription": "Yeni şifreniz daha önce kullanılan şifrelerden farklı olmalıdır.", - "authSetNewPasswordNewPassword": "Yeni şifre", - "authSetNewPasswordConfirmPassword": "Parolayı onayla", - "confirmPassword": "Parolanızı onaylayın", - "authSetNewPasswordResetPassword": "Parola sıfırla", - "authSetNewPasswordBackTo": "Geri dön", - "authPasswordMustBeAtLeast": "En az", - "authPasswordCharactersLong": "8 karakter uzunluğunda olmalı", - "authPasswordMustContainAtLeast": "En az içermeli", - "authPasswordSpecialCharacter": "bir özel karakter", - "authPasswordOneNumber": "bir rakam", - "authPasswordUpperCharacter": "bir büyük harf", - "authPasswordLowerCharacter": "bir küçük harf", - "authPasswordConfirmAndPassword": "Onay şifresi ve şifre", - "authPasswordMustMatch": "eşleşmelidir", - "authRegisterCreateAccount": "Hesap oluşturmak için devam et", - "authRegisterCreateSuperAdminAccount": "Super admin hesabınızı oluşturmak için devam edin", - "authRegisterSignUpWithEmail": "E-posta ile kayıt ol", - "authRegisterBySigningUp": "Kayıt olarak, aşağıdaki şartları kabul ediyorsunuz:", "distributedStatusHeaderText": "Gerçek zamanlı, Gerçek cihazlar kapsamı", "distributedStatusSubHeaderText": "Dünya çapında milyonlarca cihaz tarafından desteklenen sistem performansını küresel bölgeye, ülkeye veya şehre göre görüntüleyin", "settingsGeneralSettings": "Genel ayarlar", @@ -108,7 +235,6 @@ "now": "Şimdi", "delete": "Sil", "configure": "Yapılandır", - "networkError": "Ağ hatası", "responseTime": "Yanıt süresi:", "ms": "ms", "bar": "Çubuk", @@ -116,11 +242,6 @@ "country": "ÜLKE", "city": "ŞEHİR", "response": "YANIT", - "checkConnection": "Lütfen bağlantınızı kontrol edin", - "passwordreset": "Parola Sıfırlama", - "authRegisterStepOnePersonalDetails": "Kişisel bilgilerinizi girin", - "authCheckEmailOpenEmailButton": "Eposta uygulamasını aç", - "authNewPasswordConfirmed": "Parolanız başarıyla sıfırlandı. Otomatik olarak giriş yapmak için aşağıya tıklayın.", "monitorStatusUp": "Monitör {name} ({url}) ayakta ve yanıt veriyor", "monitorStatusDown": "Monitör {name} ({url}) yanıt vermiyor", "webhookSendSuccess": "Web kanca bildirimi başarıyla gönderildi", @@ -394,10 +515,6 @@ "DeleteDescriptionText": "Bu, hesabı ve ilişkili tüm verileri sunucudan kaldıracaktır. Bu geri alınamaz.", "DeleteAccountWarning": "Hesabınızı kaldırmanız, tekrar oturum açamayacağınız ve tüm verilerinizin silineceği anlamına gelir. Bu geri alınamaz.", "DeleteWarningTitle": "Gerçekten bu hesabı silmek istiyor musunuz?", - "authRegisterFirstName": "İsim", - "authRegisterLastName": "Soyisim", - "authRegisterEmail": "E-posta", - "authRegisterEmailRequired": "Devam etmek için lütfen e-posta adresinizi girin", "bulkImport": { "title": "Toplu içeri alma", "selectFileTips": "Yüklenecek CSV dosyasını seçin", @@ -409,27 +526,11 @@ "noFileSelected": "Hiçbir dosya seçilmedi", "fallbackPage": "Toplu olarak sunucu listesini yüklemek için bir dosyayı içe aktarın" }, - "welcomeBack": "Tekrar hoş geldiniz! Başarıyla giriş yaptınız.", - "authRegisterLoginLink": "Giriş yap", - "validationNameRequired": "Lütfen adınızı girin", - "validationNameTooLong": "İsim 50 karakterden az olmalıdır", - "validationNameInvalidCharacters": "Lütfen sadece harfler, boşluk, tırnak ve çizgi kullanın", "settingsSystemReset": "Sistem sıfırla", "settingsSystemResetDescription": "Sistemdeki tüm monitörleri silin", "DeleteAccountTitle": "Hesabı sil", "DeleteAccountButton": "Hesabı sil", - "authRegisterEmailInvalid": "Lütfen geçerli bir eposta hesabı girin", "publicLink": "Herkese açık bağlantı", - "doNotHaveAccount": "Bir hesabınız yok mu?", - "registerHere": "Buradan kayıt olun", - "backendUnreachable": "Sunucu bağlantı hatası", - "backendUnreachableMessage": "Sunucuya bağlanamıyoruz. Lütfen internet bağlantınızı kontrol edin veya sorun devam ederse dağıtım yapılandırmanızı doğrulayın.", - "backendUnreachableError": "Sunucuya bağlanılamıyor. Lütfen daha sonra tekrar deneyin.", - "retryConnection": "Bağlantıyı yeniden deneyin", - "retryingConnection": "Bağlanıyor...", - "backendReconnected": "Sunucuya başarıyla yeniden bağlanıldı.", - "backendStillUnreachable": "Sunucuya hala ulaşılamıyor. Lütfen daha sonra tekrar deneyin.", - "backendConnectionError": "Sunucuya bağlanırken hata oluştu. Lütfen ağ bağlantınızı kontrol edin.", "maskedPageSpeedKeyPlaceholder": "*************************************", "pageSpeedApiKeyFieldTitle": "Google PageSpeed API anahtarı", "pageSpeedApiKeyFieldLabel": "PageSpeed API anahtarı", @@ -514,7 +615,6 @@ "state": "Durum", "statusBreadCrumbsStatusPages": "Durum sayfası", "statusBreadCrumbsDetails": "Detaylar", - "authForgotPasswordInstructions": "Endişelenmeyin, size sıfırlama talimatlarını göndereceğiz.", "settingsThemeModeLight": "Aydınlat", "settingsThemeModeDark": "Karart", "settingsClearAllStatsDialogCancel": "İptal", diff --git a/client/src/locales/zh-TW.json b/client/src/locales/zh-TW.json index bb44d91da..2f4668548 100644 --- a/client/src/locales/zh-TW.json +++ b/client/src/locales/zh-TW.json @@ -1,61 +1,188 @@ { - "dontHaveAccount": "沒有帳號", - "email": "E-mail", - "forgotPassword": "忘記密碼", - "password": "密碼", - "signUp": "註冊", + "common": { + "appName": "Checkmate", + "monitoringAgentName": "Capture", + "buttons": { + "toggleTheme": "" + }, + "toasts": { + "networkError": "", + "checkConnection": "", + "unknownError": "" + } + }, + "auth": { + "common": { + "navigation": { + "continue": "繼續", + "back": "回去" + }, + "inputs": { + "email": { + "label": "E-mail", + "placeholder": "", + "errors": { + "empty": "", + "invalid": "" + } + }, + "password": { + "label": "密碼", + "rules": { + "length": { + "beginning": "必須至少", + "highlighted": "8 個字符長" + }, + "special": { + "beginning": "必須至少包含", + "highlighted": "一個特殊字符" + }, + "number": { + "beginning": "必須至少包含", + "highlighted": "一個數字" + }, + "uppercase": { + "beginning": "必須至少包含", + "highlighted": "一個大寫字母" + }, + "lowercase": { + "beginning": "必須至少包含", + "highlighted": "一個小寫字母" + }, + "match": { + "beginning": "確認密碼", + "highlighted": "" + } + }, + "errors": { + "empty": "", + "length": "", + "uppercase": "", + "lowercase": "", + "number": "", + "special": "", + "incorrect": "" + } + }, + "passwordConfirm": { + "label": "確認密碼", + "placeholder": "確認您的密碼", + "errors": { + "empty": "", + "different": "" + } + }, + "firstName": { + "label": "", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + }, + "lastName": { + "label": "", + "placeholder": "", + "errors": { + "empty": "", + "length": "", + "pattern": "" + } + } + }, + "errors": { + "validation": "" + } + }, + "login": { + "heading": "登入", + "subheadings": { + "stepOne": "輸入您的 E-mail", + "stepTwo": "輸入您的密碼" + }, + "links": { + "forgotPassword": "", + "register": "" + }, + "toasts": { + "success": "", + "incorrectPassword": "" + } + }, + "registration": { + "heading": { + "superAdmin": "", + "user": "註冊" + }, + "subheadings": { + "stepOne": "", + "stepTwo": "輸入您的 E-mail", + "stepThree": "" + }, + "description": { + "superAdmin": "建立您的超級管理員帳號開始使用", + "user": "" + }, + "gettingStartedButton": { + "superAdmin": "用 E-mail 註冊", + "user": "" + }, + "termsAndPolicies": "註冊即表示您同意我們的", + "links": { + "login": "" + }, + "toasts": { + "success": "" + } + }, + "forgotPassword": { + "heading": "忘記密碼?", + "subheadings": { + "stepOne": "", + "stepTwo": "我們已將密碼重設連結發送至 ", + "stepThree": "您的新密碼必須與之前使用過的密碼不同。", + "stepFour": "" + }, + "buttons": { + "openEmail": "", + "resetPassword": "重設密碼" + }, + "imageAlts": { + "passwordKey": "", + "email": "", + "lock": "", + "passwordConfirm": "" + }, + "links": { + "login": "回去 登入", + "resend": "沒有受到 E-mail? 點擊" + }, + "toasts": { + "sent": "", + "emailNotFound": "", + "redirect": "", + "success": "", + "error": "" + } + } + }, + "errorPages": { + "serverUnreachable": { + "toasts": { + "reconnected": "", + "stillUnreachable": "" + }, + "alertBox": "", + "description": "", + "retryButton": { + "default": "", + "processing": "" + } + } + }, "submit": "", "title": "", - "continue": "繼續", - "enterEmail": "輸入您的 E-mail", - "authLoginTitle": "登入", - "authLoginEnterPassword": "輸入您的密碼", - "commonPassword": "密碼", - "commonBack": "回去", - "authForgotPasswordTitle": "忘記密碼?", - "authForgotPasswordResetPassword": "", - "createPassword": "", - "createAPassword": "", - "authRegisterAlreadyHaveAccount": "已經有帳號嗎?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "輸入您的 E-mail", - "authRegisterTitle": "建立帳號", - "authRegisterStepOneTitle": "建立您的帳號", - "authRegisterStepOneDescription": "清輸入您的個人檔案", - "authRegisterStepTwoTitle": "設定您的個人檔案", - "authRegisterStepTwoDescription": "請分享更多關於您的資訊", - "authRegisterStepThreeTitle": "快完成了!", - "authRegisterStepThreeDescription": "請確認您的資訊", - "authForgotPasswordDescription": "別擔心,我們會發送重設說明給您。", - "authForgotPasswordSendInstructions": "將說明發送至", - "authForgotPasswordBackTo": "回去", - "authCheckEmailTitle": "請查看您的電子郵件", - "authCheckEmailDescription": "我們已將密碼重設連結發送至", - "authCheckEmailResendEmail": "重新發送 E-mail", - "authCheckEmailBackTo": "回去", - "goBackTo": "回去", - "authCheckEmailDidntReceiveEmail": "沒有受到 E-mail?", - "authCheckEmailClickToResend": "點擊", - "authSetNewPasswordTitle": "設定新密碼", - "authSetNewPasswordDescription": "您的新密碼必須與之前使用過的密碼不同。", - "authSetNewPasswordNewPassword": "新密碼", - "authSetNewPasswordConfirmPassword": "確認密碼", - "confirmPassword": "確認您的密碼", - "authSetNewPasswordResetPassword": "重設密碼", - "authSetNewPasswordBackTo": "回去", - "authPasswordMustBeAtLeast": "必須至少", - "authPasswordCharactersLong": "8 個字符長", - "authPasswordMustContainAtLeast": "必須至少包含", - "authPasswordSpecialCharacter": "一個特殊字符", - "authPasswordOneNumber": "一個數字", - "authPasswordUpperCharacter": "一個大寫字母", - "authPasswordLowerCharacter": "一個小寫字母", - "authPasswordConfirmAndPassword": "確認密碼", - "authPasswordMustMatch": "必須相符", - "authRegisterCreateAccount": "建立您的帳號開始使用", - "authRegisterCreateSuperAdminAccount": "建立您的超級管理員帳號開始使用", - "authRegisterSignUpWithEmail": "用 E-mail 註冊", - "authRegisterBySigningUp": "註冊即表示您同意我們的", "distributedStatusHeaderText": "實時、真實設備覆蓋", "distributedStatusSubHeaderText": "由全球數百萬個設備提供支持,您可以按全球區域、國家或城市查看系統效能", "settingsGeneralSettings": "一般設定", @@ -108,7 +235,6 @@ "now": "", "delete": "", "configure": "", - "networkError": "", "responseTime": "", "ms": "", "bar": "", @@ -116,11 +242,6 @@ "country": "", "city": "", "response": "", - "checkConnection": "", - "passwordreset": "", - "authRegisterStepOnePersonalDetails": "", - "authCheckEmailOpenEmailButton": "", - "authNewPasswordConfirmed": "", "monitorStatusUp": "", "monitorStatusDown": "", "webhookSendSuccess": "", @@ -394,10 +515,6 @@ "DeleteDescriptionText": "", "DeleteAccountWarning": "", "DeleteWarningTitle": "", - "authRegisterFirstName": "", - "authRegisterLastName": "", - "authRegisterEmail": "", - "authRegisterEmailRequired": "", "bulkImport": { "title": "", "selectFileTips": "", @@ -409,27 +526,11 @@ "noFileSelected": "", "fallbackPage": "" }, - "welcomeBack": "", - "authRegisterLoginLink": "", - "validationNameRequired": "", - "validationNameTooLong": "", - "validationNameInvalidCharacters": "", "settingsSystemReset": "", "settingsSystemResetDescription": "", "DeleteAccountTitle": "", "DeleteAccountButton": "", - "authRegisterEmailInvalid": "", "publicLink": "", - "doNotHaveAccount": "", - "registerHere": "", - "backendUnreachable": "", - "backendUnreachableMessage": "", - "backendUnreachableError": "", - "retryConnection": "", - "retryingConnection": "", - "backendReconnected": "", - "backendStillUnreachable": "", - "backendConnectionError": "", "maskedPageSpeedKeyPlaceholder": "", "pageSpeedApiKeyFieldTitle": "", "pageSpeedApiKeyFieldLabel": "", @@ -514,7 +615,6 @@ "state": "", "statusBreadCrumbsStatusPages": "", "statusBreadCrumbsDetails": "", - "authForgotPasswordInstructions": "", "settingsThemeModeLight": "", "settingsThemeModeDark": "", "settingsClearAllStatsDialogCancel": "", diff --git a/server/validation/joi.js b/server/validation/joi.js index 3efd202b5..9024c26a4 100755 --- a/server/validation/joi.js +++ b/server/validation/joi.js @@ -22,18 +22,8 @@ const passwordPattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!?@#$%^&*()\-_=+[\]{};:'",.<>~`|\\/])[A-Za-z0-9!?@#$%^&*()\-_=+[\]{};:'",.<>~`|\\/]+$/; const loginValidation = joi.object({ - email: joi - .string() - .email() - .required() - .custom((value, helpers) => { - const lowercasedValue = value.toLowerCase(); - if (value !== lowercasedValue) { - return helpers.message("Email must be in lowercase"); - } - return lowercasedValue; - }), - password: joi.string().min(8).required().pattern(passwordPattern), + email: joi.string().email().required().lowercase(), + password: joi.string().required(), }); const nameValidation = joi .string()