Add translations
This commit is contained in:
parent
76af01ee8b
commit
98beb33993
@ -83,5 +83,26 @@
|
|||||||
"loginGoogle": "Login with Google",
|
"loginGoogle": "Login with Google",
|
||||||
"noAccount": "Don't have an account yet?",
|
"noAccount": "Don't have an account yet?",
|
||||||
"register": "Register"
|
"register": "Register"
|
||||||
|
},
|
||||||
|
"forgotPasswordEmail": {
|
||||||
|
"enter": "Enter email",
|
||||||
|
"desc": "Enter your email and create a password recovery code",
|
||||||
|
"sendCode": "Get code",
|
||||||
|
"error": "An error occurred while sending the email",
|
||||||
|
"emailFormat": "Invalid email format",
|
||||||
|
"userNotFound": "User with this email was not found",
|
||||||
|
"serverError": "Server side error",
|
||||||
|
"errorOccured": "An unexpected error occurred"
|
||||||
|
},
|
||||||
|
"confirmCodeForgot": {
|
||||||
|
"enterCode": "Enter code",
|
||||||
|
"enterInfo": "Enter the code to reset and recover your password",
|
||||||
|
"code": "Confirmation code",
|
||||||
|
"getPassword": "Reset password",
|
||||||
|
"getCode": "Get code",
|
||||||
|
"min": "The verification code consists of 6 digits",
|
||||||
|
"incorrect": "Incorrect code",
|
||||||
|
"serverError": "Error on the server side",
|
||||||
|
"errorOccured": "An unexpected error occurred"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,5 +83,26 @@
|
|||||||
"loginGoogle": "Google аркылуу кируңуз",
|
"loginGoogle": "Google аркылуу кируңуз",
|
||||||
"noAccount": "Аккаунт жок?",
|
"noAccount": "Аккаунт жок?",
|
||||||
"register": "Каттоо"
|
"register": "Каттоо"
|
||||||
|
},
|
||||||
|
"forgotPasswordEmail": {
|
||||||
|
"enter": "Электрондук почтаны киргизиңиз",
|
||||||
|
"desc": "Электрондук почтаңызды киргизиңиз жана сырсөздү калыбына келтирүү кодун түзүңүз",
|
||||||
|
"sendCode": "Кодду түзөтүү",
|
||||||
|
"error": "Электрондук кат жөнөтүүдө ката кетти",
|
||||||
|
"emailFormat": "Жараксыз электрондук почта форматы",
|
||||||
|
"userNotFound": "Бул электрондук почтасы бар колдонуучу табылган жок",
|
||||||
|
"serverError": "Сервер тараптагы ката",
|
||||||
|
"errorOccured": "Күтүлбөгөн ката кетти"
|
||||||
|
},
|
||||||
|
"confirmCodeForgot": {
|
||||||
|
"enterCode": "Кодду киргизиңиз",
|
||||||
|
"enterInfo": "Сырсөзүңүздү калыбына келтирүү жана калыбына келтирүү үчүн кодду киргизиңиз",
|
||||||
|
"code": "Ырастоо коду",
|
||||||
|
"getPassword": "Сырсөздү кайра коюу",
|
||||||
|
"getCode": "Кодду алуу",
|
||||||
|
"min": "Текшерүү коду 6 сандан турат",
|
||||||
|
"incorrect": "Код туура эмес",
|
||||||
|
"serverError": "Сервер тараптагы ката",
|
||||||
|
"errorOccured": "Күтүлбөгөн ката кетти"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -74,5 +74,26 @@
|
|||||||
"loginGoogle": "Войти через Google",
|
"loginGoogle": "Войти через Google",
|
||||||
"noAccount": "Еще нет аккаунта?",
|
"noAccount": "Еще нет аккаунта?",
|
||||||
"register": "Зарегистрируйтесь"
|
"register": "Зарегистрируйтесь"
|
||||||
|
},
|
||||||
|
"forgotPasswordEmail": {
|
||||||
|
"enter": "Введите email",
|
||||||
|
"desc": "Введите email и мы отправим код для восстановления пароля",
|
||||||
|
"sendCode": "Отправить код",
|
||||||
|
"error": "Произошла ошибка при отправке электронной почты",
|
||||||
|
"emailFormat": "Неверный формат email",
|
||||||
|
"userNotFound": "Пользователь с таким email не найден",
|
||||||
|
"serverError": "Ошибка на стороне сервера",
|
||||||
|
"errorOccured": "Произошла непредвиденная ошибка"
|
||||||
|
},
|
||||||
|
"confirmCodeForgot": {
|
||||||
|
"enterCode": "Введите код",
|
||||||
|
"enterInfo": "Введите код для сброса и восстановления пароля",
|
||||||
|
"code": "Код подтверждения",
|
||||||
|
"getPassword": "Сбросить пароль",
|
||||||
|
"getCode": "Получить код",
|
||||||
|
"min": "Код подтверждения состоит из 6 цифр",
|
||||||
|
"incorrect": "Неверный код",
|
||||||
|
"serverError": "Ошибка на стороне сервера",
|
||||||
|
"errorOccured": "Произошла непредвиденная ошибка"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import { z } from "zod";
|
|||||||
import { useForm } from "react-hook-form";
|
import { useForm } from "react-hook-form";
|
||||||
import { zodResolver } from "@hookform/resolvers/zod";
|
import { zodResolver } from "@hookform/resolvers/zod";
|
||||||
import alert from "../../icons/alert-circle.svg";
|
import alert from "../../icons/alert-circle.svg";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
|
||||||
interface IConfirmCodeProps {
|
interface IConfirmCodeProps {
|
||||||
setChangeForm: (boolean: boolean) => void;
|
setChangeForm: (boolean: boolean) => void;
|
||||||
@ -21,9 +22,10 @@ const ConfirmCode: React.FC<IConfirmCodeProps> = ({
|
|||||||
const [error, setError] = useState<string>("");
|
const [error, setError] = useState<string>("");
|
||||||
const [loader, setLoader] = useState<boolean>(false);
|
const [loader, setLoader] = useState<boolean>(false);
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const t = useTranslations("confirmCodeForgot");
|
||||||
|
|
||||||
const confirmCodeScheme = z.object({
|
const confirmCodeScheme = z.object({
|
||||||
code: z.string().min(6, "Код подтверждения состоит из 6 цифр"),
|
code: z.string().min(6, t("min")),
|
||||||
});
|
});
|
||||||
type FormFields = z.infer<typeof confirmCodeScheme>;
|
type FormFields = z.infer<typeof confirmCodeScheme>;
|
||||||
|
|
||||||
@ -51,12 +53,12 @@ const ConfirmCode: React.FC<IConfirmCodeProps> = ({
|
|||||||
} catch (error: unknown) {
|
} catch (error: unknown) {
|
||||||
if (error instanceof AxiosError) {
|
if (error instanceof AxiosError) {
|
||||||
if (error.response?.status === 400) {
|
if (error.response?.status === 400) {
|
||||||
setError("Неверный код");
|
setError(t("incorrect"));
|
||||||
} else {
|
} else {
|
||||||
setError("Ошибка на стороне сервера");
|
setError(t("serverError"));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
setError("Произошла непредвиденная ошибка");
|
setError(t("errorOccured"));
|
||||||
}
|
}
|
||||||
setLoader(false);
|
setLoader(false);
|
||||||
}
|
}
|
||||||
@ -68,11 +70,9 @@ const ConfirmCode: React.FC<IConfirmCodeProps> = ({
|
|||||||
</div>
|
</div>
|
||||||
<div className="auth-header">
|
<div className="auth-header">
|
||||||
<h2 className="text-[24px] font-bold leading-8 text-gray-900 text-center">
|
<h2 className="text-[24px] font-bold leading-8 text-gray-900 text-center">
|
||||||
Введите код
|
{t("enterCode")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="leading-6 text-gray-500">
|
<p className="leading-6 text-gray-500">{t("enterInfo")}</p>
|
||||||
Введите код для сброса и восстановления пароля
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form
|
<form
|
||||||
@ -81,7 +81,7 @@ const ConfirmCode: React.FC<IConfirmCodeProps> = ({
|
|||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<label className="text-[14px] leading-5 text-gray-700">
|
<label className="text-[14px] leading-5 text-gray-700">
|
||||||
Код подтверждения
|
{t("code")}
|
||||||
</label>
|
</label>
|
||||||
<div
|
<div
|
||||||
className={`flex items-center${
|
className={`flex items-center${
|
||||||
@ -89,7 +89,7 @@ const ConfirmCode: React.FC<IConfirmCodeProps> = ({
|
|||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
placeholder="Код подтверждения"
|
placeholder={t("code")}
|
||||||
className="w-full text-[16px] leading-6 text-gray-900 px-[10px] py-[14px] border border-gray-300 rounded-lg shadow-sm bg-white"
|
className="w-full text-[16px] leading-6 text-gray-900 px-[10px] py-[14px] border border-gray-300 rounded-lg shadow-sm bg-white"
|
||||||
type="text"
|
type="text"
|
||||||
{...register("code", { required: true })}
|
{...register("code", { required: true })}
|
||||||
@ -105,7 +105,7 @@ const ConfirmCode: React.FC<IConfirmCodeProps> = ({
|
|||||||
type="submit"
|
type="submit"
|
||||||
className=" w-full h-[44px] rounded-md shadow-sm bg-light-blue font-bold leading-6 text-white"
|
className=" w-full h-[44px] rounded-md shadow-sm bg-light-blue font-bold leading-6 text-white"
|
||||||
>
|
>
|
||||||
{loader ? <Loader /> : "Сбросить пароль"}
|
{loader ? <Loader /> : t("getPassword")}
|
||||||
</button>
|
</button>
|
||||||
{error && <div className="text-red-500">{error}</div>}
|
{error && <div className="text-red-500">{error}</div>}
|
||||||
{errors.root && (
|
{errors.root && (
|
||||||
@ -116,7 +116,7 @@ const ConfirmCode: React.FC<IConfirmCodeProps> = ({
|
|||||||
onClick={() => setChangeForm(false)}
|
onClick={() => setChangeForm(false)}
|
||||||
className="text-light-blue leading-6"
|
className="text-light-blue leading-6"
|
||||||
>
|
>
|
||||||
Получить код
|
{t("getCode")}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -8,6 +8,7 @@ import { z } from "zod";
|
|||||||
import { useForm } from "react-hook-form";
|
import { useForm } from "react-hook-form";
|
||||||
import { zodResolver } from "@hookform/resolvers/zod";
|
import { zodResolver } from "@hookform/resolvers/zod";
|
||||||
import alert from "../../icons/alert-circle.svg";
|
import alert from "../../icons/alert-circle.svg";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
|
||||||
interface ISendEmailProps {
|
interface ISendEmailProps {
|
||||||
setChangeForm: (boolean: boolean) => void;
|
setChangeForm: (boolean: boolean) => void;
|
||||||
@ -18,9 +19,10 @@ const SendEmail: React.FC<ISendEmailProps> = ({
|
|||||||
}: ISendEmailProps) => {
|
}: ISendEmailProps) => {
|
||||||
const [error, setError] = useState<string>("");
|
const [error, setError] = useState<string>("");
|
||||||
const [loader, setLoader] = useState<boolean>(false);
|
const [loader, setLoader] = useState<boolean>(false);
|
||||||
|
const t = useTranslations("forgotPasswordEmail");
|
||||||
|
|
||||||
const sendEmailFormScheme = z.object({
|
const sendEmailFormScheme = z.object({
|
||||||
email: z.string().email("Неверный формат email"),
|
email: z.string().email(t("emailFormat")),
|
||||||
});
|
});
|
||||||
type FormFields = z.infer<typeof sendEmailFormScheme>;
|
type FormFields = z.infer<typeof sendEmailFormScheme>;
|
||||||
|
|
||||||
@ -46,12 +48,12 @@ const SendEmail: React.FC<ISendEmailProps> = ({
|
|||||||
if (error instanceof AxiosError) {
|
if (error instanceof AxiosError) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
if (error.response?.status === 400) {
|
if (error.response?.status === 400) {
|
||||||
setError("Пользователь с таким email не найден");
|
setError(t("userNotFound"));
|
||||||
} else {
|
} else {
|
||||||
setError("Ошибка на стороне сервера");
|
setError(t("serverError"));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
setError("Произошла непредвиденная ошибка");
|
setError(t("errorOccured"));
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
setLoader(false);
|
setLoader(false);
|
||||||
@ -64,11 +66,9 @@ const SendEmail: React.FC<ISendEmailProps> = ({
|
|||||||
</div>
|
</div>
|
||||||
<div className="mb-2 flex flex-col items-center gap-2 text-center">
|
<div className="mb-2 flex flex-col items-center gap-2 text-center">
|
||||||
<h2 className="text-[24px] font-bold leading-8 text-gray-900">
|
<h2 className="text-[24px] font-bold leading-8 text-gray-900">
|
||||||
Введите email
|
{t("enter")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="leading-6 text-gray-500">
|
<p className="leading-6 text-gray-500">{t("desc")}</p>
|
||||||
Введите email и мы отправим код для восстановления пароля
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form
|
<form
|
||||||
@ -99,17 +99,11 @@ const SendEmail: React.FC<ISendEmailProps> = ({
|
|||||||
type="submit"
|
type="submit"
|
||||||
className="w-full h-[44px] rounded-md shadow-sm bg-light-blue font-bold leading-6 text-white"
|
className="w-full h-[44px] rounded-md shadow-sm bg-light-blue font-bold leading-6 text-white"
|
||||||
>
|
>
|
||||||
{loader ? <Loader /> : "Отправить код"}
|
{loader ? <Loader /> : t("sendCode")}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
{error && <div className="text-red-500">{error}</div>}
|
{error && <div className="text-red-500">{error}</div>}
|
||||||
{errors.root && <div className="text-red-500">{errors.root.message}</div>}
|
{errors.root && <div className="text-red-500">{errors.root.message}</div>}
|
||||||
<button
|
|
||||||
onClick={() => setChangeForm(true)}
|
|
||||||
className="text-light-blue leading-6"
|
|
||||||
>
|
|
||||||
Потвердить код
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user