service.json 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. {
  2. "page": {
  3. "notFound": "Service record not found",
  4. "updated": "Service record updated",
  5. "failedUpdate": "Failed to update service record",
  6. "deleteTitle": "Delete Service Record",
  7. "deleteDescription": "This will permanently delete this service record and all associated data. This cannot be undone.",
  8. "deleted": "Service record deleted",
  9. "failedDelete": "Failed to delete"
  10. },
  11. "header": {
  12. "tabs": {
  13. "details": "Details",
  14. "images": "Images",
  15. "video": "Video",
  16. "documents": "Documents"
  17. },
  18. "save": "Save",
  19. "pdf": "PDF",
  20. "email": "Email",
  21. "share": "Share",
  22. "delete": "Delete",
  23. "unpaid": "Unpaid",
  24. "unsavedChanges": "Unsaved changes",
  25. "saved": "Saved"
  26. },
  27. "basicInfo": {
  28. "title": "Basic Information",
  29. "vehicle": "Vehicle",
  30. "open": "Open",
  31. "customer": "Customer",
  32. "titleLabel": "Title *",
  33. "titlePlaceholder": "Oil Change",
  34. "date": "Date",
  35. "type": "Type",
  36. "mileage": "Mileage",
  37. "status": "Status",
  38. "technician": "Technician",
  39. "invoiceNumber": "Invoice Number",
  40. "typeOptions": {
  41. "maintenance": "Maintenance",
  42. "repair": "Repair",
  43. "upgrade": "Upgrade",
  44. "inspection": "Inspection"
  45. },
  46. "statusOptions": {
  47. "pending": "Pending",
  48. "in_progress": "In Progress",
  49. "waiting_parts": "Waiting Parts",
  50. "completed": "Completed"
  51. },
  52. "searchVehicles": "Search vehicles...",
  53. "noVehicleFound": "No vehicle found.",
  54. "techPicker": {
  55. "placeholder": "Select or type a name...",
  56. "searchPlaceholder": "Search or type name...",
  57. "useCustom": "Use \"{search}\"",
  58. "typePrompt": "Type a name...",
  59. "boardTechnicians": "Board Technicians",
  60. "teamMembers": "Team Members"
  61. }
  62. },
  63. "parts": {
  64. "title": "Parts",
  65. "fromInventory": "From Inventory",
  66. "addPart": "Add Part",
  67. "partNumber": "Part #",
  68. "name": "Name",
  69. "qty": "Qty",
  70. "unitPrice": "Unit Price",
  71. "total": "Total",
  72. "namePlaceholder": "Name *",
  73. "subtotal": "Parts Subtotal: {amount}",
  74. "inventoryTitle": "Select Part from Inventory",
  75. "searchInventory": "Search inventory...",
  76. "inStock": "{quantity} in stock",
  77. "noInventory": "No inventory parts found."
  78. },
  79. "labor": {
  80. "title": "Labor",
  81. "addLabor": "Add Labor",
  82. "description": "Description",
  83. "hours": "Hours",
  84. "rate": "Rate ({currency}/hr)",
  85. "total": "Total",
  86. "descriptionPlaceholder": "Description *",
  87. "subtotal": "Labor Subtotal: {amount}"
  88. },
  89. "totals": {
  90. "title": "Totals",
  91. "parts": "Parts",
  92. "labor": "Labor",
  93. "subtotal": "Subtotal",
  94. "discount": "Discount",
  95. "discountNone": "None",
  96. "discountPercentage": "Percentage",
  97. "discountFixed": "Fixed",
  98. "tax": "Tax",
  99. "total": "Total"
  100. },
  101. "notes": {
  102. "title": "Notes",
  103. "public": "Public",
  104. "internal": "Internal",
  105. "publicPlaceholder": "Notes visible on the invoice...",
  106. "internalPlaceholder": "Internal notes (not shown on invoice)...",
  107. "publicHelper": "Shown on the invoice and shared documents",
  108. "internalHelper": "Only visible to your team"
  109. },
  110. "invoice": {
  111. "title": "Invoice Summary",
  112. "parts": "Parts",
  113. "labor": "Labor",
  114. "subtotal": "Subtotal",
  115. "discount": "Discount",
  116. "tax": "Tax ({rate}%)",
  117. "total": "Total",
  118. "paid": "Paid",
  119. "balanceDue": "Balance Due",
  120. "paidBadge": "PAID",
  121. "entityLabel": "Invoice",
  122. "emailSubject": "Payment Confirmation"
  123. },
  124. "payments": {
  125. "title": "Payments",
  126. "markUnpaid": "Mark as Unpaid",
  127. "markPaid": "Mark as Paid",
  128. "recordPayment": "Record Payment",
  129. "totalPaid": "Total Paid",
  130. "amount": "Amount",
  131. "date": "Date",
  132. "method": "Method",
  133. "note": "Note",
  134. "notePlaceholder": "Optional note",
  135. "savePayment": "Save Payment",
  136. "methodOptions": {
  137. "cash": "Cash",
  138. "card": "Card",
  139. "transfer": "Transfer",
  140. "other": "Other"
  141. },
  142. "recorded": "Payment recorded",
  143. "markedPaid": "Marked as paid",
  144. "markedUnpaid": "Marked as unpaid",
  145. "deleted": "Payment deleted",
  146. "failedRecord": "Failed to record payment",
  147. "failedStatus": "Failed to update payment status",
  148. "failedDelete": "Failed to delete payment",
  149. "deleteTitle": "Delete Payment",
  150. "deleteDescription": "This will remove this payment record.",
  151. "failedPdf": "Failed to generate PDF invoice"
  152. },
  153. "attachments": {
  154. "deleteTitle": "Delete Attachment",
  155. "deleteDescription": "This will permanently delete this attachment. This cannot be undone.",
  156. "deleted": "Attachment deleted",
  157. "failedDelete": "Failed to delete",
  158. "images": "Images ({count})",
  159. "videos": "Videos ({count})",
  160. "diagnostics": "Diagnostic Reports ({count})",
  161. "documents": "Documents ({count})"
  162. },
  163. "share": {
  164. "title": "Share Invoice",
  165. "description": "Generate a public link that allows anyone to view and download this invoice without signing in.",
  166. "notifyTitle": "Notify {name}",
  167. "email": "Email",
  168. "noEmail": "(no email on file)",
  169. "sms": "SMS",
  170. "noPhone": "(no phone on file)",
  171. "sendNotification": "Send Notification",
  172. "revokeLink": "Revoke Link",
  173. "generateLink": "Generate Public Link",
  174. "emailSent": "Email sent",
  175. "failedEmail": "Failed to send email",
  176. "smsSent": "SMS sent",
  177. "failedSms": "Failed to send SMS"
  178. },
  179. "sidebar": {
  180. "vehicle": "Vehicle",
  181. "customer": "Customer",
  182. "vin": "VIN: {vin}",
  183. "mileageAtService": "Mileage at service: {mileage} {unit}",
  184. "sharedLink": {
  185. "title": "Shared Link",
  186. "sharedOn": "Shared on {date}",
  187. "notViewed": "Not viewed yet",
  188. "viewedTimes": "Viewed {count, plural, one {# time} other {# times}}",
  189. "lastViewed": "Last {date}",
  190. "copyLink": "Copy link",
  191. "linkCopied": "Link copied"
  192. }
  193. },
  194. "images": {
  195. "title": "Service Images",
  196. "dropzone": "Drop images here or click to browse",
  197. "uploading": "Uploading...",
  198. "formats": "JPG, PNG, WebP — max 10MB each",
  199. "uploadingImages": "Uploading images...",
  200. "limitReached": "Image limit reached ({count}/{max})",
  201. "upgradePrompt": "Upgrade your plan to upload more images.",
  202. "onlyAllowed": "Only JPG, PNG, and WebP images are allowed. {names} skipped.",
  203. "onlyUploading": "Only uploading {count} image(s) to stay within limit.",
  204. "uploadingCount": "Uploading {count} image(s)...",
  205. "uploadedCount": "{count} image(s) uploaded",
  206. "uploadFailed": "Upload failed",
  207. "deleted": "Image deleted",
  208. "failedDelete": "Failed to delete image",
  209. "failedUpdate": "Failed to update",
  210. "description": "Description...",
  211. "invoice": "Invoice"
  212. },
  213. "videos": {
  214. "title": "Service Videos",
  215. "dropzone": "Drop videos here or click to browse",
  216. "uploading": "Uploading...",
  217. "formats": "MP4, WebM, MOV — max 10MB each",
  218. "uploadingVideos": "Uploading videos...",
  219. "uploadingCount": "Uploading {count} video(s)...",
  220. "uploadedCount": "{count} video(s) uploaded",
  221. "uploadFailed": "Upload failed",
  222. "deleted": "Video deleted",
  223. "failedDelete": "Failed to delete video",
  224. "failedUpdate": "Failed to update",
  225. "invoice": "Invoice"
  226. },
  227. "documents": {
  228. "diagnosticTitle": "Diagnostic Reports",
  229. "documentsTitle": "Documents",
  230. "dropzone": "Drop files here or click to browse",
  231. "uploading": "Uploading...",
  232. "diagnosticFormats": "PDF, CSV, TXT — max 10MB each",
  233. "documentFormats": "PDF, DOCX, XLSX, CSV, TXT — max 10MB each",
  234. "uploadingReports": "Uploading reports...",
  235. "uploadingDocuments": "Uploading documents...",
  236. "diagnosticLimitReached": "Diagnostic report limit reached ({count}/{max})",
  237. "documentLimitReached": "Document limit reached ({count}/{max})",
  238. "upgradePrompt": "Upgrade your plan to upload more.",
  239. "diagnosticLabel": "Diagnostic report",
  240. "documentLabel": "Document",
  241. "limitReachedToast": "{label} limit reached ({count}/{max}). Upgrade your plan for more.",
  242. "onlyUploading": "Only uploading {count} file(s) to stay within limit.",
  243. "uploadingCount": "Uploading {count} file(s)...",
  244. "uploadedCount": "{count} file(s) uploaded",
  245. "uploadFailed": "Upload failed",
  246. "deleted": "File deleted",
  247. "failedDelete": "Failed to delete file",
  248. "failedUpdate": "Failed to update",
  249. "invoice": "Invoice"
  250. }
  251. }