From 620ca2438df046a1d4acb901d925336ed23e3e34 Mon Sep 17 00:00:00 2001 From: Batyr Date: Tue, 4 Feb 2025 15:05:30 +0500 Subject: [PATCH] added en lang --- package.json | 2 +- pnpm-lock.yaml | 2 +- public/en.svg | 24 +++ public/ru.svg | 12 ++ src/components/layout/header.tsx | 4 +- src/components/shared/about/about-time.tsx | 2 +- src/components/shared/b2b/stage-1.tsx | 28 +-- src/components/shared/b2b/stage-2.tsx | 30 ++-- src/components/shared/b2b/stage-3.tsx | 37 ++-- src/components/shared/forms/b2b-form.tsx | 7 +- src/components/shared/home/home-about.tsx | 21 +-- src/components/shared/home/home-hero.tsx | 2 +- src/components/shared/home/home-offers.tsx | 2 +- src/components/shared/home/home-theme.tsx | 2 +- src/components/shared/home/home-time.tsx | 2 +- src/components/shared/index.ts | 2 + src/components/shared/lang-menu.tsx | 70 ++++++++ src/components/ui/popover.tsx | 31 ++++ src/data/b2b.data.ts | 189 +++++++++++++++++++++ src/data/contacts.data.ts | 2 +- src/data/{ => home}/home-about.data.ts | 0 src/data/{ => home}/home-hero.data.ts | 0 src/data/{ => home}/home-offers.data.ts | 0 src/data/{ => home}/home-theme.data.ts | 0 src/data/{ => home}/home-time.data.ts | 0 src/data/stend.data.ts | 47 +++++ src/pages/b2b.tsx | 8 +- src/pages/become-sponsor.tsx | 38 +++-- src/pages/stend-form.tsx | 45 +++-- src/store/lang.ts | 2 +- 30 files changed, 499 insertions(+), 112 deletions(-) create mode 100644 public/en.svg create mode 100644 public/ru.svg create mode 100644 src/components/shared/lang-menu.tsx create mode 100644 src/components/ui/popover.tsx create mode 100644 src/data/b2b.data.ts rename src/data/{ => home}/home-about.data.ts (100%) rename src/data/{ => home}/home-hero.data.ts (100%) rename src/data/{ => home}/home-offers.data.ts (100%) rename src/data/{ => home}/home-theme.data.ts (100%) rename src/data/{ => home}/home-time.data.ts (100%) create mode 100644 src/data/stend.data.ts diff --git a/package.json b/package.json index 2a83e36..09b377b 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@hookform/resolvers": "^3.10.0", "@radix-ui/react-dialog": "^1.1.5", "@radix-ui/react-label": "^2.1.1", - "@radix-ui/react-popover": "^1.1.4", + "@radix-ui/react-popover": "^1.1.5", "@radix-ui/react-radio-group": "^1.2.2", "@radix-ui/react-slot": "^1.1.1", "axios": "^1.7.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 32bb441..004592f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,7 +18,7 @@ importers: specifier: ^2.1.1 version: 2.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-popover': - specifier: ^1.1.4 + specifier: ^1.1.5 version: 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-radio-group': specifier: ^1.2.2 diff --git a/public/en.svg b/public/en.svg new file mode 100644 index 0000000..946bd9a --- /dev/null +++ b/public/en.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/ru.svg b/public/ru.svg new file mode 100644 index 0000000..743ebc7 --- /dev/null +++ b/public/ru.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/components/layout/header.tsx b/src/components/layout/header.tsx index f55edef..f495157 100644 --- a/src/components/layout/header.tsx +++ b/src/components/layout/header.tsx @@ -3,7 +3,7 @@ import { Container, Burger } from "./"; import { MapPin, Smartphone } from "lucide-react"; import { Link } from "react-router-dom"; import { Button } from "../ui/button"; -import { Logo } from "../shared"; +import { LangMenu, Logo } from "../shared"; import { useLangStore } from "@/store/lang"; import { navData } from "@/data/header.data"; import { useTranslate } from "@/hooks/use-translate"; @@ -42,7 +42,7 @@ export const Header: FC = () => {

+99371871812

- {/* */} + diff --git a/src/components/shared/about/about-time.tsx b/src/components/shared/about/about-time.tsx index cd30edd..138ac03 100644 --- a/src/components/shared/about/about-time.tsx +++ b/src/components/shared/about/about-time.tsx @@ -4,7 +4,7 @@ import { Container } from "@/components/layout"; import { TimeCard } from "../"; import { useTranslate } from "@/hooks/use-translate"; import { useLangStore } from "@/store/lang"; -import { times } from "@/data/home-time.data"; +import { times } from "@/data/home/home-time.data"; interface Props { className?: string; diff --git a/src/components/shared/b2b/stage-1.tsx b/src/components/shared/b2b/stage-1.tsx index 12849e4..67230d7 100644 --- a/src/components/shared/b2b/stage-1.tsx +++ b/src/components/shared/b2b/stage-1.tsx @@ -11,6 +11,9 @@ import { } from "@/components/ui/form"; import { Button } from "@/components/ui/button"; import { Field } from "../field"; +import { b2bStage1 } from "@/data/b2b.data"; +import { useTranslate } from "@/hooks/use-translate"; +import { Language, useLangStore } from "@/store/lang"; interface Props { className?: string; @@ -19,6 +22,7 @@ interface Props { export const Stage1: FC = ({ handleNext }) => { const { control, formState } = useFormContext(); + const lang = useLangStore((state) => state.lang); return ( = ({ handleNext }) => { exit={{ opacity: 0, y: "100%", transition: { duration: 0.2 } }} className="w-full" > -

Информация об экспоненте:

+

{b2bStage1[useTranslate(lang)].h2}

= ({ handleNext }) => { name="type" render={({ field }) => ( - Тип: + + {lang === Language.RU ? "Тип:" : "Type:"} + = ({ handleNext }) => { name={"company_name"} error={formState.errors.company_name as FieldError} placeholder="" - label="Название компании/организации" + label={b2bStage1[useTranslate(lang)].data[0].label} />
@@ -132,7 +138,7 @@ export const Stage1: FC = ({ handleNext }) => { onClick={handleNext} className="w-full mt-10" > - Далее + {lang === Language.RU ? "Далее" : "Next"}
); diff --git a/src/components/shared/b2b/stage-2.tsx b/src/components/shared/b2b/stage-2.tsx index ac296f0..301ac4f 100644 --- a/src/components/shared/b2b/stage-2.tsx +++ b/src/components/shared/b2b/stage-2.tsx @@ -3,6 +3,9 @@ import { FieldError, useFormContext } from "react-hook-form"; import { Field } from "../"; import { motion } from "motion/react"; import { Button } from "@/components/ui/button"; +import { Language, useLangStore } from "@/store/lang"; +import { useTranslate } from "@/hooks/use-translate"; +import { b2bStage2 } from "@/data/b2b.data"; interface Props { className?: string; @@ -11,6 +14,7 @@ interface Props { } export const Stage2: FC = ({ handleNext, handlePrev }) => { + const lang = useLangStore((state) => state.lang); const { control, formState } = useFormContext(); return ( @@ -19,7 +23,7 @@ export const Stage2: FC = ({ handleNext, handlePrev }) => { animate={{ opacity: 1, y: 0, transition: { delay: 0.5, duration: 0.3 } }} exit={{ opacity: 0, y: 100 }} > -

Цели встречи:

+

{b2bStage2[useTranslate(lang)].h2}

= ({ handleNext, handlePrev }) => { name={"meeting_objective"} error={formState.errors.meeting_objective as FieldError} placeholder="" - label="Основная цель встречи" + label={b2bStage2[useTranslate(lang)].data[0].label} /> -

- Информация о компании/организации: - {/* Company/Organization Profile: */} -

+

{b2bStage2[useTranslate(lang)].secondH2}

@@ -82,7 +80,7 @@ export const Stage2: FC = ({ handleNext, handlePrev }) => { variant={"outline"} className="text-on_surface" > - Вернуться назад + {lang === Language.RU ? "Вернуться назад" : "Back"} diff --git a/src/components/shared/b2b/stage-3.tsx b/src/components/shared/b2b/stage-3.tsx index ce6f45d..763ff3d 100644 --- a/src/components/shared/b2b/stage-3.tsx +++ b/src/components/shared/b2b/stage-3.tsx @@ -4,6 +4,9 @@ import { FieldError, useFormContext } from "react-hook-form"; import { Field } from "../field"; import { Button } from "@/components/ui/button"; import { Loader } from "lucide-react"; +import { b2bStage3 } from "@/data/b2b.data"; +import { useTranslate } from "@/hooks/use-translate"; +import { Language, useLangStore } from "@/store/lang"; interface Props { className?: string; @@ -12,6 +15,7 @@ interface Props { export const Stage3: FC = ({ handlePrev }) => { const { control, formState } = useFormContext(); + const lang = useLangStore((state) => state.lang); return ( = ({ handlePrev }) => { animate={{ opacity: 1, y: 0, transition: { delay: 0.5, duration: 0.3 } }} transition={{ duration: 1 }} > -

- Логистика встречи: - {/* Meeting Logistics */} -

+

{b2bStage3[useTranslate(lang)].h2}

= ({ handlePrev }) => { name={"preferred_meeting_datetime"} error={formState.errors.preferred_meeting_datetime as FieldError} placeholder="" - label="Предпочтительная дата и время " - // label="Preferred date and time for the meeting" + label={b2bStage3[useTranslate(lang)].data[0].label} /> = ({ handlePrev }) => { name={"additional_technical"} error={formState.errors.additional_technical as FieldError} placeholder="" - label="Дополнительные технические или логистические требования (например, аудио-видео оборудование, переводчики и т.д.)" - // label="Additional technical or logistical requirements (e.g. AV equipment, interpreters, etc)" + label={b2bStage3[useTranslate(lang)].data[3].label} />
-
-

Приложения:

+
+

{b2bStage3[useTranslate(lang)].secondH2}

- (Пожалуйста приложите следующие документы, если это необходимо) + {b2bStage3[useTranslate(lang)].subtitle}
@@ -98,7 +95,7 @@ export const Stage3: FC = ({ handlePrev }) => { variant={"outline"} className="text-on_surface" > - Вернуться назад + {lang === Language.RU ? "Вернуться назад" : "Back"}
diff --git a/src/components/shared/forms/b2b-form.tsx b/src/components/shared/forms/b2b-form.tsx index 80522ff..3f5d730 100644 --- a/src/components/shared/forms/b2b-form.tsx +++ b/src/components/shared/forms/b2b-form.tsx @@ -85,18 +85,16 @@ export const B2bForm: FC = ({ try { const formData = new FormData(); - // Перебираем все поля Object.entries(values).forEach(([key, value]) => { if (value instanceof File) { - console.log(`Добавляем файл: ${key}`, value); // Отладочный вывод + console.log(`Добавляем файл: ${key}`, value); formData.append(key, value); } else if (value !== undefined) { - console.log(`Добавляем поле: ${key}`, value); // Отладочный вывод + console.log(`Добавляем поле: ${key}`, value); formData.append(key, value as string); } }); - // Отправляем запрос const res = await axios.post( "https://turkmentextile.turkmenexpo.com/app/api/v1/form", formData, @@ -108,7 +106,6 @@ export const B2bForm: FC = ({ ); if (res.status === 201) { - console.log("Форма успешно отправлена!"); setSuccess(true); } } catch (error) { diff --git a/src/components/shared/home/home-about.tsx b/src/components/shared/home/home-about.tsx index 84463e9..31be122 100644 --- a/src/components/shared/home/home-about.tsx +++ b/src/components/shared/home/home-about.tsx @@ -4,29 +4,10 @@ import { Link } from "react-router-dom"; import useEmblaCarousel from "embla-carousel-react"; import { Container } from "@/components/layout"; import { AboutCard } from "../about-card"; -import { aboutData } from "@/data/home-about.data"; +import { aboutData } from "@/data/home/home-about.data"; import { useTranslate } from "@/hooks/use-translate"; import { Language, useLangStore } from "@/store/lang"; -const data = [ - { - nums: "8,400 m²", - text: "выставочной площади", - }, - { - nums: "10000+", - text: "Посетители посетят выставку", - }, - { - nums: "100+", - text: "Экспоненты из более чем 30 стран", - }, - { - nums: "80%", - text: "Участники принимают участие в принятии решений о закупках", - }, -]; - export const HomeAbout: FC = () => { const [ebmblaRef] = useEmblaCarousel(); const lang = useLangStore((state) => state.lang); diff --git a/src/components/shared/home/home-hero.tsx b/src/components/shared/home/home-hero.tsx index 25dd874..9666399 100644 --- a/src/components/shared/home/home-hero.tsx +++ b/src/components/shared/home/home-hero.tsx @@ -4,7 +4,7 @@ import { Link } from "react-router-dom"; import { Button } from "@/components/ui/button"; import { Container } from "@/components/layout"; import { useMediaQuery } from "usehooks-ts"; -import { btns } from "@/data/home-hero.data"; +import { btns } from "@/data/home/home-hero.data"; import { useTranslate } from "@/hooks/use-translate"; import { useLangStore } from "@/store/lang"; diff --git a/src/components/shared/home/home-offers.tsx b/src/components/shared/home/home-offers.tsx index a5ba1c6..ba0865c 100644 --- a/src/components/shared/home/home-offers.tsx +++ b/src/components/shared/home/home-offers.tsx @@ -2,7 +2,7 @@ import { FC, useCallback, useEffect, useState } from "react"; import useEmblaCarousel from "embla-carousel-react"; import { Container } from "@/components/layout"; import { EmblaDots, OfferCard } from "../"; -import { offersData } from "@/data/home-offers.data"; +import { offersData } from "@/data/home/home-offers.data"; import { useTranslate } from "@/hooks/use-translate"; import { useLangStore } from "@/store/lang"; diff --git a/src/components/shared/home/home-theme.tsx b/src/components/shared/home/home-theme.tsx index 5ceba26..b9b1149 100644 --- a/src/components/shared/home/home-theme.tsx +++ b/src/components/shared/home/home-theme.tsx @@ -2,7 +2,7 @@ import { FC } from "react"; import { ThemeCard } from "../theme-card"; import { Container } from "@/components/layout"; import { useLangStore } from "@/store/lang"; -import { homeTheme } from "@/data/home-theme.data"; +import { homeTheme } from "@/data/home/home-theme.data"; import { useTranslate } from "@/hooks/use-translate"; export const themes = [ diff --git a/src/components/shared/home/home-time.tsx b/src/components/shared/home/home-time.tsx index 755e12d..5c58955 100644 --- a/src/components/shared/home/home-time.tsx +++ b/src/components/shared/home/home-time.tsx @@ -6,7 +6,7 @@ import { Container } from "@/components/layout"; import { ContactCard, TimeCard } from "../"; import { useTranslate } from "@/hooks/use-translate"; import { Language, useLangStore } from "@/store/lang"; -import { times } from "@/data/home-time.data"; +import { times } from "@/data/home/home-time.data"; import { contacts } from "@/data/contacts.data"; interface Props { diff --git a/src/components/shared/index.ts b/src/components/shared/index.ts index b562444..deb6dd3 100644 --- a/src/components/shared/index.ts +++ b/src/components/shared/index.ts @@ -8,5 +8,7 @@ export { B2bFormProgress } from "./b2b-form-progress"; export { Field } from "./field"; export { FormSuccesStatus } from "./form-succes-status"; export { EmblaDots } from "./embla-dots"; +export { LangMenu } from "./lang-menu"; + export * from "./about"; export * from "./home"; diff --git a/src/components/shared/lang-menu.tsx b/src/components/shared/lang-menu.tsx new file mode 100644 index 0000000..8c163e8 --- /dev/null +++ b/src/components/shared/lang-menu.tsx @@ -0,0 +1,70 @@ +import { FC, useState } from "react"; +import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover"; +import { cn } from "@/lib/utils"; +import { Language, useLangStore } from "@/store/lang"; + +interface Props { + className?: string; +} + +export const langs = [ + { + lang: Language.RU, + }, + { + lang: Language.EN, + }, +]; + +export const LangMenu: FC = ({ className }) => { + const lang = useLangStore((state) => state.lang); + const setLang = useLangStore((state) => state.setLang); + + const [isOpen, setIsOpen] = useState(false); + + console.log(langs.filter((item) => item.lang === lang)); + + return ( + setIsOpen(!isOpen)}> + + + {lang === Language.RU ? "Ру" : "En"} + + + + + + + {langs + .filter((item) => item.lang !== lang) + .map((item, i) => ( +
{ + setLang(item.lang); + setIsOpen(false); + }} + key={i} + className="flex gap-3 py-1 items-center cursor-pointer" + > + flag +
{item.lang === Language.RU ? "Русский" : "English"}
+
+ ))} +
+
+ ); +}; diff --git a/src/components/ui/popover.tsx b/src/components/ui/popover.tsx new file mode 100644 index 0000000..2c595a6 --- /dev/null +++ b/src/components/ui/popover.tsx @@ -0,0 +1,31 @@ +import * as React from "react"; +import * as PopoverPrimitive from "@radix-ui/react-popover"; + +import { cn } from "@/lib/utils"; + +const Popover = PopoverPrimitive.Root; + +const PopoverTrigger = PopoverPrimitive.Trigger; + +const PopoverAnchor = PopoverPrimitive.Anchor; + +const PopoverContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, align = "center", sideOffset = 4, ...props }, ref) => ( + + + +)); +PopoverContent.displayName = PopoverPrimitive.Content.displayName; + +export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }; diff --git a/src/data/b2b.data.ts b/src/data/b2b.data.ts new file mode 100644 index 0000000..c3c93f0 --- /dev/null +++ b/src/data/b2b.data.ts @@ -0,0 +1,189 @@ +export const b2bStage1 = [ + { + h2: "Информация об экспоненте:", + data: [ + { + label: "Название компании/организации", + }, + { + label: "Имя представителя", + }, + { + label: "Название должности/позиция", + }, + { + label: "Количество участников", + }, + { + label: "Страна", + }, + { + label: "E-mail адрес", + }, + { + label: "Номер телефона", + }, + { + label: "Вебсайт", + }, + ], + }, + + { + h2: "Applicant Information:", + data: [ + { + label: "Company/Organization Name", + }, + { + label: "Name of Representative", + }, + { + label: "Job title/Position", + }, + { + label: "Number of the participants", + }, + { + label: "Country", + }, + { + label: "E-mail address", + }, + { + label: "Phone number", + }, + { + label: "Website", + }, + ], + }, +]; + +export const b2bStage2 = [ + { + h2: "Цели встречи:", + + secondH2: "Информация о компании/организации:", + + data: [ + { + label: "Основная цель встречи", + }, + { + label: "Краткое описание вашего предложения/проекта/запроса", + }, + { + label: "Соответствующее государственное учреждение/департамент", + }, + + { + label: "Отраслевая промышленность", + }, + { + label: "Ключевые услуги/продукты", + }, + { + label: "Предыдущий опыт работы с правительствами (если применимо)", + }, + ], + }, + + { + h2: "Meeting Purpose: ", + + secondH2: "Company/Organization Profile:", + + data: [ + { + label: "Primary objective of the meeting", + }, + { + label: "Brief description of your proposal/project/request", + }, + { + label: "Relevant government agency/department", + }, + + { + label: "Sector Industry ", + }, + { + label: "Key Services/Products", + }, + { + label: "Previous Experience working with Governments (if applicable)", + }, + ], + }, +]; + +export const b2bStage3 = [ + { + h2: "Логистика встречи:", + secondH2: "Логистика встречи:", + subtitle: "(Пожалуйста приложите следующие документы, если это необходимо)", + + data: [ + { + label: "Предпочтительная дата и время", + }, + { + label: + "Предпочтительный способ проведения встречи (лично, виртуально (через zoom/ teams/другое), гибридный)", + }, + { + label: "Предпочитаемый язык (английский, туркменский, русский, другой)", + }, + { + label: + "Дополнительные технические или логистические требования (например, аудио-видео оборудование, переводчики и т.д.)", + }, + { + label: "Название компании/организации", + }, + { + label: "Предложение/презентация", + }, + { + label: "Соответствующие сертификаты/лицензии", + }, + ], + + button: "Отправить", + }, + + { + h2: "Meeting Logistics:", + secondH2: "Attachments", + subtitle: "(Please attach the following documents as applicable)", + + data: [ + { + label: "Preferred date and time for the meeting", + }, + { + label: + "Preferred mode of meeting (in-person, virtual (via zoom/teams/other), hybrid)", + }, + { + label: "Language preference (English, turkmen, Russian, other)", + }, + { + label: + "Additional technical or logistical requirements (e.g. AV equipment, interpreters, etc)", + }, + { + label: "Company/organization profile", + }, + { + label: "Proposal presentation", + }, + { + label: "Relevant certification/licenses", + }, + ], + + button: "Send", + }, +]; diff --git a/src/data/contacts.data.ts b/src/data/contacts.data.ts index 14e642e..3743717 100644 --- a/src/data/contacts.data.ts +++ b/src/data/contacts.data.ts @@ -27,7 +27,7 @@ export const contacts = [ img: "/contacts/home/mail.svg", }, { - title: "здание ТПП Туркменистана", + title: "Building of the CCI of Turkmenistan", subtitle: "Exhibition address", img: "/contacts/home/location.svg", }, diff --git a/src/data/home-about.data.ts b/src/data/home/home-about.data.ts similarity index 100% rename from src/data/home-about.data.ts rename to src/data/home/home-about.data.ts diff --git a/src/data/home-hero.data.ts b/src/data/home/home-hero.data.ts similarity index 100% rename from src/data/home-hero.data.ts rename to src/data/home/home-hero.data.ts diff --git a/src/data/home-offers.data.ts b/src/data/home/home-offers.data.ts similarity index 100% rename from src/data/home-offers.data.ts rename to src/data/home/home-offers.data.ts diff --git a/src/data/home-theme.data.ts b/src/data/home/home-theme.data.ts similarity index 100% rename from src/data/home-theme.data.ts rename to src/data/home/home-theme.data.ts diff --git a/src/data/home-time.data.ts b/src/data/home/home-time.data.ts similarity index 100% rename from src/data/home-time.data.ts rename to src/data/home/home-time.data.ts diff --git a/src/data/stend.data.ts b/src/data/stend.data.ts new file mode 100644 index 0000000..336929c --- /dev/null +++ b/src/data/stend.data.ts @@ -0,0 +1,47 @@ +export const stendData = [ + { + cover: "Забронировать стенд", + h2: "Выберите один из вариантов:", + + radio: "Только стенд", + radio_2: "Комплексное предложение", + + label_1: "Название компании/организации", + label_2: "Имя представителя", + label_3: "Название должности/позиция", + number_of_participants: "Количество участников", + label_4: "Страна", + label_5: "E-mail адрес", + label_6: "Номер телефона", + label_7: "Вебсайт", + + visa: "Визовая поддержка:", + visa_radio: "Да", + visa_radio_2: "Нет", + + button: "Отправить", + }, + + { + cover: "Book your stand", + h2: "Select one of the options:", + + radio: "Space Only", + radio_2: "Stand Package", + + label_1: "Company/Organization Name", + label_2: "Name of Representative", + label_3: "Job title/Position", + number_of_participants: "Number of the participants", + label_4: "Country", + label_5: "E-mail address", + label_6: "Phone number", + label_7: "Website", + + visa: "Visa support:", + visa_radio: "Yes", + visa_radio_2: "No", + + button: "Send", + }, +]; diff --git a/src/pages/b2b.tsx b/src/pages/b2b.tsx index 7910f99..5166e90 100644 --- a/src/pages/b2b.tsx +++ b/src/pages/b2b.tsx @@ -2,17 +2,23 @@ import { Cover } from "@/components/layout"; import { B2bFormProgress } from "@/components/shared"; import { B2bForm } from "@/components/shared/forms/b2b-form"; import { useScrollTop } from "@/hooks/use-scroll-top"; +import { Language, useLangStore } from "@/store/lang"; import { useState } from "react"; export default function B2b() { useScrollTop(); + const lang = useLangStore((state) => state.lang); const [stage, setStage] = useState(1); const [success, setSuccess] = useState(false); return (
- + {!success && stage !== 0 && } diff --git a/src/pages/become-sponsor.tsx b/src/pages/become-sponsor.tsx index 63771e1..349b77b 100644 --- a/src/pages/become-sponsor.tsx +++ b/src/pages/become-sponsor.tsx @@ -22,10 +22,14 @@ import { Loader } from "lucide-react"; import { postSponsor } from "@/services/service"; import { useScrollTop } from "@/hooks/use-scroll-top"; import { Cover } from "@/components/layout"; +import { Language, useLangStore } from "@/store/lang"; +import { stendData } from "@/data/stend.data"; +import { useTranslate } from "@/hooks/use-translate"; export default function BecomeSponsor() { useScrollTop(); + const lang = useLangStore((state) => state.lang); const [success, setSuccess] = useState(false); const form = useForm({ resolver: zodResolver(sponsorFormSchema), @@ -46,7 +50,9 @@ export default function BecomeSponsor() { return (
- + {!success && ( @@ -59,42 +65,46 @@ export default function BecomeSponsor() { onSubmit={form.handleSubmit(onSubmit)} > - + ( - Визовая поддержка: + {stendData[useTranslate(lang)].visa} @@ -118,7 +128,9 @@ export default function BecomeSponsor() { checked={field.value === "yes"} /> - Да + + {stendData[useTranslate(lang)].visa_radio} + @@ -128,7 +140,9 @@ export default function BecomeSponsor() { checked={field.value === "no"} /> - Нет + + {stendData[useTranslate(lang)].visa_radio_2} + @@ -140,7 +154,7 @@ export default function BecomeSponsor() { {form.formState.isSubmitting ? ( ) : ( - "Отправить" + stendData[useTranslate(lang)].button )} diff --git a/src/pages/stend-form.tsx b/src/pages/stend-form.tsx index c2c1d7a..37eda4d 100644 --- a/src/pages/stend-form.tsx +++ b/src/pages/stend-form.tsx @@ -20,8 +20,12 @@ import { useForm } from "react-hook-form"; import { Loader } from "lucide-react"; import { Cover } from "@/components/layout"; import { postStend } from "@/services/service"; +import { stendData } from "@/data/stend.data"; +import { useTranslate } from "@/hooks/use-translate"; +import { useLangStore } from "@/store/lang"; export default function StendForm() { + const lang = useLangStore((state) => state.lang); const [success, setSuccess] = useState(false); const form = useForm({ resolver: zodResolver(standFormSchema), @@ -42,7 +46,7 @@ export default function StendForm() { return (
- + {!success && ( @@ -60,7 +64,7 @@ export default function StendForm() { render={({ field }) => ( - Выберите один из вариантов: + {stendData[useTranslate(lang)].h2} @@ -77,7 +81,7 @@ export default function StendForm() { /> - Только стенд + {stendData[useTranslate(lang)].radio} @@ -89,7 +93,7 @@ export default function StendForm() { /> - Комплексное предложение + {stendData[useTranslate(lang)].radio_2} @@ -99,49 +103,54 @@ export default function StendForm() { /> - + + ( - Визовая поддержка: + {stendData[useTranslate(lang)].visa} @@ -165,7 +174,9 @@ export default function StendForm() { checked={field.value === "yes"} /> - Да + + {stendData[useTranslate(lang)].visa_radio} + @@ -175,7 +186,9 @@ export default function StendForm() { checked={field.value === "no"} /> - Нет + + {stendData[useTranslate(lang)].visa_radio_2} + @@ -187,7 +200,7 @@ export default function StendForm() { {form.formState.isSubmitting ? ( ) : ( - "Отправить" + stendData[useTranslate(lang)].button )} diff --git a/src/store/lang.ts b/src/store/lang.ts index 96e4265..72318c1 100644 --- a/src/store/lang.ts +++ b/src/store/lang.ts @@ -11,6 +11,6 @@ export interface LangState { } export const useLangStore = create()((set) => ({ - lang: Language.EN, + lang: Language.RU, setLang: (lang) => set({ lang }), }));