| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- {
- "list": {
- "statusAll": "All",
- "statusAttention": "Needs attention",
- "statusDraft": "Draft",
- "statusSent": "Sent",
- "statusAccepted": "Accepted",
- "statusRejected": "Rejected",
- "statusConverted": "Converted",
- "searchPlaceholder": "Search quotes...",
- "newQuote": "New Quote",
- "columnQuoteNumber": "Quote #",
- "columnTitle": "Title",
- "columnCustomer": "Customer",
- "columnVehicle": "Vehicle",
- "columnStatus": "Status",
- "columnDate": "Date",
- "columnTotal": "Total",
- "noQuotes": "No quotes found."
- },
- "page": {
- "quote": "Quote",
- "save": "Save",
- "pdf": "PDF",
- "email": "Email",
- "share": "Share",
- "delete": "Delete",
- "deleteTitle": "Delete Quote",
- "deleteDescription": "This will permanently delete this quote.",
- "saved": "Quote saved",
- "unsavedChanges": "Unsaved changes",
- "saveFirst": "Please save your changes first",
- "failedSave": "Failed to save quote",
- "failedDelete": "Failed to delete",
- "failedPdf": "Failed to generate PDF",
- "selectVehicle": "Please select a vehicle",
- "convertTitle": "Convert Quote to Work Order",
- "convertDescription": "This will create a new service record (work order) from this quote. Select a vehicle for the work order.",
- "convert": "Convert",
- "convertToWorkOrder": "Convert to Work Order",
- "cancel": "Cancel",
- "failedConvert": "Failed to convert",
- "changesRequested": "Changes Requested",
- "quoteAccepted": "Quote Accepted",
- "markResolved": "Mark as Resolved",
- "responseResolved": "Customer response resolved",
- "entityLabel": "Quote",
- "tabs": {
- "details": "Details",
- "images": "Images",
- "documents": "Documents"
- },
- "customFieldsInvalid": "Please fill in all required custom fields",
- "customFieldsSaveFailed": "Failed to save custom fields"
- },
- "form": {
- "newQuote": "New Quote",
- "editQuote": "Edit Quote",
- "cancel": "Cancel",
- "createQuote": "Create Quote",
- "updateQuote": "Update Quote",
- "created": "Quote created",
- "updated": "Quote updated",
- "failedCreate": "Failed to create quote",
- "failedUpdate": "Failed to update quote"
- },
- "parts": {
- "title": "Parts",
- "addPart": "Add Part",
- "partNumber": "Part #",
- "name": "Name",
- "namePlaceholder": "Name *",
- "qty": "Qty",
- "unitPrice": "Unit Price",
- "total": "Total",
- "subtotal": "Parts Subtotal: {amount}",
- "deleteRow": "Delete row",
- "excludeFromTotal": "Exclude from total",
- "addFromInventory": "From stock",
- "unitCost": "Cost",
- "markupPercent": "Markup %",
- "nameMissingHint": "Rows without a part name are not saved."
- },
- "labor": {
- "title": "Labor & Services",
- "addLabor": "Add Labor",
- "addService": "Add Service",
- "fromPresets": "From Presets",
- "description": "Description",
- "descriptionPlaceholder": "Description *",
- "hours": "Hours",
- "qty": "Qty",
- "qtyOrHours": "Unit / Hours",
- "rate": "Rate ({currency}/hr)",
- "total": "Total",
- "subtotal": "Labor Subtotal: {amount}",
- "hourlyTag": "HR",
- "serviceTag": "SVC",
- "hourlyHint": "Hourly: priced by hours worked (hours × rate/hr). Click to switch.",
- "serviceHint": "Service: priced as a flat fee per unit. Click to switch.",
- "deleteRow": "Delete row",
- "excludeFromTotal": "Exclude from total"
- },
- "notes": {
- "title": "Notes",
- "public": "Public",
- "internal": "Internal",
- "publicPlaceholder": "Quote description shown to the customer...",
- "internalPlaceholder": "Internal notes (not shown to customer)...",
- "publicHelper": "Shown on the quote document",
- "internalHelper": "Only visible to your team"
- },
- "sidebar": {
- "sharedLink": {
- "title": "Shared Link",
- "sharedOn": "Shared on {date}",
- "notViewed": "Not viewed yet",
- "viewedTimes": "Viewed {count, plural, one {# time} other {# times}}",
- "lastViewed": "Last {date}",
- "copyLink": "Copy link",
- "linkCopied": "Link copied"
- }
- },
- "details": {
- "title": "Quote Details",
- "titleLabel": "Title *",
- "titlePlaceholder": "Vehicle repair estimate",
- "status": "Status",
- "statusDraft": "Draft",
- "statusSent": "Sent",
- "statusAccepted": "Accepted",
- "statusRejected": "Rejected",
- "validUntil": "Valid Until",
- "viewInspection": "View linked inspection",
- "vehicle": "Vehicle",
- "customer": "Customer",
- "selectVehicle": "Select vehicle...",
- "selectCustomer": "Select customer...",
- "none": "None",
- "clearVehicle": "Clear vehicle",
- "clearCustomer": "Clear customer"
- },
- "totals": {
- "title": "Totals",
- "parts": "Parts",
- "labor": "Labor",
- "subtotal": "Subtotal",
- "subtotalInclTax": "Subtotal (incl. tax)",
- "discount": "Discount",
- "discountNone": "None",
- "discountPercentage": "Percentage",
- "discountFixed": "Fixed",
- "tax": "Tax",
- "taxIncluded": "Tax (incl.)",
- "total": "Total",
- "inclusiveModeHint": "Line item prices are entered with tax included. Totals show the net + tax breakdown."
- },
- "shareDialog": {
- "title": "Share Quote",
- "description": "Generate a public link that allows anyone to view and download this quote without signing in.",
- "notifyTitle": "Notify {name}",
- "email": "Email",
- "noEmail": "(no email on file)",
- "sms": "SMS",
- "noPhone": "(no phone on file)",
- "sendNotification": "Send Notification",
- "revokeLink": "Revoke Link",
- "generateLink": "Generate Public Link",
- "emailSent": "Email sent",
- "failedEmail": "Failed to send email",
- "smsSent": "SMS sent",
- "failedSms": "Failed to send SMS",
- "copyLink": "Copy link"
- },
- "images": {
- "title": "Quote Images",
- "dropzone": "Drop images here or click to browse",
- "uploading": "Uploading...",
- "formats": "JPG, PNG, WebP — max 10MB each",
- "uploadingImages": "Uploading images...",
- "limitReached": "Image limit reached ({count}/{max})",
- "upgradePrompt": "Upgrade your plan to upload more images.",
- "onlyAllowed": "Only JPG, PNG, and WebP images are allowed. {names} skipped.",
- "onlyUploading": "Only uploading {count} image(s) to stay within limit.",
- "uploadingCount": "Uploading {count} image(s)...",
- "uploadedCount": "{count} image(s) uploaded",
- "uploadFailed": "Upload failed",
- "failedUploadFile": "Failed to upload {name}",
- "failedSaveFile": "Failed to save {name}",
- "deleted": "Image deleted",
- "failedDelete": "Failed to delete image",
- "failedUpdate": "Failed to update",
- "description": "Description...",
- "pdf": "PDF"
- },
- "documents": {
- "title": "Documents",
- "dropzone": "Drop files here or click to browse",
- "uploading": "Uploading...",
- "formats": "PDF, CSV, TXT — max 10MB each",
- "uploadingDocuments": "Uploading documents...",
- "limitReached": "Document limit reached ({count}/{max})",
- "upgradePrompt": "Upgrade your plan to upload more.",
- "onlyUploading": "Only uploading {count} file(s) to stay within limit.",
- "uploadingCount": "Uploading {count} file(s)...",
- "uploadedCount": "{count} file(s) uploaded",
- "uploadFailed": "Upload failed",
- "failedUploadFile": "Failed to upload {name}",
- "failedSaveFile": "Failed to save {name}",
- "deleted": "File deleted",
- "failedDelete": "Failed to delete file",
- "failedUpdate": "Failed to update",
- "pdf": "PDF"
- },
- "statusLabels": {
- "draft": "Draft",
- "sent": "Sent",
- "accepted": "Accepted",
- "rejected": "Rejected",
- "expired": "Expired",
- "converted": "Converted",
- "changes_requested": "Changes Requested"
- }
- }
|