dataImport.json 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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. "usedBy": "In use by {column}",
  55. "searchFields": "Search fields...",
  56. "fieldFor": "Field for {column}",
  57. "noJobText": "No column is mapped to the service title, description or notes, so every job gets a stand-in name. Map the column that says what was done, if the file has one."
  58. },
  59. "options": {
  60. "dateFormat": "Date format",
  61. "dateAuto": "Detect automatically",
  62. "dateDMY": "Day / month / year",
  63. "dateMDY": "Month / day / year",
  64. "dateYMD": "Year / month / day",
  65. "decimal": "Decimal mark",
  66. "decimalAuto": "Detect automatically",
  67. "decimalDot": "Dot (1,234.56)",
  68. "decimalComma": "Comma (1.234,56)",
  69. "countryCode": "Country code for phone numbers",
  70. "duplicates": "When a row matches an existing record",
  71. "duplicatesUpdate": "Update the existing record",
  72. "duplicatesSkip": "Skip the row",
  73. "duplicatesCreate": "Create a new record anyway",
  74. "dateReadsAs": "\"{value}\" reads as {date}",
  75. "dateUnreadable": "\"{value}\" cannot be read as a date"
  76. },
  77. "summary": {
  78. "create": "Will be created",
  79. "update": "Will be updated",
  80. "skip": "Will be skipped",
  81. "error": "Cannot be imported",
  82. "warnings": "With warnings",
  83. "customersToCreate": "{count, plural, one {# new customer} other {# new customers}}",
  84. "customersToUpdate": "{count, plural, one {# customer updated} other {# customers updated}}",
  85. "vehiclesToCreate": "{count, plural, one {# new vehicle} other {# new vehicles}}",
  86. "vehiclesToUpdate": "{count, plural, one {# vehicle updated} other {# vehicles updated}}",
  87. "servicesToCreate": "{count, plural, one {# service record} other {# service records}}"
  88. },
  89. "actions": {
  90. "create": "Create",
  91. "update": "Update",
  92. "skip": "Skip",
  93. "error": "Error"
  94. },
  95. "matchOn": {
  96. "number": "customer number",
  97. "email": "email",
  98. "phone": "phone",
  99. "name": "name",
  100. "vin": "VIN",
  101. "plate": "plate",
  102. "makeModelYear": "make, model and year"
  103. },
  104. "preview": {
  105. "colAction": "Action",
  106. "colOwner": "Owner",
  107. "colDetails": "Details",
  108. "empty": "No rows match this filter.",
  109. "matchedOn": "Matches {name} (by {on})",
  110. "linksCustomer": "Linked to customer {name}",
  111. "linksVehicle": "Linked to {label}",
  112. "sameCustomerAsRow": "Same customer as row {row}",
  113. "sameVehicleAsRow": "Same vehicle as row {row}",
  114. "createsCustomer": "Creates the customer",
  115. "createsVehicle": "Creates the vehicle",
  116. "downloadReport": "Download dry run report",
  117. "limitExceeded": "Your plan allows {remaining} more customers, but this import would create {needed}. Remove rows or upgrade your plan.",
  118. "pageInfo": "{from}–{to} of {total}",
  119. "prev": "Previous",
  120. "next": "Next",
  121. "backToMapping": "Back to mapping",
  122. "import": "Import {count, plural, one {# row} other {# rows}}",
  123. "nothingWrittenYet": "Nothing has been written yet. The import can be undone afterwards from Settings → Data.",
  124. "issuesTitle": "Why some rows cannot be imported",
  125. "issueCount": "{count, plural, one {# row} other {# rows}}, first on row {row}",
  126. "issuesHint": "Usually a column mapped to the wrong field, or cells left empty in the file. Go back to mapping to change it, or import the rest and add these later.",
  127. "showIssueRows": "Show these rows"
  128. },
  129. "importing": {
  130. "title": "Importing...",
  131. "starting": "Starting",
  132. "progress": "{done} of {total} rows",
  133. "keepOpen": "Large files take a minute or two."
  134. },
  135. "result": {
  136. "title": "Import complete",
  137. "undoneTitle": "Import undone",
  138. "created": "{count, plural, one {# record created} other {# records created}}",
  139. "updated": "{count, plural, one {# record updated} other {# records updated}}",
  140. "skipped": "{count, plural, one {# row skipped} other {# rows skipped}}",
  141. "failed": "{count, plural, one {# row not imported} other {# rows not imported}}",
  142. "writeFailures": "{count, plural, one {# row failed while writing} other {# rows failed while writing}}",
  143. "rowFailure": "Row {row}: {error}",
  144. "undo": "Undo this import",
  145. "undone": "Removed {customers} customers, {vehicles} vehicles and {services} service records.",
  146. "undoHint": "Undo removes every record this import created. Records it only updated keep their new values."
  147. },
  148. "history": {
  149. "title": "Import history",
  150. "description": "Spreadsheet imports run on this workshop. Undo removes what an import created.",
  151. "loading": "Loading...",
  152. "statusUndone": "Undone",
  153. "counts": "{created} created, {updated} updated, {skipped} skipped, {failed} failed",
  154. "undo": "Undo",
  155. "undone": "Removed {customers} customers, {vehicles} vehicles and {services} service records.",
  156. "undoFailed": "Could not undo the import",
  157. "confirmTitle": "Undo this import?",
  158. "confirmDescription": "Removes what {file} created: {customers} customers, {vehicles} vehicles and {services} service records. Records the import only updated are kept.",
  159. "cancel": "Cancel",
  160. "confirm": "Undo import"
  161. },
  162. "fields": {
  163. "customer": {
  164. "name": "Customer name",
  165. "firstName": "First name",
  166. "lastName": "Last name",
  167. "customerNumber": "Customer number",
  168. "email": "Email",
  169. "phone": "Phone",
  170. "company": "Company",
  171. "address": "Address",
  172. "street": "Street",
  173. "postalCode": "Postal code",
  174. "city": "City",
  175. "state": "State / region",
  176. "country": "Country",
  177. "taxId": "Tax ID",
  178. "notes": "Customer notes"
  179. },
  180. "vehicle": {
  181. "description": "Vehicle (year make model in one column)",
  182. "make": "Make",
  183. "model": "Model",
  184. "year": "Year",
  185. "vin": "VIN",
  186. "licensePlate": "License plate",
  187. "color": "Color",
  188. "mileage": "Mileage",
  189. "fuelType": "Fuel type",
  190. "transmission": "Transmission",
  191. "engineSize": "Engine size",
  192. "engineCode": "Engine code",
  193. "hsn": "HSN (manufacturer key)",
  194. "tsn": "TSN (type key)",
  195. "purchaseDate": "Purchase date",
  196. "purchasePrice": "Purchase price"
  197. },
  198. "service": {
  199. "date": "Service date",
  200. "title": "Service title",
  201. "description": "Description",
  202. "total": "Total amount",
  203. "mileage": "Mileage at service",
  204. "invoiceNumber": "Invoice number",
  205. "notes": "Service notes",
  206. "technician": "Technician"
  207. }
  208. },
  209. "issues": {
  210. "customer_name_required": "Customer name is missing",
  211. "invalid_email": "Email \"{value}\" is not valid and was left out",
  212. "invalid_vin": "VIN \"{value}\" is not 17 characters; kept as typed",
  213. "invalid_type_key": "{field} \"{value}\" is not a valid HSN or TSN; left out",
  214. "vehicle_make_model_required": "Make and model are missing",
  215. "vehicle_year_required": "Year is missing",
  216. "vehicle_year_invalid": "Year \"{value}\" is not a valid year",
  217. "vehicle_identifier_required": "No plate, VIN or make and model to identify the vehicle",
  218. "vehicle_not_found": "No existing vehicle matches \"{value}\" and there is not enough to create one",
  219. "service_date_required": "Service date is missing",
  220. "service_date_invalid": "Date \"{value}\" could not be read",
  221. "service_title_required": "Service title or description is missing",
  222. "invalid_date": "{field} \"{value}\" could not be read and was left out",
  223. "invalid_number": "{field} \"{value}\" is not a number and was left out",
  224. "duplicate_invoice_number": "Invoice number {value} already exists",
  225. "write_failed": "Could not be written: {value}",
  226. "invalid_mileage": "{field} \"{value}\" is too high to be a real reading and was left out",
  227. "service_title_placeholder": "No title or description, so it is named \"{value}\""
  228. },
  229. "errors": {
  230. "uploadFailed": "The file could not be read",
  231. "aiFailed": "AI could not suggest a mapping",
  232. "dryRunFailed": "The dry run failed",
  233. "importFailed": "The import failed",
  234. "undoFailed": "Could not undo the import"
  235. },
  236. "entry": {
  237. "title": "Import from a spreadsheet",
  238. "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.",
  239. "customers": "Import customers",
  240. "vehicles": "Import vehicles",
  241. "services": "Import service history"
  242. },
  243. "placeholders": {
  244. "serviceTitle": "Imported service"
  245. }
  246. }