dataImport.json 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. {
  2. "title": "Import {entity}",
  3. "cancel": "Cancel",
  4. "done": "Done",
  5. "entities": {
  6. "customers": "customers",
  7. "vehicles": "vehicles",
  8. "services": "service history"
  9. },
  10. "entityHints": {
  11. "customers": "Names, contact details, addresses. One row per customer.",
  12. "vehicles": "Make, model, year, plate, VIN. An owner column links or creates the customer.",
  13. "services": "Past jobs and invoices. One row per job, with the vehicle it belongs to."
  14. },
  15. "groups": {
  16. "customer": "Customer",
  17. "vehicle": "Vehicle",
  18. "service": "Service"
  19. },
  20. "steps": {
  21. "upload": "Choose what to import and upload the file from your current system.",
  22. "mapping": "Check which column becomes which field. Nothing is written yet.",
  23. "preview": "Dry run: this is exactly what the import will do. Review it, then import.",
  24. "importing": "Writing rows. Keep this window open.",
  25. "result": "Import finished."
  26. },
  27. "upload": {
  28. "drop": "Drag and drop a file here",
  29. "formats": "CSV, Excel (.xlsx) or vCard (.vcf), up to 25 MB and 50,000 rows",
  30. "browse": "Browse files",
  31. "reading": "Reading the file...",
  32. "templateHint": "No export yet? Fill in a template and upload that.",
  33. "templateXlsx": "Excel template",
  34. "templateCsv": "CSV template",
  35. "sourcesHint": "Works with exports from any shop system, accounting tool, Google Contacts, Outlook or a spreadsheet. Column names are recognised in many languages; you confirm the mapping before anything is written."
  36. },
  37. "mapping": {
  38. "rows": "{count, plural, one {# row} other {# rows}}",
  39. "colColumn": "Column in your file",
  40. "colSample": "Sample values",
  41. "colField": "Becomes",
  42. "ignore": "Ignore this column",
  43. "source": {
  44. "preset": "Recognised layout",
  45. "header": "Matched by header",
  46. "values": "Guessed from the values"
  47. },
  48. "suggestWithAi": "Suggest with AI",
  49. "aiApplied": "{count, plural, one {# column mapped} other {# columns mapped}} by AI. Check them before continuing.",
  50. "chooseAnother": "Choose another file",
  51. "missingRequired": "Still needed: {fields}",
  52. "dryRunHint": "The dry run checks every row against your existing data without writing anything.",
  53. "runDryRun": "Run dry run"
  54. },
  55. "options": {
  56. "dateFormat": "Date format",
  57. "dateAuto": "Detect automatically",
  58. "dateDMY": "Day / month / year",
  59. "dateMDY": "Month / day / year",
  60. "dateYMD": "Year / month / day",
  61. "decimal": "Decimal mark",
  62. "decimalAuto": "Detect automatically",
  63. "decimalDot": "Dot (1,234.56)",
  64. "decimalComma": "Comma (1.234,56)",
  65. "countryCode": "Country code for phone numbers",
  66. "duplicates": "When a row matches an existing record",
  67. "duplicatesUpdate": "Update the existing record",
  68. "duplicatesSkip": "Skip the row",
  69. "duplicatesCreate": "Create a new record anyway"
  70. },
  71. "summary": {
  72. "create": "Will be created",
  73. "update": "Will be updated",
  74. "skip": "Will be skipped",
  75. "error": "Cannot be imported",
  76. "warnings": "With warnings",
  77. "customersToCreate": "{count, plural, one {# new customer} other {# new customers}}",
  78. "customersToUpdate": "{count, plural, one {# customer updated} other {# customers updated}}",
  79. "vehiclesToCreate": "{count, plural, one {# new vehicle} other {# new vehicles}}",
  80. "vehiclesToUpdate": "{count, plural, one {# vehicle updated} other {# vehicles updated}}",
  81. "servicesToCreate": "{count, plural, one {# service record} other {# service records}}"
  82. },
  83. "actions": {
  84. "create": "Create",
  85. "update": "Update",
  86. "skip": "Skip",
  87. "error": "Error"
  88. },
  89. "matchOn": {
  90. "number": "customer number",
  91. "email": "email",
  92. "phone": "phone",
  93. "name": "name",
  94. "vin": "VIN",
  95. "plate": "plate",
  96. "makeModelYear": "make, model and year"
  97. },
  98. "preview": {
  99. "colAction": "Action",
  100. "colOwner": "Owner",
  101. "colDetails": "Details",
  102. "empty": "No rows match this filter.",
  103. "matchedOn": "Matches {name} (by {on})",
  104. "linksCustomer": "Linked to customer {name}",
  105. "linksVehicle": "Linked to {label}",
  106. "sameCustomerAsRow": "Same customer as row {row}",
  107. "sameVehicleAsRow": "Same vehicle as row {row}",
  108. "createsCustomer": "Creates the customer",
  109. "createsVehicle": "Creates the vehicle",
  110. "downloadReport": "Download dry run report",
  111. "limitExceeded": "Your plan allows {remaining} more customers, but this import would create {needed}. Remove rows or upgrade your plan.",
  112. "pageInfo": "{from}–{to} of {total}",
  113. "prev": "Previous",
  114. "next": "Next",
  115. "backToMapping": "Back to mapping",
  116. "import": "Import {count, plural, one {# row} other {# rows}}",
  117. "nothingWrittenYet": "Nothing has been written yet. The import can be undone afterwards from Settings → Data."
  118. },
  119. "importing": {
  120. "title": "Importing...",
  121. "starting": "Starting",
  122. "progress": "{done} of {total} rows",
  123. "keepOpen": "Large files take a minute or two."
  124. },
  125. "result": {
  126. "title": "Import complete",
  127. "undoneTitle": "Import undone",
  128. "created": "{count, plural, one {# record created} other {# records created}}",
  129. "updated": "{count, plural, one {# record updated} other {# records updated}}",
  130. "skipped": "{count, plural, one {# row skipped} other {# rows skipped}}",
  131. "failed": "{count, plural, one {# row not imported} other {# rows not imported}}",
  132. "writeFailures": "{count, plural, one {# row failed while writing} other {# rows failed while writing}}",
  133. "rowFailure": "Row {row}: {error}",
  134. "undo": "Undo this import",
  135. "undone": "Removed {customers} customers, {vehicles} vehicles and {services} service records.",
  136. "undoHint": "Undo removes every record this import created. Records it only updated keep their new values."
  137. },
  138. "history": {
  139. "title": "Import history",
  140. "description": "Spreadsheet imports run on this workshop. Undo removes what an import created.",
  141. "loading": "Loading...",
  142. "statusUndone": "Undone",
  143. "counts": "{created} created, {updated} updated, {skipped} skipped, {failed} failed",
  144. "undo": "Undo",
  145. "undone": "Removed {customers} customers, {vehicles} vehicles and {services} service records.",
  146. "undoFailed": "Could not undo the import",
  147. "confirmTitle": "Undo this import?",
  148. "confirmDescription": "Removes what {file} created: {customers} customers, {vehicles} vehicles and {services} service records. Records the import only updated are kept.",
  149. "cancel": "Cancel",
  150. "confirm": "Undo import"
  151. },
  152. "fields": {
  153. "customer": {
  154. "name": "Customer name",
  155. "firstName": "First name",
  156. "lastName": "Last name",
  157. "customerNumber": "Customer number",
  158. "email": "Email",
  159. "phone": "Phone",
  160. "company": "Company",
  161. "address": "Address",
  162. "street": "Street",
  163. "postalCode": "Postal code",
  164. "city": "City",
  165. "state": "State / region",
  166. "country": "Country",
  167. "taxId": "Tax ID",
  168. "notes": "Customer notes"
  169. },
  170. "vehicle": {
  171. "description": "Vehicle (year make model in one column)",
  172. "make": "Make",
  173. "model": "Model",
  174. "year": "Year",
  175. "vin": "VIN",
  176. "licensePlate": "License plate",
  177. "color": "Color",
  178. "mileage": "Mileage",
  179. "fuelType": "Fuel type",
  180. "transmission": "Transmission",
  181. "engineSize": "Engine size",
  182. "engineCode": "Engine code",
  183. "purchaseDate": "Purchase date",
  184. "purchasePrice": "Purchase price"
  185. },
  186. "service": {
  187. "date": "Service date",
  188. "title": "Service title",
  189. "description": "Description",
  190. "total": "Total amount",
  191. "mileage": "Mileage at service",
  192. "invoiceNumber": "Invoice number",
  193. "notes": "Service notes",
  194. "technician": "Technician"
  195. }
  196. },
  197. "issues": {
  198. "customer_name_required": "Customer name is missing",
  199. "invalid_email": "Email \"{value}\" is not valid and was left out",
  200. "invalid_vin": "VIN \"{value}\" is not 17 characters; kept as typed",
  201. "vehicle_make_model_required": "Make and model are missing",
  202. "vehicle_year_required": "Year is missing",
  203. "vehicle_year_invalid": "Year \"{value}\" is not a valid year",
  204. "vehicle_identifier_required": "No plate, VIN or make and model to identify the vehicle",
  205. "vehicle_not_found": "No existing vehicle matches \"{value}\" and there is not enough to create one",
  206. "service_date_required": "Service date is missing",
  207. "service_date_invalid": "Date \"{value}\" could not be read",
  208. "service_title_required": "Service title or description is missing",
  209. "invalid_date": "{field} \"{value}\" could not be read and was left out",
  210. "invalid_number": "{field} \"{value}\" is not a number and was left out",
  211. "duplicate_invoice_number": "Invoice number {value} already exists",
  212. "write_failed": "Could not be written: {value}"
  213. },
  214. "errors": {
  215. "uploadFailed": "The file could not be read",
  216. "aiFailed": "AI could not suggest a mapping",
  217. "dryRunFailed": "The dry run failed",
  218. "importFailed": "The import failed",
  219. "undoFailed": "Could not undo the import"
  220. },
  221. "entry": {
  222. "title": "Import from a spreadsheet",
  223. "description": "Bring customers, vehicles and service history from any system that exports CSV or Excel. Map the columns, run a dry run, then import. Every import can be undone.",
  224. "customers": "Import customers",
  225. "vehicles": "Import vehicles",
  226. "services": "Import service history"
  227. }
  228. }