Add translations

This commit is contained in:
ariari04 2024-08-27 08:52:34 +06:00
parent 76af01ee8b
commit 98beb33993
5 changed files with 84 additions and 27 deletions

View File

@ -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"
} }
} }

View File

@ -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": "Күтүлбөгөн ката кетти"
} }
} }

View File

@ -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": "Произошла непредвиденная ошибка"
} }
} }

View File

@ -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>
); );

View File

@ -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>
); );
}; };