b0896dc777
CI/CD / CI · API (dotnet build + test) (push) Successful in 40s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 31s
CI/CD / CI · Dashboard (tsc) (push) Successful in 1m8s
CI/CD / CI · Admin Web (tsc) (push) Successful in 38s
CI/CD / CI · Website (tsc) (push) Successful in 46s
CI/CD / CI · Koja (tsc) (push) Successful in 50s
CI/CD / Deploy · all services (push) Successful in 3m29s
The card-terminal integration only ever worked when the API could reach the terminal's IP directly — impossible for the cloud deployment, where the terminal sits on the café LAN (the same wall the Print Agent already climbs for printers). And the terminal IP had to be typed by hand. Both fixed by reusing the agent. Cloud→LAN relay: - PrintAgentRegistry.SendPaymentAsync sends a PaymentRequest to the café's online agent and awaits its ack (PaymentResult on the hub); 95s window for the customer. - PosDeviceService now prefers an online agent (branch-matched, else any café agent) to relay POST /pay over the LAN, and falls back to the direct HTTP call only when no agent is connected (on-prem). Agent errors map back to POS_DEVICE_*. - Agent (Program.cs + PosTerminal.cs) handles PaymentRequest → POSTs the amount to the terminal's local http://ip:port/pay and reports approval/decline/timeout. Auto-detect: - Registry.ScanAsync + hub ReportScan; POST /print-agents/scan asks online agents to scan their /24 for given ports and merges the hosts found. - Agent NetworkScanner scans the LAN (:9100 printers, :8088 terminals) with a short per-host TCP probe. - Dashboard: a "تشخیص خودکار" (auto-detect) button on the POS-device, receipt and kitchen IP fields scans via the agent and fills the IP:port from a found host. Backend + agent build clean; dashboard tsc clean. NOTE: the agent app is not in CI — it must be rebuilt and redeployed on the café PC to gain these handlers. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2066 lines
95 KiB
JSON
2066 lines
95 KiB
JSON
{
|
||
"common": {
|
||
"save": "ذخیره",
|
||
"close": "بستن",
|
||
"cancel": "انصراف",
|
||
"confirm": "تأیید",
|
||
"delete": "حذف",
|
||
"search": "جستجو",
|
||
"loading": "در حال بارگذاری...",
|
||
"logout": "خروج",
|
||
"language": "زبان",
|
||
"comingSoon": "بهزودی",
|
||
"edit": "ویرایش"
|
||
},
|
||
"confirm": {
|
||
"title": "تأیید عملیات",
|
||
"confirm": "تأیید",
|
||
"cancel": "انصراف"
|
||
},
|
||
"notify": {
|
||
"saved": "ذخیره شد",
|
||
"errorGeneric": "خطایی رخ داد. دوباره تلاش کنید."
|
||
},
|
||
"errors": {
|
||
"planLimit": "به سقف پلن رسیدهاید. برای ادامه ارتقا دهید",
|
||
"notFound": "یافت نشد",
|
||
"unauthorized": "دسترسی ندارید",
|
||
"network": "خطای ارتباط با سرور",
|
||
"generic": "خطایی رخ داد. دوباره تلاش کنید.",
|
||
"OFFLINE_UNAVAILABLE": "برای این کار به اینترنت نیاز است. لطفاً پس از اتصال دوباره تلاش کنید."
|
||
},
|
||
"brand": {
|
||
"name": "میزی"
|
||
},
|
||
"languages": {
|
||
"fa": "فارسی",
|
||
"ar": "العربية",
|
||
"en": "English"
|
||
},
|
||
"auth": {
|
||
"title": "ورود به میزی",
|
||
"subtitle": "کد تأیید به موبایل شما ارسال میشود",
|
||
"redirecting": "قبلاً وارد شدهاید — در حال انتقال…",
|
||
"phone": "شماره موبایل",
|
||
"phonePlaceholder": "۰۹۱۲۱۲۳۴۵۶۷",
|
||
"sendOtp": "ارسال کد",
|
||
"otp": "کد تأیید",
|
||
"otpPlaceholder": "۶ رقم",
|
||
"verify": "ورود",
|
||
"resend": "ارسال مجدد",
|
||
"rateLimited": "تعداد درخواست کد بیش از حد است. حداکثر یک ساعت صبر کنید یا با پشتیبانی تماس بگیرید.",
|
||
"notFound": "حسابی با این شماره موبایل یافت نشد.",
|
||
"smsFailed": "ارسال پیامک ناموفق بود. دوباره تلاش کنید.",
|
||
"invalidOtp": "کد تأیید نادرست یا منقضی شده است.",
|
||
"register": "ثبتنام",
|
||
"registerSubtitle": "کافه خود را در میزی ثبت کنید",
|
||
"cafeName": "نام کافه یا رستوران",
|
||
"cafeNamePlaceholder": "مثال: کافه رویا",
|
||
"createAccount": "ایجاد حساب",
|
||
"alreadyHaveAccount": "حساب دارید؟",
|
||
"loginLink": "ورود",
|
||
"noAccount": "حساب ندارید؟",
|
||
"registerLink": "ثبتنام",
|
||
"alreadyRegistered": "این شماره قبلاً ثبتنام کرده است. لطفاً وارد شوید.",
|
||
"registrationExpired": "زمان ثبتنام منقضی شد. دوباره تلاش کنید.",
|
||
"chooseCafe": "انتخاب کافه",
|
||
"chooseCafeSubtitle": "این شماره به چند کافه دسترسی دارد. یکی را انتخاب کنید.",
|
||
"createNewCafe": "ایجاد کافه جدید",
|
||
"createNewCafeHint": "میخواهید کافه خودتان را با همین شماره راهاندازی کنید؟",
|
||
"tabOtp": "کد یکبارمصرف",
|
||
"tabPassword": "رمز عبور",
|
||
"username": "نام کاربری",
|
||
"usernamePlaceholder": "نام کاربری",
|
||
"password": "رمز عبور",
|
||
"passwordPlaceholder": "رمز عبور",
|
||
"invalidCredentials": "نام کاربری یا رمز عبور اشتباه است.",
|
||
"invalidKey": "کلید بازیابی نامعتبر است.",
|
||
"recoveryKey": "کلید بازیابی",
|
||
"keyHint": "کلید بازیابی را که از پشتیبانی میزی دریافت کردهاید وارد کنید.",
|
||
"useRecoveryKey": "دسترسی ندارید؟ ورود با کلید بازیابی",
|
||
"backToNormalLogin": "بازگشت به ورود عادی",
|
||
"kojaSlug": "آدرس پروفایل در کوجا",
|
||
"kojaSlugHint": "بازدیدکنندگان از این آدرس کافه شما را پیدا میکنند",
|
||
"kojaSlugPlaceholder": "مثال: cafe-roya"
|
||
},
|
||
"roles": {
|
||
"owner": "مالک",
|
||
"manager": "مدیر",
|
||
"cashier": "صندوقدار",
|
||
"waiter": "گارسون",
|
||
"chef": "آشپز",
|
||
"delivery": "پیک",
|
||
"unknown": "کاربر"
|
||
},
|
||
"branchSwitcher": {
|
||
"title": "شعبه فعال",
|
||
"allBranches": "همه شعب",
|
||
"selectBranch": "انتخاب شعبه"
|
||
},
|
||
"branchAccess": {
|
||
"title": "دسترسی شعب",
|
||
"staff": "کارکنان",
|
||
"noStaff": "کارمندی ثبت نشده است",
|
||
"selectStaff": "یک کارمند را برای مدیریت دسترسی انتخاب کنید",
|
||
"ownerNote": "مالک به همه شعب دسترسی دارد و نیازی به تعیین نقش شعبهای ندارد.",
|
||
"noAssignments": "هنوز نقشی برای شعبهای تعیین نشده است",
|
||
"loading": "در حال بارگذاری...",
|
||
"branch": "شعبه",
|
||
"role": "نقش",
|
||
"selectBranch": "انتخاب شعبه",
|
||
"add": "افزودن",
|
||
"remove": "حذف"
|
||
},
|
||
"access": {
|
||
"deniedTitle": "دسترسی به این صفحه ندارید",
|
||
"deniedBody": "نقش شما اجازه مشاهده این صفحه را ندارد. در صورت نیاز با مدیر یا مالک هماهنگ کنید."
|
||
},
|
||
"nav": {
|
||
"aria": "منوی اصلی",
|
||
"collapseSidebar": "جمع کردن نوار کناری",
|
||
"expandSidebar": "باز کردن نوار کناری",
|
||
"groups": {
|
||
"customers": "مشتریان و بازاریابی",
|
||
"management": "مدیریت کافه"
|
||
},
|
||
"home": "داشبورد",
|
||
"pos": "صندوق",
|
||
"tables": "میزها",
|
||
"crm": "مشتریان",
|
||
"coupons": "کوپنها",
|
||
"menu": "منو",
|
||
"orders": "سفارشها",
|
||
"inventory": "انبار",
|
||
"hr": "منابع انسانی",
|
||
"reports": "گزارشها",
|
||
"expenses": "هزینهها",
|
||
"shifts": "بستن شیفت",
|
||
"reviews": "نظرات",
|
||
"reservations": "رزرو",
|
||
"sms": "پیامک",
|
||
"taxes": "مالیات",
|
||
"branches": "شعب",
|
||
"subscription": "اشتراک و پلن",
|
||
"support": "پشتیبانی",
|
||
"settings": "تنظیمات",
|
||
"kds": "آشپزخانه",
|
||
"notifications": "اعلانها",
|
||
"queue": "نوبتدهی",
|
||
"discover": "کشف کافهها"
|
||
},
|
||
"dashboard": {
|
||
"cafeName": "کافه دمو",
|
||
"planPro": "پرو",
|
||
"online": "متصل",
|
||
"offline": "آفلاین",
|
||
"activePlan": "پلن فعال",
|
||
"editCafeSettings": "تنظیمات کافه",
|
||
"viewSubscription": "اشتراک و پلن",
|
||
"switchCafe": "تغییر کافه",
|
||
"currentCafe": "کافه فعلی",
|
||
"otherCafes": "کافههای دیگر",
|
||
"createNewCafe": "ایجاد کافه جدید",
|
||
"openMenu": "منو",
|
||
"switchCafeError": "تغییر کافه ناموفق بود. دوباره تلاش کنید."
|
||
},
|
||
"overview": {
|
||
"title": "خانه",
|
||
"greeting": "خوشآمدید",
|
||
"todayRevenue": "فروش امروز",
|
||
"todayOrders": "سفارشهای امروز",
|
||
"netIncome": "درآمد خالص",
|
||
"avgOrder": "میانگین سفارش",
|
||
"revenueChart": "روند فروش ۷ روز",
|
||
"tableStatus": "وضعیت میزها",
|
||
"tableFree": "آزاد",
|
||
"tableBusy": "اشغال",
|
||
"tableCleaning": "نظافت",
|
||
"tableTotal": "کل میزها",
|
||
"topProducts": "پرفروشترین آیتمها",
|
||
"vsYesterday": "نسبت به دیروز",
|
||
"noData": "دادهای موجود نیست",
|
||
"quickLinks": "دسترسی سریع",
|
||
"unit": "قلم"
|
||
},
|
||
"pos": {
|
||
"order": "سفارش",
|
||
"table": "میز",
|
||
"total": "مبلغ نهایی",
|
||
"subtotal": "جمع جزء",
|
||
"tax": "مالیات",
|
||
"discount": "تخفیف",
|
||
"confirmOrder": "ثبت و پرداخت",
|
||
"modeOrder": "ثبت سفارش",
|
||
"modePay": "پرداخت",
|
||
"takeOrder": "سفارشگیری",
|
||
"submitOrder": "ثبت سفارش",
|
||
"submitOrderAndPay": "ثبت سفارش و پرداخت",
|
||
"orderPaidNew": "سفارش ثبت و پرداخت شد",
|
||
"orderPaidAdd": "آیتمها ثبت و پرداخت شد",
|
||
"posDeviceSent": "مبلغ به دستگاه پوز ارسال شد",
|
||
"posDeviceError": "ارسال به دستگاه پوز ناموفق بود",
|
||
"posDeviceNotConfigured": "دستگاه پوز تنظیم نشده — فقط پرداخت در سیستم ثبت شد",
|
||
"posDeviceConnectionFailed": "اتصال به دستگاه پوز برقرار نشد",
|
||
"posDeviceTimeout": "زمان انتظار دستگاه پوز تمام شد",
|
||
"posDeviceRejected": "دستگاه پوز پرداخت را رد کرد",
|
||
"posDeviceNoBranch": "شعبه برای ارسال به پوز مشخص نیست",
|
||
"kitchenSlip": "فیش آشپزخانه (پیشنمایش و چاپ)",
|
||
"queueNumber": "نوبت {number}",
|
||
"orderPlaced": "سفارش ثبت شد — برای دریافت وجه به «پرداخت» بروید",
|
||
"guestName": "نام مهمان",
|
||
"guestNamePlaceholder": "مثلاً علی",
|
||
"needTableOrName": "میز، مشتری، یا نام مهمان را وارد کنید",
|
||
"openOrders": "سفارشهای باز",
|
||
"openOrdersHint": "سفارشهایی که هنوز پرداخت نشدهاند",
|
||
"noOpenOrders": "سفارش بازی برای پرداخت نیست",
|
||
"payOrder": "پرداخت",
|
||
"payFor": "پرداخت برای",
|
||
"selectOrderToPay": "یک سفارش از لیست انتخاب کنید",
|
||
"confirmPay": "دریافت وجه",
|
||
"confirmPayCash": "دریافت وجه (نقد)",
|
||
"confirmPayCard": "دریافت وجه (کارت)",
|
||
"confirmPayCredit": "دریافت وجه (اعتبار)",
|
||
"confirmPaySplit": "دریافت وجه (ترکیبی)",
|
||
"previewBill": "پیشنمایش و چاپ صورتحساب",
|
||
"paySuccess": "پرداخت ثبت شد",
|
||
"payError": "خطا در ثبت پرداخت",
|
||
"payNeedsOpenShift": "ابتدا صندوق این شعبه را باز کنید (شیفت)",
|
||
"cancelOrder": "لغو سفارش (بدون پرداخت)",
|
||
"cancelOrderConfirm": "مشتری بدون پرداخت رفته است؟ سفارش لغو میشود و میز آزاد میشود.",
|
||
"cancelOrderSuccess": "سفارش لغو شد",
|
||
"cancelOrderError": "لغو سفارش ناموفق بود",
|
||
"cancelReasonPlaceholder": "دلیل لغو (اختیاری)",
|
||
"cancelOrderHasPayments": "ابتدا پرداختهای ثبتشده را بازگردانید، سپس سفارش را لغو کنید",
|
||
"itemsCount": "قلم",
|
||
"applyCoupon": "اعمال کوپن",
|
||
"couponPlaceholder": "کد کوپن",
|
||
"couponCode": "کد کوپن",
|
||
"selectTable": "میز",
|
||
"emptyCart": "سبد خالی است",
|
||
"cash": "نقد",
|
||
"card": "کارت",
|
||
"clearCart": "پاک کردن",
|
||
"allCategories": "همه",
|
||
"searchItems": "جستجوی آیتم",
|
||
"searchItemsPlaceholder": "نام آیتم را جستجو کنید…",
|
||
"searchNoResults": "آیتمی با این عبارت یافت نشد",
|
||
"reservationBanner": "رزرو: {name} — آیتمها را اضافه کنید و «ثبت و پرداخت» بزنید",
|
||
"orderSuccess": "سفارش ثبت شد",
|
||
"orderError": "خطا در ثبت سفارش",
|
||
"orderInvalid": "سفارش نامعتبر است (منو یا میز را بررسی کنید)",
|
||
"orderNotOpen": "این سفارش دیگر باز نیست",
|
||
"orderValidation": "اطلاعات سفارش نامعتبر است",
|
||
"nothingPending": "آیتم جدیدی برای ارسال به آشپزخانه نیست",
|
||
"couponApplied": "کوپن «{code}» اعمال شد — {amount} تخفیف",
|
||
"couponActive": "کوپن {code}",
|
||
"couponRemoved": "کوپن حذف شد",
|
||
"removeCoupon": "حذف",
|
||
"couponInvalid": "کد کوپن نامعتبر است",
|
||
"couponExpired": "این کوپن منقضی شده است",
|
||
"couponNotStarted": "این کوپن هنوز فعال نیست",
|
||
"couponLimitReached": "سقف استفاده از این کوپن پر شده",
|
||
"couponMinOrder": "حداقل مبلغ سفارش برای این کوپن رعایت نشده",
|
||
"couponCartEmpty": "ابتدا آیتم به سبد اضافه کنید",
|
||
"couponRequired": "کد کوپن را وارد کنید",
|
||
"guestPhone": "موبایل مهمان",
|
||
"guestPhonePlaceholder": "09121234567",
|
||
"selectTableBoard": "انتخاب میز",
|
||
"loadingTables": "بارگذاری میزها...",
|
||
"selectBranchForTables": "ابتدا شعبه را انتخاب کنید",
|
||
"noTablesOnBoard": "میزی برای این شعبه ثبت نشده. از بخش میزها میز اضافه کنید.",
|
||
"tablesLoadError": "بارگذاری میزها ناموفق بود",
|
||
"retryTables": "تلاش مجدد",
|
||
"manageTablesLink": "رفتن به مدیریت میزها",
|
||
"sessionActive": "سفارش فعال روی میز",
|
||
"addToOrder": "به سفارش میز اضافه شد",
|
||
"void": "ابطال",
|
||
"voidItem": "ابطال آیتم",
|
||
"voided": "ابطال شده",
|
||
"itemNotePlaceholder": "یادداشت برای آشپزخانه/بار (اختیاری)",
|
||
"confirmVoid": "آیا مطمئن هستید که میخواهید این آیتم را ابطال کنید؟",
|
||
"voidError": "خطا در ابطال آیتم",
|
||
"transferTable": "انتقال میز",
|
||
"selectTargetTable": "میز مقصد را انتخاب کنید",
|
||
"transferSuccess": "سفارش با موفقیت منتقل شد",
|
||
"transferError": "خطا در انتقال میز",
|
||
"tableNotAvailable": "میز در حال نظافت است",
|
||
"tableOccupied": "میز مشغول است",
|
||
"searchOpenOrder": "میز، نام، موبایل یا شناسه سفارش...",
|
||
"paidSoFar": "پرداختشده",
|
||
"remaining": "مانده",
|
||
"loyaltyBalance": "امتیاز مشتری: {points}",
|
||
"loyaltyUseMax": "حداکثر",
|
||
"loyaltyRedeemHint": "هر ۱ امتیاز = ۱۰۰ ت تخفیف روی همین پرداخت",
|
||
"loyaltyRedeemApplied": "تخفیف امتیاز",
|
||
"loyaltyNoCustomer": "برای استفاده از امتیاز، مشتری را به سفارش وصل کنید",
|
||
"loyaltyInsufficient": "امتیاز کافی نیست",
|
||
"splitPayments": "پرداخت ترکیبی",
|
||
"addPaymentRow": "ردیف پرداخت",
|
||
"credit": "اعتبار",
|
||
"paySelectTable": "انتخاب میز (اشغال)",
|
||
"payPickByName": "یا از نام / لیست سفارشهای باز",
|
||
"payOpenOrdersHint": "میز اشغال را بزنید، از منوی میز انتخاب کنید، یا نام/موبایل را جستجو کنید",
|
||
"allTables": "همه میزها",
|
||
"noOrderOnTable": "سفارش بازی روی این میز نیست",
|
||
"noOpenOrdersOnTable": "سفارش بازی برای این میز نیست",
|
||
"customerSection": "مشتری",
|
||
"existingCustomer": "مشتری موجود",
|
||
"newCustomer": "مهمان جدید",
|
||
"customerSearchPlaceholder": "نام، موبایل یا کد ملی...",
|
||
"customerSearchHint": "حداقل ۲ حرف برای جستجو",
|
||
"customerNotFound": "مشتری یافت نشد — مهمان جدید ثبت کنید",
|
||
"customerSaved": "مشتری در CRM ذخیره شد",
|
||
"customerSaveError": "خطا در ذخیره مشتری",
|
||
"customerPhoneExists": "این موبایل قبلاً ثبت شده — از جستجو انتخاب کنید",
|
||
"newCustomerHint": "میتوانید فقط برای این سفارش نام بزنید یا با «افزودن مشتری» در CRM ذخیره کنید",
|
||
"offlineQueueNotice": "آفلاین ‐ سفارش در صف ذخیره شد و پس از اتصال ارسال میشود",
|
||
"orderTypePicker": "سفارش چطور ثبت میشود؟",
|
||
"orderTypeTable": "میز",
|
||
"orderTypeTableDesc": "مهمان روی میز مینشیند",
|
||
"orderTypeCounter": "پیشخوان",
|
||
"orderTypeCounterDesc": "بدون تخصیص میز",
|
||
"orderTypeTakeaway": "بیرونبر",
|
||
"orderTypeTakeawayDesc": "سفارش برای بیرون",
|
||
"counterBadge": "پیشخوان",
|
||
"takeawayBadge": "بیرونبر",
|
||
"assignTable": "تخصیص میز",
|
||
"newOrder": "سفارش جدید"
|
||
},
|
||
"print": {
|
||
"printReceipt": "چاپ رسید",
|
||
"printKitchen": "ارسال به آشپزخانه",
|
||
"success": "رسید با موفقیت چاپ شد",
|
||
"notConfigured": "آدرس پرینتر تنظیم نشده است",
|
||
"connectionFailed": "خطا در اتصال به پرینتر",
|
||
"testPrint": "تست پرینت",
|
||
"printerSettings": "تنظیمات پرینتر",
|
||
"receiptPrinter": "پرینتر رسید",
|
||
"kitchenPrinter": "پرینتر آشپزخانه",
|
||
"paperWidth": "عرض کاغذ",
|
||
"autoCut": "برش خودکار",
|
||
"port": "پورت",
|
||
"receiptHeader": "سرتیتر رسید",
|
||
"receiptFooter": "پاورقی رسید",
|
||
"wifiOnReceipt": "رمز WiFi روی رسید",
|
||
"saveSettings": "ذخیره تنظیمات",
|
||
"settingsSaved": "تنظیمات پرینتر ذخیره شد",
|
||
"noBranchForPrinter": "برای تنظیم پرینتر ابتدا یک شعبه در سیستم ثبت کنید.",
|
||
"testPageHint": "یک رسید تست به پرینترهای ذخیرهشده ارسال میشود. ابتدا IP و پورت را در تنظیمات پرینتر وارد کنید.",
|
||
"testPrintReceipt": "چاپ تست رسید",
|
||
"testPrintKitchen": "چاپ تست آشپزخانه",
|
||
"configurePrinters": "رفتن به تنظیمات پرینتر",
|
||
"posDeviceSection": "دستگاه پوز (کارتخوان)",
|
||
"posDeviceHint": "هنگام پرداخت کارتی، مبلغ به آدرس HTTP دستگاه ارسال میشود (POST /pay).",
|
||
"posDeviceIp": "آدرس IP دستگاه پوز",
|
||
"detect": "تشخیص خودکار",
|
||
"detecting": "در حال جستجوی شبکه…",
|
||
"detectNone": "دستگاهی در شبکه پیدا نشد",
|
||
"detectOffline": "برای تشخیص خودکار باید پرینتسرور روشن و متصل باشد",
|
||
"detectHint": "پرینتسرور شبکه محلی را برای یافتن دستگاه اسکن میکند.",
|
||
"testSent": "تست به پرینتر ارسال شد.",
|
||
"sent": "به پرینتر ارسال شد.",
|
||
"noStationItems": "این سفارش آیتمی برای این ایستگاه ندارد.",
|
||
"printFailed": "چاپ ناموفق بود.",
|
||
"stations": {
|
||
"title": "ایستگاههای چاپ آشپزخانه و بار",
|
||
"subtitle": "برای هر بخش آمادهسازی یک پرینتر جدا بگذارید و دستههای منو را به آن وصل کنید.",
|
||
"help": "یک ایستگاه (مثلاً آشپزخانه یا بار) با پرینتر مخصوص خودش بسازید، سپس در «منو» برای هر دسته ایستگاه چاپ را انتخاب کنید — غذا ← آشپزخانه، نوشیدنی ← بار. آیتمهای دستههایی که ایستگاه ندارند روی پرینتر آشپزخانهٔ شعبه چاپ میشوند. فاکتور مشتری همیشه روی پرینتر فاکتور چاپ میشود.",
|
||
"add": "افزودن ایستگاه",
|
||
"name": "نام ایستگاه",
|
||
"namePlaceholder": "مثلاً آشپزخانه، بار",
|
||
"printerIp": "آیپی پرینتر",
|
||
"noPrinter": "بدون پرینتر — از پرینتر آشپزخانه استفاده میشود",
|
||
"categoryCount": "{count} دسته",
|
||
"test": "تست",
|
||
"empty": "هنوز ایستگاهی ندارید. «آشپزخانه» و «بار» را اضافه کنید تا آیتمهایشان جدا چاپ شود.",
|
||
"deleteConfirm": "ایستگاه «{name}» حذف شود؟ دستههای آن به پرینتر آشپزخانه برمیگردند.",
|
||
"saveError": "ذخیرهٔ ایستگاه ناموفق بود."
|
||
},
|
||
"agents": {
|
||
"title": "پرینتسرورها (شناسایی خودکار پرینتر)",
|
||
"hint": "روی کامپیوتر صندوق، برنامهٔ «پرینتسرور میزی» را نصب کنید تا پرینترهای USB و شبکه بهصورت خودکار شناسایی شوند و چاپ از طریق آن انجام شود.",
|
||
"add": "افزودن پرینتسرور",
|
||
"pairingTitle": "این کد را در برنامهٔ پرینتسرور روی کامپیوتر صندوق وارد کنید:",
|
||
"pairingSteps": "برنامهٔ «پرینتسرور میزی» را روی همان کامپیوتری که به پرینترها وصل است نصب و اجرا کنید، سپس این کد را وارد کنید. کد تا ۱۵ دقیقه معتبر است.",
|
||
"empty": "هنوز پرینتسروری متصل نشده است.",
|
||
"online": "آنلاین",
|
||
"offline": "آفلاین",
|
||
"noDevices": "در حال یافتن پرینترها…",
|
||
"test": "تست",
|
||
"receiptVia": "پرینتر رسید (از پرینتسرور)",
|
||
"kitchenVia": "پرینتر آشپزخانه (از پرینتسرور)",
|
||
"viaServer": "پرینتر (از پرینتسرور)",
|
||
"useIpInstead": "— استفاده از IP دستی —",
|
||
"revokeConfirm": "حذف پرینتسرور «{name}»؟ پس از آن دیگر نمیتواند چاپ کند.",
|
||
"codeError": "ایجاد کد ناموفق بود."
|
||
}
|
||
},
|
||
"receipt": {
|
||
"table": "میز",
|
||
"order": "سفارش",
|
||
"guest": "مهمان",
|
||
"total": "مجموع",
|
||
"print": "چاپ",
|
||
"close": "بستن",
|
||
"thankYou": "ممنون از انتخاب شما",
|
||
"kitchenTitle": "فیش آشپزخانه / بار",
|
||
"billTitle": "صورتحساب مشتری",
|
||
"kitchenFooter": "— برای آشپزخانه —",
|
||
"payment": {
|
||
"cash": "نقد",
|
||
"card": "کارت",
|
||
"credit": "اعتبار"
|
||
}
|
||
},
|
||
"crm": {
|
||
"title": "مشتریان",
|
||
"searchPlaceholder": "نام، موبایل یا کد ملی...",
|
||
"addCustomer": "مشتری جدید",
|
||
"name": "نام",
|
||
"phone": "موبایل",
|
||
"nationalId": "کد ملی",
|
||
"birthDate": "تاریخ تولد (شمسی)",
|
||
"group": "گروه",
|
||
"loyaltyPoints": "امتیاز",
|
||
"noCustomers": "مشتریای یافت نشد",
|
||
"groups": {
|
||
"Regular": "عادی",
|
||
"Vip": "ویژه",
|
||
"New": "جدید",
|
||
"Employee": "کارمند"
|
||
},
|
||
"wizard": {
|
||
"titleCreate": "ثبت مشتری جدید",
|
||
"titleEdit": "ویرایش مشتری",
|
||
"stepOf": "مرحله {current} از {total}",
|
||
"steps": {
|
||
"contact": "تماس",
|
||
"profile": "اطلاعات تکمیلی",
|
||
"loyalty": "گروه و امتیاز",
|
||
"confirm": "بازبینی"
|
||
},
|
||
"back": "قبلی",
|
||
"next": "بعدی",
|
||
"birthHint": "فرمت شمسی، مثلاً 1400/01/01",
|
||
"referredBy": "معرف (اختیاری)",
|
||
"loyaltyCreateHint": "امتیاز وفاداری پس از ثبت، از طریق سفارشها قابل تنظیم است.",
|
||
"errors": {
|
||
"duplicatePhone": "این شماره موبایل قبلاً ثبت شده است.",
|
||
"generic": "ذخیره انجام نشد. دوباره تلاش کنید."
|
||
}
|
||
},
|
||
"deleted": "مشتری حذف شد",
|
||
"deleteConfirmTitle": "حذف مشتری",
|
||
"deleteConfirmDesc": "آیا از حذف «{name}» مطمئن هستید؟"
|
||
},
|
||
"coupons": {
|
||
"title": "کوپنها",
|
||
"addCoupon": "کوپن جدید",
|
||
"code": "کد",
|
||
"type": "نوع",
|
||
"value": "مقدار",
|
||
"usage": "استفاده",
|
||
"active": "فعال",
|
||
"inactive": "غیرفعال",
|
||
"types": {
|
||
"Percentage": "درصد",
|
||
"FixedAmount": "مبلغ ثابت",
|
||
"FreeItem": "آیتم رایگان"
|
||
},
|
||
"noCoupons": "کوپنی ثبت نشده",
|
||
"deleted": "کوپن حذف شد",
|
||
"deleteConfirmTitle": "حذف کوپن",
|
||
"deleteConfirmDesc": "آیا از حذف کوپن «{code}» مطمئن هستید؟"
|
||
},
|
||
"hr": {
|
||
"title": "منابع انسانی",
|
||
"tabs": {
|
||
"attendance": "حضور و غیاب",
|
||
"leave": "مرخصی",
|
||
"payroll": "حقوق",
|
||
"access": "دسترسی شعب",
|
||
"credentials": "رمز ورود",
|
||
"team": "کارکنان",
|
||
"roles": "نقشها و دسترسیها"
|
||
},
|
||
"myAttendance": "حضور من",
|
||
"clockIn": "ورود",
|
||
"clockOut": "خروج",
|
||
"approve": "تأیید",
|
||
"noLeave": "درخواست مرخصی در انتظار نیست",
|
||
"paid": "پرداخت شده",
|
||
"markPaid": "ثبت پرداخت",
|
||
"employeeCount": "تعداد کارمندان",
|
||
"monthYear": "ماه حقوق",
|
||
"credentials": {
|
||
"title": "مدیریت رمز ورود کارمندان",
|
||
"subtitle": "برای هر کارمند میتوانید نام کاربری و رمز عبور تعریف کنید تا بدون نیاز به کد OTP وارد شوند.",
|
||
"selectEmployee": "ابتدا یک کارمند انتخاب کنید",
|
||
"username": "نام کاربری",
|
||
"usernamePlaceholder": "مثال: ali_barista",
|
||
"password": "رمز عبور (حداقل ۸ کاراکتر)",
|
||
"passwordPlaceholder": "رمز عبور جدید",
|
||
"set": "ذخیره رمز ورود",
|
||
"remove": "حذف رمز ورود",
|
||
"removeConfirm": "آیا مطمئنید؟ کارمند دیگر نمیتواند با رمز عبور وارد شود.",
|
||
"saved": "رمز ورود ذخیره شد.",
|
||
"removed": "رمز ورود حذف شد.",
|
||
"usernameTaken": "این نام کاربری قبلاً استفاده شده است."
|
||
},
|
||
"addEmployee": "افزودن کارمند",
|
||
"noEmployees": "هنوز کارمندی ثبت نشده است.",
|
||
"employeeCreated": "کارمند اضافه شد",
|
||
"employeeDetails": "مشخصات کارمند",
|
||
"employeeNotFound": "این کاربر دیگر فعال نیست.",
|
||
"openInHr": "مشاهده در منابع انسانی",
|
||
"save": "ذخیره",
|
||
"cancel": "انصراف",
|
||
"fields": {
|
||
"name": "نام",
|
||
"phone": "موبایل",
|
||
"role": "نقش",
|
||
"branch": "شعبه",
|
||
"branchOptional": "اختیاری",
|
||
"noBranch": "بدون شعبه",
|
||
"baseSalary": "حقوق پایه (تومان)",
|
||
"optional": "اختیاری",
|
||
"enableLogin": "ایجاد نام کاربری و رمز ورود",
|
||
"username": "نام کاربری",
|
||
"password": "رمز عبور",
|
||
"passwordHint": "حداقل ۸ کاراکتر"
|
||
},
|
||
"roles": {
|
||
"Owner": "مالک",
|
||
"Manager": "مدیر",
|
||
"Cashier": "صندوقدار",
|
||
"Waiter": "گارسون",
|
||
"Chef": "آشپز",
|
||
"Delivery": "پیک"
|
||
}
|
||
},
|
||
"reviews": {
|
||
"title": "نظرات مشتریان",
|
||
"summary": "میانگین امتیاز",
|
||
"reviewCount": "{count} نظر",
|
||
"empty": "هنوز نظری ثبت نشده است.",
|
||
"ownerReply": "پاسخ کافه",
|
||
"reply": "پاسخ دادن",
|
||
"replyPlaceholder": "پاسخ خود را بنویسید..."
|
||
},
|
||
"sms": {
|
||
"title": "پیامک بازاریابی",
|
||
"message": "متن پیام",
|
||
"messagePlaceholder": "متن پیامک را بنویسید...",
|
||
"targetGroup": "گروه هدف",
|
||
"allCustomers": "همه مشتریان",
|
||
"send": "ارسال",
|
||
"usage": "ارسالشده این ماه",
|
||
"unlimited": "نامحدود",
|
||
"sent": "ارسال شد",
|
||
"failed": "ناموفق",
|
||
"charCount": "{count} حرف",
|
||
"smsPartsHint": "{parts} پیامک",
|
||
"balance": "اعتبار حساب شما",
|
||
"balanceAmount": "{amount} ریال",
|
||
"balanceNotConfigured": "سرویس پیامک راهاندازی نشده",
|
||
"sender": "خط فرستنده",
|
||
"recipientsCount": "{count} مخاطب",
|
||
"sendConfirm": "ارسال به {count} نفر؟",
|
||
"sending": "در حال ارسال...",
|
||
"byoHint": "پیامک با حساب و خط اختصاصی خود شما ارسال میشود — هزینه ارسال مستقیماً با اپراتور پیامک شماست.",
|
||
"notConfiguredOwner": "برای ارسال پیامک ابتدا کلید API و شماره خط کاوهنگار خود را در تنظیمات بالا ثبت کنید.",
|
||
"notConfiguredStaff": "سرویس پیامک هنوز توسط مدیر کافه راهاندازی نشده است.",
|
||
"settings": {
|
||
"title": "تنظیمات سرویس پیامک",
|
||
"hint": "از پنل کاوهنگار (kavenegar.com) کلید API بسازید و همراه شماره خط خود وارد کنید.",
|
||
"apiKey": "کلید API کاوهنگار",
|
||
"apiKeyPlaceholder": "API Key",
|
||
"senderNumber": "شماره خط ارسال",
|
||
"senderPlaceholder": "10004346...",
|
||
"configured": "سرویس پیامک فعال است.",
|
||
"notConfigured": "هنوز راهاندازی نشده.",
|
||
"save": "ذخیره",
|
||
"saving": "در حال بررسی…",
|
||
"saved": "تنظیمات پیامک ذخیره شد.",
|
||
"saveFailed": "کلید API نامعتبر است یا ذخیره ناموفق بود."
|
||
}
|
||
},
|
||
"reports": {
|
||
"title": "گزارشها و تحلیل",
|
||
"subtitle": "خلاصه فروش بر اساس گزارش روزانه",
|
||
"exportCsv": "دانلود CSV",
|
||
"fromDate": "از تاریخ",
|
||
"toDate": "تا تاریخ",
|
||
"branch": "شعبه",
|
||
"allBranches": "همه شعبهها",
|
||
"preset": {
|
||
"7d": "۷ روز",
|
||
"30d": "۳۰ روز",
|
||
"90d": "۹۰ روز"
|
||
},
|
||
"kpiTotalRevenue": "کل فروش",
|
||
"kpiTotalOrders": "تعداد سفارش",
|
||
"kpiAvgOrder": "میانگین سفارش",
|
||
"kpiNetIncome": "درآمد خالص",
|
||
"kpiTotalExpenses": "جمع هزینهها",
|
||
"vsPrevious": "نسبت به دوره قبل",
|
||
"revenueChartTitle": "روند فروش روزانه",
|
||
"paymentMixTitle": "روش پرداخت",
|
||
"branchCompareTitle": "مقایسه شعب",
|
||
"topProductsTitle": "پرفروشترین محصولات",
|
||
"colProduct": "نام محصول",
|
||
"colQuantity": "تعداد",
|
||
"colRevenue": "درآمد",
|
||
"revenue": "درآمد",
|
||
"cash": "نقد",
|
||
"card": "کارت",
|
||
"credit": "اعتبار",
|
||
"noData": "دادهای نیست",
|
||
"loading": "در حال بارگذاری...",
|
||
"csvDate": "تاریخ",
|
||
"csvBranch": "شعبه",
|
||
"csvTotalRevenue": "کل فروش",
|
||
"csvTotalOrders": "تعداد سفارش",
|
||
"csvAvgOrder": "میانگین سفارش",
|
||
"csvCash": "نقد",
|
||
"csvCard": "کارت",
|
||
"csvCredit": "اعتبار",
|
||
"csvNetIncome": "درآمد خالص",
|
||
"csvVoids": "ابطالها",
|
||
"csvVoidAmount": "مبلغ ابطال",
|
||
"csvExpenses": "هزینهها",
|
||
"tabs": {
|
||
"performance": "عملکرد و سود",
|
||
"corrections": "اصلاح سند",
|
||
"auditLog": "گزارش عملیات"
|
||
},
|
||
"dailyBreakdownTitle": "ریز روزانه — فروش، هزینه و سود",
|
||
"colDate": "تاریخ",
|
||
"colOrders": "سفارشها",
|
||
"colExpenses": "هزینهها",
|
||
"colNet": "سود خالص",
|
||
"corrections": {
|
||
"date": "تاریخ",
|
||
"branch": "شعبه",
|
||
"allBranches": "همه شعبهها",
|
||
"hint": "برای اصلاح پرداختِ ثبتشده اشتباه، سفارش را پیدا کنید و «اصلاح سند» را بزنید.",
|
||
"loadFailed": "بارگذاری سفارشها ناموفق بود.",
|
||
"retry": "تلاش دوباره",
|
||
"empty": "در این روز سفارش بستهشدهای نیست.",
|
||
"colOrder": "سفارش",
|
||
"colTime": "ساعت",
|
||
"colStatus": "وضعیت",
|
||
"colTotal": "مبلغ",
|
||
"colPayments": "پرداختها",
|
||
"table": "میز",
|
||
"statusPaid": "تسویهشده",
|
||
"statusCancelled": "لغوشده",
|
||
"correctAction": "اصلاح سند",
|
||
"prevPage": "قبلی",
|
||
"nextPage": "بعدی",
|
||
"dialogTitle": "اصلاح سند پرداخت",
|
||
"orderTotal": "مبلغ سفارش",
|
||
"voidSection": "پرداختهای اشتباه (برای ابطال انتخاب کنید)",
|
||
"replacementSection": "پرداختهای جایگزین",
|
||
"addReplacement": "افزودن",
|
||
"noReplacements": "اگر فقط ابطال میکنید، چیزی اضافه نکنید.",
|
||
"method": "روش پرداخت",
|
||
"amount": "مبلغ (تومان)",
|
||
"removeReplacement": "حذف ردیف",
|
||
"reason": "دلیل اصلاح (الزامی)",
|
||
"reasonPlaceholder": "مثلاً: بهاشتباه نقد ثبت شده بود، پرداخت با کارت بود",
|
||
"paidAfter": "جمع پرداختی پس از اصلاح",
|
||
"shortBy": "کسری نسبت به مبلغ سفارش",
|
||
"overBy": "مازاد نسبت به مبلغ سفارش",
|
||
"cancel": "انصراف",
|
||
"submit": "ثبت اصلاح",
|
||
"saved": "اصلاح سند ثبت شد.",
|
||
"saveFailed": "ثبت اصلاح ناموفق بود."
|
||
},
|
||
"auditLog": {
|
||
"category": "دسته",
|
||
"allCategories": "همه",
|
||
"categories": {
|
||
"Payment": "پرداخت",
|
||
"Order": "سفارش",
|
||
"Register": "صندوق",
|
||
"Staff": "کارکنان"
|
||
},
|
||
"fromDate": "از تاریخ",
|
||
"toDate": "تا تاریخ",
|
||
"branch": "شعبه",
|
||
"allBranches": "همه شعبهها",
|
||
"loadFailed": "بارگذاری گزارش عملیات ناموفق بود.",
|
||
"retry": "تلاش دوباره",
|
||
"empty": "موردی ثبت نشده است.",
|
||
"colTime": "زمان",
|
||
"colCategory": "دسته",
|
||
"colActor": "کاربر",
|
||
"colSummary": "شرح",
|
||
"details": "جزئیات",
|
||
"systemActor": "سیستم",
|
||
"unknownActor": "کاربر نامشخص",
|
||
"prevPage": "قبلی",
|
||
"nextPage": "بعدی"
|
||
}
|
||
},
|
||
"shifts": {
|
||
"title": "شیفت صندوق",
|
||
"subtitle": "باز و بستن صندوق روزانه",
|
||
"branch": "شعبه",
|
||
"openShift": "باز کردن شیفت",
|
||
"shiftOpen": "شیفت باز است",
|
||
"startShift": "شروع شیفت",
|
||
"closeShift": "بستن شیفت",
|
||
"confirmClose": "تأیید بستن",
|
||
"openingCash": "موجودی اول صندوق",
|
||
"expectedCash": "مبلغ مورد انتظار",
|
||
"countedCash": "نقد شمارششده",
|
||
"opened": "شیفت باز شد",
|
||
"closed": "شیفت بسته شد"
|
||
},
|
||
"expenses": {
|
||
"title": "هزینهها",
|
||
"subtitle": "ثبت و پیگیری هزینههای شعبه",
|
||
"addExpense": "ثبت هزینه",
|
||
"listTitle": "لیست هزینهها",
|
||
"branch": "شعبه",
|
||
"fromDate": "از تاریخ",
|
||
"toDate": "تا تاریخ",
|
||
"periodTotal": "جمع دوره",
|
||
"category": "دسته",
|
||
"amount": "مبلغ",
|
||
"note": "توضیح",
|
||
"notePlaceholder": "اختیاری",
|
||
"linkOpenShift": "کسر از صندوق باز (برداشت نقدی)",
|
||
"noOpenShift": "صندوق باز نیست — هزینه بدون ارتباط با شیفت ثبت میشود",
|
||
"colDate": "تاریخ",
|
||
"colCategory": "دسته",
|
||
"colNote": "توضیح",
|
||
"colAmount": "مبلغ",
|
||
"loading": "در حال بارگذاری...",
|
||
"empty": "هزینهای ثبت نشده",
|
||
"rowCount": "{count} ردیف",
|
||
"categories": {
|
||
"Supplies": "ملزومات",
|
||
"Utilities": "آب و برق و گاز",
|
||
"Salary": "حقوق",
|
||
"Rent": "اجاره",
|
||
"Maintenance": "تعمیرات",
|
||
"Other": "سایر"
|
||
}
|
||
},
|
||
"queue": {
|
||
"title": "نوبتدهی روزانه",
|
||
"subtitle": "شماره نوبت هر روز از ۱ شروع میشود (بر اساس تاریخ ایران)",
|
||
"nowServing": "نوبت فعلی",
|
||
"lastIssued": "آخرین شماره",
|
||
"waitingCount": "{count} نفر در صف",
|
||
"issueNext": "شماره جدید",
|
||
"callNext": "فراخوانی نوبت بعدی",
|
||
"customerLabelPlaceholder": "نام مهمان (اختیاری)",
|
||
"dailyResetHint": "هر شب نیمهشب بهوقت ایران شمارهها صفر میشوند.",
|
||
"empty": "امروز هنوز نوبتی صادر نشده.",
|
||
"issuedOnOrder": "نوبت {number}",
|
||
"openDisplay": "نمایشگر TV",
|
||
"displayMode": "نمایش تمامصفحه",
|
||
"exitDisplay": "بازگشت به پنل",
|
||
"displayWaitingLabel": "در صف",
|
||
"displayUpNext": "نوبتهای بعدی",
|
||
"status": {
|
||
"Waiting": "در انتظار",
|
||
"Called": "فراخوانده",
|
||
"Done": "انجام شد",
|
||
"Cancelled": "لغو"
|
||
}
|
||
},
|
||
"kds": {
|
||
"title": "نمایشگر آشپزخانه",
|
||
"pending": "در انتظار",
|
||
"preparing": "در حال آمادهسازی",
|
||
"ready": "آماده",
|
||
"table": "میز",
|
||
"noOrders": "سفارشی نیست",
|
||
"loading": "در حال بارگذاری...",
|
||
"live": "زنده",
|
||
"polling": "بهروزرسانی دورهای",
|
||
"allStations": "همه",
|
||
"defaultStation": "آشپزخانه",
|
||
"advance": "مرحله بعد",
|
||
"status": {
|
||
"Pending": "در انتظار",
|
||
"Confirmed": "تأیید شده",
|
||
"Preparing": "در حال آمادهسازی",
|
||
"Ready": "آماده",
|
||
"Delivered": "تحویل شده",
|
||
"Cancelled": "لغو شده"
|
||
},
|
||
"advanceTo": {
|
||
"Confirmed": "تأیید سفارش",
|
||
"Preparing": "شروع آمادهسازی",
|
||
"Ready": "آماده شد",
|
||
"Delivered": "تحویل شد"
|
||
}
|
||
},
|
||
"tables": {
|
||
"title": "مدیریت میزها",
|
||
"addTable": "افزودن میز",
|
||
"number": "شماره میز",
|
||
"capacity": "ظرفیت",
|
||
"floor": "طبقه",
|
||
"floorPlan": "نقشه سالن",
|
||
"empty": "میزی ثبت نشده است.",
|
||
"emptyBranch": "برای این شعبه میزی ثبت نشده است.",
|
||
"allBranches": "همه شعب",
|
||
"branchFilter": "فیلتر شعبه",
|
||
"branch": "شعبه",
|
||
"branchUnassigned": "بدون شعبه",
|
||
"branchHint": "میزها متعلق به کافه شماست؛ شعبه فقط برای صندوق و گزارش است.",
|
||
"tableLabel": "میز {number}",
|
||
"meta": "ظرفیت {capacity} · طبقه {floor}",
|
||
"status": {
|
||
"Free": "آزاد",
|
||
"Busy": "مشغول",
|
||
"Reserved": "رزرو",
|
||
"Cleaning": "نظافت",
|
||
"free": "آزاد",
|
||
"occupied": "مشغول",
|
||
"reserved": "رزرو",
|
||
"cleaning": "نظافت"
|
||
},
|
||
"markCleaning": "نیاز به نظافت",
|
||
"markReady": "آماده پذیرش",
|
||
"activeOrder": "سفارش فعال",
|
||
"reserved": "رزرو شده",
|
||
"printQr": "چاپ QR",
|
||
"qrMenuUrl": "لینک منوی مهمان",
|
||
"openQrUrl": "باز کردن",
|
||
"copyQrUrl": "کپی لینک",
|
||
"qrUrlCopied": "لینک کپی شد",
|
||
"qrUrlCopyFailed": "کپی لینک ناموفق بود",
|
||
"reprintHint": "QR گم شده؟ همان دکمه — کد ثابت است.",
|
||
"deactivate": "غیرفعال",
|
||
"inactive": "غیرفعال",
|
||
"edit": "ویرایش",
|
||
"editTable": "ویرایش میز",
|
||
"reactivate": "فعالسازی مجدد",
|
||
"saveTable": "ذخیره میز",
|
||
"media": "تصویر و ویدیو میز",
|
||
"section": "بخش",
|
||
"sections": "بخشها",
|
||
"addSection": "افزودن بخش",
|
||
"noSection": "بدون بخش",
|
||
"noSectionsYet": "هنوز بخشی تعریف نشده است.",
|
||
"sectionTableCount": "{count} میز",
|
||
"sectionHasTables": "این بخش دارای میز است و قابل حذف نیست",
|
||
"tableHasOpenOrder": "این میز دارای سفارش باز است",
|
||
"deleteTable": "حذف میز",
|
||
"deleteTableConfirm": "این میز برای همیشه حذف شود؟ (فقط وقتی سفارش باز ندارد)",
|
||
"deleteError": "حذف میز ناموفق بود",
|
||
"createError": "افزودن میز ناموفق بود",
|
||
"cleaningError": "تغییر وضعیت نظافت ناموفق بود"
|
||
},
|
||
"menuAdmin": {
|
||
"title": "مدیریت منو",
|
||
"subtitle": "تصویر، قیمت و تخفیف هر آیتم",
|
||
"categories": "دستهها",
|
||
"items": "آیتمها",
|
||
"addCategory": "دسته جدید",
|
||
"addItem": "افزودن",
|
||
"name": "نام",
|
||
"nameEn": "نام انگلیسی (برای مهمان خارجی)",
|
||
"price": "قیمت (ت)",
|
||
"category": "دسته",
|
||
"available": "موجود",
|
||
"unavailable": "ناموجود",
|
||
"discountPercent": "تخفیف (٪)",
|
||
"discountBadge": "تخفیف",
|
||
"uploadImage": "آپلود تصویر",
|
||
"imageReady": "تصویر آماده است",
|
||
"empty": "هنوز آیتمی نیست.",
|
||
"editItem": "ویرایش",
|
||
"editCategory": "ویرایش دسته",
|
||
"categoryIcon": "آیکون (ایموجی)",
|
||
"categoryImage": "تصویر دسته",
|
||
"iconTabPreset": "آیکون آماده",
|
||
"iconTabEmoji": "ایموجی",
|
||
"iconTabImage": "تصویر آپلود",
|
||
"iconStyleLabel": "سبک طراحی",
|
||
"iconPreview": "پیشنمایش:",
|
||
"clearIconPreset": "حذف آیکون",
|
||
"clearIconEmoji": "حذف ایموجی",
|
||
"categoryIconCustom": "یا ایموجی دلخواه",
|
||
"iconPresetGroupDrinks": "نوشیدنی",
|
||
"iconPresetGroupFood": "غذا",
|
||
"iconStyles": {
|
||
"flat": "فلت",
|
||
"modern": "مدرن",
|
||
"real": "واقعی",
|
||
"minimal": "مینیمال",
|
||
"outline": "خطی",
|
||
"soft": "نرم",
|
||
"bold": "پررنگ",
|
||
"gradient": "گرادیان",
|
||
"pastel": "پاستلی",
|
||
"duotone": "دو رنگ"
|
||
},
|
||
"iconEmojiGroups": {
|
||
"hotDrinks": "نوشیدنی گرم",
|
||
"coldDrinks": "نوشیدنی سرد",
|
||
"breakfast": "صبحانه",
|
||
"mains": "غذای اصلی",
|
||
"pastaPizza": "پاستا و پیتزا",
|
||
"desserts": "دسر و شیرینی",
|
||
"salads": "سالاد و سبزی",
|
||
"seafoodGrill": "گریل و دریایی",
|
||
"snacks": "اسنک و فستفود",
|
||
"vegan": "گیاهی",
|
||
"specials": "ویژه و پرومو",
|
||
"general": "عمومی"
|
||
},
|
||
"iconPresets": {
|
||
"drinks-hot": "قهوه گرم",
|
||
"drinks-cold": "نوشیدنی سرد",
|
||
"drinks-tea": "چای",
|
||
"drinks-juice": "آبمیوه",
|
||
"drinks-milkshake": "شیر و اسموتی",
|
||
"drinks-alcohol": "شراب",
|
||
"drinks-beer": "آبجو",
|
||
"breakfast": "صبحانه",
|
||
"food-mains": "غذای اصلی",
|
||
"food-fastfood": "فستفود",
|
||
"food-rice": "برنج و پلو",
|
||
"pasta-pizza": "پاستا و پیتزا",
|
||
"dessert": "دسر",
|
||
"ice-cream": "بستنی",
|
||
"bakery": "نان و شیرینی",
|
||
"salad": "سالاد",
|
||
"grill": "گریل",
|
||
"seafood": "دریایی",
|
||
"snacks": "ساندویچ",
|
||
"snacks-sweet": "شیرینی خشک",
|
||
"appetizers": "پیشغذا",
|
||
"vegan": "گیاهی",
|
||
"fruits": "میوه",
|
||
"specials": "ویژه",
|
||
"chef-special": "پیشنهاد سرآشپز",
|
||
"generic": "عمومی"
|
||
},
|
||
"media": "تصویر و ویدیو",
|
||
"tabCatalog": "کاتالوگ",
|
||
"tabBranch": "تنظیمات شعبه",
|
||
"selectBranchForOverrides": "برای تنظیم منوی شعبه، یک شعبه از بالا انتخاب کنید.",
|
||
"allItems": "همه آیتمها",
|
||
"searchItemsPlaceholder": "جستجوی آیتمها…",
|
||
"itemCount": "{count} آیتم",
|
||
"noItemsInCategory": "هنوز آیتمی در این دسته نیست",
|
||
"noItemsMatchSearch": "آیتمی با این عبارت یافت نشد",
|
||
"outOfStock": "ناموجود",
|
||
"newItem": "آیتم جدید",
|
||
"newCategory": "دسته جدید",
|
||
"editCategoryTitle": "ویرایش دسته",
|
||
"printStation": "ایستگاه چاپ",
|
||
"printStationNone": "پرینتر آشپزخانه (پیشفرض)",
|
||
"close": "بستن",
|
||
"saving": "در حال ذخیره…",
|
||
"model3d": "مدل سهبعدی",
|
||
"nameEnOptional": "نام انگلیسی (اختیاری)",
|
||
"addItemSuccess": "آیتم اضافه شد",
|
||
"updateItemSuccess": "آیتم بهروز شد",
|
||
"addCategorySuccess": "دسته اضافه شد",
|
||
"updateCategorySuccess": "دسته بهروز شد",
|
||
"deleteItemConfirmTitle": "حذف آیتم",
|
||
"deleteItemConfirmDesc": "آیا از حذف «{name}» مطمئن هستید؟ این عمل قابل بازگشت نیست.",
|
||
"deleteItemSuccess": "آیتم حذف شد",
|
||
"deleteCategoryConfirmTitle": "حذف دستهبندی",
|
||
"deleteCategoryConfirmDesc": "آیا از حذف دسته «{name}» مطمئن هستید؟",
|
||
"deleteCategorySuccess": "دسته حذف شد",
|
||
"printStationInherit": "مثل دستهٔ منو"
|
||
},
|
||
"branchMenu": {
|
||
"title": "منوی شعبه",
|
||
"name": "نام",
|
||
"masterPrice": "قیمت اصلی",
|
||
"branchPrice": "قیمت شعبه",
|
||
"availability": "وضعیت",
|
||
"available": "فعال",
|
||
"unavailable": "غیرفعال",
|
||
"resetOverride": "بازنشانی",
|
||
"savePrice": "ذخیره",
|
||
"actions": "عملیات",
|
||
"priceOverridePro": "قیمتگذاری اختصاصی برای پلن Pro",
|
||
"overrideActive": "تنظیمات شعبه فعال",
|
||
"confirmReset": "آیا میخواهید تنظیمات این آیتم را به حالت پیشفرض برگردانید؟",
|
||
"loading": "در حال بارگذاری..."
|
||
},
|
||
"media": {
|
||
"uploadImage": "آپلود تصویر",
|
||
"uploadVideo": "آپلود ویدیو",
|
||
"removeImage": "حذف تصویر",
|
||
"removeVideo": "حذف ویدیو",
|
||
"upload3dTitle": "نمای سهبعدی (اختیاری)",
|
||
"upload3dHint": "فایل GLB تا {maxMb} مگابایت — با لمس، مهمان میتواند آیتم را بچرخاند",
|
||
"upload3dPhotoCount": "علاوه بر عکس کاور: یک مدل GLB کافی است. برای چرخش ۳۶۰° با عکس (آینده): {min} تا {ideal} عکس از زوایای مختلف",
|
||
"upload3d": "آپلود مدل ۳D",
|
||
"remove3d": "حذف مدل",
|
||
"upload3dReady": "مدل ۳D آماده نمایش در منوی QR است",
|
||
"ai3dTitle": "تولید مدل ۳D با هوش مصنوعی",
|
||
"ai3dHint": "از عکس محصول، مدل GLB برای منوی QR ساخته میشود (پلن کسبوکار و بالاتر).",
|
||
"ai3dGenerate": "ساخت ۳D با AI",
|
||
"ai3dGenerating": "در حال ساخت…",
|
||
"ai3dUsage": "سهمیه ماهانه: {used} از {limit}",
|
||
"ai3dSuccess": "مدل ۳D ساخته شد.",
|
||
"ai3dFailed": "ساخت مدل ۳D ناموفق بود.",
|
||
"ai3dLimitReached": "سهمیه ماهانه AI (۱۰۰ بار) تمام شده است.",
|
||
"ai3dNoImage": "ابتدا عکس محصول را آپلود کنید."
|
||
},
|
||
"taxes": {
|
||
"title": "مالیات و عوارض",
|
||
"subtitle": "نرخ مالیات برای دستههای منو",
|
||
"addTax": "افزودن مالیات",
|
||
"name": "نام (مثلاً مالیات بر ارزش افزوده)",
|
||
"rate": "نرخ (٪)",
|
||
"hint": "مالیات پیشفرض روی دستههای جدید اعمال میشود. ارسال به تاراز از تنظیمات.",
|
||
"empty": "مالیاتی تعریف نشده.",
|
||
"default": "پیشفرض",
|
||
"setDefault": "پیشفرض کن",
|
||
"delete": "حذف",
|
||
"deleteConfirm": "«{name}» از لیست حذف شود؟ دستههای منو که به این مالیات وصل بودند به مالیات پیشفرض بعدی (یا بدون مالیات) منتقل میشوند.",
|
||
"required": "اجباری",
|
||
"optional": "اختیاری",
|
||
"ownerOnly": "فقط مالک کافه میتواند مالیات را تغییر دهد."
|
||
},
|
||
"branches": {
|
||
"label": "شعبه"
|
||
},
|
||
"inventory": {
|
||
"title": "انبار",
|
||
"subtitle": "مواد اولیه، رسپی هر آیتم منو و کسر خودکار پس از سفارش",
|
||
"description": "موجودی مواد را ثبت و تنظیم کنید.",
|
||
"tabMaterials": "مواد",
|
||
"tabRecipes": "رسپی منو",
|
||
"addIngredient": "ماده جدید",
|
||
"name": "نام",
|
||
"unit": "واحد",
|
||
"unitHint": "گرم، میلیلیتر، عدد...",
|
||
"unitCustom": "واحد دیگر (دستی)",
|
||
"unitCustomPlaceholder": "مثلاً فنجان، شات",
|
||
"unitsHelp": "واحد برای موجودی و رسپی: عدد (لیوان)، گرم، میلیلیتر و... — مقدار فعلی با +/- زیر هر کارت تغییر میکند.",
|
||
"units": {
|
||
"piece": "عدد (شمارشی)",
|
||
"gram": "گرم",
|
||
"kilogram": "کیلوگرم",
|
||
"milliliter": "میلیلیتر",
|
||
"liter": "لیتر",
|
||
"cc": "سیسی",
|
||
"pack": "بسته",
|
||
"can": "قوطی",
|
||
"bag": "کیسه"
|
||
},
|
||
"editIngredient": "ویرایش ماده",
|
||
"updated": "ماده بهروز شد",
|
||
"quantityEditHint": "موجودی فقط با فیلد +/- در همین کارت",
|
||
"quantity": "موجودی فعلی",
|
||
"parLevel": "سطح پر (مثلاً ۵۰۰ گرم)",
|
||
"unitCost": "قیمت واحد (تومان)",
|
||
"warningPercent": "درصد هشدار کمبود",
|
||
"reorderLevel": "حد مطلق هشدار",
|
||
"reorder": "حد هشدار",
|
||
"warningAt": "هشدار زیر",
|
||
"stockValue": "ارزش موجودی",
|
||
"lowStock": "کمبود",
|
||
"lowStockAlert": "مواد زیر سطح هشدار — موجودی را شارژ کنید",
|
||
"adjust": "اعمال",
|
||
"adjustDelta": "+/- مقدار",
|
||
"adjustNote": "تنظیم دستی",
|
||
"adjusted": "موجودی بهروز شد",
|
||
"created": "ماده ثبت شد",
|
||
"empty": "مادهای ثبت نشده.",
|
||
"defaultUnit": "عدد",
|
||
"selectMenuItem": "آیتم منو",
|
||
"selectMenuItemPlaceholder": "انتخاب کنید...",
|
||
"recipeLines": "مواد مصرفی برای هر واحد فروش",
|
||
"perUnit": "مقدار",
|
||
"pickIngredient": "ماده",
|
||
"addLine": "افزودن",
|
||
"saveRecipe": "ذخیره رسپی",
|
||
"recipeSaved": "رسپی ذخیره شد",
|
||
"materialCostPerUnit": "هزینه مواد هر واحد",
|
||
"recipeHint": "مثال: اسپرسو = ۱۰ گرم پودر قهوه برای هر فنجان؛ با ۱۰ سفارش، ۱۰۰ گرم کم میشود.",
|
||
"totalPaid": "مبلغ پرداختی (تومان)",
|
||
"impliedUnitCost": "قیمت واحد محاسبهشده",
|
||
"purchaseNote": "خرید / ورود به انبار",
|
||
"purchaseHint": "برای ورود موجودی (+) مبلغ پرداختی را وارد کنید — در هزینهها و گزارش ثبت میشود.",
|
||
"purchaseRequired": "برای افزایش موجودی، مبلغ پرداختی و شعبه لازم است.",
|
||
"purchasesThisMonth": "خرید مواد این ماه",
|
||
"purchaseCount": "{count} خرید",
|
||
"viewInExpenses": "مشاهده در هزینهها",
|
||
"selectBranchForPurchases": "برای ثبت خرید انبار، ابتدا شعبه را از نوار بالا انتخاب کنید.",
|
||
"deleted": "ماده حذف شد",
|
||
"deleteConfirmTitle": "حذف ماده",
|
||
"deleteConfirmDesc": "آیا از حذف «{name}» مطمئن هستید؟ این عمل قابل بازگشت نیست."
|
||
},
|
||
"qr": {
|
||
"brand": "میزی",
|
||
"notFound": "میز یافت نشد",
|
||
"loadError": "خطا در بارگذاری",
|
||
"tableLabel": "میز {number}",
|
||
"hint": "برای سفارش، اپلیکیشن میزی را باز کنید یا به صندوق مراجعه کنید.",
|
||
"discoverCta": "کافهیاب میزی"
|
||
},
|
||
"qrMenu": {
|
||
"loading": "در حال بارگذاری...",
|
||
"welcome": "خوش آمدید",
|
||
"tableLabel": "میز",
|
||
"tableNotFound": "میز یافت نشد یا منو در دسترس نیست",
|
||
"tableCleaning": "میز در حال نظافت است — لطفاً کارکنان را مطلع کنید",
|
||
"loadError": "خطا در بارگذاری منو",
|
||
"scanAgain": "لطفاً دوباره کد QR را اسکن کنید",
|
||
"addToCart": "افزودن",
|
||
"viewCart": "مشاهده سبد خرید",
|
||
"cartTitle": "سبد خرید",
|
||
"placeOrder": "ثبت سفارش",
|
||
"orderPlaced": "سفارش ثبت شد!",
|
||
"orderNumber": "شماره سفارش: {number}",
|
||
"orderHint": "کارکنان به زودی سفارش شما را آماده میکنند",
|
||
"guestName": "نام شما (اختیاری)",
|
||
"guestPhone": "شماره موبایل (اختیاری)",
|
||
"itemNote": "یادداشت (مثلاً بدون گوجه، کمشکر)",
|
||
"addMoreItems": "افزودن آیتم دیگر",
|
||
"orderError": "خطا در ثبت سفارش. دوباره امتحان کنید",
|
||
"orderSaveError": "سفارش ثبت شد اما ذخیره محلی ناموفق بود. صفحه را رفرش نکنید.",
|
||
"rateLimited": "درخواستهای زیاد — لطفاً چند دقیقه صبر کنید",
|
||
"captchaRequired": "لطفاً تأیید امنیتی را تکمیل کنید",
|
||
"cafeUnavailable": "این کافه موقتاً در دسترس نیست",
|
||
"subtotal": "جمع کل",
|
||
"searchPlaceholder": "جستجو در منو...",
|
||
"allCategories": "همه",
|
||
"searchNoResults": "آیتمی با این عبارت پیدا نشد",
|
||
"clearSearch": "پاک کردن جستجو",
|
||
"emptyCategory": "آیتمی در این دسته نیست",
|
||
"view3d": "۳D",
|
||
"view3dHint": "با انگشت بچرخانید — مدل بهصورت زنده میچرخد",
|
||
"close3d": "بستن",
|
||
"emptyMenu": "منوی این شعبه خالی است یا در دسترس نیست",
|
||
"guestQrBadge": "سفارش QR مهمان",
|
||
"tabMenu": "منو",
|
||
"tabOrders": "سفارشهای من",
|
||
"callWaiter": "صدا کردن گارسون",
|
||
"callWaiterSent": "گارسون در راه است!",
|
||
"callWaiterCooldown": "لطفاً ۶۰ ثانیه صبر کنید",
|
||
"callWaiterError": "خطا — دوباره امتحان کنید",
|
||
"myOrders": "سفارشهای این میز",
|
||
"noOrders": "هنوز سفارشی ثبت نکردهاید",
|
||
"tracking": {
|
||
"back": "بازگشت به منو",
|
||
"orderNumber": "شماره سفارش",
|
||
"table": "میز",
|
||
"loadError": "پیگیری سفارش ممکن نیست",
|
||
"currentStep": "در حال انجام",
|
||
"readyHint": "سفارش شما آماده است — از میز یا پیشخوان تحویل بگیرید",
|
||
"status": {
|
||
"pending": "در انتظار تأیید کافه",
|
||
"seen": "کافه سفارش را دید",
|
||
"preparing": "آشپزخانه شروع به آمادهسازی کرد",
|
||
"ready": "آماده تحویل",
|
||
"done": "تحویل شد",
|
||
"cancelled": "لغو شد"
|
||
},
|
||
"steps": {
|
||
"submitted": "ثبت سفارش",
|
||
"seen": "دیده شد توسط رستوران",
|
||
"preparing": "در حال آمادهسازی",
|
||
"ready": "آماده",
|
||
"done": "تحویل شده",
|
||
"cancelled": "لغو شده"
|
||
}
|
||
}
|
||
},
|
||
"recentOrders": {
|
||
"title": "سفارشهای اخیر",
|
||
"subtitle": "سفارشهای بستهشده را ببینید و فاکتور مشتری و فیش آشپزخانه/بار را دوباره چاپ کنید.",
|
||
"date": "تاریخ",
|
||
"branch": "شعبه",
|
||
"allBranches": "همه شعب",
|
||
"empty": "سفارشی برای این روز نیست.",
|
||
"loadFailed": "بارگذاری سفارشها ناموفق بود.",
|
||
"retry": "تلاش مجدد",
|
||
"prevPage": "قبلی",
|
||
"nextPage": "بعدی",
|
||
"table": "میز",
|
||
"statusPaid": "پرداختشده",
|
||
"statusCancelled": "لغوشده",
|
||
"receipt": "فاکتور",
|
||
"kitchen": "فیش آشپزخانه"
|
||
},
|
||
"notifications": {
|
||
"title": "اعلانها",
|
||
"pageTitle": "اعلانها",
|
||
"empty": "اعلانی نیست",
|
||
"emptyUnread": "اعلان خواندهنشدهای نیست",
|
||
"markAllRead": "خواندن همه",
|
||
"unreadCount": "{count} اعلان خواندهنشده",
|
||
"filterLabel": "فیلتر اعلانها",
|
||
"filterAll": "همه",
|
||
"filterUnread": "خواندهنشده",
|
||
"loading": "در حال بارگذاری...",
|
||
"refreshing": "بهروزرسانی...",
|
||
"backToList": "بازگشت به لیست"
|
||
},
|
||
"reservations": {
|
||
"title": "رزرو میز",
|
||
"guest": "مهمان",
|
||
"phone": "موبایل",
|
||
"date": "تاریخ",
|
||
"time": "ساعت",
|
||
"party": "نفر",
|
||
"table": "میز",
|
||
"tableOptional": "بدون میز مشخص",
|
||
"tableNumber": "میز {number}",
|
||
"notes": "یادداشت",
|
||
"confirm": "تأیید",
|
||
"cancel": "لغو",
|
||
"create": "ثبت رزرو",
|
||
"newReservation": "رزرو دستی",
|
||
"newReservationHint": "میز و زمان را مشخص کنید. هنگام حضور مهمان از «ثبت سفارش و پرداخت» در صندوق استفاده کنید.",
|
||
"openPos": "ثبت سفارش و پرداخت",
|
||
"markCompleted": "پایان ویزیت",
|
||
"empty": "رزروی نیست",
|
||
"status": {
|
||
"Pending": "در انتظار",
|
||
"Confirmed": "تأیید شده",
|
||
"Cancelled": "لغو شده",
|
||
"Seated": "نشسته",
|
||
"Completed": "انجام شده"
|
||
},
|
||
"deleted": "رزرو حذف شد",
|
||
"deleteConfirmTitle": "حذف رزرو",
|
||
"deleteConfirmDesc": "آیا از حذف رزرو «{name}» مطمئن هستید؟"
|
||
},
|
||
"branchesPage": {
|
||
"title": "شعب",
|
||
"subtitle": "مدیریت شعب کافه؛ هر شعبه با موبایل ورود جدا و زیر اشتراک کافه اصلی",
|
||
"listTitle": "لیست شعب",
|
||
"newName": "نام شعبه",
|
||
"loginPhone": "موبایل ورود شعبه",
|
||
"managerName": "نام مسئول شعبه",
|
||
"managerNamePlaceholder": "اختیاری — پیشفرض نام شعبه",
|
||
"addSection": "شعبه جدید",
|
||
"add": "افزودن شعبه",
|
||
"empty": "هنوز شعبهای ثبت نشده.",
|
||
"created": "شعبه و حساب ورود اضافه شد.",
|
||
"createError": "خطا در افزودن شعبه (موبایل تکراری یا سقف پلن)",
|
||
"branchSelectHint": "در صندوق و نوبتدهی شعبه فعال را انتخاب کنید.",
|
||
"masterPlanHint": "اشتراک و مالیات فقط از حساب مالک کافه تنظیم میشود.",
|
||
"ownerOnly": "فقط مالک کافه میتواند شعب را مدیریت کند.",
|
||
"delete": "حذف شعبه",
|
||
"deleteTitle": "حذف شعبه؟",
|
||
"deleteWarning": "میزها، پرسنل، تنظیمات منوی شعبه و دادههای وابسته حذف میشوند. تا ۷ روز میتوانید شعبه را بازیابی کنید؛ پس از آن حذف دائمی انجام میشود.",
|
||
"deleteConfirm": "بله، حذف شعبه",
|
||
"deleteScheduled": "شعبه برای حذف ثبت شد. تا ۷ روز امکان بازیابی دارید.",
|
||
"deleteError": "حذف شعبه انجام نشد (شاید آخرین شعبه فعال باشد).",
|
||
"restore": "بازیابی",
|
||
"restored": "شعبه بازیابی شد.",
|
||
"restoreError": "بازیابی انجام نشد.",
|
||
"pendingTitle": "در انتظار حذف دائمی",
|
||
"pendingHint": "شعب زیر غیرفعالاند. پس از پایان مهلت، بهطور کامل پاک میشوند.",
|
||
"purgeInDays": "حذف دائمی تا {days} روز دیگر",
|
||
"purgeInOneDay": "حذف دائمی تا فردا",
|
||
"purgeToday": "حذف دائمی امروز",
|
||
"review": "بررسی",
|
||
"reviewTitle": "جزئیات شعبه",
|
||
"location": "موقعیت"
|
||
},
|
||
"subscription": {
|
||
"title": "اشتراک و پلن",
|
||
"subtitle": "پلن فعلی، مصرف و ارتقا",
|
||
"currentPlan": "پلن فعلی",
|
||
"expires": "انقضا",
|
||
"noExpiry": "—",
|
||
"refresh": "بروزرسانی",
|
||
"ordersToday": "سفارش امروز",
|
||
"customers": "مشتریان",
|
||
"smsUsage": "پیامک این ماه",
|
||
"paymentSuccess": "پرداخت موفق بود. پلن شما بهروز شد.",
|
||
"paymentFailed": "پرداخت ناموفق بود.",
|
||
"loading": "در حال بارگذاری...",
|
||
"ownerOnly": "فقط مالک کافه میتواند اشتراک را مدیریت کند. شعب زیر پوشش پلن کافه اصلی هستند.",
|
||
"paymentMethod": "روش پرداخت",
|
||
"planExpired": "اشتراک منقضی شده",
|
||
"featureMenu3d": "منوی سهبعدی",
|
||
"featureDiscover": "پروفایل کشف (هوش مصنوعی)",
|
||
"featureOn": "فعال",
|
||
"featureOff": "غیرفعال — ارتقا دهید",
|
||
"featureMenu3dUpgrade": "منوی ۳D در پلن حرفهای و بالاتر فعال است.",
|
||
"featureMenuAi3d": "تولید ۳D با AI",
|
||
"featureMenuAi3dUpgrade": "تولید ۳D با هوش مصنوعی در پلن کسبوکار و سازمانی (۱۰۰ بار در ماه) فعال است.",
|
||
"checkout": {
|
||
"title": "پیشفاکتور و پرداخت",
|
||
"subtitle": "جزئیات سفارش را بررسی و پرداخت کنید",
|
||
"backToPlans": "بازگشت به پلنها",
|
||
"invalidPlan": "پلن انتخابشده برای خرید آنلاین معتبر نیست.",
|
||
"invoiceLabel": "پیشفاکتور",
|
||
"invoiceNo": "شماره فاکتور",
|
||
"issuedAt": "تاریخ صدور",
|
||
"billingPeriod": "مدت اشتراک",
|
||
"monthsCount": "{count} ماه",
|
||
"description": "شرح",
|
||
"qty": "تعداد",
|
||
"unitPrice": "قیمت واحد",
|
||
"amount": "مبلغ",
|
||
"planLine": "اشتراک پلن {plan}",
|
||
"subtotal": "جمع جزء",
|
||
"total": "مبلغ قابل پرداخت",
|
||
"secureNote": "پرداخت از طریق درگاه امن بانکی انجام میشود.",
|
||
"payTotal": "پرداخت {total}",
|
||
"redirecting": "در حال انتقال به درگاه...",
|
||
"paymentFailed": "پرداخت ناموفق بود. لطفاً دوباره امتحان کنید.",
|
||
"queuedNotice": "شما اشتراک فعالی دارید. این خرید در صف قرار میگیرد و از {date} آغاز میشود."
|
||
},
|
||
"queued": {
|
||
"title": "اشتراکهای در صف",
|
||
"subtitle": "این اشتراکها پس از پایان اشتراک فعلی بهصورت خودکار فعال میشوند.",
|
||
"months": "{count} ماه",
|
||
"window": "از {from} تا {to}",
|
||
"cancel": "لغو",
|
||
"cancelled": "اشتراک در صف لغو شد",
|
||
"cancelConfirmTitle": "لغو اشتراک در صف",
|
||
"cancelConfirmDesc": "اشتراک {plan} که قرار بود از {from} آغاز شود لغو شود؟ اشتراک فعلی شما دستنخورده میماند."
|
||
}
|
||
},
|
||
"settings": {
|
||
"title": "تنظیمات",
|
||
"subtitle": "کافه، پرینتر و یکپارچهسازیها",
|
||
"terminals": {
|
||
"title": "ترمینالهای فعال",
|
||
"hint": "پلن شما حداکثر {max} ترمینال همزمان دارد.",
|
||
"thisDevice": "این دستگاه",
|
||
"empty": "ترمینالی ثبت نشده",
|
||
"revoke": "حذف",
|
||
"revoked": "ترمینال حذف شد",
|
||
"loading": "در حال بارگذاری…"
|
||
},
|
||
"nav": {
|
||
"aria": "منوی تنظیمات",
|
||
"shop": "کافه و فروشگاه",
|
||
"shopGeneral": "پروفایل و اتصالها",
|
||
"shopAppearance": "ظاهر و رنگبندی",
|
||
"shopNotifications": "اعلانها و صدا",
|
||
"printer": "پرینتر",
|
||
"printerSettings": "تنظیمات پرینتر",
|
||
"printerStations": "پرینتر آشپزخانه و بار",
|
||
"printTest": "صفحه تست چاپ",
|
||
"shopDiscover": "کشف و AI",
|
||
"team": "تیم و کارمندان",
|
||
"customRoles": "نقشهای سفارشی"
|
||
},
|
||
"notifPrefs": {
|
||
"soundSection": "صدا",
|
||
"soundEnabled": "پخش صدا برای اعلانهای جدید",
|
||
"soundEnabledHint": "هنگام رسیدن سفارش جدید، درخواست میز یا هشدار، صدا پخش میشود.",
|
||
"soundChoice": "صدای اعلان",
|
||
"preview": "پیشنمایش",
|
||
"volume": "بلندی صدا",
|
||
"soundClassic": "کلاسیک",
|
||
"soundDing": "دینگ",
|
||
"soundBell": "زنگ",
|
||
"soundChime": "ناقوس",
|
||
"soundMarimba": "ماریمبا",
|
||
"soundAlert": "هشدار",
|
||
"desktopSection": "اعلانهای دسکتاپ",
|
||
"desktopHint": "نمایش پاپآپ ویندوز/دسکتاپ حتی وقتی داشبورد در تب دیگری باز است یا کوچک شده.",
|
||
"enableDesktop": "فعالسازی اعلانهای دسکتاپ",
|
||
"desktopEnabled": "پاپآپ دسکتاپ",
|
||
"desktopEnabledHint": "فقط وقتی این تب فعال نیست نمایش داده میشود.",
|
||
"desktopGranted": "اعلانهای دسکتاپ فعال شد",
|
||
"desktopDenied": "دسترسی توسط مرورگر رد شد",
|
||
"desktopBlocked": "اعلانها برای این سایت مسدود شدهاند. از تنظیمات سایت در مرورگر اجازه دهید و سپس صفحه را دوباره بارگذاری کنید.",
|
||
"desktopUnsupported": "این مرورگر از اعلانهای دسکتاپ پشتیبانی نمیکند.",
|
||
"desktopFocusNote": "پاپآپ آزمایشی فقط زمانی نمایش داده میشود که ابتدا به پنجره دیگری بروید.",
|
||
"sendTest": "ارسال اعلان آزمایشی",
|
||
"testTitle": "میزی",
|
||
"testBody": "این یک اعلان آزمایشی است.",
|
||
"testToast": "اعلان آزمایشی ارسال شد",
|
||
"inAppSection": "درونبرنامه",
|
||
"tabBadge": "شمارش خواندهنشده روی تب مرورگر",
|
||
"tabBadgeHint": "تعداد اعلانهای خواندهنشده را در عنوان تب و فاویکون نشان میدهد.",
|
||
"toast": "نوتیف درونبرنامه",
|
||
"toastHint": "نمایش یک بنر کوچک داخل داشبورد برای اعلانهای جدید.",
|
||
"promptTitle": "اعلانها روشن شود؟",
|
||
"promptBody": "برای سفارشهای جدید و درخواست میز، پاپآپ و صدا دریافت کنید — حتی وقتی این تب در پسزمینه است.",
|
||
"later": "بعداً"
|
||
},
|
||
"customRoles": {
|
||
"title": "نقشهای سفارشی",
|
||
"subtitle": "نقشهایی با دسترسی دلخواه برای کارمندان تعریف کنید",
|
||
"newRole": "نقش جدید",
|
||
"editRole": "ویرایش نقش",
|
||
"name": "نام نقش",
|
||
"namePlaceholder": "مثلاً: باریستا، مسئول طبقه",
|
||
"description": "توضیح (اختیاری)",
|
||
"descriptionPlaceholder": "توضیح مختصر درباره این نقش",
|
||
"color": "رنگ",
|
||
"permissions": "دسترسیها",
|
||
"empty": "هنوز نقش سفارشی تعریف نشده است",
|
||
"saveError": "ذخیره نقش ناموفق بود",
|
||
"deleteConfirm": "نقش «{name}» حذف شود؟ این کارمندان به دسترسی پیشفرض نقش اصلی خود بازمیگردند.",
|
||
"groupAdmin": "مدیریت کافه",
|
||
"groupBranches": "شعب",
|
||
"groupMenu": "منو",
|
||
"groupInventory": "انبار و موجودی",
|
||
"groupTaxes": "مالیات",
|
||
"groupStaff": "پرسنل و منابع انسانی",
|
||
"groupTables": "میز و رزرو",
|
||
"groupOrders": "سفارش و فروش",
|
||
"groupRegister": "صندوق و وجه نقد",
|
||
"groupQueueKitchen": "صف و آشپزخانه",
|
||
"groupDelivery": "تحویل و پیک",
|
||
"groupCustomers": "مشتریان",
|
||
"groupCoupons": "کوپنها",
|
||
"groupMarketing": "بازاریابی و نظرات",
|
||
"groupReports": "گزارش و مالی",
|
||
"groupExpenses": "هزینهها",
|
||
"perm": {
|
||
"ViewCafeSettings": "مشاهده تنظیمات کافه",
|
||
"ManageCafeSettings": "ویرایش تنظیمات کافه",
|
||
"ManageDiscoverProfile": "پروفایل عمومی و کوجا",
|
||
"ViewBilling": "مشاهده صورتحساب",
|
||
"ManageBilling": "مدیریت اشتراک و پرداخت",
|
||
"ManageRoles": "مدیریت نقشها",
|
||
"ViewPrintSettings": "مشاهده تنظیمات چاپ",
|
||
"ManagePrintSettings": "ویرایش تنظیمات چاپ",
|
||
"ViewBranches": "مشاهده شعب",
|
||
"CreateBranch": "ایجاد شعبه",
|
||
"EditBranch": "ویرایش شعبه",
|
||
"DeleteBranch": "حذف شعبه",
|
||
"ViewMenu": "مشاهده منو",
|
||
"CreateMenuItem": "افزودن آیتم منو",
|
||
"EditMenuItem": "ویرایش آیتم منو",
|
||
"DeleteMenuItem": "حذف آیتم منو",
|
||
"ViewInventory": "مشاهده انبار",
|
||
"CreateInventory": "افزودن به انبار",
|
||
"EditInventory": "ویرایش انبار و موجودی",
|
||
"DeleteInventory": "حذف از انبار",
|
||
"ViewTaxes": "مشاهده مالیات",
|
||
"CreateTax": "ایجاد مالیات",
|
||
"EditTax": "ویرایش مالیات",
|
||
"DeleteTax": "حذف مالیات",
|
||
"ViewStaff": "مشاهده کارمندان",
|
||
"CreateStaff": "افزودن کارمند",
|
||
"EditStaff": "ویرایش کارمند",
|
||
"DeleteStaff": "حذف کارمند",
|
||
"ManageStaff": "تخصیص نقش شعبه",
|
||
"ManageStaffCredentials": "مدیریت اطلاعات ورود",
|
||
"ViewAttendance": "مشاهده حضور و غیاب",
|
||
"ManageAttendance": "مدیریت حضور و غیاب",
|
||
"ViewSchedules": "مشاهده شیفتها",
|
||
"ManageSchedules": "مدیریت شیفتها",
|
||
"ViewLeave": "مشاهده درخواست مرخصی",
|
||
"ReviewLeave": "تأیید مرخصی",
|
||
"ViewSalaries": "مشاهده حقوق",
|
||
"ManageSalaries": "مدیریت حقوق و دستمزد",
|
||
"ViewTables": "مشاهده میزها",
|
||
"ManageTables": "مدیریت میز و بخشها",
|
||
"ViewReservations": "مشاهده رزروها",
|
||
"CreateReservation": "ایجاد رزرو",
|
||
"EditReservation": "ویرایش رزرو",
|
||
"DeleteReservation": "حذف رزرو",
|
||
"ViewOrders": "مشاهده سفارشها",
|
||
"ProcessOrders": "ثبت سفارش",
|
||
"EditOrder": "ویرایش سفارش",
|
||
"VoidOrder": "ابطال / لغو سفارش",
|
||
"RefundOrder": "استرداد وجه سفارش",
|
||
"ApplyDiscount": "اعمال تخفیف",
|
||
"CompOrder": "سفارش رایگان (مهمان)",
|
||
"HandlePayments": "دریافت پرداخت",
|
||
"UpdateOrderStatus": "تغییر وضعیت سفارش",
|
||
"OperateRegister": "باز / بستن صندوق",
|
||
"OpenCashDrawer": "باز کردن کشوی پول (بدون فروش)",
|
||
"ViewQueue": "مشاهده صف",
|
||
"ManageQueue": "مدیریت صف",
|
||
"ViewKitchen": "نمایش آشپزخانه",
|
||
"ManageKitchenStations": "مدیریت ایستگاههای آشپزخانه",
|
||
"ViewDelivery": "مشاهده تحویل",
|
||
"HandleDelivery": "مدیریت تحویل",
|
||
"AssignDelivery": "تخصیص پیک",
|
||
"ViewCustomers": "مشاهده مشتریان",
|
||
"CreateCustomer": "افزودن مشتری",
|
||
"EditCustomer": "ویرایش مشتری",
|
||
"DeleteCustomer": "حذف مشتری",
|
||
"ViewCoupons": "مشاهده کوپنها",
|
||
"CreateCoupon": "ایجاد کوپن",
|
||
"EditCoupon": "ویرایش کوپن",
|
||
"DeleteCoupon": "حذف کوپن",
|
||
"ViewSms": "مشاهده پیامک",
|
||
"SendSms": "ارسال کمپین پیامکی",
|
||
"ManageSmsSettings": "تنظیمات پیامک",
|
||
"ViewReviews": "مشاهده نظرات",
|
||
"ManageReviews": "پاسخ و مدیریت نظرات",
|
||
"ViewReports": "مشاهده گزارشها",
|
||
"ExportReports": "خروجی گرفتن از گزارش",
|
||
"ViewAuditLog": "مشاهده گزارش رویدادها",
|
||
"ViewFinancials": "مشاهده مالی (سود و زیان)",
|
||
"ManageFinancials": "اصلاح سند پرداخت",
|
||
"ViewExpenses": "مشاهده هزینهها",
|
||
"CreateExpense": "افزودن هزینه",
|
||
"EditExpense": "ویرایش هزینه",
|
||
"DeleteExpense": "حذف هزینه"
|
||
}
|
||
},
|
||
"appearance": {
|
||
"paletteSection": "پالت رنگ",
|
||
"paletteTitle": "انتخاب پالت آماده",
|
||
"paletteHint": "رنگ پالت روی پنل داشبورد و منوی QR مهمان اعمال میشود.",
|
||
"dashboardSection": "پنل مدیریت",
|
||
"dashboardTitle": "سبک داشبورد",
|
||
"dashboardDesc": "ظاهر صفحات پنل (صندوق، انبار، گزارش و…) — جدا از منوی QR میز.",
|
||
"dashboardPreviewSection": "پیشنمایش",
|
||
"dashboardPreviewTitle": "نمونه پنل داشبورد",
|
||
"dashboardPreviewHint": "نمونه سایدبار و کارت آیتم در همین پنل؛ با تغییر سبک پنل، فشردگی و گوشهها بهروز میشود.",
|
||
"panelStyle": "سبک پنل داشبورد",
|
||
"guestMenuStyle": "سبک نمایش منوی QR",
|
||
"menuTexture": "بافت پسزمینه منوی QR",
|
||
"guestMenuSection": "منوی QR میز",
|
||
"guestMenuTitle": "قالب منوی مهمان",
|
||
"guestMenuDesc": "مشتری با اسکن QR روی میز همین چیدمان و بافت را میبیند — جدا از ظاهر پنل شما.",
|
||
"guestMenuPreviewSection": "پیشنمایش",
|
||
"guestMenuPreviewHint": "پیشنمایش موبایل (منوی QR)",
|
||
"density": "فشردگی",
|
||
"radius": "گوشهها",
|
||
"customSection": "رنگ سفارشی",
|
||
"customTitle": "رنگهای اختصاصی کافه",
|
||
"customHint": "هر فیلد خالی از پالت انتخابشده استفاده میکند. شفافیت روی رنگ سفارشی یا پالت اعمال میشود.",
|
||
"colorOpacity": "شفافیت",
|
||
"resetCustom": "بازنشانی رنگهای سفارشی",
|
||
"previewSection": "پیشنمایش",
|
||
"previewTitle": "نمونه پنل و منو",
|
||
"previewNav": "منو",
|
||
"previewItem": "لاته",
|
||
"previewCta": "افزودن",
|
||
"saved": "ظاهر ذخیره شد.",
|
||
"palettes": {
|
||
"meezi-green": "میزی سبز",
|
||
"ocean-blue": "اقیانوسی",
|
||
"royal-purple": "بنفش سلطنتی",
|
||
"sunset-orange": "غروب نارنجی",
|
||
"rose-blush": "رز",
|
||
"charcoal-gold": "ذغالی طلایی",
|
||
"espresso": "اسپرسو",
|
||
"forest": "جنگلی",
|
||
"midnight": "نیمهشب",
|
||
"coral": "مرجانی",
|
||
"gold-luxury": "لوکس طلایی",
|
||
"mint-fresh": "نعنایی",
|
||
"wine-bar": "بار شراب",
|
||
"slate-modern": "اسلیت مدرن",
|
||
"cherry": "گیلاسی",
|
||
"teal-wave": "فیروزهای",
|
||
"sand-cafe": "کافه شنی"
|
||
},
|
||
"panelStyles": {
|
||
"flat": "فلت",
|
||
"modern": "مدرن",
|
||
"glass": "شیشهای",
|
||
"minimal": "مینیمال",
|
||
"bold": "پررنگ",
|
||
"soft": "نرم",
|
||
"elevated": "برجسته",
|
||
"outline": "خطی"
|
||
},
|
||
"menuStyles": {
|
||
"cards": "کارت",
|
||
"compact": "فشرده",
|
||
"grid": "شبکه",
|
||
"list": "لیست",
|
||
"magazine": "مجلهای",
|
||
"classic": "کلاسیک"
|
||
},
|
||
"menuTextures": {
|
||
"none": "ساده",
|
||
"paper": "کاغذی",
|
||
"linen": "کتان",
|
||
"dots": "نقطهای",
|
||
"grid": "شبکهای",
|
||
"marble": "مرمر",
|
||
"wood": "چوب",
|
||
"warm": "گرم کافه"
|
||
},
|
||
"densities": {
|
||
"compact": "فشرده",
|
||
"comfortable": "معمولی",
|
||
"spacious": "گشاد"
|
||
},
|
||
"radiusOptions": {
|
||
"none": "تیز",
|
||
"sm": "کم",
|
||
"md": "متوسط",
|
||
"lg": "زیاد",
|
||
"full": "گرد"
|
||
},
|
||
"colors": {
|
||
"primary": "رنگ اصلی",
|
||
"secondary": "رنگ ثانویه",
|
||
"accent": "تأکید / پرومو",
|
||
"background": "پسزمینه",
|
||
"surface": "کارت / سطح",
|
||
"text": "متن",
|
||
"textMuted": "متن کمرنگ",
|
||
"destructive": "خطا / حذف",
|
||
"success": "موفقیت"
|
||
}
|
||
},
|
||
"taraz": "سامانه مودیان (تاراز)",
|
||
"tarazHint": "ارسال فاکتورهای روز گذشته به تاراز (در حالت دمو فقط ثبت میشود).",
|
||
"tarazSubmit": "ارسال به تاراز",
|
||
"tarazQueued": "درخواست ارسال ثبت شد.",
|
||
"snappfoodVendor": "شناسه فروشنده اسنپفود",
|
||
"saveProfile": "ذخیره پروفایل",
|
||
"profile": {
|
||
"title": "پروفایل کافه",
|
||
"name": "نام کافه",
|
||
"city": "شهر",
|
||
"phone": "تلفن",
|
||
"address": "آدرس",
|
||
"description": "توضیحات",
|
||
"logo": "لوگو",
|
||
"uploadLogo": "بارگذاری لوگو",
|
||
"uploadCover": "بارگذاری کاور",
|
||
"saved": "پروفایل ذخیره شد.",
|
||
"reloginHint": "پلن بهروز شد؛ در صورت نیاز یکبار خارج و وارد شوید.",
|
||
"slug": "آدرس پروفایل کوجا",
|
||
"slugHint": "آدرس صفحه کافه شما در کوجا — فقط حروف انگلیسی، اعداد و خط تیره",
|
||
"slugPlaceholder": "cafe-roya",
|
||
"slugTaken": "این آدرس قبلاً گرفته شده. آدرس دیگری انتخاب کنید.",
|
||
"slugInvalid": "آدرس نامعتبر است. فقط حروف انگلیسی کوچک، اعداد و خط تیره مجاز است.",
|
||
"kojaUrl": "آدرس کوجا"
|
||
},
|
||
"plans": {
|
||
"compareLabel": "مقایسه پلنها",
|
||
"compareHint": "امکانات هر پلن را مقایسه کنید و مناسب کافه خود انتخاب کنید.",
|
||
"featureColumn": "امکانات",
|
||
"popular": "پرفروش",
|
||
"current": "پلن فعلی",
|
||
"perMonth": "ماهانه",
|
||
"freePrice": "رایگان",
|
||
"customPrice": "تماس بگیرید",
|
||
"unlimited": "نامحدود",
|
||
"included": "فعال",
|
||
"currentPlanBtn": "پلن شما",
|
||
"contactSales": "تماس با فروش",
|
||
"subscribe": "خرید {plan}",
|
||
"names": {
|
||
"Free": "رایگان",
|
||
"Pro": "پرو",
|
||
"Business": "بیزنس",
|
||
"Enterprise": "سازمانی"
|
||
},
|
||
"limits": {
|
||
"maxOrdersPerDay": "سفارش در روز",
|
||
"maxBranches": "شعبه",
|
||
"maxTerminals": "ترمینال صندوق",
|
||
"maxTables": "میز",
|
||
"maxCustomers": "مشتری CRM",
|
||
"maxSmsPerMonth": "پیامک در ماه",
|
||
"maxMenuItems": "آیتم منو",
|
||
"maxReportHistoryDays": "تاریخچه گزارش (روز)",
|
||
"maxMenuAi3dPerMonth": "تصویر AI سهبعدی در ماه"
|
||
},
|
||
"features": {
|
||
"ordersPerDay": "سفارش در روز",
|
||
"terminals": "ترمینال صندوق",
|
||
"crmCustomers": "مشتری CRM",
|
||
"smsPerMonth": "پیامک بازاریابی",
|
||
"branches": "شعبه",
|
||
"posKds": "صندوق و آشپزخانه",
|
||
"tablesQr": "میز و QR",
|
||
"menuReservations": "منو و رزرو",
|
||
"reports": "گزارشها",
|
||
"hrModule": "منابع انسانی",
|
||
"snappfoodDelivery": "اسنپفود / پیک",
|
||
"tarazTax": "سامانه مودیان (تاراز)",
|
||
"badges": "نشان اعتبار",
|
||
"whiteLabel": "برند اختصاصی",
|
||
"apiAccess": "API عمومی"
|
||
},
|
||
"levels": {
|
||
"basic": "پایه",
|
||
"full": "کامل"
|
||
}
|
||
},
|
||
"discoverProfile": {
|
||
"title": "پروفایل کشف و AI",
|
||
"subtitle": "برچسبها برای پیشنهاد کافه به مهمانها",
|
||
"save": "ذخیره",
|
||
"saved": "ذخیره شد",
|
||
"loading": "در حال بارگذاری..."
|
||
}
|
||
},
|
||
"support": {
|
||
"title": "پشتیبانی میزی",
|
||
"subtitle": "تیکت بزنید تا تیم سامانه پاسخ دهد",
|
||
"newTicket": "تیکت جدید",
|
||
"subject": "موضوع",
|
||
"message": "پیام شما",
|
||
"submit": "ارسال تیکت",
|
||
"myTickets": "تیکتهای من",
|
||
"messages": "پیام",
|
||
"created": "تیکت ثبت شد",
|
||
"createFailed": "ثبت تیکت ناموفق بود",
|
||
"empty": "هنوز تیکتی ندارید",
|
||
"loadFailed": "بارگذاری تیکتها ناموفق بود.",
|
||
"retry": "تلاش دوباره",
|
||
"loading": "در حال بارگذاری...",
|
||
"notFound": "تیکت یافت نشد",
|
||
"back": "بازگشت",
|
||
"reply": "پاسخ شما",
|
||
"send": "ارسال",
|
||
"replySent": "پاسخ ارسال شد",
|
||
"replyFailed": "ارسال پاسخ ناموفق بود",
|
||
"fromAdmin": "پشتیبانی میزی",
|
||
"fromYou": "شما",
|
||
"closedHint": "این تیکت بسته شده و امکان پاسخ جدید نیست.",
|
||
"status": {
|
||
"open": "باز",
|
||
"inProgress": "در حال بررسی",
|
||
"waitingMerchant": "منتظر پاسخ شما",
|
||
"resolved": "حلشده",
|
||
"closed": "بسته"
|
||
}
|
||
},
|
||
"admin": {
|
||
"nav": {
|
||
"title": "مدیریت سامانه",
|
||
"dashboard": "داشبورد",
|
||
"plans": "اشتراک و قیمت",
|
||
"integrations": "درگاه پرداخت و AI",
|
||
"notifications": "اعلانها",
|
||
"settings": "تنظیمات اپ",
|
||
"features": "قابلیتها",
|
||
"cafes": "کافهها",
|
||
"tickets": "تیکتها",
|
||
"logout": "خروج"
|
||
},
|
||
"auth": {
|
||
"title": "ورود مدیر سامانه",
|
||
"subtitle": "فقط حسابهای مجاز میزی",
|
||
"phone": "موبایل",
|
||
"sendOtp": "ارسال کد",
|
||
"otp": "کد تأیید",
|
||
"login": "ورود",
|
||
"error": "خطا در ورود",
|
||
"devHint": "در حالت توسعه کد در لاگ Admin API چاپ میشود (DEV admin OTP)."
|
||
},
|
||
"dashboard": {
|
||
"title": "خلاصه سامانه",
|
||
"totalCafes": "کل کافهها",
|
||
"activeCafes": "فعال",
|
||
"openTickets": "تیکت باز",
|
||
"plans": "پلنهای تعریفشده"
|
||
},
|
||
"plans": {
|
||
"title": "پلنها و قیمتگذاری",
|
||
"monthlyPrice": "قیمت ماهانه (تومان)",
|
||
"maxOrders": "سقف سفارش روزانه",
|
||
"saved": "پلن ذخیره شد"
|
||
},
|
||
"settings": {
|
||
"title": "تنظیمات اپلیکیشن",
|
||
"saved": "ذخیره شد"
|
||
},
|
||
"features": {
|
||
"title": "فعال/غیرفعال قابلیتها",
|
||
"enabled": "فعال",
|
||
"disabled": "غیرفعال"
|
||
},
|
||
"cafes": {
|
||
"title": "کافههای ثبتشده",
|
||
"suspended": "معلق",
|
||
"suspend": "تعلیق",
|
||
"activate": "فعالسازی",
|
||
"discoverProfile": {
|
||
"edit": "پروفایل کشف",
|
||
"title": "پروفایل کشف و AI",
|
||
"subtitle": "برچسبها برای پیشنهاد کافه به مهمانها",
|
||
"save": "ذخیره",
|
||
"saved": "ذخیره شد",
|
||
"loading": "در حال بارگذاری..."
|
||
}
|
||
},
|
||
"integrations": {
|
||
"title": "درگاه پرداخت و کاوهنگار",
|
||
"save": "ذخیره تنظیمات",
|
||
"saved": "تنظیمات ذخیره شد",
|
||
"paymentTitle": "درگاههای پرداخت",
|
||
"kavenegarTitle": "کاوهنگار (پیامک)",
|
||
"active": "فعال برای اشتراک",
|
||
"enabled": "فعال",
|
||
"sandbox": "حالت تست",
|
||
"merchantId": "مرچنت آیدی",
|
||
"apiKey": "توکن API",
|
||
"username": "نام کاربری",
|
||
"password": "رمز عبور",
|
||
"branchCode": "کد شعبه",
|
||
"terminalCode": "کد ترمینال (اختیاری)",
|
||
"clientId": "Client ID",
|
||
"clientSecret": "Client Secret",
|
||
"baseUrl": "آدرس API (اختیاری)",
|
||
"taraHint": "تارا — اعتبار خرید. مستندات: api.tara-club.ir/club/api/v1 (login، trace، request، verify)",
|
||
"snappPayHint": "اسنپپی — خرید اقساطی (BNPL). OAuth و payment token از پنل پذیرنده اسنپپی",
|
||
"otpTemplate": "قالب OTP (نام الگو در پنل کاوهنگار)"
|
||
},
|
||
"notifications": {
|
||
"title": "مرکز اعلانها",
|
||
"broadcastTitle": "ارسال اعلان به همه کافهها",
|
||
"broadcastTitlePlaceholder": "عنوان اعلان",
|
||
"broadcastBodyPlaceholder": "متن اعلان (اختیاری)",
|
||
"sendBroadcast": "ارسال به همه",
|
||
"broadcastSent": "اعلان به {count} کافه ارسال شد",
|
||
"allNotifications": "همه اعلانها",
|
||
"empty": "اعلانی ثبت نشده است"
|
||
},
|
||
"tickets": {
|
||
"title": "تیکتهای پشتیبانی",
|
||
"messages": "پیام",
|
||
"loading": "بارگذاری...",
|
||
"empty": "تیکتی وجود ندارد",
|
||
"notFound": "تیکت یافت نشد",
|
||
"back": "لیست تیکتها",
|
||
"replyPlaceholder": "پاسخ به کافه...",
|
||
"sendReply": "ارسال پاسخ",
|
||
"replySent": "پاسخ ارسال شد",
|
||
"replyFailed": "ارسال ناموفق بود",
|
||
"resolve": "علامتگذاری حلشده",
|
||
"close": "بستن تیکت",
|
||
"statusUpdated": "وضعیت تیکت بهروز شد",
|
||
"closedHint": "تیکت بسته است — پاسخ جدید غیرفعال است.",
|
||
"fromAdmin": "پشتیبانی میزی",
|
||
"fromCafe": "کافه",
|
||
"filter": {
|
||
"all": "همه",
|
||
"open": "باز",
|
||
"closed": "بسته"
|
||
}
|
||
}
|
||
},
|
||
"discoverPublic": {
|
||
"brand": "میزی",
|
||
"title": "کافهیاب",
|
||
"subtitle": "کافه مناسب خودت را در تهران و کرج پیدا کن",
|
||
"searchPlaceholder": "بنویس: آروم، قرار عاشقانه، وایفای، رستری، کتابکافه…",
|
||
"searchHint": "جستجوی هوشمند — فیلترها را خودکار تشخیص میدهد",
|
||
"aiDetectedLabel": "فیلترهای تشخیصدادهشده:",
|
||
"aiDetectedClear": "پاک کردن",
|
||
"loading": "در حال بارگذاری…",
|
||
"empty": "کافهای با این فیلترها پیدا نشد",
|
||
"resultCount": "{count} کافه",
|
||
"applyFilters": "اعمال فیلتر",
|
||
"clearFilters": "پاک کردن",
|
||
"viewCafe": "مشاهده کافه",
|
||
"backToList": "بازگشت به لیست",
|
||
"notFound": "کافه یافت نشد",
|
||
"exploreMore": "کافههای بیشتر",
|
||
"reviewCount": "{count} نظر",
|
||
"mapTitle": "موقعیت روی نقشه",
|
||
"openInNeshan": "باز کردن در نشان",
|
||
"reviewsTitle": "نظرات مهمانها",
|
||
"ownerReply": "پاسخ کافه",
|
||
"coffeeAdvisor": {
|
||
"title": "مشاور نوشیدنی",
|
||
"subtitle": "بگویید برای چه منظوری میآیید تا پیشنهاد مناسب بگیرید",
|
||
"placeholder": "مثلاً: کار گروهی، قرار عاشقانه، انرژی برای امتحان…",
|
||
"submit": "پیشنهاد بده",
|
||
"loading": "در حال فکر کردن…",
|
||
"notConfigured": "مشاور هوشمند هنوز برای این کافه فعال نشده",
|
||
"failed": "پیشنهاد در دسترس نیست. بعداً دوباره تلاش کنید"
|
||
},
|
||
"cities": {
|
||
"tehran": "تهران",
|
||
"karaj": "کرج"
|
||
},
|
||
"sort": {
|
||
"rating": "بیشترین امتیاز",
|
||
"reviews": "بیشترین نظر",
|
||
"name": "نام"
|
||
},
|
||
"openNow": "فقط باز",
|
||
"openNowLabel": "الان باز",
|
||
"closedLabel": "بسته",
|
||
"galleryTitle": "گالری تصاویر",
|
||
"workingHoursTitle": "ساعت کاری",
|
||
"instagramLabel": "اینستاگرام",
|
||
"websiteLabel": "وبسایت",
|
||
"days": {
|
||
"sat": "شنبه",
|
||
"sun": "یکشنبه",
|
||
"mon": "دوشنبه",
|
||
"tue": "سهشنبه",
|
||
"wed": "چهارشنبه",
|
||
"thu": "پنجشنبه",
|
||
"fri": "جمعه"
|
||
},
|
||
"filters": {
|
||
"themes": "تم",
|
||
"vibes": "حس و حال",
|
||
"occasions": "مناسب برای",
|
||
"spaceFeatures": "فضا",
|
||
"noise": "سطح صدا",
|
||
"priceTier": "قیمت",
|
||
"size": "اندازه"
|
||
}
|
||
},
|
||
"cafePublicProfile": {
|
||
"title": "پروفایل عمومی کافه",
|
||
"subtitle": "اطلاعاتی که به مهمانان در صفحه کافهیاب نمایش داده میشود",
|
||
"tabs": {
|
||
"info": "اطلاعات",
|
||
"gallery": "گالری",
|
||
"hours": "ساعت کاری",
|
||
"social": "شبکههای اجتماعی"
|
||
},
|
||
"description": "توضیحات کافه",
|
||
"descriptionPlaceholder": "درباره کافه، فضا، نوشیدنیها و تجربهای که ارائه میدهید بنویسید…",
|
||
"instagram": "آدرس اینستاگرام (بدون @)",
|
||
"instagramPlaceholder": "mycafe.tehran",
|
||
"website": "آدرس وبسایت",
|
||
"websitePlaceholder": "https://mycafe.ir",
|
||
"gallery": "گالری تصاویر (حداکثر ۸ عکس)",
|
||
"galleryHint": "عکس با کیفیت از فضای کافه آپلود کنید — JPEG، PNG یا WebP تا ۵ مگابایت",
|
||
"uploadPhoto": "آپلود عکس",
|
||
"uploading": "در حال آپلود…",
|
||
"uploadFailed": "آپلود ناموفق بود",
|
||
"galleryFull": "گالری پر است. ابتدا یک عکس را حذف کنید",
|
||
"removePhoto": "حذف",
|
||
"workingHours": "ساعت کاری هر روز",
|
||
"isOpen": "باز است",
|
||
"openTime": "ساعت باز",
|
||
"closeTime": "ساعت بسته",
|
||
"days": {
|
||
"sat": "شنبه",
|
||
"sun": "یکشنبه",
|
||
"mon": "دوشنبه",
|
||
"tue": "سهشنبه",
|
||
"wed": "چهارشنبه",
|
||
"thu": "پنجشنبه",
|
||
"fri": "جمعه"
|
||
},
|
||
"save": "ذخیره",
|
||
"saved": "ذخیره شد",
|
||
"saveFailed": "ذخیره ناموفق بود",
|
||
"loading": "در حال بارگذاری…",
|
||
"showOnKoja": "نمایش در کوجا",
|
||
"showOnKojaHint": "کافه شما در فهرست عمومی کوجا (koja.meezi.ir) نمایش داده شود. پیشفرض روشن است."
|
||
},
|
||
"discoverProfile": {
|
||
"sections": {
|
||
"themes": "تم و سبک فضا",
|
||
"occasions": "مناسب برای (چند انتخابی)",
|
||
"spaceFeatures": "امکانات فضا",
|
||
"vibes": "حس و حال",
|
||
"size": "اندازه",
|
||
"floors": "طبقات",
|
||
"noiseLevel": "سطح صدا",
|
||
"priceTier": "رده قیمت"
|
||
},
|
||
"hints": {
|
||
"themes": "برای پیشنهاد هوشمند به مهمان — مثلاً مدرن، سنتی، پر گیاه",
|
||
"occasions": "قرار، خانواده، دوستان، پیدا کردن نفر جدید و …",
|
||
"spaceFeatures": "فضای باز، بسته، تراس، گیاه و …",
|
||
"vibes": "آرام، شلوغ، رمانتیک و …"
|
||
},
|
||
"themes": {
|
||
"modern": "مدرن",
|
||
"minimal": "مینیمال",
|
||
"vintage": "رترو",
|
||
"industrial": "صنعتی",
|
||
"scandi": "اسکاندیناوی",
|
||
"persian_traditional": "سنتی ایرانی",
|
||
"book_cafe": "کتابکافه",
|
||
"roastery": "رستری",
|
||
"dessert_focus": "دسرمحور",
|
||
"brunch": "برانچ",
|
||
"late_night": "شبگاه",
|
||
"plants_heavy": "پر گیاه",
|
||
"instagrammable": "عکاسی",
|
||
"heritage": "میراث",
|
||
"luxury": "لوکس",
|
||
"specialty_coffee": "قهوه تخصصی",
|
||
"tea_house": "چایخانه",
|
||
"art_gallery": "گالری هنر",
|
||
"sport_cafe": "کافه ورزشی",
|
||
"gaming_cafe": "گیمینگ کافه"
|
||
},
|
||
"occasions": {
|
||
"date": "قرار عاشقانه",
|
||
"family": "با خانواده",
|
||
"friends": "با دوستان",
|
||
"finding_someone": "پیدا کردن نفر جدید",
|
||
"solo": "تنهایی",
|
||
"business_meeting": "جلسه کاری",
|
||
"study_work": "درس و کار",
|
||
"celebration": "جشن",
|
||
"quick_coffee": "قهوه سریع",
|
||
"breakfast": "صبحانه",
|
||
"brunch": "برانچ",
|
||
"after_dinner": "بعد از شام",
|
||
"group_large": "گروه بزرگ"
|
||
},
|
||
"spaceFeatures": {
|
||
"indoor": "فضای بسته",
|
||
"outdoor": "فضای باز",
|
||
"terrace": "تراس",
|
||
"rooftop": "پشتبام",
|
||
"garden": "باغ",
|
||
"plants": "گیاه",
|
||
"wifi": "وایفای",
|
||
"parking": "پارکینگ",
|
||
"wheelchair": "ویلچر",
|
||
"kids_friendly": "مناسب کودک",
|
||
"pet_friendly": "حیوان خانگی",
|
||
"smoking_area": "سیگار",
|
||
"live_music": "موسیقی زنده",
|
||
"private_room": "اتاق خصوصی",
|
||
"counter_only": "فقط پیشخوان",
|
||
"takeaway": "بیرونبر",
|
||
"hookah": "قلیان",
|
||
"board_games": "بازی رومیزی",
|
||
"no_smoking": "بدون دود",
|
||
"prayer_room": "نمازخانه"
|
||
},
|
||
"vibes": {
|
||
"quiet": "آرام",
|
||
"lively": "شلوغ و پرانرژی",
|
||
"romantic": "رمانتیک",
|
||
"cozy": "دنج",
|
||
"trendy": "ترندی",
|
||
"traditional": "سنتی",
|
||
"artistic": "هنری",
|
||
"luxury": "لوکس",
|
||
"casual": "راحت",
|
||
"study_friendly": "مناسب درس"
|
||
},
|
||
"sizes": {
|
||
"tiny": "خیلی کوچک",
|
||
"cozy": "دنج",
|
||
"medium": "متوسط",
|
||
"large": "بزرگ",
|
||
"spacious": "فراخ"
|
||
},
|
||
"floors": {
|
||
"one": "یک طبقه",
|
||
"two": "دو طبقه",
|
||
"three": "سه طبقه",
|
||
"multi": "چند طبقه"
|
||
},
|
||
"noiseLevels": {
|
||
"quiet": "آرام",
|
||
"moderate": "متوسط",
|
||
"lively": "پرصدا"
|
||
},
|
||
"priceTiers": {
|
||
"budget": "اقتصادی",
|
||
"mid": "میانه",
|
||
"premium": "پریمیوم"
|
||
}
|
||
}
|
||
}
|