quotes.json 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. {
  2. "list": {
  3. "statusAll": "All",
  4. "statusAttention": "Needs attention",
  5. "statusDraft": "Draft",
  6. "statusSent": "Sent",
  7. "statusAccepted": "Accepted",
  8. "statusRejected": "Rejected",
  9. "statusConverted": "Converted",
  10. "searchPlaceholder": "Search quotes...",
  11. "newQuote": "New Quote",
  12. "columnQuoteNumber": "Quote #",
  13. "columnTitle": "Title",
  14. "columnCustomer": "Customer",
  15. "columnVehicle": "Vehicle",
  16. "columnStatus": "Status",
  17. "columnDate": "Date",
  18. "columnTotal": "Total",
  19. "noQuotes": "No quotes found."
  20. },
  21. "page": {
  22. "quote": "Quote",
  23. "save": "Save",
  24. "pdf": "PDF",
  25. "email": "Email",
  26. "share": "Share",
  27. "delete": "Delete",
  28. "deleteTitle": "Delete Quote",
  29. "deleteDescription": "This will permanently delete this quote.",
  30. "saved": "Quote saved",
  31. "unsavedChanges": "Unsaved changes",
  32. "saveFirst": "Please save your changes first",
  33. "failedSave": "Failed to save quote",
  34. "failedDelete": "Failed to delete",
  35. "failedPdf": "Failed to generate PDF",
  36. "selectVehicle": "Please select a vehicle",
  37. "convertTitle": "Convert Quote to Work Order",
  38. "convertDescription": "This will create a new service record (work order) from this quote. Select a vehicle for the work order.",
  39. "convert": "Convert",
  40. "convertToWorkOrder": "Convert to Work Order",
  41. "cancel": "Cancel",
  42. "failedConvert": "Failed to convert",
  43. "changesRequested": "Changes Requested",
  44. "quoteAccepted": "Quote Accepted",
  45. "markResolved": "Mark as Resolved",
  46. "responseResolved": "Customer response resolved",
  47. "entityLabel": "Quote",
  48. "tabs": {
  49. "details": "Details",
  50. "images": "Images",
  51. "documents": "Documents"
  52. },
  53. "customFieldsInvalid": "Please fill in all required custom fields",
  54. "customFieldsSaveFailed": "Failed to save custom fields"
  55. },
  56. "form": {
  57. "newQuote": "New Quote",
  58. "editQuote": "Edit Quote",
  59. "cancel": "Cancel",
  60. "createQuote": "Create Quote",
  61. "updateQuote": "Update Quote",
  62. "created": "Quote created",
  63. "updated": "Quote updated",
  64. "failedCreate": "Failed to create quote",
  65. "failedUpdate": "Failed to update quote"
  66. },
  67. "parts": {
  68. "title": "Parts",
  69. "addPart": "Add Part",
  70. "partNumber": "Part #",
  71. "name": "Name",
  72. "namePlaceholder": "Name *",
  73. "qty": "Qty",
  74. "unitPrice": "Unit Price",
  75. "total": "Total",
  76. "subtotal": "Parts Subtotal: {amount}",
  77. "deleteRow": "Delete row",
  78. "excludeFromTotal": "Exclude from total",
  79. "addFromInventory": "From stock",
  80. "unitCost": "Cost",
  81. "markupPercent": "Markup %",
  82. "nameMissingHint": "Rows without a part name are not saved."
  83. },
  84. "labor": {
  85. "title": "Labor & Services",
  86. "addLabor": "Add Labor",
  87. "addService": "Add Service",
  88. "fromPresets": "From Presets",
  89. "description": "Description",
  90. "descriptionPlaceholder": "Description *",
  91. "hours": "Hours",
  92. "qty": "Qty",
  93. "qtyOrHours": "Unit / Hours",
  94. "rate": "Rate ({currency}/hr)",
  95. "total": "Total",
  96. "subtotal": "Labor Subtotal: {amount}",
  97. "hourlyTag": "HR",
  98. "serviceTag": "SVC",
  99. "hourlyHint": "Hourly: priced by hours worked (hours × rate/hr). Click to switch.",
  100. "serviceHint": "Service: priced as a flat fee per unit. Click to switch.",
  101. "deleteRow": "Delete row",
  102. "excludeFromTotal": "Exclude from total"
  103. },
  104. "notes": {
  105. "title": "Notes",
  106. "public": "Public",
  107. "internal": "Internal",
  108. "publicPlaceholder": "Quote description shown to the customer...",
  109. "internalPlaceholder": "Internal notes (not shown to customer)...",
  110. "publicHelper": "Shown on the quote document",
  111. "internalHelper": "Only visible to your team"
  112. },
  113. "sidebar": {
  114. "sharedLink": {
  115. "title": "Shared Link",
  116. "sharedOn": "Shared on {date}",
  117. "notViewed": "Not viewed yet",
  118. "viewedTimes": "Viewed {count, plural, one {# time} other {# times}}",
  119. "lastViewed": "Last {date}",
  120. "copyLink": "Copy link",
  121. "linkCopied": "Link copied"
  122. }
  123. },
  124. "details": {
  125. "title": "Quote Details",
  126. "titleLabel": "Title *",
  127. "titlePlaceholder": "Vehicle repair estimate",
  128. "status": "Status",
  129. "statusDraft": "Draft",
  130. "statusSent": "Sent",
  131. "statusAccepted": "Accepted",
  132. "statusRejected": "Rejected",
  133. "validUntil": "Valid Until",
  134. "viewInspection": "View linked inspection",
  135. "vehicle": "Vehicle",
  136. "customer": "Customer",
  137. "selectVehicle": "Select vehicle...",
  138. "selectCustomer": "Select customer...",
  139. "none": "None",
  140. "clearVehicle": "Clear vehicle",
  141. "clearCustomer": "Clear customer"
  142. },
  143. "totals": {
  144. "title": "Totals",
  145. "parts": "Parts",
  146. "labor": "Labor",
  147. "subtotal": "Subtotal",
  148. "subtotalInclTax": "Subtotal (incl. tax)",
  149. "discount": "Discount",
  150. "discountNone": "None",
  151. "discountPercentage": "Percentage",
  152. "discountFixed": "Fixed",
  153. "tax": "Tax",
  154. "taxIncluded": "Tax (incl.)",
  155. "total": "Total",
  156. "inclusiveModeHint": "Line item prices are entered with tax included. Totals show the net + tax breakdown."
  157. },
  158. "shareDialog": {
  159. "title": "Share Quote",
  160. "description": "Generate a public link that allows anyone to view and download this quote without signing in.",
  161. "notifyTitle": "Notify {name}",
  162. "email": "Email",
  163. "noEmail": "(no email on file)",
  164. "sms": "SMS",
  165. "noPhone": "(no phone on file)",
  166. "sendNotification": "Send Notification",
  167. "revokeLink": "Revoke Link",
  168. "generateLink": "Generate Public Link",
  169. "emailSent": "Email sent",
  170. "failedEmail": "Failed to send email",
  171. "smsSent": "SMS sent",
  172. "failedSms": "Failed to send SMS",
  173. "copyLink": "Copy link"
  174. },
  175. "images": {
  176. "title": "Quote Images",
  177. "dropzone": "Drop images here or click to browse",
  178. "uploading": "Uploading...",
  179. "formats": "JPG, PNG, WebP — max 10MB each",
  180. "uploadingImages": "Uploading images...",
  181. "limitReached": "Image limit reached ({count}/{max})",
  182. "upgradePrompt": "Upgrade your plan to upload more images.",
  183. "onlyAllowed": "Only JPG, PNG, and WebP images are allowed. {names} skipped.",
  184. "onlyUploading": "Only uploading {count} image(s) to stay within limit.",
  185. "uploadingCount": "Uploading {count} image(s)...",
  186. "uploadedCount": "{count} image(s) uploaded",
  187. "uploadFailed": "Upload failed",
  188. "failedUploadFile": "Failed to upload {name}",
  189. "failedSaveFile": "Failed to save {name}",
  190. "deleted": "Image deleted",
  191. "failedDelete": "Failed to delete image",
  192. "failedUpdate": "Failed to update",
  193. "description": "Description...",
  194. "pdf": "PDF"
  195. },
  196. "documents": {
  197. "title": "Documents",
  198. "dropzone": "Drop files here or click to browse",
  199. "uploading": "Uploading...",
  200. "formats": "PDF, CSV, TXT — max 10MB each",
  201. "uploadingDocuments": "Uploading documents...",
  202. "limitReached": "Document limit reached ({count}/{max})",
  203. "upgradePrompt": "Upgrade your plan to upload more.",
  204. "onlyUploading": "Only uploading {count} file(s) to stay within limit.",
  205. "uploadingCount": "Uploading {count} file(s)...",
  206. "uploadedCount": "{count} file(s) uploaded",
  207. "uploadFailed": "Upload failed",
  208. "failedUploadFile": "Failed to upload {name}",
  209. "failedSaveFile": "Failed to save {name}",
  210. "deleted": "File deleted",
  211. "failedDelete": "Failed to delete file",
  212. "failedUpdate": "Failed to update",
  213. "pdf": "PDF"
  214. },
  215. "statusLabels": {
  216. "draft": "Draft",
  217. "sent": "Sent",
  218. "accepted": "Accepted",
  219. "rejected": "Rejected",
  220. "expired": "Expired",
  221. "converted": "Converted",
  222. "changes_requested": "Changes Requested"
  223. }
  224. }