Files
meezi/web/admin/messages/fa.json
T
soroush.asadi 024a455ab3 fix: menu item/category create, demo banner reach, token refresh, blog publish
Dashboard & API bug fixes for owner-reported breakage:

- MenuController validators (PosValidators): NameEn was required but the
  dashboard sends null when blank, so every manual menu-item create failed
  and category create failed 100% (the form never sends nameEn). Now optional.
- DemoDataBanner: only showed when a cafe was exactly empty, so
  showcase-seeded cafes (2-3 cats / 3-5 items) could never trigger the
  one-click seed. Widened gate to sparse menus (<5 cats && <10 items) and
  added a clear "nothing to add" message when already populated.
- client.ts: added one-time JWT refresh-and-retry on 401 (shared in-flight
  promise) before bouncing to /login. Expired access tokens silently broke
  ticket list, add-table, and other reads.
- Surface API errors as toasts on menu + table mutations (were swallowed
  silently, so failures looked like "nothing happens").
- Admin blog editor: saving an edit dropped IsPublished (defaulted false,
  silently unpublishing the post on every save); now persisted with a
  toggle. Also hoisted the inner Field component to module scope - it was
  remounting every input on each keystroke and dropping focus.
- Admin integrations: replaced raw radio gateway selector with a styled
  RadioDot matching the iOS toggles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 18:25:34 +03:30

1341 lines
55 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"common": {
"save": "ذخیره",
"cancel": "انصراف",
"confirm": "تأیید",
"delete": "حذف",
"search": "جستجو",
"loading": "در حال بارگذاری...",
"logout": "خروج",
"language": "زبان",
"comingSoon": "به‌زودی",
"edit": "ویرایش"
},
"confirm": {
"title": "تأیید عملیات",
"confirm": "تأیید",
"cancel": "انصراف"
},
"notify": {
"saved": "ذخیره شد",
"errorGeneric": "خطایی رخ داد. دوباره تلاش کنید."
},
"brand": {
"name": "میزی"
},
"languages": {
"fa": "فارسی",
"ar": "العربية",
"en": "English"
},
"auth": {
"title": "ورود به میزی",
"subtitle": "کد تأیید به موبایل شما ارسال می‌شود",
"phone": "شماره موبایل",
"phonePlaceholder": "۰۹۱۲۱۲۳۴۵۶۷",
"sendOtp": "ارسال کد",
"otp": "کد تأیید",
"otpPlaceholder": "۶ رقم",
"verify": "ورود",
"resend": "ارسال مجدد",
"rateLimited": "تعداد درخواست کد بیش از حد است. حداکثر یک ساعت صبر کنید یا با پشتیبانی تماس بگیرید.",
"notFound": "حسابی با این شماره موبایل یافت نشد.",
"smsFailed": "ارسال پیامک ناموفق بود. دوباره تلاش کنید.",
"invalidOtp": "کد تأیید نادرست یا منقضی شده است."
},
"nav": {
"pos": "صندوق",
"tables": "میزها",
"crm": "مشتریان",
"coupons": "کوپن‌ها",
"menu": "منو",
"inventory": "انبار",
"hr": "منابع انسانی",
"reports": "گزارش‌ها",
"expenses": "هزینه‌ها",
"reviews": "نظرات",
"reservations": "رزرو",
"sms": "پیامک",
"taxes": "مالیات",
"branches": "شعب",
"subscription": "اشتراک و پلن",
"support": "پشتیبانی",
"settings": "تنظیمات",
"kds": "آشپزخانه",
"queue": "نوبت‌دهی"
},
"dashboard": {
"cafeName": "کافه دمو",
"planPro": "پرو",
"online": "متصل",
"offline": "آفلاین",
"activePlan": "پلن فعال"
},
"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": "لغو سفارش ناموفق بود",
"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": "ابطال شده",
"confirmVoid": "آیا مطمئن هستید که می‌خواهید این آیتم را ابطال کنید؟",
"voidError": "خطا در ابطال آیتم",
"transferTable": "انتقال میز",
"selectTargetTable": "میز مقصد را انتخاب کنید",
"transferSuccess": "سفارش با موفقیت منتقل شد",
"transferError": "خطا در انتقال میز",
"tableNotAvailable": "میز در حال نظافت است",
"tableOccupied": "میز مشغول است",
"searchOpenOrder": "میز، نام، موبایل یا شناسه سفارش...",
"paidSoFar": "پرداخت‌شده",
"remaining": "مانده",
"splitPayments": "پرداخت ترکیبی",
"addPaymentRow": "ردیف پرداخت",
"credit": "اعتبار",
"paySelectTable": "انتخاب میز (اشغال)",
"payPickByName": "یا از نام / لیست سفارش‌های باز",
"payOpenOrdersHint": "میز اشغال را بزنید، از منوی میز انتخاب کنید، یا نام/موبایل را جستجو کنید",
"allTables": "همه میزها",
"noOrderOnTable": "سفارش بازی روی این میز نیست",
"noOpenOrdersOnTable": "سفارش بازی برای این میز نیست",
"customerSection": "مشتری",
"existingCustomer": "مشتری موجود",
"newCustomer": "مهمان جدید",
"customerSearchPlaceholder": "نام، موبایل یا کد ملی...",
"customerSearchHint": "حداقل ۲ حرف برای جستجو",
"customerNotFound": "مشتری یافت نشد — مهمان جدید ثبت کنید",
"customerSaved": "مشتری در CRM ذخیره شد",
"customerSaveError": "خطا در ذخیره مشتری",
"customerPhoneExists": "این موبایل قبلاً ثبت شده — از جستجو انتخاب کنید",
"newCustomerHint": "می‌توانید فقط برای این سفارش نام بزنید یا با «افزودن مشتری» در CRM ذخیره کنید"
},
"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 دستگاه پوز"
},
"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": "ذخیره انجام نشد. دوباره تلاش کنید."
}
}
},
"coupons": {
"title": "کوپن‌ها",
"addCoupon": "کوپن جدید",
"code": "کد",
"type": "نوع",
"value": "مقدار",
"usage": "استفاده",
"active": "فعال",
"inactive": "غیرفعال",
"types": {
"Percentage": "درصد",
"FixedAmount": "مبلغ ثابت",
"FreeItem": "آیتم رایگان"
},
"noCoupons": "کوپنی ثبت نشده"
},
"hr": {
"title": "منابع انسانی",
"tabs": {
"attendance": "حضور و غیاب",
"leave": "مرخصی",
"payroll": "حقوق"
},
"myAttendance": "حضور من",
"clockIn": "ورود",
"clockOut": "خروج",
"approve": "تأیید",
"noLeave": "درخواست مرخصی در انتظار نیست",
"paid": "پرداخت شده",
"markPaid": "ثبت پرداخت",
"employeeCount": "تعداد کارمندان",
"monthYear": "ماه حقوق"
},
"reviews": {
"title": "نظرات مشتریان",
"summary": "میانگین امتیاز",
"reviewCount": "{count} نظر",
"empty": "هنوز نظری ثبت نشده است.",
"ownerReply": "پاسخ کافه",
"reply": "پاسخ دادن",
"replyPlaceholder": "پاسخ خود را بنویسید..."
},
"sms": {
"title": "پیامک بازاریابی",
"message": "متن پیام",
"messagePlaceholder": "متن پیامک را بنویسید...",
"targetGroup": "گروه هدف",
"allCustomers": "همه مشتریان",
"send": "ارسال",
"usage": "مصرف این ماه",
"unlimited": "نامحدود",
"sent": "ارسال شد",
"failed": "ناموفق"
},
"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": "هزینه‌ها"
},
"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}",
"status": {
"Waiting": "در انتظار",
"Called": "فراخوانده",
"Done": "انجام شد",
"Cancelled": "لغو"
}
},
"kds": {
"title": "نمایشگر آشپزخانه",
"pending": "در انتظار",
"preparing": "در حال آماده‌سازی",
"ready": "آماده",
"table": "میز",
"noOrders": "سفارشی نیست"
},
"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": "برای تنظیم منوی شعبه، یک شعبه از بالا انتخاب کنید."
},
"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 است"
},
"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": "گرم، میلی‌لیتر، عدد...",
"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": "مثال: اسپرسو = ۱۰ گرم پودر قهوه برای هر فنجان؛ با ۱۰ سفارش، ۱۰۰ گرم کم می‌شود."
},
"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": "شماره موبایل (اختیاری)",
"addMoreItems": "افزودن آیتم دیگر",
"orderError": "خطا در ثبت سفارش. دوباره امتحان کنید",
"rateLimited": "درخواست‌های زیاد — لطفاً چند دقیقه صبر کنید",
"captchaRequired": "لطفاً تأیید امنیتی را تکمیل کنید",
"cafeUnavailable": "این کافه موقتاً در دسترس نیست",
"subtotal": "جمع کل",
"searchPlaceholder": "جستجو در منو...",
"allCategories": "همه",
"searchNoResults": "آیتمی با این عبارت پیدا نشد",
"clearSearch": "پاک کردن جستجو",
"emptyCategory": "آیتمی در این دسته نیست",
"view3d": "۳D",
"view3dHint": "با انگشت بچرخانید — مدل به‌صورت زنده می‌چرخد",
"close3d": "بستن",
"emptyMenu": "منوی این شعبه خالی است یا در دسترس نیست",
"guestQrBadge": "سفارش QR مهمان",
"tabMenu": "منو",
"tabOrders": "سفارش‌های من",
"myOrders": "سفارش‌های این میز",
"noOrders": "هنوز سفارشی ثبت نکرده‌اید",
"tracking": {
"back": "بازگشت به منو",
"orderNumber": "شماره سفارش",
"table": "میز",
"loadError": "پیگیری سفارش ممکن نیست",
"currentStep": "در حال انجام",
"readyHint": "سفارش شما آماده است — از میز یا پیشخوان تحویل بگیرید",
"status": {
"pending": "در انتظار تأیید کافه",
"seen": "کافه سفارش را دید",
"preparing": "آشپزخانه شروع به آماده‌سازی کرد",
"ready": "آماده تحویل",
"done": "تحویل شد",
"cancelled": "لغو شد"
},
"steps": {
"submitted": "ثبت سفارش",
"seen": "دیده شد توسط رستوران",
"preparing": "در حال آماده‌سازی",
"ready": "آماده",
"done": "تحویل شده",
"cancelled": "لغو شده"
}
}
},
"notifications": {
"title": "اعلان‌ها",
"empty": "اعلانی نیست",
"markAllRead": "خواندن همه"
},
"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": "انجام شده"
}
},
"branchesPage": {
"title": "شعب",
"subtitle": "مدیریت شعب کافه؛ هر شعبه با موبایل ورود جدا و زیر اشتراک کافه اصلی",
"listTitle": "لیست شعب",
"newName": "نام شعبه",
"loginPhone": "موبایل ورود شعبه",
"managerName": "نام مسئول شعبه",
"managerNamePlaceholder": "اختیاری — پیش‌فرض نام شعبه",
"addSection": "شعبه جدید",
"add": "افزودن شعبه",
"empty": "هنوز شعبه‌ای ثبت نشده.",
"created": "شعبه و حساب ورود اضافه شد.",
"createError": "خطا در افزودن شعبه (موبایل تکراری یا سقف پلن)",
"branchSelectHint": "در صندوق و نوبت‌دهی شعبه فعال را انتخاب کنید.",
"masterPlanHint": "اشتراک و مالیات فقط از حساب مالک کافه تنظیم می‌شود.",
"ownerOnly": "فقط مالک کافه می‌تواند شعب را مدیریت کند."
},
"subscription": {
"title": "اشتراک و پلن",
"subtitle": "پلن فعلی، مصرف و ارتقا",
"currentPlan": "پلن فعلی",
"expires": "انقضا",
"noExpiry": "—",
"refresh": "بروزرسانی",
"ordersToday": "سفارش امروز",
"customers": "مشتریان",
"smsUsage": "پیامک این ماه",
"paymentSuccess": "پرداخت موفق بود. پلن شما به‌روز شد.",
"paymentFailed": "پرداخت ناموفق بود.",
"loading": "در حال بارگذاری...",
"ownerOnly": "فقط مالک کافه می‌تواند اشتراک را مدیریت کند. شعب زیر پوشش پلن کافه اصلی هستند.",
"paymentMethod": "روش پرداخت",
"planExpired": "اشتراک منقضی شده",
"featureMenu3d": "منوی سه‌بعدی",
"featureDiscover": "پروفایل کشف (هوش مصنوعی)",
"featureOn": "فعال",
"featureOff": "غیرفعال — ارتقا دهید",
"featureMenu3dUpgrade": "منوی ۳D در پلن حرفه‌ای و بالاتر فعال است."
},
"settings": {
"title": "تنظیمات",
"subtitle": "کافه، پرینتر و یکپارچه‌سازی‌ها",
"nav": {
"aria": "منوی تنظیمات",
"shop": "کافه و فروشگاه",
"shopGeneral": "پروفایل و اتصال‌ها",
"shopAppearance": "ظاهر و رنگ‌بندی",
"printer": "پرینتر",
"printerSettings": "تنظیمات پرینتر",
"printTest": "صفحه تست چاپ",
"shopDiscover": "کشف و AI"
},
"appearance": {
"paletteSection": "پالت رنگ",
"paletteTitle": "انتخاب پالت آماده",
"stylesSection": "سبک رابط",
"stylesTitle": "پنل، منو و چیدمان",
"panelStyle": "سبک پنل داشبورد",
"menuStyle": "سبک نمایش منو",
"menuTexture": "بافت پس‌زمینه منوی QR",
"guestMenuSection": "منوی QR میز",
"guestMenuTitle": "قالب منوی مهمان",
"guestMenuDesc": "مشتری با اسکن QR روی میز همین قالب و بافت پس‌زمینه را می‌بیند.",
"guestMenuPreviewHint": "پیش‌نمایش موبایل (منوی QR)",
"density": "فشردگی",
"radius": "گوشه‌ها",
"customSection": "رنگ سفارشی",
"customTitle": "رنگ‌های اختصاصی کافه",
"customHint": "هر فیلد خالی از پالت انتخاب‌شده استفاده می‌کند.",
"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": "پلن به‌روز شد؛ در صورت نیاز یک‌بار خارج و وارد شوید."
},
"plans": {
"compareLabel": "مقایسه پلن‌ها",
"compareHint": "امکانات هر پلن را مقایسه کنید و مناسب کافه خود انتخاب کنید.",
"featureColumn": "امکانات",
"popular": "پرفروش",
"current": "پلن فعلی",
"perMonth": "ماهانه",
"freePrice": "رایگان",
"customPrice": "تماس بگیرید",
"unlimited": "نامحدود",
"included": "فعال",
"currentPlanBtn": "پلن شما",
"contactSales": "تماس با فروش",
"subscribe": "خرید {plan}",
"names": {
"Free": "رایگان",
"Pro": "پرو",
"Business": "بیزنس",
"Enterprise": "سازمانی"
},
"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": "هنوز تیکتی ندارید",
"loading": "در حال بارگذاری...",
"notFound": "تیکت یافت نشد",
"back": "بازگشت",
"reply": "پاسخ شما",
"send": "ارسال",
"replySent": "پاسخ ارسال شد",
"replyFailed": "ارسال پاسخ ناموفق بود",
"fromAdmin": "پشتیبانی میزی",
"fromYou": "شما",
"closedHint": "این تیکت بسته شده و امکان پاسخ جدید نیست.",
"status": {
"open": "باز",
"inProgress": "در حال بررسی",
"waitingMerchant": "منتظر پاسخ شما",
"resolved": "حل‌شده",
"closed": "بسته"
}
},
"admin": {
"nav": {
"title": "مدیریت سامانه",
"dashboard": "داشبورد",
"plans": "اشتراک و قیمت",
"integrations": "درگاه و پیامک",
"notifications": "اعلان‌ها",
"settings": "تنظیمات اپ",
"features": "قابلیت‌ها",
"cafes": "کافه‌ها",
"tickets": "تیکت‌ها",
"logout": "خروج",
"websiteSection": "وب‌سایت",
"websiteBlog": "بلاگ",
"websiteComments": "نظرات",
"websiteDemoRequests": "درخواست‌های دمو"
},
"website": {
"blogTitle": "مدیریت بلاگ",
"newPost": "نوشته جدید",
"editPost": "ویرایش نوشته",
"backToBlog": "بازگشت به لیست",
"noPosts": "هنوز نوشته‌ای ثبت نشده",
"published": "منتشر شده",
"draft": "پیش‌نویس",
"views": "بازدید",
"commentsCount": "نظر",
"edit": "ویرایش",
"save": "ذخیره",
"saving": "در حال ذخیره...",
"saved": "ذخیره شد",
"deleted": "حذف شد",
"loading": "در حال بارگذاری...",
"fieldSlug": "اسلاگ (URL)",
"fieldAuthor": "نویسنده",
"fieldTitleFa": "عنوان فارسی",
"fieldTitleEn": "عنوان انگلیسی",
"fieldExcerptFa": "خلاصه فارسی",
"fieldExcerptEn": "خلاصه انگلیسی",
"fieldCategoryFa": "دسته‌بندی فارسی",
"fieldCategoryEn": "دسته‌بندی انگلیسی",
"fieldContentFa": "محتوا فارسی (Markdown)",
"fieldContentEn": "محتوا انگلیسی (Markdown)",
"fieldPublished": "وضعیت انتشار",
"commentsTitle": "مدیریت نظرات",
"noComments": "نظری یافت نشد",
"approved": "تأیید شده",
"pending": "در انتظار بررسی",
"postSlug": "نوشته",
"commentApproved": "نظر تأیید شد",
"commentDeleted": "نظر حذف شد",
"filterComment_all": "همه",
"filterComment_pending": "در انتظار",
"filterComment_approved": "تأیید شده",
"demoRequestsTitle": "درخواست‌های دمو",
"noDemoRequests": "درخواستی یافت نشد",
"allStatuses": "همه وضعیت‌ها",
"demoStatus_New": "جدید",
"demoStatus_Contacted": "تماس گرفته شد",
"demoStatus_DemoScheduled": "دمو برنامه‌ریزی شد",
"demoStatus_Converted": "مشتری شد",
"demoStatus_Rejected": "رد شد",
"errorGeneric": "خطایی رخ داد. دوباره تلاش کنید."
},
"auth": {
"title": "ورود مدیر سامانه",
"subtitle": "فقط حساب‌های مجاز میزی",
"phone": "موبایل",
"sendOtp": "ارسال کد",
"otp": "کد تأیید",
"login": "ورود",
"error": "خطا در ورود",
"devHint": "در حالت توسعه کد در لاگ Admin API چاپ می‌شود (DEV admin OTP).",
"tabOtp": "کد یکبارمصرف",
"tabPassword": "رمز عبور",
"username": "نام کاربری",
"usernamePlaceholder": "نام کاربری",
"password": "رمز عبور",
"passwordPlaceholder": "رمز عبور",
"invalidCredentials": "نام کاربری یا رمز عبور اشتباه است."
},
"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 (نام الگو در پنل کاوه‌نگار)",
"aiTitle": "هوش مصنوعی",
"openAiTitle": "OpenAI",
"openAiHint": "پیشنهاد نوشیدنی مناسب برای مهمان (مشاور قهوه) — API عمومی: POST /api/public/coffee-advisor",
"openAiApiKey": "کلید API OpenAI",
"openAiModel": "مدل (مثلاً gpt-4o-mini)",
"coffeeAdvisorEnabled": "مشاور قهوه برای مهمان",
"meshyTitle": "Meshy — مدل ۳D منو",
"meshyHint": "تبدیل عکس محصول به فایل GLB در پنل کافه (پلن کسب‌وکار). کلید را از meshy.ai بگیرید.",
"meshyApiKey": "کلید API Meshy",
"menu3dEnabled": "ساخت ۳D از عکس منو"
},
"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": "بسته"
}
}
},
"errors": {
"planLimit": "به سقف پلن رسیده‌اید. برای ادامه ارتقا دهید",
"notFound": "یافت نشد",
"unauthorized": "دسترسی ندارید",
"network": "خطای ارتباط با سرور"
},
"discoverPublic": {
"brand": "میزی",
"title": "کافه‌یاب",
"subtitle": "کافه مناسب خودت را در تهران و کرج پیدا کن",
"searchPlaceholder": "جستجوی نام کافه…",
"loading": "در حال بارگذاری…",
"empty": "کافه‌ای با این فیلترها پیدا نشد",
"resultCount": "{count} کافه",
"applyFilters": "اعمال فیلتر",
"clearFilters": "پاک کردن",
"viewCafe": "مشاهده کافه",
"backToList": "بازگشت به لیست",
"notFound": "کافه یافت نشد",
"exploreMore": "کافه‌های بیشتر",
"reviewCount": "{count} نظر",
"cities": {
"tehran": "تهران",
"karaj": "کرج"
},
"sort": {
"rating": "بیشترین امتیاز",
"reviews": "بیشترین نظر",
"name": "نام"
},
"filters": {
"themes": "تم",
"vibes": "حس و حال",
"occasions": "مناسب برای",
"spaceFeatures": "فضا",
"noise": "سطح صدا",
"priceTier": "قیمت"
}
},
"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": "لوکس"
},
"occasions": {
"date": "قرار عاشقانه",
"family": "با خانواده",
"friends": "با دوستان",
"finding_someone": "پیدا کردن نفر جدید",
"solo": "تنهایی",
"business_meeting": "جلسه کاری",
"study_work": "درس و کار",
"celebration": "جشن",
"quick_coffee": "قهوه سریع",
"breakfast": "صبحانه",
"brunch": "برانچ"
},
"spaceFeatures": {
"indoor": "فضای بسته",
"outdoor": "فضای باز",
"terrace": "تراس",
"rooftop": "پشت‌بام",
"garden": "باغ",
"plants": "گیاه",
"wifi": "وای‌فای",
"parking": "پارکینگ",
"wheelchair": "ویلچر",
"kids_friendly": "مناسب کودک",
"pet_friendly": "حیوان خانگی",
"smoking_area": "سیگار",
"live_music": "موسیقی زنده",
"private_room": "اتاق خصوصی",
"counter_only": "فقط پیشخوان"
},
"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": "پریمیوم"
}
}
}