{ "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." }, "errors": { "planLimit": "Plan limit reached. Please upgrade.", "notFound": "Not found", "unauthorized": "Unauthorized", "network": "Network error", "generic": "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.", "register": "Create account", "registerSubtitle": "Register your cafe on Meezi", "cafeName": "Cafe or restaurant name", "cafeNamePlaceholder": "e.g. Roya Cafe", "createAccount": "Create account", "alreadyHaveAccount": "Already have an account?", "loginLink": "Sign in", "noAccount": "Don't have an account?", "registerLink": "Register", "alreadyRegistered": "This phone is already registered. Please sign in.", "registrationExpired": "Registration session expired. Please try again.", "chooseCafe": "Choose a café", "chooseCafeSubtitle": "This number has access to several cafés. Pick one to continue.", "createNewCafe": "Create a new café", "createNewCafeHint": "Want to start your own café with this number?", "tabOtp": "One-time code", "tabPassword": "Password", "username": "Username", "usernamePlaceholder": "Username", "password": "Password", "passwordPlaceholder": "Password", "invalidCredentials": "Incorrect username or password.", "kojaSlug": "Koja profile address", "kojaSlugHint": "Customers will find your cafe at this address", "kojaSlugPlaceholder": "e.g. my-cafe" }, "roles": { "owner": "Owner", "manager": "Manager", "cashier": "Cashier", "waiter": "Waiter", "chef": "Chef", "delivery": "Delivery", "unknown": "User" }, "branchSwitcher": { "title": "Active branch", "allBranches": "All branches", "selectBranch": "Select branch" }, "branchAccess": { "title": "Branch access", "staff": "Staff", "noStaff": "No staff yet", "selectStaff": "Select a staff member to manage access", "ownerNote": "The owner has access to all branches and does not need per-branch roles.", "noAssignments": "No branch roles assigned yet", "loading": "Loading...", "branch": "Branch", "role": "Role", "selectBranch": "Select branch", "add": "Add", "remove": "Remove" }, "access": { "deniedTitle": "No access to this page", "deniedBody": "Your role doesn't have permission to view this page. Contact a manager or owner if you need access." }, "nav": { "aria": "Main navigation", "collapseSidebar": "Collapse sidebar", "expandSidebar": "Expand sidebar", "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", "switchCafe": "Switch café", "currentCafe": "Current café", "otherCafes": "Other cafés", "createNewCafe": "Create a new café", "openMenu": "Menu", "switchCafeError": "Could not switch café. Please try again." }, "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", "cancelReasonPlaceholder": "Cancellation reason (optional)", "cancelOrderHasPayments": "Refund the recorded payments first, then cancel the 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", "itemNotePlaceholder": "Note for kitchen/bar (optional)", "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", "orderTypePicker": "How would you like to take this order?", "orderTypeTable": "Table", "orderTypeTableDesc": "Seat guest at a specific table", "orderTypeCounter": "Counter", "orderTypeCounterDesc": "Walk-in, no table yet", "orderTypeTakeaway": "Takeaway", "orderTypeTakeawayDesc": "Order to go", "counterBadge": "Counter", "takeawayBadge": "Takeaway", "assignTable": "Assign table", "newOrder": "New order" }, "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." } }, "deleted": "Customer deleted", "deleteConfirmTitle": "Delete customer", "deleteConfirmDesc": "Delete “{name}”?" }, "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", "deleted": "Coupon deleted", "deleteConfirmTitle": "Delete coupon", "deleteConfirmDesc": "Delete coupon “{code}”?" }, "hr": { "title": "Human resources", "tabs": { "attendance": "Attendance", "leave": "Leave", "payroll": "Payroll", "access": "Branch access", "credentials": "Login credentials" }, "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", "credentials": { "title": "Employee login credentials", "subtitle": "Set a username and password for each employee so they can sign in without an OTP.", "selectEmployee": "Select an employee first", "username": "Username", "usernamePlaceholder": "e.g. ali_barista", "password": "Password (min 8 characters)", "passwordPlaceholder": "New password", "set": "Save credentials", "remove": "Remove credentials", "removeConfirm": "Are you sure? The employee will no longer be able to sign in with a password.", "saved": "Credentials saved.", "removed": "Credentials removed.", "usernameTaken": "This username is already taken." } }, "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", "charCount": "{count} chars", "smsPartsHint": "{parts} SMS", "balance": "Account credit", "balanceAmount": "{amount} Rials", "balanceNotConfigured": "Kavenegar not configured", "sender": "Sender line", "recipientsCount": "{count} recipients", "sendConfirm": "Send to {count} people?", "sending": "Sending..." }, "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.", "allItems": "All items", "searchItemsPlaceholder": "Search items…", "itemCount": "{count} items", "noItemsInCategory": "No items in this category yet", "noItemsMatchSearch": "No items match your search", "outOfStock": "Out of stock", "newItem": "New item", "newCategory": "New category", "editCategoryTitle": "Edit category", "close": "Close", "saving": "Saving…", "model3d": "3D model", "nameEnOptional": "English name (optional)", "addItemSuccess": "Item added", "updateItemSuccess": "Item updated", "addCategorySuccess": "Category added", "updateCategorySuccess": "Category updated", "deleteItemConfirmTitle": "Delete item", "deleteItemConfirmDesc": "Are you sure you want to delete “{name}”? This can't be undone.", "deleteItemSuccess": "Item deleted", "deleteCategoryConfirmTitle": "Delete category", "deleteCategoryConfirmDesc": "Are you sure you want to delete the “{name}” category?", "deleteCategorySuccess": "Category deleted" }, "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.", "deleted": "Material deleted", "deleteConfirmTitle": "Delete material", "deleteConfirmDesc": "Delete “{name}”? This can’t be undone." }, "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)", "itemNote": "Note (e.g. no tomato, less sugar)", "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" }, "deleted": "Reservation deleted", "deleteConfirmTitle": "Delete reservation", "deleteConfirmDesc": "Delete the reservation for “{name}”?" }, "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).", "checkout": { "title": "Invoice & Payment", "subtitle": "Review your order and pay", "backToPlans": "Back to plans", "invalidPlan": "The selected plan is not available for online purchase.", "invoiceLabel": "Proforma invoice", "invoiceNo": "Invoice no.", "issuedAt": "Issued", "billingPeriod": "Billing period", "monthsCount": "{count} mo", "description": "Description", "qty": "Qty", "unitPrice": "Unit price", "amount": "Amount", "planLine": "{plan} plan subscription", "subtotal": "Subtotal", "total": "Amount due", "secureNote": "Payment is processed through a secure bank gateway.", "payTotal": "Pay {total}", "redirecting": "Redirecting to gateway...", "paymentFailed": "Payment failed. Please try again.", "queuedNotice": "You already have an active subscription. This purchase will be queued and start on {date}." }, "queued": { "title": "Queued subscriptions", "subtitle": "These start automatically when your current subscription ends.", "months": "{count} months", "window": "From {from} to {to}", "cancel": "Cancel", "cancelled": "Queued subscription cancelled", "cancelConfirmTitle": "Cancel queued subscription", "cancelConfirmDesc": "Cancel the {plan} subscription scheduled to start on {from}? Your current subscription is unaffected." } }, "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.", "slug": "Koja profile address", "slugHint": "Your cafe page on Koja — lowercase letters, digits, hyphens only", "slugPlaceholder": "my-cafe", "slugTaken": "This address is already taken. Please choose another.", "slugInvalid": "Invalid address. Use lowercase letters, digits, and hyphens only.", "kojaUrl": "Koja URL" }, "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" } } }, "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…", "showOnKoja": "Show on Koja", "showOnKojaHint": "List your café in the public Koja directory (koja.meezi.ir). On by default." }, "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" } } }