diff --git a/components/AppHeader/page.jsx b/components/AppHeader/page.jsx index 3e84487..a5e5417 100644 --- a/components/AppHeader/page.jsx +++ b/components/AppHeader/page.jsx @@ -1,7 +1,6 @@ "use client"; import Avatar from "boring-avatars"; -import Link from "next/link"; import { useRouter } from "next/navigation"; import React, { useContext } from "react"; import { useLongPress } from "@uidotdev/usehooks"; @@ -9,6 +8,8 @@ import { toast } from "react-toastify"; import AppContext from "@ctx/AppContext"; import notifIcon from "@img/notif.png"; import Image from "next/image"; +import { useLocale, useTranslations } from "next-intl"; +import { Link } from "src/i18n/routing"; const AppHeader = ({ title, @@ -34,10 +35,21 @@ const AppHeader = ({ const CTX = useContext(AppContext); const notifUnreadData = CTX.state.notifUnreadData; + const t = useTranslations("login"); + const locale = useLocale(); + const isRTL = locale === "fa"; + const handlelogOut = () => { CTX.setStepLogin(0); localStorage.removeItem("token"); - router.push("/app/login"); + + router.push( + locale === "zh" + ? "/zh/app/login" + : locale === "fa" + ? "/fa/app/login" + : "/app/login" + ); }; const attrs = useLongPress(() => handlelogOut(), { @@ -96,7 +108,7 @@ const AppHeader = ({ viewBox="0 0 11 18" fill="none" xmlns="http://www.w3.org/2000/svg" - className="mx-auto mt-[7px]" + className={`mx-auto mt-[7px] ${isRTL ? "" : "rotate-180"}`} > @@ -129,7 +141,11 @@ const AppHeader = ({ // ; return ( -
+
{userIcon && ( @@ -144,12 +160,13 @@ const AppHeader = ({
)} -
+

{title}

{sub}

+ {!userRole ? (
{logOut && ( @@ -209,7 +226,7 @@ const AppHeader = ({ className="w-fit h-fit bg-gray-100 rounded-full mx-1 mt-2 " onClick={iconEvent3} > -

{iconName3}

+

{iconName3}

)}
diff --git a/components/CoffeeBrew/CoffeeBrewCard/page.jsx b/components/CoffeeBrew/CoffeeBrewCard/page.jsx index 8470aa3..7e9a665 100644 --- a/components/CoffeeBrew/CoffeeBrewCard/page.jsx +++ b/components/CoffeeBrew/CoffeeBrewCard/page.jsx @@ -5,11 +5,16 @@ import adjust from "@img/adjust.png"; import PersianNumber from "../../../plugins/PersianNumber"; import FormatJalaliDate from "plugins/FormatJalaliDate/page"; import moment from "jalali-moment"; +import { useLocale } from "next-intl"; +import FormatJalaliDateEn from "plugins/FormatJalaliDateEn/page"; const CoffeeBrewCard = ({ data, last }) => { const today = new Date(); + const locale = useLocale(); + const isRTL = locale === "fa"; const formattedDate = FormatJalaliDate(data?.logAt, true); + const formattedDateEn = FormatJalaliDateEn(data?.logAt, true); return (
{ last ? "bg-gray-200 border border-primary-600" : "bg-gray-50" } `} > -
+
-

- - +

+ +

-

- -

-

- +

+

+ {isRTL ? ( + + ) : ( + <>{moment(data?.logAt).locale("fa").format("HH:mm")} + )} +

+
+

+ {data?.logBy}{" "}

diff --git a/components/EmployeesComponent/Users/page.jsx b/components/EmployeesComponent/Users/page.jsx index d91adc3..25e544c 100644 --- a/components/EmployeesComponent/Users/page.jsx +++ b/components/EmployeesComponent/Users/page.jsx @@ -33,7 +33,7 @@ const UsersEmployees = () => { colors={["#9d9f88", "#83af96", "#b2de93"]} />
-
+

{e.firstName} {e.lastName} diff --git a/components/LoginComponents/LoginStep.jsx b/components/LoginComponents/LoginStep.jsx index 977e608..4259ec4 100644 --- a/components/LoginComponents/LoginStep.jsx +++ b/components/LoginComponents/LoginStep.jsx @@ -1,6 +1,7 @@ "use client"; import AppContext from "@ctx/AppContext"; +import { useLocale, useTranslations } from "next-intl"; import Buttonbriz from "plugins/Buttonbriz/page"; import Input from "plugins/Input/page"; import validateIranPhone from "plugins/IranPhoneRegex"; @@ -13,6 +14,10 @@ const LoginStep = (props) => { const CTX = useContext(AppContext); const phoneNumber = CTX.state.phoneNumber; + const t = useTranslations("login"); + const locale = useLocale(); + const isRTL = locale === "fa"; + const handleConfirmPhoneNumber = () => { setAlertRolCheckBox(false); @@ -46,7 +51,7 @@ const LoginStep = (props) => {
{
handleConfirmPhoneNumber()} />
{ onClick={(e) => setRoleCheckBox(e.target.checked)} />
-

- با تایید شماره تلفن با همه شرایط حریم خصوص اپلیکیشن بریز موافقت می کنم - . +

+ {t("acceptRule")}

diff --git a/components/LoginComponents/SignUp.jsx b/components/LoginComponents/SignUp.jsx index 0b26939..7bfdc16 100644 --- a/components/LoginComponents/SignUp.jsx +++ b/components/LoginComponents/SignUp.jsx @@ -9,12 +9,17 @@ import React, { useContext, useEffect, useRef, useState } from "react"; import { toast } from "react-toastify"; import SimpleReactValidator from "simple-react-validator"; import { useSearchParams } from "next/navigation"; +import { useLocale, useTranslations } from "next-intl"; const SignUp = (props) => { const CTX = useContext(AppContext); const router = useRouter(); const query = useSearchParams(); + const t = useTranslations("login"); + const locale = useLocale(); + const isRTL = locale === "fa"; + const [firstName, setFirstName] = useState(""); const [lastName, setLastName] = useState(""); const [complexName, setComplexName] = useState(""); @@ -74,14 +79,17 @@ const SignUp = (props) => { return (
-

- برای ورود یا ثبت نام به اپلیکیشن مدیریت وظایف رستوران باید شماره تلفن - همراه خود را وارد کنید +

+ {t("singUpDesc")}

{
{
{
{
{
handleSingnUp()} diff --git a/components/LoginComponents/VerifyCodeStep.jsx b/components/LoginComponents/VerifyCodeStep.jsx index c0e1024..ef8afb4 100644 --- a/components/LoginComponents/VerifyCodeStep.jsx +++ b/components/LoginComponents/VerifyCodeStep.jsx @@ -1,6 +1,7 @@ "use client"; import AppContext from "@ctx/AppContext"; +import { useLocale, useTranslations } from "next-intl"; import Buttonbriz from "plugins/Buttonbriz/page"; import Input from "plugins/Input/page"; import PersianNumber from "plugins/PersianNumber"; @@ -11,6 +12,10 @@ const VerifyCodeStep = () => { const phoneNumber = CTX.state.phoneNumber; const verifyCode = CTX.state.verifyCode; + const t = useTranslations("login"); + const locale = useLocale(); + const isRTL = locale === "fa"; + const handleSendVerify = () => { if (verifyCode.length <= 5) { toast.error(" کد را صحیح وارد کنید ", { @@ -24,18 +29,23 @@ const VerifyCodeStep = () => { return (
-

- {" "} - کد تایید برای شماره - - - - ارسال شده است -

+ {isRTL ? ( +

+ کد تایید برای شماره + + + + ارسال شده است +

+ ) : ( +

+ {t("confirmText")}{" "} +

+ )}
{
handleSendVerify()} diff --git a/components/NavBar/NavBAr.jsx b/components/NavBar/NavBAr.jsx index 58714ea..a5bb8dd 100644 --- a/components/NavBar/NavBAr.jsx +++ b/components/NavBar/NavBAr.jsx @@ -1,6 +1,5 @@ "use client"; -import Link from "next/link"; import React, { useContext, useEffect, useState } from "react"; import { usePathname } from "next/navigation"; import Image from "next/image"; @@ -8,6 +7,7 @@ import logo from "@img/logo.png"; import setting from "@img/setting.png"; import AppContext from "@ctx/AppContext"; import HasPermission from "plugins/HasPermission/page"; +import { Link } from "src/i18n/routing"; const NavBAr = (props) => { const usePath = usePathname(); diff --git a/components/RootData/page.jsx b/components/RootData/page.jsx index 756ba33..e50b448 100644 --- a/components/RootData/page.jsx +++ b/components/RootData/page.jsx @@ -1,7 +1,7 @@ "use client"; import React from "react"; import "../../style/globals.css"; -import { Inter } from "next/font/google"; +import { Exo_2, Inter } from "next/font/google"; import "../../style/fontiran.css"; import NavBAr from "@comp/NavBar/NavBAr"; import "swiper/css"; @@ -22,10 +22,13 @@ import "rc-slider/assets/index.css"; import BottomSheetReport from "plugins/BottomSheet/BottomSheetReport"; import BottomSheetReportManageShift from "plugins/BottomSheet/BottomSheetReportManageShift"; import moment from "jalali-moment"; +import { useLocale } from "next-intl"; const inter = Inter({ subsets: ["latin"] }); const RootData = ({ children }) => { + const locale = useLocale(); + // BottomSheet const [BottomSheetCreateRoleOpen, setBottomSheetCreateRoleOpen] = useState(false); @@ -170,7 +173,20 @@ const RootData = ({ children }) => { const pathname = usePathname(); const router = useRouter(); - const hiddenUrls = ["/app/login", "/pricing", "/about-us", "/"]; + const hiddenUrls = [ + "/app/login", + "/zh/app/login", + "/fa/app/login", + "/pricing", + "/fa/pricing", + "/zh/pricing", + "/about-us", + "/fa/about-us", + "/zh/about-us", + "/fa", + "/zh", + "/", + ]; const shouldRenderComponent = !hiddenUrls.includes(pathname); const closeBigPlusPage = () => { @@ -217,7 +233,13 @@ const RootData = ({ children }) => { position: "bottom-right", closeOnClick: true, }); - router.push("/app/home"); + router.push( + locale === "zh" + ? "/zh/app/home" + : locale === "fa" + ? "/fa/app/home" + : "/app/home" + ); } } catch ({ error, status }) { toast.error(`${error?.response?.data?.message}`, { @@ -253,7 +275,13 @@ const RootData = ({ children }) => { // localStorage.removeItem("token"); localStorage.setItem("token", data.access_token); - router.push("/app/home"); + router.push( + locale === "zh" + ? "/zh/app/home" + : locale === "fa" + ? "/fa/app/home" + : "/app/home" + ); } } catch ({ error, status }) { toast.error(`${error?.response?.data?.message}`, { @@ -1149,7 +1177,13 @@ const RootData = ({ children }) => { setLoading(false); - router.push("/app/tasks"); + router.push( + locale === "zh" + ? "/zh/app/tasks" + : locale === "fa" + ? "/fa/app/tasks" + : "/app/tasks" + ); } catch ({ error, status }) { toast.error(`${error?.response?.data?.message}`, { position: "bottom-right", @@ -1179,7 +1213,13 @@ const RootData = ({ children }) => { // router-> setLoading(false); - router.push("/app/tasks"); + router.push( + locale === "zh" + ? "/zh/app/tasks" + : locale === "fa" + ? "/fa/app/tasks" + : "/app/tasks" + ); } catch ({ error, status }) { toast.error(`${error?.response?.data?.message}`, { position: "bottom-right", diff --git a/components/landingComponents/Footer/page.jsx b/components/landingComponents/Footer/page.jsx index 69a4469..3d4f613 100644 --- a/components/landingComponents/Footer/page.jsx +++ b/components/landingComponents/Footer/page.jsx @@ -1,8 +1,8 @@ import React, { version } from "react"; import logo2 from "../../../src/assets/logo2.png"; import Image from "next/image"; -import Link from "next/link"; import { useLocale } from "next-intl"; +import { Link } from "src/i18n/routing"; const Footer = () => { const locale = useLocale(); diff --git a/components/landingComponents/PricingHero/page.jsx b/components/landingComponents/PricingHero/page.jsx index 50f1300..3bda10e 100644 --- a/components/landingComponents/PricingHero/page.jsx +++ b/components/landingComponents/PricingHero/page.jsx @@ -1,6 +1,6 @@ import { useTranslations } from "next-intl"; -import Link from "next/link"; import React, { useState } from "react"; +import { Link } from "src/i18n/routing"; const PricingHero = () => { const [oneMonth, setOneMonth] = useState(0); diff --git a/messages/en.json b/messages/en.json index 084ada2..26aa389 100644 --- a/messages/en.json +++ b/messages/en.json @@ -137,10 +137,144 @@ "login": { "title": "Briz", "desc": "Harmonic management of routines", - "acceptRule": "By confirming the phone number, I agree to all the privacy conditions of the Breeze application", + "acceptRule": "By confirming the phone number, I agree to all the privacy conditions of the Briz application", "loginInput": "Enter your phone number", "loginButton": "Confirm phone number", - "confirmText": "The confirmation code has been sent to the number", - "confirmInput": "Enter the code sent" + "confirmText": "The confirmation code has been sent ", + "confirmInput": "Enter the code sent", + "singUpDesc": "You need a phone number to enter or register in the restaurant task management application Enter your mobile number", + "singUpFirstNameInput": "First name", + "signUpLastNameInput": "Last name", + "signUpComplexNameInput": "Complex name", + "signUpSupportPhoneNumberInput": "Management contact", + "signUpComplexAddressInput": "Address", + "signUpButton": "Verification of information" + }, + + "homePage": { + "activityText": " activities today", + "shiftText": " shifts today", + "shiftBoxAllactivities": "All activities", + "shiftBoxActivityDone": "Activity done", + "shiftBoxActivityNotDone": "Activity not done", + "shiftBoxShiftPercentage": "Shift progress percentage", + "shiftBoxEmpty": "You don't have an open shift", + "surpriseText": "surprise", + "addAdjust": "Add new adjust", + "historyReports": "History reports", + "titleReport1": "Activities", + "subTitleReport1": "Excel output", + "titleReport2": "Week shifts", + "subTitleReport2": "Text output" + }, + "coffee-brew": { + "title": "Adjust coffee", + "subTitle": "Coffee adjustment mechanism", + "coffeeGramInput": "BCG | Coffee gram", + "extractionTimeInput": "OEG | Extraction time", + "outputExtractGrammageInput": "ET | Output extract grammage", + "coffeeBrewButton": "registration", + "historyTitle": "History of adjustments", + "coffeeGramChart": "Coffee gram", + "extractionTimeChart": "Extraction time", + "outputExtractGrammageChart": "Output extract " + }, + + "BottomSheet": { + "BottomSheetReport": "reports", + "BottomSheetReportDesc": "You are getting the activity report", + "BottomSheetReportbutton": "submit", + "BottomSheetReportManageShiftTitle": "reports", + "BottomSheetReportManageShiftType1": "this week", + "BottomSheetReportManageShiftType2": "next week", + "BottomSheetReportManageShiftButton": "Copy text", + "BottomSheetAddUserToPositionShiftPlanTitle": "Add user to position", + "BottomSheetCreateRoutineTitle": "Add new routine", + "BottomSheetCreateRoutineNameInput": "Routine name", + "BottomSheetCreateRoutineDescInput": "Routine description", + "BottomSheetCreateRoutineRegButton": "Submit Rutine", + "BottomSheetCreateRoutineEditButton": "Edit Rutine", + "BottomSheetCreateRoutineDeleteButton": "Delete ", + "BottomSheetCreateSectionTitle": "Add new section", + "BottomSheetCreateSectionNameInput": "Section name", + "BottomSheetCreateSectionDescInput": "Section description", + "BottomSheetCreateSectionRegButton": "Submit section", + "BottomSheetCreateSectionEditButton": "Edit section", + "BottomSheetCreateSectionDeleteButton": "Delete ", + "BottomSheetCreatePositionTitle": "Add new Position", + "BottomSheetCreatePositionNameInput": "Position name", + "BottomSheetCreatePositionDescInput": "Position description", + "BottomSheetCreatePositionSectionInput": "Connected section", + "chooseText": " choose", + "BottomSheetCreatePositionRegButton": "Submit position", + "BottomSheetCreatePositionEditButton": "Edit position", + "BottomSheetCreatePositionDeleteButton": "Delete ", + "BottomSheetCreateEmployeesTitle": "Add new staff", + "BottomSheetCreateEmployeesFirstNameInput": "First name", + "BottomSheetCreateEmployeesLastNameInput": "Last name", + "BottomSheetCreateEmployeesGenderInput": "Gender", + "BottomSheetCreateEmployeesPhoneNumberInput": "Phone number", + "BottomSheetCreateEmployeesJobTitleInput": "Job Title", + "BottomSheetCreateEmployeesRegButton": "Submit staff", + "BottomSheetCreateEmployeesEditButton": "Edit staff", + "BottomSheetCreateEmployeesDeleteButton": "Delete ", + "BottomSheetCreateShiftsTitle": "Add new shifts", + "BottomSheetCreateShiftsShiftNameInput": "Shift name", + "BottomSheetCreateShiftsStartTimeInput": "Start of the shift", + "BottomSheetCreateShiftsEndTimeInput": "End of the shift", + "BottomSheetCreateShiftsShiftInWeekInput": "Choose the shift day of the week", + "BottomSheetCreateShiftsRutineShiftInput": "Shift routine", + "BottomSheetCreateShiftsDescInput": "Shift description", + "BottomSheetCreateShiftsRegButton": "Submit shifts", + "BottomSheetCreateShiftsEditButton": "Edit shifts", + "BottomSheetCreateShiftsDeleteButton": "Delete " + }, + "shifts": { + "title": "Complex shifts ", + "subTitle": "Complex shift management", + "ManageShiftButton": "Management week shift", + "weekFilter": "Week shifts", + "monthFilter": "Month shifts", + "nextWeekFilter": "Next week shifts", + "nextMonthFilter": "Next month's shifts", + "lastWeekFilter": "last week shifts", + "lastMonthkFilter": "last month shifts", + "shiftText": "shift", + "todayText": "today", + "surpriseText": "surprise", + "closeShiftButton": "Close and confirm the shift" + }, + "manage-shift": { + "title": "Weekly complex shifts ", + "subTitle": "shift management", + "routineTitle": "Select a routine", + "dateTitle": "Select a date", + "shiftTitle": "Select a shift", + "personnelTitle": "Select personnel", + "surpriseTitle": "Select surprise", + "surpriseInput": " surprise", + "surpriseInputDef": " choose", + "surpriseSubTitle": "The shift is closed by the supervisor. Please specify it for each shift", + "404Shift": "You do not have a shift on this day", + "manageShiftRegButton": "Activity registration", + "manageShiftEditButton": "Edit activity", + "editText": "You are editing" + }, + "complete-shift": { + "title": "Shift closing operation ", + "subTitle": " check the completion of tasks", + "todayText": "today", + "reportText": "report", + "completeShiftButton": "Closing with points" + }, + "employees": { + "title": "Management of staffs and roles ", + "subTitle": "The core of the complex settings", + "routinesTitle": "Management of routines", + "sectionsTitle": "Management of sections", + "positionsTitle": " Management of positions", + "staffsTitle": " Management of staffs", + "shiftsTitle": "Management of shifts", + "taskTitle": "Add a task" } } diff --git a/messages/fa.json b/messages/fa.json index 9b6b3a7..6816ede 100644 --- a/messages/fa.json +++ b/messages/fa.json @@ -1,148 +1,277 @@ { "page": { "title": "عملیات ساده و روان", - "desc": "ک راه حل مدیریت کار و شیفت برای کافی شاپ ها که مدیریت وظایف واضح و قابل ردیابی و نظارت بر عملیات فروشگاه را ارائه می دهد. ", + "desc": "یک راه حل مدیریت وظایف و شیفت برای کافی‌شاپ‌ها که مدیریت وظایف شفاف و قابل پیگیری و نظارت بر عملیات فروشگاه را فراهم می‌کند.", "button": "شروع کنید", - "brand": "برندهایی که به ما اعتماد دارند و از BRIZ برای مدیریت خود استفاده می کنند." + "brand": "برندهایی که به ما اعتماد دارند و از BRIZ برای مدیریت خود استفاده می‌کنند." }, "home": { - "title": "Hello, Next.js i18n", - "desc": "This is a demo of Next.js i18n" + "title": "سلام، Next.js i18n", + "desc": "این یک نمایشی از i18n در Next.js است" }, "navLinks": { "ourSolution": "راه حل ما", "product": "محصول", - "pricing": "قیمت", + "pricing": "قیمت‌گذاری", "aboutUs": "درباره ما", "button": "شروع کنید" }, "services": { "title": "بخشی از تست استرس ما باشید", - "desc": "خشی از تست استرس ما باشید و ما را به عنوان یک آداپتور اولیه امتحان کنید", + "desc": "بخشی از تست استرس ما باشید و به عنوان یک پیش‌کاربر ما را امتحان کنید", "inputValue": "شماره خود را وارد کنید", - "button": "عضو شوید", - "successInput": "با تشکر از اعتماد شما، ما با شما تماس خواهیم گرفت", - "streamlinedOperations": "عملیات ساده", - "empoweredDecision": "تصمیم قدرتمند", - "unwaveringSupport": "پشتیبانی بی دریغ", - "seamlessIntegration": "یکپارچه سازی " + "button": "اشتراک", + "successInput": "از اعتماد شما متشکریم، با شما تماس خواهیم گرفت", + "streamlinedOperations": "عملیات بهینه‌شده", + "empoweredDecision": "تصمیم‌گیری توانمند", + "unwaveringSupport": "پشتیبانی بی‌وقفه", + "seamlessIntegration": "یکپارچگی بدون درز" }, "experiences": { "title": "منطق پایه", - "taskText": "تعداد کارهای انجام شده در بریز", - "LiveNumberTask": "فعالیت های انجام شده با بریز", + "taskText": "تعداد وظایف انجام شده در Briz", + "LiveNumberTask": "فعالیت‌های انجام شده با Briz", "insertTasks": { - "title": "وظایف را وارد کنید و تعیین کنید", - "points": "وظایف را وارد کنید و آنها را به موقعیت هایی در فروشگاه اختصاص دهید" + "title": "وارد کردن وظایف و اختصاص دادن", + "points": "وظایف را وارد کرده و به موقعیت‌های فروشگاه اختصاص دهید" }, "createShiftPlan": { - "title": "یک برنامه شفاف ایجاد کنید", - "points": "برای هر هفته یک برنامه شیفت روشن ایجاد کنید و برای هر شیفت یک سرپرست تعیین کنید." + "title": "ایجاد برنامه شیفت واضح", + "points": "برای هر هفته یک برنامه شیفت واضح ایجاد کرده و یک ناظر به هر شیفت اختصاص دهید." }, "specificPerson": { - "title": "فعالیتی که به شخص خاصی اختصاص داده شده است", - "points": "پس از برنامه ریزی نوبت، هر وظیفه به فعالیتی تبدیل می شود که به یک فرد خاص واگذار می شود." + "title": "فعالیت اختصاص داده شده به شخص خاص", + "points": "پس از برنامه‌ریزی شیفت، هر وظیفه به عنوان یک فعالیت به شخص خاص اختصاص داده می‌شود." }, "realTime": { - "title": "به لحظه", - "points": "ردیابی روال عملیات در سیستم در زمان واقعی.." + "title": "زمان واقعی", + "points": "روتین عملیات را به صورت زمان واقعی در سیستم پیگیری کنید." }, "confirmsCompletion": { - "title": "تکمیل را تایید می کند", - "points": "پس از بستن شیفت، سرپرست شما تمام وظایف را بررسی می کند، تکمیل را تایید می کند و به کارکنان امتیاز می دهد." + "title": "تایید تکمیل", + "points": "پس از بستن شیفت، ناظر شما تمام وظایف را بررسی کرده، تکمیل آن‌ها را تایید و به کارکنان امتیاز می‌دهد." } }, - "phiData": { - "title": "phi", - "desc": "طعم قهوه همیشه بیشترین اهمیت را دارد. با PHI، همیشه عالی خواهد بود. فی به معنای نسبت طلایی است. اگر قهوه خود را با نسبت طلایی دم کنید، همیشه طعم خوبی خواهد داشت. در قسمت Phi، سه کادر وجود دارد که باریستای شیفت باید آنها را پر کند. اینها عناصر اصلی برای تنظیم دستور پخت قهوه روزانه هستند:", - "endDesc": "باریستای شما دستور پخت روزانه را وارد می کند که در پایگاه داده شما ثبت می شود. می توانید نمودار تنظیم خود را مشاهده کنید و ببینید در نوار شما چه اتفاقی می افتد و کیفیت سرو قهوه خود را در فروشگاه خود بررسی کنید.", - + "title": "فی", + "desc": "طعم قهوه همیشه مهم‌ترین عامل است. با PHI، همیشه کامل خواهد بود. فی به معنای نسبت طلایی است. اگر قهوه خود را با نسبت طلایی تهیه کنید، همیشه طعم خوبی خواهد داشت. در بخش Phi، سه جعبه وجود دارد که باریستا در شیفت باید پر کند. این‌ها عناصر اصلی برای تنظیم دستور قهوه روزانه هستند:", + "endDesc": "باریستا شما دستور روزانه را وارد می‌کند که در پایگاه داده شما ثبت خواهد شد. شما می‌توانید نمودار تنظیمات خود را مشاهده کنید تا ببینید در بار شما چه اتفاقی می‌افتد و کیفیت سرو قهوه خود را در فروشگاه خود بررسی کنید.", "bcg": { - "desc": "منظور مقدار دقیق قهوه آسیاب شده برای هر دم کردن است...", - "title": "گرم قهوه پایه (BCG)" + "desc": "این به مقدار دقیق قهوه آسیاب‌شده استفاده شده برای هر دم اشاره دارد...", + "title": "گرم پایه قهوه (BCG)" }, "oeg": { - "desc": " وزن نهایی قهوه استخراج شده را پس از دم کردن اندازه گیری می کند.", - "title": "خروجی استخراج گراماژ(OEG)" + "desc": "این وزن نهایی قهوه استخراج‌شده پس از دم‌کردن را اندازه‌گیری می‌کند...", + "title": "وزن استخراج نهایی (OEG)" }, "et": { - "desc": " کل زمان دم کردن قهوه از ابتدا تا انتها است...", + "desc": "این زمان کل لازم برای دم‌کردن قهوه از ابتدا تا انتها است...", "title": "زمان استخراج (ET)" } }, "stepProducts": { - "endDesc": "اکنون فقط شیفت های خود را برای هفته آینده تنظیم کنید. در هر شیفت، کارکنان را به هر موقعیتی اختصاص دهید و یک سرپرست تعیین کنید.", - + "endDesc": "حالا فقط شیفت‌های خود را برای هفته آینده تنظیم کنید. کارکنان را به هر موقعیت در هر شیفت اختصاص دهید و یک ناظر تعیین کنید.", "setupRoutine": { - "desc": "شما می توانید به طور کامل سیستم عامل خود را سفارشی و تعریف کنید...", - "title": "روال خود را تنظیم کنید" + "desc": "می‌توانید سیستم عملیات خود را به طور کامل سفارشی‌سازی و تعریف کنید...", + "title": "تنظیم روتین خود" }, "setupSections": { - "desc": "بخش های خود را برای به دست آوردن بینش بهتر در مورد عملیات خود تعریف کنید...", - "title": "بخش های خود را تنظیم کنید" + "desc": "بخش‌های خود را تعریف کنید تا بینش بهتری از عملیات خود به دست آورید...", + "title": "تنظیم بخش‌های خود" }, "setupPositions": { - "desc": "موقعیت ها نقش مهمی در پلتفرم ما دارند...", - "title": "موقعیت های خود را تنظیم کنید" + "desc": "موقعیت‌ها نقش حیاتی در پلتفرم ما دارند...", + "title": "تنظیم موقعیت‌های خود" }, "setupStaffInfo": { - "desc": "شما باید اطلاعات کارکنان خود را تنظیم کنید ...", + "desc": "شما نیاز دارید اطلاعات کارکنان خود را تنظیم کنید...", "title": "تنظیم اطلاعات کارکنان" }, "setupShiftsLogic": { - "desc": "شما باید منطق شیفت خود را ایجاد کنید...", - "title": "منطق شیفت خود را تنظیم کنید" + "desc": "شما نیاز دارید منطق شیفت خود را تعیین کنید...", + "title": "تنظیم منطق شیفت‌های خود" }, "insertTasks": { - "desc": "تمام وظایف خود را در این مرحله تنظیم کنید...", - "title": "همه وظایف خود را وارد کنید" + "desc": "در این مرحله همه وظایف خود را تنظیم کنید...", + "title": "وارد کردن همه وظایف" } }, "pricing": { - "title": "قیمت گذاری", - "desc": "مدیریت کافی شاپ خود را با برنامه های قیمت گذاری منعطف زمان ما تنظیم کنید. همه بسته‌ها ویژگی‌های جامع یکسانی را ارائه می‌دهند، که فقط از نظر مدت زمان متفاوت هستند تا با نیازهای تجاری شما مطابقت داشته باشند. از بین گزینه های ماهانه، سه ماهه یا سالانه که هر کدام برای سهولت و کارایی طراحی شده اند، انتخاب کنید.", + "title": "قیمت‌گذاری", + "desc": "مدیریت کافی‌شاپ خود را با طرح‌های قیمت‌گذاری انعطاف‌پذیر ما متناسب‌سازی کنید. تمام بسته‌ها ویژگی‌های جامع یکسانی ارائه می‌دهند و فقط در مدت زمان تفاوت دارند تا نیازهای کسب‌وکار شما را برآورده کنند. از گزینه‌های ماهانه، سه‌ماهه یا سالانه انتخاب کنید، هر کدام برای سهولت و کارایی طراحی شده‌اند.", "oneMounth": { - "title": "یک ماه", - "pricing1": "15,000,000 R", - "pricing2": "24,000,000 R ", - "pricing3": "29,500,000 R", - "desc": "این می تواند بهترین بسته برای شما باشد، بنابراین از 14 روز آزمایشی رایگان استفاده کنید", - "users1": "بالای 10 کاربر", - "users2": "بالای 25 کاربر", - "users3": "بالای 50 کاربر", + "title": "1 ماه", + "pricing1": "15,000,000 ر", + "pricing2": "24,000,000 ر", + "pricing3": "29,500,000 ر", + "desc": "ممکن است بهترین بسته برای شما باشد، بنابراین از دوره آزمایشی 14 روزه رایگان استفاده کنید", + "users1": "تا 10 کاربر", + "users2": "تا 25 کاربر", + "users3": "تا 50 کاربر", "button": "شروع کنید" }, "threeMounth": { - "title": "سه ماهه", - "pricing1": "36,000,000 R", - "pricing2": "57,600,000 R", - "pricing3": "70,800,000 R", - "desc": "این می تواند بهترین بسته برای شما باشد، بنابراین از 14 روز آزمایشی رایگان استفاده کنید", - "users1": "بالای 10 کاربر", - "users2": "بالای 25 کاربر", - "users3": "بالای 50 کاربر", + "title": "3 ماه", + "pricing1": "36,000,000 ر", + "pricing2": "57,600,000 ر", + "pricing3": "70,800,000 ر", + "desc": "ممکن است بهترین بسته برای شما باشد، بنابراین از دوره آزمایشی 14 روزه رایگان استفاده کنید", + "users1": "تا 10 کاربر", + "users2": "تا 25 کاربر", + "users3": "تا 50 کاربر", "button": "شروع کنید" }, "sixMounth": { - "title": "یک سال", - "pricing1": "108,000,000 R", - "pricing2": "172,800,000 R ", - "pricing3": "212,400,000 R", - "desc": "این می تواند بهترین بسته برای شما باشد، بنابراین از 14 روز آزمایشی رایگان استفاده کنید", - "users1": "بالای 10 کاربر", - "users2": "بالای 25 کاربر", - "users3": "بالای 50 کاربر", + "title": "6 ماه", + "pricing1": "108,000,000 ر", + "pricing2": "172,800,000 ر", + "pricing3": "212,400,000 ر", + "desc": "ممکن است بهترین بسته برای شما باشد، بنابراین از دوره آزمایشی 14 روزه رایگان استفاده کنید", + "users1": "تا 10 کاربر", + "users2": "تا 25 کاربر", + "users3": "تا 50 کاربر", "button": "شروع کنید" } }, "login": { - "title": "بریز", - "desc": "مدیریت هماهنگ وظایف روزمره", - "acceptRule": "با تأیید شماره تلفن، با تمامی شرایط حریم خصوصی اپلیکیشن بریز موافقت می‌کنم", + "title": "Briz", + "desc": "مدیریت هماهنگ روتین‌ها", + "acceptRule": "با تأیید شماره تلفن، من با تمام شرایط حفظ حریم خصوصی برنامه Briz موافقت می‌کنم", "loginInput": "شماره تلفن خود را وارد کنید", "loginButton": "تأیید شماره تلفن", - "confirmText": "کد تأیید به شماره شما ارسال شد", - "confirmInput": "کد ارسال شده را وارد کنید" + "confirmText": "کد تأیید ارسال شده است", + "confirmInput": "کد ارسال شده را وارد کنید", + "singUpDesc": "برای ورود یا ثبت‌نام در برنامه مدیریت وظایف رستوران نیاز به شماره تلفن دارید. شماره موبایل خود را وارد کنید", + "singUpFirstNameInput": "نام", + "signUpLastNameInput": "نام خانوادگی", + "signUpComplexNameInput": "نام مجتمع", + "signUpSupportPhoneNumberInput": "تماس مدیریت", + "signUpComplexAddressInput": "آدرس", + "signUpButton": "تأیید اطلاعات" + }, + "homePage": { + "activityText": " فعالیت امروز", + "shiftText": " شیفت امروز", + "shiftBoxAllactivities": "همه فعالیت‌ها", + "shiftBoxActivityDone": "فعالیت انجام شده", + "shiftBoxActivityNotDone": "فعالیت انجام نشده", + "shiftBoxShiftPercentage": "درصد پیشرفت شیفت", + "shiftBoxEmpty": "شیفت باز ندارید", + "surpriseText": "شگفتی", + "addAdjust": "افزودن تنظیم جدید", + "historyReports": "گزارش‌های تاریخی", + "titleReport1": "فعالیت‌ها", + "subTitleReport1": "خروجی اکسل", + "titleReport2": "شیفت‌های هفته", + "subTitleReport2": "خروجی متنی" + }, + "coffee-brew": { + "title": "تنظیم قهوه", + "subTitle": "مکانیزم تنظیم قهوه", + "coffeeGramInput": "BCG | گرم قهوه", + "extractionTimeInput": "OEG | زمان استخراج", + "outputExtractGrammageInput": "ET | وزن استخراج نهایی", + "coffeeBrewButton": "ثبت‌نام", + "historyTitle": "تاریخچه تنظیمات", + "coffeeGramChart": "گرم قهوه", + "extractionTimeChart": "زمان استخراج", + "outputExtractGrammageChart": "وزن استخراج" + }, + "BottomSheet": { + "BottomSheetReport": "گزارش‌ها", + "BottomSheetReportDesc": "شما در حال دریافت گزارش فعالیت هستید", + "BottomSheetReportbutton": "ارسال", + "BottomSheetReportManageShiftTitle": "گزارش‌ها", + "BottomSheetReportManageShiftType1": "این هفته", + "BottomSheetReportManageShiftType2": "هفته آینده", + "BottomSheetReportManageShiftButton": "کپی متن", + "BottomSheetAddUserToPositionShiftPlanTitle": "افزودن کاربر به موقعیت", + "BottomSheetCreateRoutineTitle": "افزودن روتین جدید", + "BottomSheetCreateRoutineNameInput": "نام روتین", + "BottomSheetCreateRoutineDescInput": "توضیح روتین", + "BottomSheetCreateRoutineRegButton": "ثبت روتین", + "BottomSheetCreateRoutineEditButton": "ویرایش روتین", + "BottomSheetCreateRoutineDeleteButton": "حذف", + "BottomSheetCreateSectionTitle": "افزودن بخش جدید", + "BottomSheetCreateSectionNameInput": "نام بخش", + "BottomSheetCreateSectionDescInput": "توضیح بخش", + "BottomSheetCreateSectionRegButton": "ثبت بخش", + "BottomSheetCreateSectionEditButton": "ویرایش بخش", + "BottomSheetCreateSectionDeleteButton": "حذف", + "BottomSheetCreatePositionTitle": "افزودن موقعیت جدید", + "BottomSheetCreatePositionNameInput": "نام موقعیت", + "BottomSheetCreatePositionDescInput": "توضیح موقعیت", + "BottomSheetCreatePositionSectionInput": "بخش مرتبط", + "chooseText": "انتخاب کنید", + "BottomSheetCreatePositionRegButton": "ثبت موقعیت", + "BottomSheetCreatePositionEditButton": "ویرایش موقعیت", + "BottomSheetCreatePositionDeleteButton": "حذف", + "BottomSheetCreateEmployeesTitle": "افزودن کارکنان جدید", + "BottomSheetCreateEmployeesFirstNameInput": "نام", + "BottomSheetCreateEmployeesLastNameInput": "نام خانوادگی", + "BottomSheetCreateEmployeesGenderInput": "جنسیت", + "BottomSheetCreateEmployeesPhoneNumberInput": "شماره تلفن", + "BottomSheetCreateEmployeesJobTitleInput": "عنوان شغلی", + "BottomSheetCreateEmployeesRegButton": "ثبت کارکنان", + "BottomSheetCreateEmployeesEditButton": "ویرایش کارکنان", + "BottomSheetCreateEmployeesDeleteButton": "حذف", + "BottomSheetCreateShiftsTitle": "افزودن شیفت‌های جدید", + "BottomSheetCreateShiftsShiftNameInput": "نام شیفت", + "BottomSheetCreateShiftsStartTimeInput": "شروع شیفت", + "BottomSheetCreateShiftsEndTimeInput": "پایان شیفت", + "BottomSheetCreateShiftsShiftInWeekInput": "انتخاب روز شیفت هفته", + "BottomSheetCreateShiftsRutineShiftInput": "روتین شیفت", + "BottomSheetCreateShiftsDescInput": "توضیح شیفت", + "BottomSheetCreateShiftsRegButton": "ثبت شیفت", + "BottomSheetCreateShiftsEditButton": "ویرایش شیفت", + "BottomSheetCreateShiftsDeleteButton": "حذف" + }, + "shifts": { + "title": "شیفت‌های پیچیده", + "subTitle": "مدیریت شیفت‌های پیچیده", + "ManageShiftButton": "مدیریت شیفت‌های هفته", + "weekFilter": "شیفت‌های هفته", + "monthFilter": "شیفت‌های ماه", + "nextWeekFilter": "شیفت‌های هفته آینده", + "nextMonthFilter": "شیفت‌های ماه آینده", + "lastWeekFilter": "شیفت‌های هفته گذشته", + "lastMonthkFilter": "شیفت‌های ماه گذشته", + "shiftText": "شیفت", + "todayText": "امروز", + "surpriseText": "شگفتی", + "closeShiftButton": "بستن و تایید شیفت" + }, + "manage-shift": { + "title": "شیفت‌های پیچیده هفتگی", + "subTitle": "مدیریت شیفت", + "routineTitle": "انتخاب روتین", + "dateTitle": "انتخاب تاریخ", + "shiftTitle": "انتخاب شیفت", + "personnelTitle": "انتخاب پرسنل", + "surpriseTitle": "انتخاب شگفتی", + "surpriseInput": " شگفتی", + "surpriseInputDef": " انتخاب کنید", + "surpriseSubTitle": "شیفت توسط ناظر بسته می‌شود. لطفاً برای هر شیفت مشخص کنید", + "404Shift": "شیفتی در این روز ندارید", + "manageShiftRegButton": "ثبت فعالیت", + "manageShiftEditButton": "ویرایش فعالیت", + "editText": "شما در حال ویرایش هستید" + }, + "complete-shift": { + "title": "عملیات بستن شیفت", + "subTitle": "بررسی تکمیل وظایف", + "todayText": "امروز", + "reportText": "گزارش", + "completeShiftButton": "بستن با امتیاز" + }, + "employees": { + "title": "مدیریت کارکنان و نقش‌ها", + "subTitle": "هسته تنظیمات پیچیده", + "routinesTitle": "مدیریت روتین‌ها", + "sectionsTitle": "مدیریت بخش‌ها", + "positionsTitle": "مدیریت موقعیت‌ها", + "staffsTitle": "مدیریت کارکنان", + "shiftsTitle": "مدیریت شیفت‌ها", + "taskTitle": "افزودن وظیفه" } } diff --git a/messages/zh.json b/messages/zh.json index 014704c..2383d93 100644 --- a/messages/zh.json +++ b/messages/zh.json @@ -1,13 +1,13 @@ { "page": { - "title": "简单流畅的操作", - "desc": "一款咖啡店的任务和班次管理解决方案,提供清晰、可追踪的任务管理和店铺运营监控。", + "title": "简单顺畅的操作", + "desc": "为咖啡店提供清晰、可跟踪的任务管理和店铺运营监控的任务和班次管理解决方案。", "button": "开始使用", - "brand": "信任我们并使用 BRIZ 进行管理的品牌。" + "brand": "信任我们的品牌并使用 BRIZ 进行管理。" }, "home": { - "title": "你好,Next.js i18n", - "desc": "这是 Next.js i18n 的演示" + "title": "你好,Next.js 国际化", + "desc": "这是一个 Next.js 国际化的演示" }, "navLinks": { "ourSolution": "我们的解决方案", @@ -17,71 +17,70 @@ "button": "开始使用" }, "services": { - "title": "参与我们的压力测试", - "desc": "成为我们的压力测试的一部分,作为早期适配者尝试我们", - "inputValue": "输入您的号码", + "title": "成为我们压力测试的一部分", + "desc": "成为我们压力测试的一部分,作为早期采用者尝试我们的服务", + "inputValue": "输入您的电话号码", "button": "订阅", - "successInput": "感谢您的信任,我们将与您联系", - "streamlinedOperations": "精简的操作", - "empoweredDecision": "赋权决策", - "unwaveringSupport": "坚定支持", + "successInput": "感谢您的信任,我们会与您联系", + "streamlinedOperations": "精简的运营", + "empoweredDecision": "增强的决策", + "unwaveringSupport": "坚定的支持", "seamlessIntegration": "无缝集成" }, "experiences": { - "title": "基本逻辑", - "taskText": "在 Briz 完成的任务数量", - "LiveNumberTask": "使用 Briz 执行的活动", + "title": "基础逻辑", + "taskText": "在 Briz 中完成的任务数量", + "LiveNumberTask": "与 Briz 完成的活动", "insertTasks": { "title": "插入任务并分配", - "points": "插入任务并将其分配到店铺中的职位" + "points": "插入任务并将其分配给店铺中的职位" }, "createShiftPlan": { - "title": "创建明确的班次计划", - "points": "为每周创建明确的班次计划,并为每个班次分配监督员。" + "title": "创建清晰的班次计划", + "points": "为每周创建一个清晰的班次计划,并为每个班次指定一个主管。" }, "specificPerson": { - "title": "任务分配给特定人员", - "points": "班次计划后,每项任务将成为分配给特定人员的活动。" + "title": "活动分配给特定人员", + "points": "在班次计划之后,每个任务成为分配给特定人员的活动。" }, "realTime": { "title": "实时", - "points": "实时在系统中跟踪运营常规。" + "points": "实时跟踪系统中的运营例程。" }, "confirmsCompletion": { "title": "确认完成", - "points": "班次结束后,您的监督员检查所有任务,确认完成并评估员工表现。" + "points": "班次结束后,您的主管会检查所有任务,确认完成并对员工进行评分。" } }, "phiData": { - "title": "PHI", - "desc": "咖啡的味道永远是最重要的。有了 PHI,它将永远完美。Phi 代表黄金比例。如果按照黄金比例冲泡咖啡,它将永远味道醇美。在 PHI 部分,有三个框需要当班咖啡师填写。这些是调整每日咖啡配方的主要元素:", - "endDesc": "您的咖啡师输入每日配方,这将被记录在您的数据库中。您可以查看您的调整图表,了解您的咖啡店情况,并检查店内的咖啡质量。", + "title": "Phi", + "desc": "咖啡的味道始终是最重要的。使用 PHI,味道将永远完美。Phi 意味着黄金比例。如果您按照黄金比例冲泡咖啡,味道总是会很好。在 Phi 部分,有三个框需要值班的咖啡师填写。这些是调整每日咖啡配方的主要元素:", + "endDesc": "您的咖啡师输入每日配方,将记录在您的数据库中。您可以查看调整图表,了解您的酒吧发生了什么,并检查您店内咖啡的质量。", "bcg": { - "desc": "这指的是每次冲泡所使用的精确咖啡粉量...", + "desc": "指每次冲泡使用的精确咖啡粉量...", "title": "基础咖啡克数 (BCG)" }, "oeg": { - "desc": "这是冲泡后提取的咖啡的最终重量...", - "title": "输出提取克重 (OEG)" + "desc": "测量冲泡后提取的咖啡最终重量...", + "title": "输出提取克数 (OEG)" }, "et": { - "desc": "这是从开始到结束冲泡咖啡所花费的总时间...", - "title": "萃取时间 (ET)" + "desc": "从开始到完成冲泡咖啡所需的总时间...", + "title": "提取时间 (ET)" } }, "stepProducts": { - "endDesc": "现在为接下来的一周设置您的班次。为每个班次中的每个职位分配员工并指定监督员。", - + "endDesc": "现在只需为接下来的一周设置您的班次。为每个班次中的每个职位分配员工并指定主管。", "setupRoutine": { - "desc": "您可以完全自定义并定义您的运营系统...", - "title": "设置您的常规操作" + "desc": "您可以完全自定义和定义您的运营系统...", + "title": "设置您的例程" }, "setupSections": { - "desc": "定义您的区域以更好地了解您的运营...", - "title": "设置您的区域" + "desc": "定义您的部分以获得更好的运营洞察...", + "title": "设置您的部分" }, "setupPositions": { - "desc": "职位在我们的平台中扮演着重要角色...", + "desc": "职位在我们的平台中起着关键作用...", "title": "设置您的职位" }, "setupStaffInfo": { @@ -89,58 +88,190 @@ "title": "设置员工信息" }, "setupShiftsLogic": { - "desc": "您需要确定您的班次逻辑...", + "desc": "您需要建立您的班次逻辑...", "title": "设置您的班次逻辑" }, "insertTasks": { - "desc": "在此阶段设置您所有的任务...", + "desc": "在此阶段设置所有任务...", "title": "插入所有任务" } }, "pricing": { "title": "定价", - "desc": "通过我们灵活的时间定价方案,定制您的咖啡店管理。所有套餐均提供相同的全面功能,仅在时长上有所不同,以满足您的业务需求。从每月、每季度或每年选项中选择,每种方案都旨在提供便捷和高效的体验。", + "desc": "使用我们灵活的定价计划定制您的咖啡店管理。所有套餐提供相同的全面功能,仅在持续时间上有所不同,以适应您的业务需求。您可以选择按月、季度或年度选项,每种选项都旨在提供简便和高效。", "oneMounth": { - "title": "一个月", - "pricing1": "15,000,000 R", - "pricing2": "24,000,000 R", - "pricing3": "29,500,000 R", - "desc": "这可能是最适合您的套餐,请随时使用14天的免费试用", - "users1": "超过10位用户", - "users2": "超过25位用户", - "users3": "超过50位用户", - "button": "开始" + "title": "1 个月", + "pricing1": "15,000,000 ر", + "pricing2": "24,000,000 ر", + "pricing3": "29,500,000 ر", + "desc": "这可能是最适合您的套餐,因此请随意使用 14 天免费试用", + "users1": "最多 10 用户", + "users2": "最多 25 用户", + "users3": "最多 50 用户", + "button": "开始使用" }, "threeMounth": { - "title": "三个月", - "pricing1": "36,000,000 R", - "pricing2": "57,600,000 R", - "pricing3": "70,800,000 R", - "desc": "这可能是最适合您的套餐,请随时使用14天的免费试用", - "users1": "超过10位用户", - "users2": "超过25位用户", - "users3": "超过50位用户", - "button": "开始" + "title": "3 个月", + "pricing1": "36,000,000 ر", + "pricing2": "57,600,000 ر", + "pricing3": "70,800,000 ر", + "desc": "这可能是最适合您的套餐,因此请随意使用 14 天免费试用", + "users1": "最多 10 用户", + "users2": "最多 25 用户", + "users3": "最多 50 用户", + "button": "开始使用" }, "sixMounth": { - "title": "一年", - "pricing1": "108,000,000 R", - "pricing2": "172,800,000 R", - "pricing3": "212,400,000 R", - "desc": "这可能是最适合您的套餐,请随时使用14天的免费试用", - "users1": "超过10位用户", - "users2": "超过25位用户", - "users3": "超过50位用户", - "button": "开始" + "title": "6 个月", + "pricing1": "108,000,000 ر", + "pricing2": "172,800,000 ر", + "pricing3": "212,400,000 ر", + "desc": "这可能是最适合您的套餐,因此请随意使用 14 天免费试用", + "users1": "最多 10 用户", + "users2": "最多 25 用户", + "users3": "最多 50 用户", + "button": "开始使用" } }, "login": { - "title": "Breeze", - "desc": "日常事务的和谐管理", - "acceptRule": "通过确认电话号码,我同意Breeze应用的所有隐私条款", + "title": "Briz", + "desc": "和谐的例程管理", + "acceptRule": "确认电话号码即表示我同意 Briz 应用的所有隐私条件", "loginInput": "输入您的电话号码", "loginButton": "确认电话号码", - "confirmText": "验证码已发送至该号码", - "confirmInput": "输入发送的验证码" + "confirmText": "确认码已发送", + "confirmInput": "输入发送的代码", + "singUpDesc": "您需要一个电话号码才能进入或注册餐厅任务管理应用程序。请输入您的手机号码", + "singUpFirstNameInput": "名字", + "signUpLastNameInput": "姓氏", + "signUpComplexNameInput": "综合名称", + "signUpSupportPhoneNumberInput": "管理联系电话", + "signUpComplexAddressInput": "地址", + "signUpButton": "验证信息" + }, + "homePage": { + "activityText": " 今日活动", + "shiftText": " 今日班次", + "shiftBoxAllactivities": "所有活动", + "shiftBoxActivityDone": "已完成活动", + "shiftBoxActivityNotDone": "未完成活动", + "shiftBoxShiftPercentage": "班次进度百分比", + "shiftBoxEmpty": "您没有开放的班次", + "surpriseText": "惊喜", + "addAdjust": "添加新调整", + "historyReports": "历史报告", + "titleReport1": "活动", + "subTitleReport1": "Excel 输出", + "titleReport2": "本周班次", + "subTitleReport2": "文本输出" + }, + "coffee-brew": { + "title": "调整咖啡", + "subTitle": "咖啡调整机制", + "coffeeGramInput": "BCG | 咖啡克数", + "extractionTimeInput": "OEG | 提取时间", + "outputExtractGrammageInput": "ET | 输出提取克数", + "coffeeBrewButton": "注册", + "historyTitle": "调整历史", + "coffeeGramChart": "咖啡克数", + "extractionTimeChart": "提取时间", + "outputExtractGrammageChart": "输出提取" + }, + "BottomSheet": { + "BottomSheetReport": "报告", + "BottomSheetReportDesc": "您正在获取活动报告", + "BottomSheetReportbutton": "提交", + "BottomSheetReportManageShiftTitle": "报告", + "BottomSheetReportManageShiftType1": "本周", + "BottomSheetReportManageShiftType2": "下周", + "BottomSheetReportManageShiftButton": "复制文本", + "BottomSheetAddUserToPositionShiftPlanTitle": "将用户添加到职位", + "BottomSheetCreateRoutineTitle": "添加新例程", + "BottomSheetCreateRoutineNameInput": "例程名称", + "BottomSheetCreateRoutineDescInput": "例程描述", + "BottomSheetCreateRoutineRegButton": "提交例程", + "BottomSheetCreateRoutineEditButton": "编辑例程", + "BottomSheetCreateRoutineDeleteButton": "删除", + "BottomSheetCreateSectionTitle": "添加新部分", + "BottomSheetCreateSectionNameInput": "部分名称", + "BottomSheetCreateSectionDescInput": "部分描述", + "BottomSheetCreateSectionRegButton": "提交部分", + "BottomSheetCreateSectionEditButton": "编辑部分", + "BottomSheetCreateSectionDeleteButton": "删除", + "BottomSheetCreatePositionTitle": "添加新职位", + "BottomSheetCreatePositionNameInput": "职位名称", + "BottomSheetCreatePositionDescInput": "职位描述", + "BottomSheetCreatePositionSectionInput": "关联部分", + "chooseText": "选择", + "BottomSheetCreatePositionRegButton": "提交职位", + "BottomSheetCreatePositionEditButton": "编辑职位", + "BottomSheetCreatePositionDeleteButton": "删除", + "BottomSheetCreateEmployeesTitle": "添加新员工", + "BottomSheetCreateEmployeesFirstNameInput": "名字", + "BottomSheetCreateEmployeesLastNameInput": "姓氏", + "BottomSheetCreateEmployeesGenderInput": "性别", + "BottomSheetCreateEmployeesPhoneNumberInput": "电话号码", + "BottomSheetCreateEmployeesJobTitleInput": "职位名称", + "BottomSheetCreateEmployeesRegButton": "提交员工", + "BottomSheetCreateEmployeesEditButton": "编辑员工", + "BottomSheetCreateEmployeesDeleteButton": "删除", + "BottomSheetCreateShiftsTitle": "添加新班次", + "BottomSheetCreateShiftsShiftNameInput": "班次名称", + "BottomSheetCreateShiftsStartTimeInput": "班次开始时间", + "BottomSheetCreateShiftsEndTimeInput": "班次结束时间", + "BottomSheetCreateShiftsShiftInWeekInput": "选择班次星期几", + "BottomSheetCreateShiftsRutineShiftInput": "班次例程", + "BottomSheetCreateShiftsDescInput": "班次描述", + "BottomSheetCreateShiftsRegButton": "提交班次", + "BottomSheetCreateShiftsEditButton": "编辑班次", + "BottomSheetCreateShiftsDeleteButton": "删除" + }, + "shifts": { + "title": "复杂班次", + "subTitle": "复杂班次管理", + "ManageShiftButton": "管理本周班次", + "weekFilter": "本周班次", + "monthFilter": "本月班次", + "nextWeekFilter": "下周班次", + "nextMonthFilter": "下个月班次", + "lastWeekFilter": "上周班次", + "lastMonthkFilter": "上个月班次", + "shiftText": "班次", + "todayText": "今天", + "surpriseText": "惊喜", + "closeShiftButton": "关闭并确认班次" + }, + "manage-shift": { + "title": "每周复杂班次", + "subTitle": "班次管理", + "routineTitle": "选择例程", + "dateTitle": "选择日期", + "shiftTitle": "选择班次", + "personnelTitle": "选择人员", + "surpriseTitle": "选择惊喜", + "surpriseInput": " 惊喜", + "surpriseInputDef": " 选择", + "surpriseSubTitle": "班次由主管关闭。请为每个班次指定。", + "404Shift": "您这一天没有班次", + "manageShiftRegButton": "活动注册", + "manageShiftEditButton": "编辑活动", + "editText": "您正在编辑" + }, + "complete-shift": { + "title": "班次关闭操作", + "subTitle": "检查任务完成情况", + "todayText": "今天", + "reportText": "报告", + "completeShiftButton": "带积分关闭" + }, + "employees": { + "title": "员工和角色管理", + "subTitle": "复杂设置的核心", + "routinesTitle": "例程管理", + "sectionsTitle": "部分管理", + "positionsTitle": "职位管理", + "staffsTitle": "员工管理", + "shiftsTitle": "班次管理", + "taskTitle": "添加任务" } } diff --git a/next.config.js b/next.config.js index f951233..9751b12 100644 --- a/next.config.js +++ b/next.config.js @@ -1,18 +1,18 @@ /** @type {import('next').NextConfig} */ -const withPWA = require("@ducanh2912/next-pwa").default({ - cacheOnFrontEndNav: true, - aggressiveFrontEndNavCaching: true, - reloadOnOnline: true, - swcMinify: true, - dest: "public", - fallbacks: { - document: "/offline", // fallback to custom page - }, - workboxOptions: { - disableDevLogs: true, - }, -}); +// const withPWA = require("@ducanh2912/next-pwa").default({ +// cacheOnFrontEndNav: true, +// aggressiveFrontEndNavCaching: true, +// reloadOnOnline: true, +// swcMinify: true, +// dest: "public", +// fallbacks: { +// document: "/offline", // fallback to custom page +// }, +// workboxOptions: { +// disableDevLogs: true, +// }, +// }); const createNextIntlPlugin = require("next-intl/plugin"); @@ -23,4 +23,4 @@ const withNextIntl = createNextIntlPlugin(); const nextConfig = {}; // Export the combined configuration -module.exports = withNextIntl(withPWA(nextConfig)); +module.exports = withNextIntl(nextConfig); diff --git a/plugins/BottomSheet/BottomSheetAddUserToPositionShiftPlan.jsx b/plugins/BottomSheet/BottomSheetAddUserToPositionShiftPlan.jsx index 49621f9..792007b 100644 --- a/plugins/BottomSheet/BottomSheetAddUserToPositionShiftPlan.jsx +++ b/plugins/BottomSheet/BottomSheetAddUserToPositionShiftPlan.jsx @@ -8,6 +8,7 @@ import SimpleReactValidator from "simple-react-validator"; import CheckBoxBriz from "plugins/CheckBoxBriz/page"; import Buttonbriz from "plugins/Buttonbriz/page"; import { toast } from "react-toastify"; +import { useLocale, useTranslations } from "next-intl"; const BottomSheetAddUserToPositionShiftPlan = ({ setUserAndPositionIds, @@ -20,6 +21,10 @@ const BottomSheetAddUserToPositionShiftPlan = ({ const [, forceUpdate] = useState(); + const t = useTranslations("BottomSheet"); + const locale = useLocale(); + const isRTL = locale === "fa"; + const validator = useRef( new SimpleReactValidator({ messages: { @@ -43,7 +48,14 @@ const BottomSheetAddUserToPositionShiftPlan = ({ >

- افزودن یوزر به پوزیشن {positionName} + {isRTL ? ( + <> افزودن یوزر به پوزیشن {positionName} + ) : ( + <> + {" "} + {t("BottomSheetAddUserToPositionShiftPlanTitle")} {positionName} + + )}

diff --git a/plugins/BottomSheet/BottomSheetCreateEmployees.jsx b/plugins/BottomSheet/BottomSheetCreateEmployees.jsx index a99efd2..94468dc 100644 --- a/plugins/BottomSheet/BottomSheetCreateEmployees.jsx +++ b/plugins/BottomSheet/BottomSheetCreateEmployees.jsx @@ -10,10 +10,16 @@ import Buttonbriz from "plugins/Buttonbriz/page"; import DatePickerIran from "plugins/DatePickerIran/page"; import moment from "jalali-moment"; import validateIranPhone from "plugins/IranPhoneRegex"; +import { useLocale, useTranslations } from "next-intl"; const jalaliMoment = require("jalali-moment"); const BottomSheetCreateEmployees = (props) => { const CTX = useContext(AppContext); + + const t = useTranslations("BottomSheet"); + const locale = useLocale(); + const isRTL = locale === "fa"; + const [firstName, setFirstName] = useState(""); const [lastName, setLastName] = useState(""); const [phoneNumber, setPhoneNumber] = useState(""); @@ -199,14 +205,14 @@ const BottomSheetCreateEmployees = (props) => { >

- افزودن کاربر جدید + {t("BottomSheetCreateEmployeesTitle")}{" "}

{
{
{ style="text-right" select={true} selectData={[ - { key: "مرد", value: 0 }, - { key: "زن", value: 1 }, + { key: isRTL ? "مرد" : "male", value: 0 }, + { key: isRTL ? "زن" : "female", value: 1 }, ]} />
@@ -273,7 +279,7 @@ const BottomSheetCreateEmployees = (props) => {
{
{ )} select={true} selectData={roleSelectData} - defaultValue={"انتخاب کنید"} + defaultValue={t("chooseText")} />
@@ -388,17 +394,17 @@ const BottomSheetCreateEmployees = (props) => { {goToEditUser ? ( handleCreateUser("UPDATE")} subButton={true} - subButtonTitle="حذف کاربر" + subButtonTitle={t("BottomSheetCreateEmployeesDeleteButton")} subButtonEvent={() => CTX.DeleteUser(idEditUser)} /> ) : ( handleCreateUser()} diff --git a/plugins/BottomSheet/BottomSheetCreatePosition.jsx b/plugins/BottomSheet/BottomSheetCreatePosition.jsx index b141eba..5c4098a 100644 --- a/plugins/BottomSheet/BottomSheetCreatePosition.jsx +++ b/plugins/BottomSheet/BottomSheetCreatePosition.jsx @@ -7,9 +7,14 @@ import AppContext from "@ctx/AppContext"; import SimpleReactValidator from "simple-react-validator"; import { toast } from "react-toastify"; import Buttonbriz from "plugins/Buttonbriz/page"; +import { useLocale, useTranslations } from "next-intl"; const BottomSheetCreatePosition = (props) => { const CTX = useContext(AppContext); + const t = useTranslations("BottomSheet"); + const locale = useLocale(); + const isRTL = locale === "fa"; + const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [sectionId, setSectionId] = useState(""); @@ -125,14 +130,14 @@ const BottomSheetCreatePosition = (props) => { >

- افزودن پوزیشن جدید{" "} + {t("BottomSheetCreatePositionTitle")}{" "}

{
{
{ )} select={true} selectData={sectionIdSelectData} - defaultValue={"انتخاب کنید"} + defaultValue={t("chooseText")} />
@@ -223,17 +228,17 @@ const BottomSheetCreatePosition = (props) => { {goToEditPosition ? ( handleCreatePosition("UPDATE")} subButton={true} - subButtonTitle="حذف پوزیشن" + subButtonTitle={t("BottomSheetCreatePositionDeleteButton")} subButtonEvent={() => CTX.DeletePosition(idEditPosition)} /> ) : ( handleCreatePosition()} diff --git a/plugins/BottomSheet/BottomSheetCreateRoutine.jsx b/plugins/BottomSheet/BottomSheetCreateRoutine.jsx index a148fa9..2c49977 100644 --- a/plugins/BottomSheet/BottomSheetCreateRoutine.jsx +++ b/plugins/BottomSheet/BottomSheetCreateRoutine.jsx @@ -7,6 +7,7 @@ import AppContext from "@ctx/AppContext"; import SimpleReactValidator from "simple-react-validator"; import { toast } from "react-toastify"; import Buttonbriz from "plugins/Buttonbriz/page"; +import { useLocale, useTranslations } from "next-intl"; const BottomSheetCreateRoutine = (props) => { const CTX = useContext(AppContext); @@ -14,6 +15,9 @@ const BottomSheetCreateRoutine = (props) => { const [description, setDescription] = useState(""); const [, forceUpdate] = useState(); + const t = useTranslations("BottomSheet"); + const locale = useLocale(); + const isRTL = locale === "fa"; const validator = useRef( new SimpleReactValidator({ @@ -102,14 +106,14 @@ const BottomSheetCreateRoutine = (props) => { >

- افزودن روتین جدید{" "} + {t("BottomSheetCreateRoutineTitle")}{" "}

{
{ {goToEditRoutine ? ( handleCreateRoutine("UPDATE")} subButton={true} - subButtonTitle="حذف روتین" + subButtonTitle={t("BottomSheetCreateRoutineDeleteButton")} subButtonEvent={() => CTX.DeleteRoutine(idEditRoutine)} /> ) : ( handleCreateRoutine()} diff --git a/plugins/BottomSheet/BottomSheetCreateSection.jsx b/plugins/BottomSheet/BottomSheetCreateSection.jsx index f61f338..c4a2c66 100644 --- a/plugins/BottomSheet/BottomSheetCreateSection.jsx +++ b/plugins/BottomSheet/BottomSheetCreateSection.jsx @@ -7,12 +7,17 @@ import AppContext from "@ctx/AppContext"; import SimpleReactValidator from "simple-react-validator"; import { toast } from "react-toastify"; import Buttonbriz from "plugins/Buttonbriz/page"; +import { useLocale, useTranslations } from "next-intl"; const BottomSheetCreateSection = (props) => { const CTX = useContext(AppContext); const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); + const t = useTranslations("BottomSheet"); + const locale = useLocale(); + const isRTL = locale === "fa"; + const [, forceUpdate] = useState(); const validator = useRef( @@ -102,14 +107,14 @@ const BottomSheetCreateSection = (props) => { >

- افزودن سکشن جدید{" "} + {t("BottomSheetCreateSectionTitle")}{" "}

{
{ {goToEditSection ? ( handleCreateSection("UPDATE")} subButton={true} - subButtonTitle="حذف سکشن" + subButtonTitle={t("BottomSheetCreateSectionEditButton")} subButtonEvent={() => CTX.DeleteSection(idEditSection)} /> ) : ( handleCreateSection()} diff --git a/plugins/BottomSheet/BottomSheetCreateShifts.jsx b/plugins/BottomSheet/BottomSheetCreateShifts.jsx index 0c7665e..0c7587c 100644 --- a/plugins/BottomSheet/BottomSheetCreateShifts.jsx +++ b/plugins/BottomSheet/BottomSheetCreateShifts.jsx @@ -7,9 +7,14 @@ import AppContext from "@ctx/AppContext"; import SimpleReactValidator from "simple-react-validator"; import { toast } from "react-toastify"; import Buttonbriz from "plugins/Buttonbriz/page"; +import { useLocale, useTranslations } from "next-intl"; const BottomSheetCreateShifts = (props) => { const CTX = useContext(AppContext); + const t = useTranslations("BottomSheet"); + const locale = useLocale(); + const isRTL = locale === "fa"; + const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [dayOfWeeksCurrent, setDayOfWeeksCurrent] = useState(""); @@ -42,13 +47,13 @@ const BottomSheetCreateShifts = (props) => { ); const week = [ - { key: "شنبه", value: 6 }, - { key: "یکشنبه", value: 0 }, - { key: "دوشنبه", value: 1 }, - { key: "سه شنبه", value: 2 }, - { key: "چهار شنبه", value: 3 }, - { key: "پنج شنبه", value: 4 }, - { key: "جمعه", value: 5 }, + { key: isRTL ? "شنبه" : "Saturday ", value: 6 }, + { key: isRTL ? "یکشنبه" : "Sunday ", value: 0 }, + { key: isRTL ? "دوشنبه" : "Monday ", value: 1 }, + { key: isRTL ? "سه شنبه" : "Tuesday ", value: 2 }, + { key: isRTL ? "چهار شنبه" : "Wednesday ", value: 3 }, + { key: isRTL ? "پنج شنبه" : "Thursday ", value: 4 }, + { key: isRTL ? "جمعه" : "Friday ", value: 5 }, ]; const clear = () => { @@ -153,14 +158,14 @@ const BottomSheetCreateShifts = (props) => { >

- افزودن شیفت کاری جدید + {t("BottomSheetCreateShiftsTitle")}{" "}

{
{
{
{ style="text-right" select={true} selectData={[ - { key: "شنبه", value: parseInt(6) }, - { key: "یکشنبه", value: 0 }, - { key: "دوشنبه", value: 1 }, - { key: "سه شنبه", value: 2 }, - { key: "چهار شنبه", value: 3 }, - { key: "پنج شنبه", value: 4 }, - { key: "جمعه", value: 5 }, + { key: isRTL ? "شنبه" : "Saturday ", value: parseInt(6) }, + { key: isRTL ? "یکشنبه" : "Sunday", value: 0 }, + { key: isRTL ? "دوشنبه" : "Monday", value: 1 }, + { key: isRTL ? "سه شنبه" : "Tuesday", value: 2 }, + { key: isRTL ? "چهار شنبه" : "Wednesday", value: 3 }, + { key: isRTL ? "پنج شنبه" : "Thursday", value: 4 }, + { key: isRTL ? "جمعه" : "Friday", value: 5 }, ]} - defaultValue={"انتخاب کنید"} + defaultValue={t("chooseText")} />
@@ -302,7 +307,7 @@ const BottomSheetCreateShifts = (props) => {
{ )} select={true} selectData={routineIdSelectData} - defaultValue={"انتخاب کنید"} + defaultValue={t("chooseText")} />
@@ -333,7 +338,7 @@ const BottomSheetCreateShifts = (props) => {
{
{goToEditShift ? ( handleCreateShift("UPDATE")} subButton={true} - subButtonTitle="حذف شیفت" + subButtonTitle={t("BottomSheetCreateShiftsDeleteButton")} subButtonEvent={() => CTX.DeleteShift(idEditShift)} /> ) : ( handleCreateShift()} diff --git a/plugins/BottomSheet/BottomSheetReport.jsx b/plugins/BottomSheet/BottomSheetReport.jsx index e40263e..af22e63 100644 --- a/plugins/BottomSheet/BottomSheetReport.jsx +++ b/plugins/BottomSheet/BottomSheetReport.jsx @@ -8,10 +8,14 @@ import SimpleReactValidator from "simple-react-validator"; import CheckBoxBriz from "plugins/CheckBoxBriz/page"; import Buttonbriz from "plugins/Buttonbriz/page"; import { toast } from "react-toastify"; +import { useLocale, useTranslations } from "next-intl"; const BottomSheetReport = (props) => { const CTX = useContext(AppContext); const reportDetail = CTX.state.reportDetail; + const t = useTranslations("BottomSheet"); + const locale = useLocale(); + const isRTL = locale === "fa"; const handleSendReport_SHIFTPLAN = () => { CTX.ReportShiftPlan(reportDetail?.shiftId); @@ -30,20 +34,21 @@ const BottomSheetReport = (props) => { blocking={true} >
-

گزارشات

+

+ {" "} + {t("BottomSheetReportTitle")}{" "} +

- شما در حال گرفتن گزارش برای - {reportDetail?.title} - هستید + {t("BottomSheetReportDesc")}

{ diff --git a/plugins/BottomSheet/BottomSheetReportManageShift.jsx b/plugins/BottomSheet/BottomSheetReportManageShift.jsx index 2837342..f7dadfe 100644 --- a/plugins/BottomSheet/BottomSheetReportManageShift.jsx +++ b/plugins/BottomSheet/BottomSheetReportManageShift.jsx @@ -10,10 +10,15 @@ import Buttonbriz from "plugins/Buttonbriz/page"; import { toast } from "react-toastify"; import PersianNumber from "plugins/PersianNumber"; import moment from "jalali-moment"; +import { useLocale, useTranslations } from "next-intl"; const BottomSheetReportManageShift = (props) => { const CTX = useContext(AppContext); const shiftplansData = CTX.state.shiftPlansData; + const t = useTranslations("BottomSheet"); + const locale = useLocale(); + const isRTL = locale === "fa"; + const [shiftplans, setShiftplans] = useState([]); const [type, setType] = useState(0); @@ -118,7 +123,10 @@ const BottomSheetReportManageShift = (props) => { blocking={true} >
-

گزارشات

+

+ {" "} + {t("BottomSheetReportManageShiftTitle")}{" "} +

@@ -133,7 +141,7 @@ const BottomSheetReportManageShift = (props) => { type == 0 ? "text-white" : " text-secondary-900" }`} > - همین هفته{" "} + {t("BottomSheetReportManageShiftType1")}{" "}

{ type == 1 ? "text-white" : " text-secondary-900" }`} > - هفته بعد{" "} + {t("BottomSheetReportManageShiftType2")}{" "}

@@ -199,7 +207,7 @@ const BottomSheetReportManageShift = (props) => {
{ diff --git a/plugins/FormatJalaliDate/page.jsx b/plugins/FormatJalaliDate/page.jsx index 7f22606..4db2d0d 100644 --- a/plugins/FormatJalaliDate/page.jsx +++ b/plugins/FormatJalaliDate/page.jsx @@ -2,8 +2,8 @@ import moment from "jalali-moment"; import React from "react"; const FormatJalaliDate = (date, noYear) => { - const jalaliDateDay = moment(date).locale("fa").format("jD"); - const jalaliDateYear = moment(date).locale("fa").format("jYYYY"); + const jalaliDateDay = moment(date).locale("fa").format("D"); + const jalaliDateYear = moment(date).locale("fa").format("YYYY"); // Extract day name const dayName = moment(date).locale("fa").format("dddd"); @@ -15,7 +15,7 @@ const FormatJalaliDate = (date, noYear) => { // Get the Persian day name // Extract month name - const monthName = moment(date).locale("fa").format("jMMMM"); + const monthName = moment(date).locale("fa").format("MMMM"); if (noYear) { result = `${dayName} ${jalaliDateDay} ${monthName}`; diff --git a/plugins/FormatJalaliDateEn/page.jsx b/plugins/FormatJalaliDateEn/page.jsx new file mode 100644 index 0000000..baa35fa --- /dev/null +++ b/plugins/FormatJalaliDateEn/page.jsx @@ -0,0 +1,29 @@ +import moment from "jalali-moment"; +import React from "react"; + +const FormatJalaliDateEn = (date, noYear) => { + const jalaliDateDay = moment(date).format("D"); + const jalaliDateYear = moment(date).format("YYYY"); + + // Extract day name + const dayName = moment(date).format("dddd"); + + let result = null; + + // Map English day names to Persian + + // Get the Persian day name + + // Extract month name + const monthName = moment(date).format("MMMM"); + + if (noYear) { + result = `${dayName} ${jalaliDateDay} ${monthName}`; + } else { + result = `${dayName} ${jalaliDateDay} ${monthName} ${jalaliDateYear}`; + } + + return result; +}; + +export default FormatJalaliDateEn; diff --git a/plugins/Input/page.jsx b/plugins/Input/page.jsx index f68e940..09c776e 100644 --- a/plugins/Input/page.jsx +++ b/plugins/Input/page.jsx @@ -1,3 +1,4 @@ +import { useLocale } from "next-intl"; import React from "react"; const Input = ({ @@ -20,18 +21,20 @@ const Input = ({ selectData, defaultValue, }) => { + const locale = useLocale(); + const isRTL = locale === "fa"; return (
{textarea ? (