1519 lines
50 KiB
JSON
1519 lines
50 KiB
JSON
|
|
{
|
|||
|
|
"common": {
|
|||
|
|
"save": "Save",
|
|||
|
|
"cancel": "Cancel",
|
|||
|
|
"confirm": "Confirm",
|
|||
|
|
"delete": "Delete",
|
|||
|
|
"search": "Search",
|
|||
|
|
"loading": "Loading...",
|
|||
|
|
"logout": "Log out",
|
|||
|
|
"language": "Language",
|
|||
|
|
"comingSoon": "Coming soon",
|
|||
|
|
"edit": "Edit"
|
|||
|
|
},
|
|||
|
|
"confirm": {
|
|||
|
|
"title": "Confirm action",
|
|||
|
|
"confirm": "Confirm",
|
|||
|
|
"cancel": "Cancel"
|
|||
|
|
},
|
|||
|
|
"notify": {
|
|||
|
|
"saved": "Saved",
|
|||
|
|
"errorGeneric": "Something went wrong. Please try again."
|
|||
|
|
},
|
|||
|
|
"brand": {
|
|||
|
|
"name": "Meezi"
|
|||
|
|
},
|
|||
|
|
"languages": {
|
|||
|
|
"fa": "فارسی",
|
|||
|
|
"ar": "العربية",
|
|||
|
|
"en": "English"
|
|||
|
|
},
|
|||
|
|
"auth": {
|
|||
|
|
"title": "Sign in to Meezi",
|
|||
|
|
"subtitle": "We will send a verification code to your phone",
|
|||
|
|
"phone": "Mobile number",
|
|||
|
|
"phonePlaceholder": "09121234567",
|
|||
|
|
"sendOtp": "Send code",
|
|||
|
|
"otp": "Verification code",
|
|||
|
|
"otpPlaceholder": "6 digits",
|
|||
|
|
"verify": "Sign in",
|
|||
|
|
"resend": "Resend",
|
|||
|
|
"rateLimited": "Too many code requests. Wait up to one hour or contact support.",
|
|||
|
|
"notFound": "No account found for this mobile number.",
|
|||
|
|
"smsFailed": "Could not send SMS. Please try again.",
|
|||
|
|
"invalidOtp": "Invalid or expired verification code."
|
|||
|
|
},
|
|||
|
|
"nav": {
|
|||
|
|
"aria": "Main navigation",
|
|||
|
|
"groups": {
|
|||
|
|
"operations": "Daily operations",
|
|||
|
|
"menuSales": "Menu & sales",
|
|||
|
|
"customers": "Customers",
|
|||
|
|
"finance": "Reports & finance",
|
|||
|
|
"management": "Café management"
|
|||
|
|
},
|
|||
|
|
"pos": "POS",
|
|||
|
|
"tables": "Tables",
|
|||
|
|
"crm": "CRM",
|
|||
|
|
"coupons": "Coupons",
|
|||
|
|
"menu": "Menu",
|
|||
|
|
"inventory": "Inventory",
|
|||
|
|
"hr": "HR",
|
|||
|
|
"reports": "Reports",
|
|||
|
|
"expenses": "Expenses",
|
|||
|
|
"shifts": "Shift close",
|
|||
|
|
"reviews": "Reviews",
|
|||
|
|
"reservations": "Reservations",
|
|||
|
|
"sms": "SMS",
|
|||
|
|
"taxes": "Taxes",
|
|||
|
|
"branches": "Branches",
|
|||
|
|
"subscription": "Plan & billing",
|
|||
|
|
"support": "Support",
|
|||
|
|
"settings": "Settings",
|
|||
|
|
"kds": "Kitchen",
|
|||
|
|
"notifications": "Notifications",
|
|||
|
|
"queue": "Daily queue",
|
|||
|
|
"discover": "Discover cafés"
|
|||
|
|
},
|
|||
|
|
"dashboard": {
|
|||
|
|
"cafeName": "Demo Cafe",
|
|||
|
|
"planPro": "Pro",
|
|||
|
|
"online": "Online",
|
|||
|
|
"offline": "Offline",
|
|||
|
|
"activePlan": "Active plan",
|
|||
|
|
"editCafeSettings": "Café settings",
|
|||
|
|
"viewSubscription": "Plan & billing"
|
|||
|
|
},
|
|||
|
|
"overview": {
|
|||
|
|
"title": "Home",
|
|||
|
|
"greeting": "Welcome back",
|
|||
|
|
"todayRevenue": "Today's revenue",
|
|||
|
|
"todayOrders": "Today's orders",
|
|||
|
|
"netIncome": "Net income",
|
|||
|
|
"avgOrder": "Avg. order value",
|
|||
|
|
"revenueChart": "7-day revenue trend",
|
|||
|
|
"tableStatus": "Table status",
|
|||
|
|
"tableFree": "Free",
|
|||
|
|
"tableBusy": "Busy",
|
|||
|
|
"tableCleaning": "Cleaning",
|
|||
|
|
"tableTotal": "Total tables",
|
|||
|
|
"topProducts": "Top sellers",
|
|||
|
|
"vsYesterday": "vs yesterday",
|
|||
|
|
"noData": "No data available",
|
|||
|
|
"quickLinks": "Quick access",
|
|||
|
|
"unit": "items"
|
|||
|
|
},
|
|||
|
|
"pos": {
|
|||
|
|
"order": "Order",
|
|||
|
|
"table": "Table",
|
|||
|
|
"total": "Total",
|
|||
|
|
"subtotal": "Subtotal",
|
|||
|
|
"tax": "Tax",
|
|||
|
|
"discount": "Discount",
|
|||
|
|
"confirmOrder": "Confirm & pay",
|
|||
|
|
"modeOrder": "Take order",
|
|||
|
|
"modePay": "Pay",
|
|||
|
|
"takeOrder": "Order taking",
|
|||
|
|
"submitOrder": "Submit order",
|
|||
|
|
"submitOrderAndPay": "Submit order & pay",
|
|||
|
|
"orderPaidNew": "Order submitted and paid",
|
|||
|
|
"orderPaidAdd": "Items added and paid",
|
|||
|
|
"posDeviceSent": "Amount sent to POS terminal",
|
|||
|
|
"posDeviceError": "Could not send amount to POS terminal",
|
|||
|
|
"posDeviceNotConfigured": "POS terminal not configured — payment recorded in Meezi only",
|
|||
|
|
"posDeviceConnectionFailed": "Could not connect to POS terminal",
|
|||
|
|
"posDeviceTimeout": "POS terminal timed out",
|
|||
|
|
"posDeviceRejected": "POS terminal rejected the payment",
|
|||
|
|
"posDeviceNoBranch": "No branch selected for POS payment",
|
|||
|
|
"kitchenSlip": "Kitchen ticket (preview & print)",
|
|||
|
|
"queueNumber": "Queue #{number}",
|
|||
|
|
"orderPlaced": "Order saved — go to Pay to collect payment",
|
|||
|
|
"guestName": "Guest name",
|
|||
|
|
"guestNamePlaceholder": "e.g. Ali",
|
|||
|
|
"needTableOrName": "Select a table, customer, or guest name",
|
|||
|
|
"openOrders": "Open orders",
|
|||
|
|
"openOrdersHint": "Orders not paid yet",
|
|||
|
|
"noOpenOrders": "No orders waiting for payment",
|
|||
|
|
"payOrder": "Payment",
|
|||
|
|
"payFor": "Pay for",
|
|||
|
|
"selectOrderToPay": "Select an order from the list",
|
|||
|
|
"confirmPay": "Collect payment",
|
|||
|
|
"confirmPayCash": "Collect payment (cash)",
|
|||
|
|
"confirmPayCard": "Collect payment (card)",
|
|||
|
|
"confirmPayCredit": "Collect payment (credit)",
|
|||
|
|
"confirmPaySplit": "Collect payment (split)",
|
|||
|
|
"previewBill": "Preview & print bill",
|
|||
|
|
"paySuccess": "Payment recorded",
|
|||
|
|
"payError": "Payment failed",
|
|||
|
|
"payNeedsOpenShift": "Open the register shift for this branch before taking payment",
|
|||
|
|
"cancelOrder": "Cancel order (no payment)",
|
|||
|
|
"cancelOrderConfirm": "Customer left without paying? The order will be cancelled and the table freed.",
|
|||
|
|
"cancelOrderSuccess": "Order cancelled",
|
|||
|
|
"cancelOrderError": "Could not cancel order",
|
|||
|
|
"itemsCount": "items",
|
|||
|
|
"applyCoupon": "Apply coupon",
|
|||
|
|
"couponPlaceholder": "Coupon code",
|
|||
|
|
"couponCode": "Coupon code",
|
|||
|
|
"selectTable": "Table",
|
|||
|
|
"emptyCart": "Cart is empty",
|
|||
|
|
"cash": "Cash",
|
|||
|
|
"card": "Card",
|
|||
|
|
"clearCart": "Clear",
|
|||
|
|
"allCategories": "All",
|
|||
|
|
"searchItems": "Search items",
|
|||
|
|
"searchItemsPlaceholder": "Search by item name…",
|
|||
|
|
"searchNoResults": "No items match your search",
|
|||
|
|
"reservationBanner": "Reservation: {name} — add items and tap Confirm & pay",
|
|||
|
|
"orderSuccess": "Order placed",
|
|||
|
|
"orderError": "Failed to place order",
|
|||
|
|
"orderInvalid": "Invalid order (check menu items or table)",
|
|||
|
|
"orderNotOpen": "This order is no longer open",
|
|||
|
|
"orderValidation": "Invalid order details",
|
|||
|
|
"nothingPending": "No new items to send to the kitchen",
|
|||
|
|
"couponApplied": "Coupon «{code}» applied — {amount} off",
|
|||
|
|
"couponActive": "Coupon {code}",
|
|||
|
|
"couponRemoved": "Coupon removed",
|
|||
|
|
"removeCoupon": "Remove",
|
|||
|
|
"couponInvalid": "Invalid coupon code",
|
|||
|
|
"couponExpired": "This coupon has expired",
|
|||
|
|
"couponNotStarted": "This coupon is not active yet",
|
|||
|
|
"couponLimitReached": "This coupon has reached its usage limit",
|
|||
|
|
"couponMinOrder": "Minimum order amount not met",
|
|||
|
|
"couponCartEmpty": "Add items to the cart first",
|
|||
|
|
"couponRequired": "Enter a coupon code",
|
|||
|
|
"guestPhone": "Guest phone",
|
|||
|
|
"guestPhonePlaceholder": "09121234567",
|
|||
|
|
"selectTableBoard": "Select table",
|
|||
|
|
"loadingTables": "Loading tables...",
|
|||
|
|
"selectBranchForTables": "Select a branch first",
|
|||
|
|
"noTablesOnBoard": "No tables for this branch. Add tables in the Tables screen.",
|
|||
|
|
"tablesLoadError": "Could not load tables",
|
|||
|
|
"retryTables": "Try again",
|
|||
|
|
"manageTablesLink": "Go to Tables",
|
|||
|
|
"sessionActive": "Active table session",
|
|||
|
|
"addToOrder": "Added to table order",
|
|||
|
|
"void": "Void",
|
|||
|
|
"voidItem": "Void item",
|
|||
|
|
"voided": "Voided",
|
|||
|
|
"confirmVoid": "Are you sure you want to void this item?",
|
|||
|
|
"voidError": "Could not void item",
|
|||
|
|
"transferTable": "Transfer table",
|
|||
|
|
"selectTargetTable": "Select destination table",
|
|||
|
|
"transferSuccess": "Order transferred successfully",
|
|||
|
|
"transferError": "Could not transfer table",
|
|||
|
|
"tableNotAvailable": "Table is being cleaned",
|
|||
|
|
"tableOccupied": "Table is already occupied",
|
|||
|
|
"searchOpenOrder": "Table, name, phone, or order ID...",
|
|||
|
|
"paidSoFar": "Paid",
|
|||
|
|
"remaining": "Remaining",
|
|||
|
|
"loyaltyBalance": "Customer points: {points}",
|
|||
|
|
"loyaltyUseMax": "Max",
|
|||
|
|
"loyaltyRedeemHint": "1 point = 100 T discount on this payment",
|
|||
|
|
"loyaltyRedeemApplied": "Points discount",
|
|||
|
|
"loyaltyNoCustomer": "Attach a customer to the order to redeem points",
|
|||
|
|
"loyaltyInsufficient": "Not enough points",
|
|||
|
|
"splitPayments": "Split payment",
|
|||
|
|
"addPaymentRow": "Add payment row",
|
|||
|
|
"credit": "Credit",
|
|||
|
|
"paySelectTable": "Pick table (occupied)",
|
|||
|
|
"payPickByName": "Or pick by name / open order list",
|
|||
|
|
"payOpenOrdersHint": "Tap an occupied table, use the table dropdown, or search by name/phone",
|
|||
|
|
"allTables": "All tables",
|
|||
|
|
"noOrderOnTable": "No open order on this table",
|
|||
|
|
"noOpenOrdersOnTable": "No open orders for this table",
|
|||
|
|
"customerSection": "Customer",
|
|||
|
|
"existingCustomer": "Existing",
|
|||
|
|
"newCustomer": "New guest",
|
|||
|
|
"customerSearchPlaceholder": "Name, phone, or national ID...",
|
|||
|
|
"customerSearchHint": "Type at least 2 characters to search",
|
|||
|
|
"customerNotFound": "No customer found — add as new guest",
|
|||
|
|
"customerSaved": "Customer saved to CRM",
|
|||
|
|
"customerSaveError": "Could not save customer",
|
|||
|
|
"customerPhoneExists": "Phone already registered — search and select",
|
|||
|
|
"newCustomerHint": "Use for this order only, or tap Add customer to save to CRM",
|
|||
|
|
"offlineQueueNotice": "Offline — order saved in queue and will sync when connected"
|
|||
|
|
},
|
|||
|
|
"print": {
|
|||
|
|
"printReceipt": "Print receipt",
|
|||
|
|
"printKitchen": "Send to kitchen",
|
|||
|
|
"success": "Receipt printed successfully",
|
|||
|
|
"notConfigured": "Printer IP is not configured",
|
|||
|
|
"connectionFailed": "Could not connect to printer",
|
|||
|
|
"testPrint": "Test print",
|
|||
|
|
"printerSettings": "Printer settings",
|
|||
|
|
"receiptPrinter": "Receipt printer",
|
|||
|
|
"kitchenPrinter": "Kitchen printer",
|
|||
|
|
"paperWidth": "Paper width",
|
|||
|
|
"autoCut": "Auto cut",
|
|||
|
|
"port": "Port",
|
|||
|
|
"receiptHeader": "Receipt header",
|
|||
|
|
"receiptFooter": "Receipt footer",
|
|||
|
|
"wifiOnReceipt": "WiFi password on receipt",
|
|||
|
|
"saveSettings": "Save settings",
|
|||
|
|
"settingsSaved": "Printer settings saved",
|
|||
|
|
"noBranchForPrinter": "Add a branch before configuring printers.",
|
|||
|
|
"testPageHint": "Sends a test ticket to your saved printers. Configure IP and port under Printer settings first.",
|
|||
|
|
"testPrintReceipt": "Test receipt printer",
|
|||
|
|
"testPrintKitchen": "Test kitchen printer",
|
|||
|
|
"configurePrinters": "Open printer settings",
|
|||
|
|
"posDeviceSection": "Card POS terminal",
|
|||
|
|
"posDeviceHint": "On card payment, the amount is sent via HTTP (POST /pay) to the device on your LAN.",
|
|||
|
|
"posDeviceIp": "POS device IP address"
|
|||
|
|
},
|
|||
|
|
"receipt": {
|
|||
|
|
"table": "Table",
|
|||
|
|
"order": "Order",
|
|||
|
|
"guest": "Guest",
|
|||
|
|
"total": "Total",
|
|||
|
|
"print": "Print",
|
|||
|
|
"close": "Close",
|
|||
|
|
"thankYou": "Thank you for your visit",
|
|||
|
|
"kitchenTitle": "Kitchen / bar ticket",
|
|||
|
|
"billTitle": "Customer bill",
|
|||
|
|
"kitchenFooter": "— For kitchen —",
|
|||
|
|
"payment": {
|
|||
|
|
"cash": "Cash",
|
|||
|
|
"card": "Card",
|
|||
|
|
"credit": "Credit"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"crm": {
|
|||
|
|
"title": "Customers",
|
|||
|
|
"searchPlaceholder": "Name, phone, or national ID...",
|
|||
|
|
"addCustomer": "Add customer",
|
|||
|
|
"name": "Name",
|
|||
|
|
"phone": "Phone",
|
|||
|
|
"nationalId": "National ID",
|
|||
|
|
"birthDate": "Birth date (Jalali)",
|
|||
|
|
"group": "Group",
|
|||
|
|
"loyaltyPoints": "Points",
|
|||
|
|
"noCustomers": "No customers found",
|
|||
|
|
"groups": {
|
|||
|
|
"Regular": "Regular",
|
|||
|
|
"Vip": "VIP",
|
|||
|
|
"New": "New",
|
|||
|
|
"Employee": "Employee"
|
|||
|
|
},
|
|||
|
|
"wizard": {
|
|||
|
|
"titleCreate": "Add customer",
|
|||
|
|
"titleEdit": "Edit customer",
|
|||
|
|
"stepOf": "Step {current} of {total}",
|
|||
|
|
"steps": {
|
|||
|
|
"contact": "Contact",
|
|||
|
|
"profile": "Profile",
|
|||
|
|
"loyalty": "Group & points",
|
|||
|
|
"confirm": "Review"
|
|||
|
|
},
|
|||
|
|
"back": "Back",
|
|||
|
|
"next": "Next",
|
|||
|
|
"birthHint": "Jalali format, e.g. 1400/01/01",
|
|||
|
|
"referredBy": "Referred by (optional)",
|
|||
|
|
"loyaltyCreateHint": "Loyalty points can be adjusted after the customer is created.",
|
|||
|
|
"errors": {
|
|||
|
|
"duplicatePhone": "This phone number is already registered.",
|
|||
|
|
"generic": "Could not save. Please try again."
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"coupons": {
|
|||
|
|
"title": "Coupons",
|
|||
|
|
"addCoupon": "New coupon",
|
|||
|
|
"code": "Code",
|
|||
|
|
"type": "Type",
|
|||
|
|
"value": "Value",
|
|||
|
|
"usage": "Usage",
|
|||
|
|
"active": "Active",
|
|||
|
|
"inactive": "Inactive",
|
|||
|
|
"types": {
|
|||
|
|
"Percentage": "Percentage",
|
|||
|
|
"FixedAmount": "Fixed amount",
|
|||
|
|
"FreeItem": "Free item"
|
|||
|
|
},
|
|||
|
|
"noCoupons": "No coupons yet"
|
|||
|
|
},
|
|||
|
|
"hr": {
|
|||
|
|
"title": "Human resources",
|
|||
|
|
"tabs": {
|
|||
|
|
"attendance": "Attendance",
|
|||
|
|
"leave": "Leave",
|
|||
|
|
"payroll": "Payroll"
|
|||
|
|
},
|
|||
|
|
"myAttendance": "My attendance",
|
|||
|
|
"clockIn": "Clock in",
|
|||
|
|
"clockOut": "Clock out",
|
|||
|
|
"approve": "Approve",
|
|||
|
|
"noLeave": "No pending leave requests",
|
|||
|
|
"paid": "Paid",
|
|||
|
|
"markPaid": "Mark paid",
|
|||
|
|
"employeeCount": "Employees",
|
|||
|
|
"monthYear": "Payroll month"
|
|||
|
|
},
|
|||
|
|
"reviews": {
|
|||
|
|
"title": "Customer reviews",
|
|||
|
|
"summary": "Average rating",
|
|||
|
|
"reviewCount": "{count} reviews",
|
|||
|
|
"empty": "No reviews yet.",
|
|||
|
|
"ownerReply": "Cafe reply",
|
|||
|
|
"reply": "Reply",
|
|||
|
|
"replyPlaceholder": "Write your reply..."
|
|||
|
|
},
|
|||
|
|
"sms": {
|
|||
|
|
"title": "SMS marketing",
|
|||
|
|
"message": "Message",
|
|||
|
|
"messagePlaceholder": "Write your SMS text...",
|
|||
|
|
"targetGroup": "Target group",
|
|||
|
|
"allCustomers": "All customers",
|
|||
|
|
"send": "Send",
|
|||
|
|
"usage": "Usage this month",
|
|||
|
|
"unlimited": "Unlimited",
|
|||
|
|
"sent": "Sent",
|
|||
|
|
"failed": "Failed"
|
|||
|
|
},
|
|||
|
|
"reports": {
|
|||
|
|
"title": "Reports & analytics",
|
|||
|
|
"subtitle": "Sales summary from daily snapshots",
|
|||
|
|
"exportCsv": "Download CSV",
|
|||
|
|
"fromDate": "From",
|
|||
|
|
"toDate": "To",
|
|||
|
|
"branch": "Branch",
|
|||
|
|
"allBranches": "All branches",
|
|||
|
|
"preset": {
|
|||
|
|
"7d": "7 days",
|
|||
|
|
"30d": "30 days",
|
|||
|
|
"90d": "90 days"
|
|||
|
|
},
|
|||
|
|
"kpiTotalRevenue": "Total revenue",
|
|||
|
|
"kpiTotalOrders": "Orders",
|
|||
|
|
"kpiAvgOrder": "Avg. order value",
|
|||
|
|
"kpiNetIncome": "Net income",
|
|||
|
|
"kpiTotalExpenses": "Total expenses",
|
|||
|
|
"vsPrevious": "vs previous period",
|
|||
|
|
"revenueChartTitle": "Daily revenue trend",
|
|||
|
|
"paymentMixTitle": "Payment methods",
|
|||
|
|
"branchCompareTitle": "Branch comparison",
|
|||
|
|
"topProductsTitle": "Top products",
|
|||
|
|
"colProduct": "Product",
|
|||
|
|
"colQuantity": "Qty",
|
|||
|
|
"colRevenue": "Revenue",
|
|||
|
|
"revenue": "Revenue",
|
|||
|
|
"cash": "Cash",
|
|||
|
|
"card": "Card",
|
|||
|
|
"credit": "Credit",
|
|||
|
|
"noData": "No data",
|
|||
|
|
"loading": "Loading...",
|
|||
|
|
"csvDate": "Date",
|
|||
|
|
"csvBranch": "Branch",
|
|||
|
|
"csvTotalRevenue": "Total revenue",
|
|||
|
|
"csvTotalOrders": "Orders",
|
|||
|
|
"csvAvgOrder": "Avg order",
|
|||
|
|
"csvCash": "Cash",
|
|||
|
|
"csvCard": "Card",
|
|||
|
|
"csvCredit": "Credit",
|
|||
|
|
"csvNetIncome": "Net income",
|
|||
|
|
"csvVoids": "Voids",
|
|||
|
|
"csvVoidAmount": "Void amount",
|
|||
|
|
"csvExpenses": "Expenses"
|
|||
|
|
},
|
|||
|
|
"shifts": {
|
|||
|
|
"title": "Cash shift",
|
|||
|
|
"subtitle": "Open and close the register daily",
|
|||
|
|
"branch": "Branch",
|
|||
|
|
"openShift": "Open shift",
|
|||
|
|
"shiftOpen": "Shift is open",
|
|||
|
|
"startShift": "Start shift",
|
|||
|
|
"closeShift": "Close shift",
|
|||
|
|
"confirmClose": "Confirm close",
|
|||
|
|
"openingCash": "Opening float",
|
|||
|
|
"expectedCash": "Expected cash",
|
|||
|
|
"countedCash": "Counted cash",
|
|||
|
|
"opened": "Shift opened",
|
|||
|
|
"closed": "Shift closed"
|
|||
|
|
},
|
|||
|
|
"expenses": {
|
|||
|
|
"title": "Expenses",
|
|||
|
|
"subtitle": "Log and track branch expenses",
|
|||
|
|
"addExpense": "Log expense",
|
|||
|
|
"listTitle": "Expense log",
|
|||
|
|
"branch": "Branch",
|
|||
|
|
"fromDate": "From",
|
|||
|
|
"toDate": "To",
|
|||
|
|
"periodTotal": "Period total",
|
|||
|
|
"category": "Category",
|
|||
|
|
"amount": "Amount",
|
|||
|
|
"note": "Note",
|
|||
|
|
"notePlaceholder": "Optional",
|
|||
|
|
"linkOpenShift": "Deduct from open register (cash withdrawal)",
|
|||
|
|
"noOpenShift": "No open shift — expense will not link to a register",
|
|||
|
|
"colDate": "Date",
|
|||
|
|
"colCategory": "Category",
|
|||
|
|
"colNote": "Note",
|
|||
|
|
"colAmount": "Amount",
|
|||
|
|
"loading": "Loading...",
|
|||
|
|
"empty": "No expenses logged",
|
|||
|
|
"rowCount": "{count} rows",
|
|||
|
|
"categories": {
|
|||
|
|
"Supplies": "Supplies",
|
|||
|
|
"Utilities": "Utilities",
|
|||
|
|
"Salary": "Salary",
|
|||
|
|
"Rent": "Rent",
|
|||
|
|
"Maintenance": "Maintenance",
|
|||
|
|
"Other": "Other"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"queue": {
|
|||
|
|
"title": "Daily queue",
|
|||
|
|
"subtitle": "Ticket numbers restart at 1 each day (Iran calendar)",
|
|||
|
|
"nowServing": "Now serving",
|
|||
|
|
"lastIssued": "Last issued",
|
|||
|
|
"waitingCount": "{count} waiting",
|
|||
|
|
"issueNext": "New number",
|
|||
|
|
"callNext": "Call next",
|
|||
|
|
"customerLabelPlaceholder": "Guest name (optional)",
|
|||
|
|
"dailyResetHint": "Numbers reset at midnight Iran time.",
|
|||
|
|
"empty": "No tickets issued today yet.",
|
|||
|
|
"issuedOnOrder": "Queue #{number}",
|
|||
|
|
"openDisplay": "TV display",
|
|||
|
|
"displayMode": "Fullscreen",
|
|||
|
|
"exitDisplay": "Back to panel",
|
|||
|
|
"displayWaitingLabel": "In queue",
|
|||
|
|
"displayUpNext": "Up next",
|
|||
|
|
"status": {
|
|||
|
|
"Waiting": "Waiting",
|
|||
|
|
"Called": "Called",
|
|||
|
|
"Done": "Done",
|
|||
|
|
"Cancelled": "Cancelled"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"kds": {
|
|||
|
|
"title": "Kitchen display",
|
|||
|
|
"pending": "Pending",
|
|||
|
|
"preparing": "Preparing",
|
|||
|
|
"ready": "Ready",
|
|||
|
|
"table": "Table",
|
|||
|
|
"noOrders": "No orders",
|
|||
|
|
"loading": "Loading...",
|
|||
|
|
"live": "Live",
|
|||
|
|
"polling": "Polling",
|
|||
|
|
"advance": "Next step",
|
|||
|
|
"status": {
|
|||
|
|
"Pending": "Pending",
|
|||
|
|
"Confirmed": "Confirmed",
|
|||
|
|
"Preparing": "Preparing",
|
|||
|
|
"Ready": "Ready",
|
|||
|
|
"Delivered": "Delivered",
|
|||
|
|
"Cancelled": "Cancelled"
|
|||
|
|
},
|
|||
|
|
"advanceTo": {
|
|||
|
|
"Confirmed": "Confirm order",
|
|||
|
|
"Preparing": "Start preparing",
|
|||
|
|
"Ready": "Mark ready",
|
|||
|
|
"Delivered": "Mark delivered"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"tables": {
|
|||
|
|
"title": "Table management",
|
|||
|
|
"addTable": "Add table",
|
|||
|
|
"number": "Table number",
|
|||
|
|
"capacity": "Capacity",
|
|||
|
|
"floor": "Floor",
|
|||
|
|
"floorPlan": "Floor plan",
|
|||
|
|
"empty": "No tables yet.",
|
|||
|
|
"emptyBranch": "No tables for this branch.",
|
|||
|
|
"allBranches": "All branches",
|
|||
|
|
"branchFilter": "Branch filter",
|
|||
|
|
"branch": "Branch",
|
|||
|
|
"branchUnassigned": "No branch",
|
|||
|
|
"branchHint": "Tables belong to your café; branch is optional for POS and reports.",
|
|||
|
|
"tableLabel": "Table {number}",
|
|||
|
|
"meta": "Cap. {capacity} · Floor {floor}",
|
|||
|
|
"status": {
|
|||
|
|
"Free": "Free",
|
|||
|
|
"Busy": "Occupied",
|
|||
|
|
"Reserved": "Reserved",
|
|||
|
|
"Cleaning": "Cleaning",
|
|||
|
|
"free": "Available",
|
|||
|
|
"occupied": "Occupied",
|
|||
|
|
"reserved": "Reserved",
|
|||
|
|
"cleaning": "Cleaning"
|
|||
|
|
},
|
|||
|
|
"markCleaning": "Needs cleaning",
|
|||
|
|
"markReady": "Ready for guests",
|
|||
|
|
"activeOrder": "Active order",
|
|||
|
|
"reserved": "Reserved",
|
|||
|
|
"printQr": "Print QR",
|
|||
|
|
"qrMenuUrl": "Guest menu link",
|
|||
|
|
"openQrUrl": "Open",
|
|||
|
|
"copyQrUrl": "Copy link",
|
|||
|
|
"qrUrlCopied": "Link copied",
|
|||
|
|
"qrUrlCopyFailed": "Could not copy link",
|
|||
|
|
"reprintHint": "Lost QR? Same button — code never changes.",
|
|||
|
|
"deactivate": "Deactivate",
|
|||
|
|
"inactive": "Inactive",
|
|||
|
|
"edit": "Edit",
|
|||
|
|
"editTable": "Edit table",
|
|||
|
|
"reactivate": "Reactivate",
|
|||
|
|
"saveTable": "Save table",
|
|||
|
|
"media": "Table image & video",
|
|||
|
|
"section": "Section",
|
|||
|
|
"sections": "Sections",
|
|||
|
|
"addSection": "Add section",
|
|||
|
|
"noSection": "No section",
|
|||
|
|
"noSectionsYet": "No sections defined yet.",
|
|||
|
|
"sectionTableCount": "{count} tables",
|
|||
|
|
"sectionHasTables": "This section has tables and cannot be deleted",
|
|||
|
|
"tableHasOpenOrder": "This table has an open order",
|
|||
|
|
"deleteTable": "Delete table",
|
|||
|
|
"deleteTableConfirm": "Permanently delete this table? (Only when it has no open order)",
|
|||
|
|
"deleteError": "Could not delete table",
|
|||
|
|
"createError": "Could not add table",
|
|||
|
|
"cleaningError": "Could not update cleaning status"
|
|||
|
|
},
|
|||
|
|
"menuAdmin": {
|
|||
|
|
"title": "Menu management",
|
|||
|
|
"subtitle": "Images, prices, and per-item discounts",
|
|||
|
|
"categories": "Categories",
|
|||
|
|
"items": "Items",
|
|||
|
|
"addCategory": "New category",
|
|||
|
|
"addItem": "Add item",
|
|||
|
|
"name": "Name",
|
|||
|
|
"nameEn": "English name (for international guests)",
|
|||
|
|
"price": "Price (T)",
|
|||
|
|
"category": "Category",
|
|||
|
|
"available": "Available",
|
|||
|
|
"unavailable": "Unavailable",
|
|||
|
|
"discountPercent": "Discount (%)",
|
|||
|
|
"discountBadge": "off",
|
|||
|
|
"uploadImage": "Upload image",
|
|||
|
|
"imageReady": "Image ready",
|
|||
|
|
"empty": "No menu items yet.",
|
|||
|
|
"editItem": "Edit",
|
|||
|
|
"editCategory": "Edit category",
|
|||
|
|
"categoryIcon": "Icon (emoji)",
|
|||
|
|
"categoryImage": "Category image",
|
|||
|
|
"iconTabPreset": "Preset icons",
|
|||
|
|
"iconTabEmoji": "Emoji",
|
|||
|
|
"iconTabImage": "Upload image",
|
|||
|
|
"iconStyleLabel": "Design style",
|
|||
|
|
"iconPreview": "Preview:",
|
|||
|
|
"clearIconPreset": "Clear icon",
|
|||
|
|
"clearIconEmoji": "Clear emoji",
|
|||
|
|
"categoryIconCustom": "Or custom emoji",
|
|||
|
|
"iconPresetGroupDrinks": "Drinks",
|
|||
|
|
"iconPresetGroupFood": "Food",
|
|||
|
|
"iconStyles": {
|
|||
|
|
"flat": "Flat",
|
|||
|
|
"modern": "Modern",
|
|||
|
|
"real": "Real",
|
|||
|
|
"minimal": "Minimal",
|
|||
|
|
"outline": "Outline",
|
|||
|
|
"soft": "Soft",
|
|||
|
|
"bold": "Bold",
|
|||
|
|
"gradient": "Gradient",
|
|||
|
|
"pastel": "Pastel",
|
|||
|
|
"duotone": "Duotone"
|
|||
|
|
},
|
|||
|
|
"iconEmojiGroups": {
|
|||
|
|
"hotDrinks": "Hot drinks",
|
|||
|
|
"coldDrinks": "Cold drinks",
|
|||
|
|
"breakfast": "Breakfast",
|
|||
|
|
"mains": "Main dishes",
|
|||
|
|
"pastaPizza": "Pasta & pizza",
|
|||
|
|
"desserts": "Desserts",
|
|||
|
|
"salads": "Salads",
|
|||
|
|
"seafoodGrill": "Grill & seafood",
|
|||
|
|
"snacks": "Snacks & fast food",
|
|||
|
|
"vegan": "Plant-based",
|
|||
|
|
"specials": "Specials",
|
|||
|
|
"general": "General"
|
|||
|
|
},
|
|||
|
|
"iconPresets": {
|
|||
|
|
"drinks-hot": "Hot coffee",
|
|||
|
|
"drinks-cold": "Cold drinks",
|
|||
|
|
"drinks-tea": "Tea",
|
|||
|
|
"drinks-juice": "Juice",
|
|||
|
|
"drinks-milkshake": "Milk & smoothies",
|
|||
|
|
"drinks-alcohol": "Wine",
|
|||
|
|
"drinks-beer": "Beer",
|
|||
|
|
"breakfast": "Breakfast",
|
|||
|
|
"food-mains": "Main dishes",
|
|||
|
|
"food-fastfood": "Fast food",
|
|||
|
|
"food-rice": "Rice dishes",
|
|||
|
|
"pasta-pizza": "Pasta & pizza",
|
|||
|
|
"dessert": "Dessert",
|
|||
|
|
"ice-cream": "Ice cream",
|
|||
|
|
"bakery": "Bakery",
|
|||
|
|
"salad": "Salad",
|
|||
|
|
"grill": "Grill",
|
|||
|
|
"seafood": "Seafood",
|
|||
|
|
"snacks": "Sandwich",
|
|||
|
|
"snacks-sweet": "Pastries",
|
|||
|
|
"appetizers": "Appetizers",
|
|||
|
|
"vegan": "Plant-based",
|
|||
|
|
"fruits": "Fruits",
|
|||
|
|
"specials": "Specials",
|
|||
|
|
"chef-special": "Chef's pick",
|
|||
|
|
"generic": "General"
|
|||
|
|
},
|
|||
|
|
"media": "Image & video",
|
|||
|
|
"tabCatalog": "Catalog",
|
|||
|
|
"tabBranch": "Branch settings",
|
|||
|
|
"selectBranchForOverrides": "Select a branch above to manage its menu overrides."
|
|||
|
|
},
|
|||
|
|
"branchMenu": {
|
|||
|
|
"title": "Branch Menu",
|
|||
|
|
"name": "Name",
|
|||
|
|
"masterPrice": "Master Price",
|
|||
|
|
"branchPrice": "Branch Price",
|
|||
|
|
"availability": "Status",
|
|||
|
|
"available": "Active",
|
|||
|
|
"unavailable": "Hidden",
|
|||
|
|
"resetOverride": "Reset",
|
|||
|
|
"savePrice": "Save",
|
|||
|
|
"actions": "Actions",
|
|||
|
|
"priceOverridePro": "Price overrides require Pro plan",
|
|||
|
|
"overrideActive": "Branch override active",
|
|||
|
|
"confirmReset": "Reset this item to catalog defaults?",
|
|||
|
|
"loading": "Loading..."
|
|||
|
|
},
|
|||
|
|
"media": {
|
|||
|
|
"uploadImage": "Upload image",
|
|||
|
|
"uploadVideo": "Upload video",
|
|||
|
|
"removeImage": "Remove image",
|
|||
|
|
"removeVideo": "Remove video",
|
|||
|
|
"upload3dTitle": "3D view (optional)",
|
|||
|
|
"upload3dHint": "GLB file up to {maxMb} MB — guests can rotate the item on touch",
|
|||
|
|
"upload3dPhotoCount": "Besides cover photo: one GLB is enough. For photo-based 360° (future): {min}–{ideal} photos from different angles",
|
|||
|
|
"upload3d": "Upload 3D model",
|
|||
|
|
"remove3d": "Remove model",
|
|||
|
|
"upload3dReady": "3D model will show on the QR menu",
|
|||
|
|
"ai3dTitle": "AI 3D generation",
|
|||
|
|
"ai3dHint": "Build a GLB from the product photo for the QR menu (Business plan and above).",
|
|||
|
|
"ai3dGenerate": "Generate 3D with AI",
|
|||
|
|
"ai3dGenerating": "Generating…",
|
|||
|
|
"ai3dUsage": "Monthly quota: {used} of {limit}",
|
|||
|
|
"ai3dSuccess": "3D model generated.",
|
|||
|
|
"ai3dFailed": "3D generation failed.",
|
|||
|
|
"ai3dLimitReached": "Monthly AI quota (100) is used up.",
|
|||
|
|
"ai3dNoImage": "Upload a product photo first."
|
|||
|
|
},
|
|||
|
|
"taxes": {
|
|||
|
|
"title": "Taxes",
|
|||
|
|
"subtitle": "Rates applied to menu categories",
|
|||
|
|
"addTax": "Add tax",
|
|||
|
|
"name": "Name (e.g. VAT)",
|
|||
|
|
"rate": "Rate (%)",
|
|||
|
|
"hint": "Default tax applies to new categories. Taraz submission is in Settings.",
|
|||
|
|
"empty": "No taxes defined.",
|
|||
|
|
"default": "Default",
|
|||
|
|
"setDefault": "Set default",
|
|||
|
|
"delete": "Remove",
|
|||
|
|
"deleteConfirm": "Remove \"{name}\" from the list? Menu categories using this tax will switch to the next default tax (or no tax).",
|
|||
|
|
"required": "Required",
|
|||
|
|
"optional": "Optional",
|
|||
|
|
"ownerOnly": "Only the café owner can change taxes."
|
|||
|
|
},
|
|||
|
|
"branches": {
|
|||
|
|
"label": "Branch"
|
|||
|
|
},
|
|||
|
|
"inventory": {
|
|||
|
|
"title": "Inventory",
|
|||
|
|
"subtitle": "Materials, menu recipes, and auto-deduction on orders",
|
|||
|
|
"description": "Track ingredient quantities and reorder levels.",
|
|||
|
|
"tabMaterials": "Materials",
|
|||
|
|
"tabRecipes": "Menu recipes",
|
|||
|
|
"addIngredient": "New ingredient",
|
|||
|
|
"name": "Name",
|
|||
|
|
"unit": "Unit",
|
|||
|
|
"unitHint": "g, ml, pcs...",
|
|||
|
|
"unitCustom": "Other (custom)",
|
|||
|
|
"unitCustomPlaceholder": "e.g. cup, shot",
|
|||
|
|
"unitsHelp": "Unit for stock and recipes: pcs, g, ml, etc. Change on-hand qty with +/- on each card.",
|
|||
|
|
"units": {
|
|||
|
|
"piece": "Piece (pcs)",
|
|||
|
|
"gram": "Gram (g)",
|
|||
|
|
"kilogram": "Kilogram (kg)",
|
|||
|
|
"milliliter": "Milliliter (ml)",
|
|||
|
|
"liter": "Liter (l)",
|
|||
|
|
"cc": "cc",
|
|||
|
|
"pack": "Pack",
|
|||
|
|
"can": "Can",
|
|||
|
|
"bag": "Bag"
|
|||
|
|
},
|
|||
|
|
"editIngredient": "Edit material",
|
|||
|
|
"updated": "Material updated",
|
|||
|
|
"quantityEditHint": "on-hand qty changes via +/- on this card only",
|
|||
|
|
"quantity": "On hand",
|
|||
|
|
"parLevel": "Full stock (e.g. 500 g)",
|
|||
|
|
"unitCost": "Unit cost (Toman)",
|
|||
|
|
"warningPercent": "Warning %",
|
|||
|
|
"reorderLevel": "Reorder level",
|
|||
|
|
"reorder": "Reorder at",
|
|||
|
|
"warningAt": "Warn below",
|
|||
|
|
"stockValue": "Stock value",
|
|||
|
|
"lowStock": "Low",
|
|||
|
|
"lowStockAlert": "Below warning level — refill these materials",
|
|||
|
|
"adjust": "Apply",
|
|||
|
|
"adjustDelta": "+/- qty",
|
|||
|
|
"adjustNote": "Manual adjustment",
|
|||
|
|
"adjusted": "Stock updated",
|
|||
|
|
"created": "Ingredient added",
|
|||
|
|
"empty": "No ingredients yet.",
|
|||
|
|
"defaultUnit": "pcs",
|
|||
|
|
"selectMenuItem": "Menu item",
|
|||
|
|
"selectMenuItemPlaceholder": "Select...",
|
|||
|
|
"recipeLines": "Per sold unit",
|
|||
|
|
"perUnit": "Qty",
|
|||
|
|
"pickIngredient": "Ingredient",
|
|||
|
|
"addLine": "Add",
|
|||
|
|
"saveRecipe": "Save recipe",
|
|||
|
|
"recipeSaved": "Recipe saved",
|
|||
|
|
"materialCostPerUnit": "Material cost / unit",
|
|||
|
|
"recipeHint": "Example: 10 g coffee per espresso — 10 orders use 100 g.",
|
|||
|
|
"totalPaid": "Amount paid (Toman)",
|
|||
|
|
"impliedUnitCost": "Calculated unit cost",
|
|||
|
|
"purchaseNote": "Stock purchase",
|
|||
|
|
"purchaseHint": "For stock in (+), enter amount paid — recorded in expenses and reports.",
|
|||
|
|
"purchaseRequired": "Amount paid and branch are required to add stock.",
|
|||
|
|
"purchasesThisMonth": "Material purchases this month",
|
|||
|
|
"purchaseCount": "{count} purchases",
|
|||
|
|
"viewInExpenses": "View in expenses",
|
|||
|
|
"selectBranchForPurchases": "Select a branch in the top bar to record warehouse purchases."
|
|||
|
|
},
|
|||
|
|
"qr": {
|
|||
|
|
"brand": "Meezi",
|
|||
|
|
"notFound": "Table not found",
|
|||
|
|
"loadError": "Failed to load",
|
|||
|
|
"tableLabel": "Table {number}",
|
|||
|
|
"hint": "Open the Meezi app to order, or ask at the counter.",
|
|||
|
|
"discoverCta": "Discover cafés on Meezi"
|
|||
|
|
},
|
|||
|
|
"qrMenu": {
|
|||
|
|
"loading": "Loading...",
|
|||
|
|
"welcome": "Welcome",
|
|||
|
|
"tableLabel": "Table",
|
|||
|
|
"tableNotFound": "Table not found or menu unavailable",
|
|||
|
|
"tableCleaning": "This table is being cleaned — please ask staff",
|
|||
|
|
"loadError": "Could not load menu",
|
|||
|
|
"scanAgain": "Please scan the QR code again",
|
|||
|
|
"addToCart": "Add",
|
|||
|
|
"viewCart": "View cart",
|
|||
|
|
"cartTitle": "Your cart",
|
|||
|
|
"placeOrder": "Place order",
|
|||
|
|
"orderPlaced": "Order placed!",
|
|||
|
|
"orderNumber": "Order #: {number}",
|
|||
|
|
"orderHint": "Staff will prepare your order shortly",
|
|||
|
|
"guestName": "Your name (optional)",
|
|||
|
|
"guestPhone": "Mobile (optional)",
|
|||
|
|
"addMoreItems": "Add more items",
|
|||
|
|
"orderError": "Could not place order. Try again.",
|
|||
|
|
"rateLimited": "Too many requests — please wait a few minutes",
|
|||
|
|
"captchaRequired": "Please complete the security check",
|
|||
|
|
"cafeUnavailable": "This café is temporarily unavailable",
|
|||
|
|
"subtotal": "Total",
|
|||
|
|
"searchPlaceholder": "Search menu...",
|
|||
|
|
"allCategories": "All",
|
|||
|
|
"searchNoResults": "No items match your search",
|
|||
|
|
"clearSearch": "Clear search",
|
|||
|
|
"emptyCategory": "No items in this category",
|
|||
|
|
"view3d": "3D",
|
|||
|
|
"view3dHint": "Drag to rotate — model spins live",
|
|||
|
|
"close3d": "Close",
|
|||
|
|
"emptyMenu": "This branch menu is empty or unavailable",
|
|||
|
|
"guestQrBadge": "QR guest",
|
|||
|
|
"tabMenu": "Menu",
|
|||
|
|
"tabOrders": "My orders",
|
|||
|
|
"callWaiter": "Call waiter",
|
|||
|
|
"callWaiterSent": "Waiter is on the way!",
|
|||
|
|
"callWaiterCooldown": "Please wait 60 seconds",
|
|||
|
|
"callWaiterError": "Error — please try again",
|
|||
|
|
"myOrders": "Orders at this table",
|
|||
|
|
"noOrders": "No orders yet",
|
|||
|
|
"tracking": {
|
|||
|
|
"back": "Back to menu",
|
|||
|
|
"orderNumber": "Order number",
|
|||
|
|
"table": "Table",
|
|||
|
|
"loadError": "Could not load tracking",
|
|||
|
|
"currentStep": "In progress",
|
|||
|
|
"readyHint": "Your order is ready — pick it up at the counter or table",
|
|||
|
|
"status": {
|
|||
|
|
"pending": "Waiting for the café",
|
|||
|
|
"seen": "Seen by staff",
|
|||
|
|
"preparing": "Kitchen is preparing",
|
|||
|
|
"ready": "Ready for pickup",
|
|||
|
|
"done": "Delivered",
|
|||
|
|
"cancelled": "Cancelled"
|
|||
|
|
},
|
|||
|
|
"steps": {
|
|||
|
|
"submitted": "Order submitted",
|
|||
|
|
"seen": "Seen by restaurant",
|
|||
|
|
"preparing": "Preparing",
|
|||
|
|
"ready": "Ready",
|
|||
|
|
"done": "Completed",
|
|||
|
|
"cancelled": "Cancelled"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"notifications": {
|
|||
|
|
"title": "Notifications",
|
|||
|
|
"pageTitle": "Notifications",
|
|||
|
|
"empty": "No notifications",
|
|||
|
|
"emptyUnread": "No unread notifications",
|
|||
|
|
"markAllRead": "Mark all read",
|
|||
|
|
"unreadCount": "{count} unread",
|
|||
|
|
"filterLabel": "Filter notifications",
|
|||
|
|
"filterAll": "All",
|
|||
|
|
"filterUnread": "Unread",
|
|||
|
|
"loading": "Loading...",
|
|||
|
|
"refreshing": "Updating...",
|
|||
|
|
"backToList": "Back to list"
|
|||
|
|
},
|
|||
|
|
"reservations": {
|
|||
|
|
"title": "Reservations",
|
|||
|
|
"guest": "Guest",
|
|||
|
|
"phone": "Phone",
|
|||
|
|
"date": "Date",
|
|||
|
|
"time": "Time",
|
|||
|
|
"party": "Guests",
|
|||
|
|
"table": "Table",
|
|||
|
|
"tableOptional": "No specific table",
|
|||
|
|
"tableNumber": "Table {number}",
|
|||
|
|
"notes": "Notes",
|
|||
|
|
"confirm": "Confirm",
|
|||
|
|
"cancel": "Cancel",
|
|||
|
|
"create": "Create reservation",
|
|||
|
|
"newReservation": "Manual reservation",
|
|||
|
|
"newReservationHint": "Pick table and time. When the guest arrives, use “Order & pay” at POS.",
|
|||
|
|
"openPos": "Order & pay",
|
|||
|
|
"markCompleted": "Mark completed",
|
|||
|
|
"empty": "No reservations",
|
|||
|
|
"status": {
|
|||
|
|
"Pending": "Pending",
|
|||
|
|
"Confirmed": "Confirmed",
|
|||
|
|
"Cancelled": "Cancelled",
|
|||
|
|
"Seated": "Seated",
|
|||
|
|
"Completed": "Completed"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"branchesPage": {
|
|||
|
|
"title": "Branches",
|
|||
|
|
"subtitle": "Each branch has its own login mobile under the café master plan",
|
|||
|
|
"listTitle": "Branch list",
|
|||
|
|
"newName": "Branch name",
|
|||
|
|
"loginPhone": "Branch login mobile",
|
|||
|
|
"managerName": "Branch manager name",
|
|||
|
|
"managerNamePlaceholder": "Optional — defaults to branch name",
|
|||
|
|
"addSection": "New branch",
|
|||
|
|
"add": "Add branch",
|
|||
|
|
"empty": "No branches yet.",
|
|||
|
|
"created": "Branch and login account created.",
|
|||
|
|
"createError": "Could not add branch (duplicate phone or plan limit)",
|
|||
|
|
"branchSelectHint": "Pick the active branch on POS and queue.",
|
|||
|
|
"masterPlanHint": "Billing and taxes are managed only by the café owner.",
|
|||
|
|
"ownerOnly": "Only the café owner can manage branches.",
|
|||
|
|
"delete": "Delete branch",
|
|||
|
|
"deleteTitle": "Delete this branch?",
|
|||
|
|
"deleteWarning": "Tables, staff, branch menu overrides, and related data will be removed. You can restore within 7 days; after that the branch is permanently deleted.",
|
|||
|
|
"deleteConfirm": "Yes, delete branch",
|
|||
|
|
"deleteScheduled": "Branch scheduled for deletion. You can restore it within 7 days.",
|
|||
|
|
"deleteError": "Could not delete branch (maybe it is the last active branch).",
|
|||
|
|
"restore": "Restore",
|
|||
|
|
"restored": "Branch restored.",
|
|||
|
|
"restoreError": "Could not restore branch.",
|
|||
|
|
"pendingTitle": "Pending permanent deletion",
|
|||
|
|
"pendingHint": "These branches are inactive. They will be permanently removed when the timer ends.",
|
|||
|
|
"purgeInDays": "Permanent delete in {days} days",
|
|||
|
|
"purgeInOneDay": "Permanent delete tomorrow",
|
|||
|
|
"purgeToday": "Permanent delete today",
|
|||
|
|
"review": "Review",
|
|||
|
|
"reviewTitle": "Branch details",
|
|||
|
|
"location": "Location"
|
|||
|
|
},
|
|||
|
|
"subscription": {
|
|||
|
|
"title": "Plan & billing",
|
|||
|
|
"subtitle": "Current plan, usage, and upgrades",
|
|||
|
|
"currentPlan": "Current plan",
|
|||
|
|
"expires": "Expires",
|
|||
|
|
"noExpiry": "—",
|
|||
|
|
"refresh": "Refresh",
|
|||
|
|
"ordersToday": "Orders today",
|
|||
|
|
"customers": "Customers",
|
|||
|
|
"smsUsage": "SMS this month",
|
|||
|
|
"paymentSuccess": "Payment successful. Your plan was updated.",
|
|||
|
|
"paymentFailed": "Payment failed.",
|
|||
|
|
"loading": "Loading...",
|
|||
|
|
"ownerOnly": "Only the café owner can manage billing. Branches use the master café plan.",
|
|||
|
|
"paymentMethod": "Payment method",
|
|||
|
|
"planExpired": "Subscription expired",
|
|||
|
|
"featureMenu3d": "3D menu",
|
|||
|
|
"featureDiscover": "Discover profile (AI)",
|
|||
|
|
"featureOn": "Enabled",
|
|||
|
|
"featureOff": "Not included — upgrade",
|
|||
|
|
"featureMenu3dUpgrade": "3D menu is available on Pro and higher plans.",
|
|||
|
|
"featureMenuAi3d": "AI 3D generation",
|
|||
|
|
"featureMenuAi3dUpgrade": "AI 3D generation is on Business and Enterprise (100 per month)."
|
|||
|
|
},
|
|||
|
|
"settings": {
|
|||
|
|
"title": "Settings",
|
|||
|
|
"subtitle": "Shop profile, printers, and integrations",
|
|||
|
|
"terminals": {
|
|||
|
|
"title": "Active terminals",
|
|||
|
|
"hint": "Your plan allows up to {max} concurrent terminals.",
|
|||
|
|
"thisDevice": "This device",
|
|||
|
|
"empty": "No terminals registered",
|
|||
|
|
"revoke": "Remove",
|
|||
|
|
"revoked": "Terminal removed",
|
|||
|
|
"loading": "Loading…"
|
|||
|
|
},
|
|||
|
|
"nav": {
|
|||
|
|
"aria": "Settings menu",
|
|||
|
|
"shop": "Shop & café",
|
|||
|
|
"shopGeneral": "Profile & integrations",
|
|||
|
|
"shopAppearance": "Appearance & colors",
|
|||
|
|
"printer": "Printer",
|
|||
|
|
"printerSettings": "Printer settings",
|
|||
|
|
"printTest": "Print test page",
|
|||
|
|
"shopDiscover": "Discover & AI"
|
|||
|
|
},
|
|||
|
|
"appearance": {
|
|||
|
|
"paletteSection": "Color palette",
|
|||
|
|
"paletteTitle": "Choose a preset palette",
|
|||
|
|
"paletteHint": "Palette colors apply to the dashboard and the guest QR menu.",
|
|||
|
|
"dashboardSection": "Dashboard",
|
|||
|
|
"dashboardTitle": "Dashboard look",
|
|||
|
|
"dashboardDesc": "How admin pages look (POS, inventory, reports) — separate from the table QR menu.",
|
|||
|
|
"dashboardPreviewSection": "Preview",
|
|||
|
|
"dashboardPreviewTitle": "Dashboard sample",
|
|||
|
|
"dashboardPreviewHint": "Sample sidebar and item card in this panel; updates with panel style, density, and corners.",
|
|||
|
|
"panelStyle": "Dashboard panel style",
|
|||
|
|
"guestMenuStyle": "QR menu layout",
|
|||
|
|
"menuTexture": "QR menu background texture",
|
|||
|
|
"guestMenuSection": "Table QR menu",
|
|||
|
|
"guestMenuTitle": "Guest menu template",
|
|||
|
|
"guestMenuDesc": "What guests see when scanning the table QR — separate from your dashboard.",
|
|||
|
|
"guestMenuPreviewSection": "Preview",
|
|||
|
|
"guestMenuPreviewHint": "Mobile preview (QR menu)",
|
|||
|
|
"density": "Density",
|
|||
|
|
"radius": "Corner radius",
|
|||
|
|
"customSection": "Custom colors",
|
|||
|
|
"customTitle": "Your café brand colors",
|
|||
|
|
"customHint": "Leave empty to use the selected palette. Opacity applies to custom or palette colors.",
|
|||
|
|
"colorOpacity": "Opacity",
|
|||
|
|
"resetCustom": "Reset custom colors",
|
|||
|
|
"previewSection": "Preview",
|
|||
|
|
"previewTitle": "Panel & menu sample",
|
|||
|
|
"previewNav": "Menu",
|
|||
|
|
"previewItem": "Latte",
|
|||
|
|
"previewCta": "Add",
|
|||
|
|
"saved": "Appearance saved.",
|
|||
|
|
"palettes": {
|
|||
|
|
"meezi-green": "Meezi green",
|
|||
|
|
"ocean-blue": "Ocean blue",
|
|||
|
|
"royal-purple": "Royal purple",
|
|||
|
|
"sunset-orange": "Sunset orange",
|
|||
|
|
"rose-blush": "Rose blush",
|
|||
|
|
"charcoal-gold": "Charcoal gold",
|
|||
|
|
"espresso": "Espresso",
|
|||
|
|
"forest": "Forest",
|
|||
|
|
"midnight": "Midnight",
|
|||
|
|
"coral": "Coral",
|
|||
|
|
"gold-luxury": "Gold luxury",
|
|||
|
|
"mint-fresh": "Mint fresh",
|
|||
|
|
"wine-bar": "Wine bar",
|
|||
|
|
"slate-modern": "Slate modern",
|
|||
|
|
"cherry": "Cherry",
|
|||
|
|
"teal-wave": "Teal wave",
|
|||
|
|
"sand-cafe": "Sand café"
|
|||
|
|
},
|
|||
|
|
"panelStyles": {
|
|||
|
|
"flat": "Flat",
|
|||
|
|
"modern": "Modern",
|
|||
|
|
"glass": "Glass",
|
|||
|
|
"minimal": "Minimal",
|
|||
|
|
"bold": "Bold",
|
|||
|
|
"soft": "Soft",
|
|||
|
|
"elevated": "Elevated",
|
|||
|
|
"outline": "Outline"
|
|||
|
|
},
|
|||
|
|
"menuStyles": {
|
|||
|
|
"cards": "Cards",
|
|||
|
|
"compact": "Compact",
|
|||
|
|
"grid": "Grid",
|
|||
|
|
"list": "List",
|
|||
|
|
"magazine": "Magazine",
|
|||
|
|
"classic": "Classic"
|
|||
|
|
},
|
|||
|
|
"menuTextures": {
|
|||
|
|
"none": "Plain",
|
|||
|
|
"paper": "Paper",
|
|||
|
|
"linen": "Linen",
|
|||
|
|
"dots": "Dots",
|
|||
|
|
"grid": "Grid",
|
|||
|
|
"marble": "Marble",
|
|||
|
|
"wood": "Wood",
|
|||
|
|
"warm": "Warm café"
|
|||
|
|
},
|
|||
|
|
"densities": {
|
|||
|
|
"compact": "Compact",
|
|||
|
|
"comfortable": "Comfortable",
|
|||
|
|
"spacious": "Spacious"
|
|||
|
|
},
|
|||
|
|
"radiusOptions": {
|
|||
|
|
"none": "Sharp",
|
|||
|
|
"sm": "Small",
|
|||
|
|
"md": "Medium",
|
|||
|
|
"lg": "Large",
|
|||
|
|
"full": "Round"
|
|||
|
|
},
|
|||
|
|
"colors": {
|
|||
|
|
"primary": "Primary",
|
|||
|
|
"secondary": "Secondary",
|
|||
|
|
"accent": "Accent / promo",
|
|||
|
|
"background": "Background",
|
|||
|
|
"surface": "Card / surface",
|
|||
|
|
"text": "Text",
|
|||
|
|
"textMuted": "Muted text",
|
|||
|
|
"destructive": "Error / delete",
|
|||
|
|
"success": "Success"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"snappfoodVendor": "Snappfood vendor ID",
|
|||
|
|
"saveProfile": "Save profile",
|
|||
|
|
"profile": {
|
|||
|
|
"title": "Café profile",
|
|||
|
|
"name": "Café name",
|
|||
|
|
"city": "City",
|
|||
|
|
"phone": "Phone",
|
|||
|
|
"address": "Address",
|
|||
|
|
"description": "Description",
|
|||
|
|
"logo": "Logo",
|
|||
|
|
"uploadLogo": "Upload logo",
|
|||
|
|
"uploadCover": "Upload cover",
|
|||
|
|
"saved": "Profile saved.",
|
|||
|
|
"reloginHint": "Plan updated; sign out and in again if the badge looks wrong."
|
|||
|
|
},
|
|||
|
|
"taraz": "Taraz (tax system)",
|
|||
|
|
"tarazHint": "Submit yesterday's invoices to Taraz (demo mode logs only).",
|
|||
|
|
"tarazSubmit": "Submit to Taraz",
|
|||
|
|
"tarazQueued": "Submission queued.",
|
|||
|
|
"plans": {
|
|||
|
|
"compareLabel": "Compare plans",
|
|||
|
|
"compareHint": "Compare features and pick the right plan for your café.",
|
|||
|
|
"featureColumn": "Features",
|
|||
|
|
"popular": "Popular",
|
|||
|
|
"current": "Current",
|
|||
|
|
"perMonth": "/ month",
|
|||
|
|
"freePrice": "Free",
|
|||
|
|
"customPrice": "Contact us",
|
|||
|
|
"unlimited": "Unlimited",
|
|||
|
|
"included": "Included",
|
|||
|
|
"currentPlanBtn": "Your plan",
|
|||
|
|
"contactSales": "Contact sales",
|
|||
|
|
"subscribe": "Get {plan}",
|
|||
|
|
"names": {
|
|||
|
|
"Free": "Free",
|
|||
|
|
"Pro": "Pro",
|
|||
|
|
"Business": "Business",
|
|||
|
|
"Enterprise": "Enterprise"
|
|||
|
|
},
|
|||
|
|
"features": {
|
|||
|
|
"ordersPerDay": "Orders per day",
|
|||
|
|
"terminals": "POS terminals",
|
|||
|
|
"crmCustomers": "CRM customers",
|
|||
|
|
"smsPerMonth": "Marketing SMS",
|
|||
|
|
"branches": "Branches",
|
|||
|
|
"posKds": "POS & kitchen display",
|
|||
|
|
"tablesQr": "Tables & QR ordering",
|
|||
|
|
"menuReservations": "Menu & reservations",
|
|||
|
|
"reports": "Reports",
|
|||
|
|
"hrModule": "HR module",
|
|||
|
|
"snappfoodDelivery": "Snappfood / delivery",
|
|||
|
|
"tarazTax": "Taraz tax integration",
|
|||
|
|
"badges": "Trust badges",
|
|||
|
|
"whiteLabel": "White label",
|
|||
|
|
"apiAccess": "Public API"
|
|||
|
|
},
|
|||
|
|
"levels": {
|
|||
|
|
"basic": "Basic",
|
|||
|
|
"full": "Full"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"discoverProfile": {
|
|||
|
|
"title": "Discover & AI profile",
|
|||
|
|
"subtitle": "Tags for matching guests to cafés",
|
|||
|
|
"save": "Save",
|
|||
|
|
"saved": "Saved",
|
|||
|
|
"loading": "Loading..."
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"support": {
|
|||
|
|
"title": "Meezi support",
|
|||
|
|
"subtitle": "Open a ticket for platform help",
|
|||
|
|
"newTicket": "New ticket",
|
|||
|
|
"subject": "Subject",
|
|||
|
|
"message": "Your message",
|
|||
|
|
"submit": "Submit ticket",
|
|||
|
|
"myTickets": "My tickets",
|
|||
|
|
"messages": "messages",
|
|||
|
|
"created": "Ticket created",
|
|||
|
|
"createFailed": "Could not create ticket",
|
|||
|
|
"empty": "No tickets yet",
|
|||
|
|
"loadFailed": "Could not load tickets.",
|
|||
|
|
"retry": "Try again",
|
|||
|
|
"loading": "Loading...",
|
|||
|
|
"notFound": "Ticket not found",
|
|||
|
|
"back": "Back",
|
|||
|
|
"reply": "Your reply",
|
|||
|
|
"send": "Send",
|
|||
|
|
"replySent": "Reply sent",
|
|||
|
|
"replyFailed": "Could not send reply",
|
|||
|
|
"fromAdmin": "Meezi support",
|
|||
|
|
"fromYou": "You",
|
|||
|
|
"closedHint": "This ticket is closed — no new replies.",
|
|||
|
|
"status": {
|
|||
|
|
"open": "Open",
|
|||
|
|
"inProgress": "In progress",
|
|||
|
|
"waitingMerchant": "Awaiting your reply",
|
|||
|
|
"resolved": "Resolved",
|
|||
|
|
"closed": "Closed"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"admin": {
|
|||
|
|
"nav": {
|
|||
|
|
"title": "Platform admin",
|
|||
|
|
"dashboard": "Dashboard",
|
|||
|
|
"plans": "Plans & pricing",
|
|||
|
|
"integrations": "Payments & SMS",
|
|||
|
|
"notifications": "Notifications",
|
|||
|
|
"settings": "App settings",
|
|||
|
|
"features": "Features",
|
|||
|
|
"cafes": "Cafes",
|
|||
|
|
"tickets": "Tickets",
|
|||
|
|
"logout": "Log out"
|
|||
|
|
},
|
|||
|
|
"auth": {
|
|||
|
|
"title": "System admin login",
|
|||
|
|
"subtitle": "Authorized Meezi staff only",
|
|||
|
|
"phone": "Phone",
|
|||
|
|
"sendOtp": "Send code",
|
|||
|
|
"otp": "Verification code",
|
|||
|
|
"login": "Sign in",
|
|||
|
|
"error": "Login failed",
|
|||
|
|
"devHint": "In development the OTP is logged by Admin API (DEV admin OTP)."
|
|||
|
|
},
|
|||
|
|
"dashboard": {
|
|||
|
|
"title": "Platform overview",
|
|||
|
|
"totalCafes": "Total cafes",
|
|||
|
|
"activeCafes": "Active",
|
|||
|
|
"openTickets": "Open tickets",
|
|||
|
|
"plans": "Plans configured"
|
|||
|
|
},
|
|||
|
|
"plans": {
|
|||
|
|
"title": "Subscription plans",
|
|||
|
|
"monthlyPrice": "Monthly price (Toman)",
|
|||
|
|
"maxOrders": "Max orders per day",
|
|||
|
|
"saved": "Plan saved"
|
|||
|
|
},
|
|||
|
|
"settings": {
|
|||
|
|
"title": "Application settings",
|
|||
|
|
"saved": "Saved"
|
|||
|
|
},
|
|||
|
|
"features": {
|
|||
|
|
"title": "Feature flags",
|
|||
|
|
"enabled": "On",
|
|||
|
|
"disabled": "Off"
|
|||
|
|
},
|
|||
|
|
"cafes": {
|
|||
|
|
"title": "Registered cafes",
|
|||
|
|
"suspended": "Suspended",
|
|||
|
|
"suspend": "Suspend",
|
|||
|
|
"activate": "Activate",
|
|||
|
|
"discoverProfile": {
|
|||
|
|
"edit": "Discover profile",
|
|||
|
|
"title": "Discover & AI profile",
|
|||
|
|
"subtitle": "Tags for matching guests to cafés",
|
|||
|
|
"save": "Save",
|
|||
|
|
"saved": "Saved",
|
|||
|
|
"loading": "Loading..."
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"integrations": {
|
|||
|
|
"title": "Payment gateways & Kavenegar",
|
|||
|
|
"save": "Save settings",
|
|||
|
|
"saved": "Settings saved",
|
|||
|
|
"paymentTitle": "Payment gateways",
|
|||
|
|
"kavenegarTitle": "Kavenegar (SMS)",
|
|||
|
|
"active": "Active for billing",
|
|||
|
|
"enabled": "Enabled",
|
|||
|
|
"sandbox": "Sandbox mode",
|
|||
|
|
"merchantId": "Merchant ID",
|
|||
|
|
"apiKey": "API token",
|
|||
|
|
"username": "Username",
|
|||
|
|
"password": "Password",
|
|||
|
|
"branchCode": "Branch code",
|
|||
|
|
"terminalCode": "Terminal code (optional)",
|
|||
|
|
"clientId": "Client ID",
|
|||
|
|
"clientSecret": "Client Secret",
|
|||
|
|
"baseUrl": "API base URL (optional)",
|
|||
|
|
"taraHint": "Tara credit pay — API: api.tara-club.ir/club/api/v1 (login, trace, request, verify)",
|
|||
|
|
"snappPayHint": "Snapp Pay BNPL — OAuth + payment token from Snapp Pay merchant panel",
|
|||
|
|
"otpTemplate": "OTP template name (Kavenegar panel)"
|
|||
|
|
},
|
|||
|
|
"notifications": {
|
|||
|
|
"title": "Notification center",
|
|||
|
|
"broadcastTitle": "Broadcast to all cafes",
|
|||
|
|
"broadcastTitlePlaceholder": "Notification title",
|
|||
|
|
"broadcastBodyPlaceholder": "Body (optional)",
|
|||
|
|
"sendBroadcast": "Send to all",
|
|||
|
|
"broadcastSent": "Sent to {count} cafes",
|
|||
|
|
"allNotifications": "All notifications",
|
|||
|
|
"empty": "No notifications yet"
|
|||
|
|
},
|
|||
|
|
"tickets": {
|
|||
|
|
"title": "Support tickets",
|
|||
|
|
"messages": "messages",
|
|||
|
|
"loading": "Loading...",
|
|||
|
|
"empty": "No tickets",
|
|||
|
|
"notFound": "Ticket not found",
|
|||
|
|
"back": "All tickets",
|
|||
|
|
"replyPlaceholder": "Reply to merchant...",
|
|||
|
|
"sendReply": "Send reply",
|
|||
|
|
"replySent": "Reply sent",
|
|||
|
|
"replyFailed": "Could not send reply",
|
|||
|
|
"resolve": "Mark resolved",
|
|||
|
|
"close": "Close ticket",
|
|||
|
|
"statusUpdated": "Ticket status updated",
|
|||
|
|
"closedHint": "Ticket is closed — replies disabled.",
|
|||
|
|
"fromAdmin": "Meezi support",
|
|||
|
|
"fromCafe": "Cafe",
|
|||
|
|
"filter": {
|
|||
|
|
"all": "All",
|
|||
|
|
"open": "Open",
|
|||
|
|
"closed": "Closed"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"errors": {
|
|||
|
|
"planLimit": "Plan limit reached. Please upgrade.",
|
|||
|
|
"notFound": "Not found",
|
|||
|
|
"unauthorized": "Unauthorized",
|
|||
|
|
"network": "Network error"
|
|||
|
|
},
|
|||
|
|
"discoverPublic": {
|
|||
|
|
"brand": "Meezi",
|
|||
|
|
"title": "Discover cafés",
|
|||
|
|
"subtitle": "Find the right café in Tehran and Karaj",
|
|||
|
|
"searchPlaceholder": "Type: quiet, date night, Wi-Fi, roastery, book café…",
|
|||
|
|
"searchHint": "Smart search — filters are auto-detected from your text",
|
|||
|
|
"aiDetectedLabel": "Detected filters:",
|
|||
|
|
"aiDetectedClear": "Clear",
|
|||
|
|
"loading": "Loading…",
|
|||
|
|
"empty": "No cafés match these filters",
|
|||
|
|
"resultCount": "{count} cafés",
|
|||
|
|
"applyFilters": "Apply filters",
|
|||
|
|
"clearFilters": "Clear",
|
|||
|
|
"viewCafe": "View café",
|
|||
|
|
"backToList": "Back to list",
|
|||
|
|
"notFound": "Café not found",
|
|||
|
|
"exploreMore": "Explore more cafés",
|
|||
|
|
"reviewCount": "{count} reviews",
|
|||
|
|
"mapTitle": "Map",
|
|||
|
|
"openInNeshan": "Open in Neshan",
|
|||
|
|
"reviewsTitle": "Guest reviews",
|
|||
|
|
"ownerReply": "Cafe reply",
|
|||
|
|
"coffeeAdvisor": {
|
|||
|
|
"title": "Drink advisor",
|
|||
|
|
"subtitle": "Tell us your purpose and get tailored suggestions",
|
|||
|
|
"placeholder": "e.g. group work, date night, exam energy…",
|
|||
|
|
"submit": "Suggest",
|
|||
|
|
"loading": "Thinking…",
|
|||
|
|
"notConfigured": "Smart advisor is not enabled for this café yet",
|
|||
|
|
"failed": "Suggestions unavailable. Try again later"
|
|||
|
|
},
|
|||
|
|
"cities": {
|
|||
|
|
"tehran": "Tehran",
|
|||
|
|
"karaj": "Karaj"
|
|||
|
|
},
|
|||
|
|
"sort": {
|
|||
|
|
"rating": "Top rated",
|
|||
|
|
"reviews": "Most reviews",
|
|||
|
|
"name": "Name"
|
|||
|
|
},
|
|||
|
|
"openNow": "Open now",
|
|||
|
|
"openNowLabel": "Open now",
|
|||
|
|
"closedLabel": "Closed",
|
|||
|
|
"galleryTitle": "Gallery",
|
|||
|
|
"workingHoursTitle": "Working hours",
|
|||
|
|
"instagramLabel": "Instagram",
|
|||
|
|
"websiteLabel": "Website",
|
|||
|
|
"days": {
|
|||
|
|
"sat": "Sat",
|
|||
|
|
"sun": "Sun",
|
|||
|
|
"mon": "Mon",
|
|||
|
|
"tue": "Tue",
|
|||
|
|
"wed": "Wed",
|
|||
|
|
"thu": "Thu",
|
|||
|
|
"fri": "Fri"
|
|||
|
|
},
|
|||
|
|
"filters": {
|
|||
|
|
"themes": "Theme",
|
|||
|
|
"vibes": "Vibe",
|
|||
|
|
"occasions": "Good for",
|
|||
|
|
"spaceFeatures": "Space",
|
|||
|
|
"noise": "Noise",
|
|||
|
|
"priceTier": "Price",
|
|||
|
|
"size": "Size"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"cafePublicProfile": {
|
|||
|
|
"title": "Public profile",
|
|||
|
|
"subtitle": "Information shown to guests on the discovery page",
|
|||
|
|
"tabs": {
|
|||
|
|
"info": "Info",
|
|||
|
|
"gallery": "Gallery",
|
|||
|
|
"hours": "Hours",
|
|||
|
|
"social": "Social"
|
|||
|
|
},
|
|||
|
|
"description": "About your café",
|
|||
|
|
"descriptionPlaceholder": "Describe your café, its ambiance, specialty drinks, and the experience you offer…",
|
|||
|
|
"instagram": "Instagram handle (without @)",
|
|||
|
|
"instagramPlaceholder": "mycafe.tehran",
|
|||
|
|
"website": "Website URL",
|
|||
|
|
"websitePlaceholder": "https://mycafe.ir",
|
|||
|
|
"gallery": "Photo gallery (max 8)",
|
|||
|
|
"galleryHint": "Upload quality photos of your space — JPEG, PNG or WebP up to 5 MB",
|
|||
|
|
"uploadPhoto": "Upload photo",
|
|||
|
|
"uploading": "Uploading…",
|
|||
|
|
"uploadFailed": "Upload failed",
|
|||
|
|
"galleryFull": "Gallery is full. Remove a photo first",
|
|||
|
|
"removePhoto": "Remove",
|
|||
|
|
"workingHours": "Daily working hours",
|
|||
|
|
"isOpen": "Open",
|
|||
|
|
"openTime": "Opens at",
|
|||
|
|
"closeTime": "Closes at",
|
|||
|
|
"days": {
|
|||
|
|
"sat": "Saturday",
|
|||
|
|
"sun": "Sunday",
|
|||
|
|
"mon": "Monday",
|
|||
|
|
"tue": "Tuesday",
|
|||
|
|
"wed": "Wednesday",
|
|||
|
|
"thu": "Thursday",
|
|||
|
|
"fri": "Friday"
|
|||
|
|
},
|
|||
|
|
"save": "Save",
|
|||
|
|
"saved": "Saved",
|
|||
|
|
"saveFailed": "Save failed",
|
|||
|
|
"loading": "Loading…"
|
|||
|
|
},
|
|||
|
|
"discoverProfile": {
|
|||
|
|
"sections": {
|
|||
|
|
"themes": "Theme & style",
|
|||
|
|
"occasions": "Good for (multi)",
|
|||
|
|
"spaceFeatures": "Space features",
|
|||
|
|
"vibes": "Vibe",
|
|||
|
|
"size": "Size",
|
|||
|
|
"floors": "Floors",
|
|||
|
|
"noiseLevel": "Noise",
|
|||
|
|
"priceTier": "Price tier"
|
|||
|
|
},
|
|||
|
|
"hints": {
|
|||
|
|
"themes": "For AI recommendations",
|
|||
|
|
"occasions": "Dates, family, friends, meeting someone new…",
|
|||
|
|
"spaceFeatures": "Indoor, outdoor, terrace, plants…",
|
|||
|
|
"vibes": "Quiet, lively, romantic…"
|
|||
|
|
},
|
|||
|
|
"themes": {
|
|||
|
|
"modern": "Modern",
|
|||
|
|
"minimal": "Minimal",
|
|||
|
|
"vintage": "Vintage",
|
|||
|
|
"industrial": "Industrial",
|
|||
|
|
"scandi": "Scandi",
|
|||
|
|
"persian_traditional": "Persian traditional",
|
|||
|
|
"book_cafe": "Book café",
|
|||
|
|
"roastery": "Roastery",
|
|||
|
|
"dessert_focus": "Dessert focus",
|
|||
|
|
"brunch": "Brunch",
|
|||
|
|
"late_night": "Late night",
|
|||
|
|
"plants_heavy": "Plant-heavy",
|
|||
|
|
"instagrammable": "Instagrammable",
|
|||
|
|
"heritage": "Heritage",
|
|||
|
|
"luxury": "Luxury",
|
|||
|
|
"specialty_coffee": "Specialty coffee",
|
|||
|
|
"tea_house": "Tea house",
|
|||
|
|
"art_gallery": "Art gallery",
|
|||
|
|
"sport_cafe": "Sport café",
|
|||
|
|
"gaming_cafe": "Gaming café"
|
|||
|
|
},
|
|||
|
|
"occasions": {
|
|||
|
|
"date": "Date",
|
|||
|
|
"family": "Family",
|
|||
|
|
"friends": "Friends",
|
|||
|
|
"finding_someone": "Meeting someone new",
|
|||
|
|
"solo": "Solo",
|
|||
|
|
"business_meeting": "Business",
|
|||
|
|
"study_work": "Study & work",
|
|||
|
|
"celebration": "Celebration",
|
|||
|
|
"quick_coffee": "Quick coffee",
|
|||
|
|
"breakfast": "Breakfast",
|
|||
|
|
"brunch": "Brunch",
|
|||
|
|
"after_dinner": "After dinner",
|
|||
|
|
"group_large": "Large group"
|
|||
|
|
},
|
|||
|
|
"spaceFeatures": {
|
|||
|
|
"indoor": "Indoor",
|
|||
|
|
"outdoor": "Outdoor",
|
|||
|
|
"terrace": "Terrace",
|
|||
|
|
"rooftop": "Rooftop",
|
|||
|
|
"garden": "Garden",
|
|||
|
|
"plants": "Plants",
|
|||
|
|
"wifi": "Wi‑Fi",
|
|||
|
|
"parking": "Parking",
|
|||
|
|
"wheelchair": "Wheelchair access",
|
|||
|
|
"kids_friendly": "Kid-friendly",
|
|||
|
|
"pet_friendly": "Pet-friendly",
|
|||
|
|
"smoking_area": "Smoking area",
|
|||
|
|
"live_music": "Live music",
|
|||
|
|
"private_room": "Private room",
|
|||
|
|
"counter_only": "Counter only",
|
|||
|
|
"takeaway": "Takeaway",
|
|||
|
|
"hookah": "Hookah",
|
|||
|
|
"board_games": "Board games",
|
|||
|
|
"no_smoking": "Non-smoking",
|
|||
|
|
"prayer_room": "Prayer room"
|
|||
|
|
},
|
|||
|
|
"vibes": {
|
|||
|
|
"quiet": "Quiet",
|
|||
|
|
"lively": "Lively",
|
|||
|
|
"romantic": "Romantic",
|
|||
|
|
"cozy": "Cozy",
|
|||
|
|
"trendy": "Trendy",
|
|||
|
|
"traditional": "Traditional",
|
|||
|
|
"artistic": "Artistic",
|
|||
|
|
"luxury": "Luxury",
|
|||
|
|
"casual": "Casual",
|
|||
|
|
"study_friendly": "Study-friendly"
|
|||
|
|
},
|
|||
|
|
"sizes": {
|
|||
|
|
"tiny": "Tiny",
|
|||
|
|
"cozy": "Cozy",
|
|||
|
|
"medium": "Medium",
|
|||
|
|
"large": "Large",
|
|||
|
|
"spacious": "Spacious"
|
|||
|
|
},
|
|||
|
|
"floors": {
|
|||
|
|
"one": "1 floor",
|
|||
|
|
"two": "2 floors",
|
|||
|
|
"three": "3 floors",
|
|||
|
|
"multi": "Multi-floor"
|
|||
|
|
},
|
|||
|
|
"noiseLevels": {
|
|||
|
|
"quiet": "Quiet",
|
|||
|
|
"moderate": "Moderate",
|
|||
|
|
"lively": "Lively"
|
|||
|
|
},
|
|||
|
|
"priceTiers": {
|
|||
|
|
"budget": "Budget",
|
|||
|
|
"mid": "Mid",
|
|||
|
|
"premium": "Premium"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|