service.json 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774
  1. {
  2. "page": {
  3. "notFound": "Registro de servicio no encontrado",
  4. "updated": "Registro de servicio actualizado",
  5. "failedUpdate": "Error al actualizar registro de servicio",
  6. "deleteTitle": "Eliminar Registro de Servicio",
  7. "deleteDescription": "Esto eliminará permanentemente este registro de servicio y todos los datos asociados. Esto no se puede deshacer.",
  8. "deleted": "Registro de servicio eliminado",
  9. "failedDelete": "Error al eliminar",
  10. "datesExpiredTitle": "Fechas de factura expiradas",
  11. "datesExpiredDescription": "La fecha de la factura o la fecha de vencimiento ha pasado. ¿Desea actualizarlas antes de continuar?",
  12. "datesExpiredUpdate": "Actualizar fechas y continuar",
  13. "datesExpiredProceed": "Continuar sin cambios",
  14. "datesExpiredUseToday": "Actualizar a la fecha de hoy",
  15. "datesExpiredCustomize": "Elegir fechas manualmente",
  16. "datesExpiredBack": "Atrás",
  17. "datesExpiredSetToday": "Establecer a hoy",
  18. "customFieldsInvalid": "Por favor complete todos los campos personalizados obligatorios",
  19. "customFieldsSaveFailed": "Error al guardar los campos personalizados",
  20. "problems": {
  21. "title": "El trabajo necesita un título antes de poder guardarse.",
  22. "negative": "Las cantidades, horas, precios y costes no pueden ser negativos.",
  23. "partName": "Toda pieza con precio necesita un nombre.",
  24. "laborDescription": "Toda línea de mano de obra con horas o tarifa necesita una descripción.",
  25. "concernCondition": "Un motivo con causa, corrección o confirmación necesita que se rellene su condición."
  26. }
  27. },
  28. "header": {
  29. "tabs": {
  30. "details": "Detalles",
  31. "images": "Imágenes",
  32. "video": "Vídeo",
  33. "documents": "Documentos",
  34. "statusReports": "Informes de estado"
  35. },
  36. "save": "Guardar",
  37. "pdf": "PDF",
  38. "email": "Correo Electrónico",
  39. "share": "Compartir",
  40. "notify": "Notificar",
  41. "delete": "Eliminar",
  42. "unpaid": "Sin Pagar",
  43. "unsavedChanges": "Cambios sin guardar",
  44. "saved": "Guardado",
  45. "joinCall": "Unirse a la videollamada",
  46. "moreActions": "Más acciones",
  47. "designMenu": "Diseño de la factura",
  48. "designMenuLoading": "Comprobando con qué diseño se imprime esta factura...",
  49. "designMenuExplain": "Se envió al cliente el {date}, así que sigue imprimiéndose con el diseño del envío. Elegir otro solo cambia el aspecto. Lo que dice la factura se mantiene tal como se envió, y el aspecto anterior no se conserva.",
  50. "designSentWith": "El diseño con el que se envió",
  51. "designFollow": "Seguir el diseño predeterminado",
  52. "designFollowNamed": "Seguir el diseño predeterminado ({name})",
  53. "designDefaultName": "el diseño predeterminado",
  54. "designPickConfirmTitle": "¿Cambiar esta factura a {name}?",
  55. "designPickConfirmBody": "Solo cambia el aspecto. Los datos del taller, el cliente, las condiciones de pago y los importes se mantienen tal como se enviaron. El diseño actual no se conserva, así que esto no se puede deshacer.",
  56. "designPickConfirm": "Cambiar el diseño",
  57. "designPickDone": "La factura ya se imprime con {name}",
  58. "designPickFailed": "No se pudo cambiar el diseño",
  59. "designRefresh": "Actualizar a los datos actuales",
  60. "designRefreshConfirmTitle": "¿Actualizar esta factura a los datos actuales?",
  61. "designRefreshConfirmBody": "Los datos del taller, el cliente, el vehículo, las condiciones de pago y el diseño se vuelven a leer tal como están hoy, y la factura queda bloqueada con ellos. Sus líneas y totales son propios de la factura y no cambian. Las copias ya descargadas o enviadas por correo se mantienen como estaban; el enlace compartido y el portal muestran la factura actualizada. Esto no se puede deshacer.",
  62. "designRefreshConfirm": "Actualizar la factura",
  63. "designRefreshDone": "Esta factura ahora se imprime con los datos actuales",
  64. "designRefreshFailed": "No se pudo actualizar la factura",
  65. "printWorkOrder": "Imprimir orden de trabajo"
  66. },
  67. "basicInfo": {
  68. "title": "Información Básica",
  69. "invoiceDetails": "Detalles de factura",
  70. "customerInfo": "Cliente y vehículo",
  71. "paid": "Pagado",
  72. "markPaid": "Marcar como pagado",
  73. "markUnpaid": "Marcar como no pagado",
  74. "vehicle": "Vehículo",
  75. "open": "Abierto",
  76. "customer": "Cliente",
  77. "titleLabel": "Título *",
  78. "titlePlaceholder": "Cambio de Aceite",
  79. "date": "Fecha",
  80. "type": "Tipo",
  81. "mileage": "Millaje",
  82. "mileageMarine": "Horas de Motor",
  83. "status": "Estado",
  84. "technician": "Técnico",
  85. "invoiceNumber": "Número de Factura",
  86. "invoiceDate": "Fecha de factura",
  87. "invoiceDueDate": "Fecha de vencimiento",
  88. "typeOptions": {
  89. "maintenance": "Mantenimiento",
  90. "repair": "Reparación",
  91. "upgrade": "Mejora",
  92. "inspection": "Inspección"
  93. },
  94. "statusOptions": {
  95. "pending": "Pendiente",
  96. "in_progress": "En Progreso",
  97. "waiting_parts": "Esperando Piezas",
  98. "completed": "Completado"
  99. },
  100. "searchVehicles": "Buscar vehículos...",
  101. "noVehicleFound": "Vehículo no encontrado.",
  102. "techPicker": {
  103. "placeholder": "Seleccionar o escribir un nombre...",
  104. "searchPlaceholder": "Buscar o escribir nombre...",
  105. "useCustom": "Usar \"{search}\"",
  106. "typePrompt": "Escriba un nombre...",
  107. "boardTechnicians": "Técnicos del Tablero",
  108. "teamMembers": "Miembros del Equipo"
  109. },
  110. "design": "Diseño de factura",
  111. "designDefault": "Predeterminado del taller",
  112. "designFollowing": "Predeterminado ({name})",
  113. "designSaved": "Diseño de factura actualizado",
  114. "designFollowingRule": "Predeterminado ({name}, {rule})",
  115. "designRule": {
  116. "parts_sale": "Venta solo de piezas"
  117. },
  118. "designSaveFailed": "No se pudo cambiar el diseño de la factura"
  119. },
  120. "parts": {
  121. "title": "Piezas",
  122. "fromInventory": "Del Inventario",
  123. "addPart": "Agregar Pieza",
  124. "partNumber": "N° de Pieza",
  125. "category": "Categoría",
  126. "name": "Nombre",
  127. "qty": "Cantidad",
  128. "unitCost": "Costo",
  129. "unitCostHint": "Costo del proveedor (interno — no se muestra al cliente)",
  130. "markupPercent": "Margen %",
  131. "markupPercentHint": "Margen aplicado al costo (interno — no se muestra al cliente)",
  132. "applyMarkup": "Aplicar {percent}%",
  133. "applyMarkupHint": "Volver a aplicar {percent}% de margen al costo en cada fila",
  134. "unitPrice": "Precio Unitario",
  135. "total": "Total",
  136. "namePlaceholder": "Nombre *",
  137. "subtotal": "Subtotal de Piezas: {amount}",
  138. "inventoryTitle": "Seleccionar Pieza del Inventario",
  139. "searchInventory": "Buscar en inventario...",
  140. "inStock": "{quantity} en stock",
  141. "noInventory": "No se encontraron piezas de inventario.",
  142. "scanBarcode": "Escanear",
  143. "scanTitle": "Escanear código de barras",
  144. "partFound": "\"{name}\" añadido del inventario",
  145. "partNotFound": "No se encontró pieza para el código de barras \"{barcode}\"",
  146. "deleteRow": "Eliminar fila",
  147. "outOfStock": "Agotado",
  148. "onBackorder": "En pedido pendiente ({count})",
  149. "nameMissingHint": "Las filas sin nombre de pieza no se guardan."
  150. },
  151. "labor": {
  152. "title": "Mano de Obra",
  153. "addLabor": "Agregar Mano de Obra",
  154. "fromPresets": "Desde plantillas",
  155. "description": "Descripción",
  156. "hours": "Horas",
  157. "rate": "Tarifa ({currency}/hr)",
  158. "total": "Total",
  159. "descriptionPlaceholder": "Descripción *",
  160. "subtotal": "Subtotal de Mano de Obra: {amount}",
  161. "addService": "Agregar Servicio",
  162. "addFinding": "Observación",
  163. "newObservation": "Nueva observación",
  164. "addExisting": "Ver existentes ({count})",
  165. "qty": "Cantidad",
  166. "qtyOrHours": "Unidad / Horas",
  167. "hourlyTag": "HR",
  168. "serviceTag": "SVC",
  169. "hourlyHint": "Por horas: se calcula por las horas trabajadas (horas × tarifa/h). Haz clic para cambiar.",
  170. "serviceHint": "Servicio: se cobra como tarifa fija por unidad. Haz clic para cambiar.",
  171. "deleteRow": "Eliminar fila",
  172. "descriptionMissingHint": "Las filas sin descripción no se guardan.",
  173. "shopFeeTag": "Cargo",
  174. "shopFeeHintFlat": "El cargo de taller de Ajustes, como importe fijo. Cambia el precio para este trabajo o borra la línea para quitarlo.",
  175. "shopFeeHintPercentLabor": "El cargo de taller de Ajustes: {percent} % de la mano de obra de este trabajo. Borra la línea para quitarlo.",
  176. "shopFeeHintPercentAll": "El cargo de taller de Ajustes: {percent} % de la mano de obra y las piezas de este trabajo. Borra la línea para quitarlo."
  177. },
  178. "liveLabor": {
  179. "title": "{count, plural, one {Un técnico añadió mano de obra a este trabajo} other {Un técnico añadió # líneas de mano de obra a este trabajo}}",
  180. "body": "Se mantiene fuera de la lista mientras editas. Se guardará de todos modos al guardar.",
  181. "show": "Mostrar"
  182. },
  183. "totals": {
  184. "title": "Totales",
  185. "parts": "Piezas",
  186. "labor": "Mano de Obra",
  187. "subtotal": "Subtotal",
  188. "subtotalInclTax": "Subtotal (con impuesto)",
  189. "discount": "Descuento",
  190. "discountNone": "Ninguno",
  191. "discountOff": "No",
  192. "discountPercentage": "Porcentaje",
  193. "discountFixed": "Fijo",
  194. "tax": "Impuesto",
  195. "taxIncluded": "Impuesto (incl.)",
  196. "taxableAmount": "Base imponible",
  197. "total": "Total",
  198. "inclusiveModeHint": "Los precios por línea se introducen con impuesto incluido. Los totales muestran el desglose neto + impuesto.",
  199. "partsCost": "Costo de repuestos (interno)"
  200. },
  201. "lineTax": {
  202. "label": "Impuesto en esta línea",
  203. "taxedTag": "IMP.",
  204. "untaxedTag": "SIN IMP.",
  205. "taxedHint": "Esta línea lleva impuesto. Haz clic para dejarla fuera del impuesto.",
  206. "untaxedHint": "Esta línea no lleva impuesto. Haz clic para aplicarlo."
  207. },
  208. "taxOffer": {
  209. "noTax": "Esto se creó sin impuesto. El taller cobra ahora un {rate} %.",
  210. "otherRate": "Esto está al {current} %. El taller cobra ahora un {rate} %.",
  211. "apply": "Aplicar {rate} % de impuesto",
  212. "failed": "No se pudo actualizar el impuesto",
  213. "saveFirst": "Guarda primero los cambios y después aplica el impuesto."
  214. },
  215. "notes": {
  216. "title": "Notas",
  217. "public": "Público",
  218. "internal": "Interno",
  219. "publicPlaceholder": "Notas visibles en la factura...",
  220. "internalPlaceholder": "Notas internas (no mostradas en la factura)...",
  221. "publicHelper": "Se muestra en la factura y documentos compartidos",
  222. "internalHelper": "Solo visible para su equipo",
  223. "aiWrite": "AI Escribir",
  224. "aiGenerated": "Notas AI generadas exitosamente",
  225. "aiGenerateFailed": "Error al generar notas AI",
  226. "aiDialogTitle": "IA Escribir",
  227. "aiDialogDescription": "La IA analizará las piezas y la mano de obra en este registro de servicio y generará una descripción profesional. El resultado se escribirá en el tipo de nota seleccionado.",
  228. "aiGenerate": "Generar",
  229. "aiOverwriteDescription": "Esta nota ya tiene contenido. Puede reemplazarlo o agregar el texto generado por IA debajo.",
  230. "aiOverwriteReplace": "Reemplazar",
  231. "aiOverwriteAppend": "Agregar",
  232. "aiOverwriteCancel": "Cancelar",
  233. "aiDontShowAgain": "No mostrar de nuevo",
  234. "internalTitle": "Notas internas",
  235. "publicTitle": "Notas para el cliente"
  236. },
  237. "invoice": {
  238. "title": "Resumen de Factura",
  239. "parts": "Piezas",
  240. "labor": "Mano de Obra",
  241. "subtotal": "Subtotal",
  242. "subtotalInclTax": "Subtotal (con impuesto)",
  243. "discount": "Descuento",
  244. "tax": "Impuesto ({rate}%)",
  245. "taxIncluded": "Impuesto (incl., {rate}%)",
  246. "taxableAmount": "Base imponible",
  247. "total": "Total",
  248. "paid": "Pagado",
  249. "balanceDue": "Saldo Pendiente",
  250. "paidBadge": "PAGADO",
  251. "entityLabel": "Factura",
  252. "emailSubject": "Confirmación de Pago",
  253. "statusEmailSubject": "Actualización del estado del servicio",
  254. "markCompletedTitle": "¿Marcar esta factura como completada?",
  255. "markCompletedDescription": "Ya se ha enviado al cliente, pero sigue marcada como no terminada, así que continuará apareciendo en el tablero.",
  256. "markCompletedConfirm": "Marcar como completada",
  257. "lockedFieldsetLabel": "Factura bloqueada, edición desactivada"
  258. },
  259. "payments": {
  260. "title": "Pagos",
  261. "markUnpaid": "Marcar como Sin Pagar",
  262. "markPaid": "Marcar como Pagado",
  263. "recordPayment": "Registrar Pago",
  264. "totalPaid": "Total Pagado",
  265. "amount": "Cantidad",
  266. "date": "Fecha",
  267. "method": "Método",
  268. "note": "Nota",
  269. "notePlaceholder": "Nota opcional",
  270. "savePayment": "Guardar Pago",
  271. "methodOptions": {
  272. "cash": "Efectivo",
  273. "card": "Tarjeta",
  274. "transfer": "Transferencia",
  275. "other": "Otro"
  276. },
  277. "recorded": "Pago registrado",
  278. "markedPaid": "Marcado como pagado",
  279. "markedUnpaid": "Marcado como sin pagar",
  280. "deleted": "Pago eliminado",
  281. "failedRecord": "Error al registrar pago",
  282. "failedStatus": "Error al actualizar estado del pago",
  283. "failedDelete": "Error al eliminar pago",
  284. "deleteTitle": "Eliminar Pago",
  285. "deleteDescription": "Esto eliminará este registro de pago.",
  286. "failedPdf": "Error al generar factura en PDF",
  287. "received": "Pagos recibidos",
  288. "noneYet": "Todavía no se ha pagado nada.",
  289. "balanceDue": "Saldo pendiente"
  290. },
  291. "attachments": {
  292. "deleteTitle": "Eliminar Archivo",
  293. "deleteDescription": "Esto eliminará permanentemente este archivo. Esto no se puede deshacer.",
  294. "deleted": "Archivo eliminado",
  295. "failedDelete": "Error al eliminar",
  296. "images": "Imágenes ({count})",
  297. "videos": "Vídeos ({count})",
  298. "diagnostics": "Reportes de Diagnóstico ({count})",
  299. "documents": "Documentos ({count})",
  300. "download": "Descargar",
  301. "close": "Cerrar"
  302. },
  303. "share": {
  304. "title": "Compartir Factura",
  305. "description": "Genere un enlace público que permita a cualquiera ver y descargar esta factura sin iniciar sesión.",
  306. "notifyTitle": "Notificar a {name}",
  307. "email": "Correo Electrónico",
  308. "noEmail": "(sin correo electrónico registrado)",
  309. "sms": "SMS",
  310. "noPhone": "(sin teléfono registrado)",
  311. "sendNotification": "Enviar Notificación",
  312. "revokeLink": "Revocar Enlace",
  313. "generateLink": "Generar Enlace Público",
  314. "emailSent": "Correo electrónico enviado",
  315. "failedEmail": "Error al enviar correo electrónico",
  316. "smsSent": "SMS enviado",
  317. "failedSms": "Error al enviar SMS",
  318. "copyLink": "Copiar enlace"
  319. },
  320. "sidebar": {
  321. "vehicle": "Vehículo",
  322. "customer": "Cliente",
  323. "vin": "VIN: {vin}",
  324. "mileageAtService": "Millaje en el servicio: {mileage} {unit}",
  325. "engineHoursAtService": "Horas de motor en servicio: {mileage} {unit}",
  326. "sharedLink": {
  327. "title": "Enlace compartido",
  328. "sharedOn": "Compartido el {date}",
  329. "notViewed": "Aún no visto",
  330. "viewedTimes": "Visto {count, plural, one {# vez} other {# veces}}",
  331. "lastViewed": "Último {date}",
  332. "copyLink": "Copiar enlace",
  333. "linkCopied": "Enlace copiado"
  334. }
  335. },
  336. "images": {
  337. "title": "Imágenes del Servicio",
  338. "dropzone": "Arrastra imágenes aquí o haz clic para explorar",
  339. "uploading": "Subiendo...",
  340. "formats": "JPG, PNG, WebP — máx. 10MB cada una",
  341. "uploadingImages": "Subiendo imágenes...",
  342. "limitReached": "Límite de imágenes alcanzado ({count}/{max})",
  343. "upgradePrompt": "Actualiza tu plan para subir más imágenes.",
  344. "onlyAllowed": "Solo se permiten imágenes JPG, PNG y WebP. {names} omitidas.",
  345. "onlyUploading": "Solo se subirán {count} imagen(es) para no exceder el límite.",
  346. "uploadingCount": "Subiendo {count} imagen(es)...",
  347. "uploadedCount": "{count} imagen(es) subida(s)",
  348. "uploadFailed": "Error al subir",
  349. "deleted": "Imagen eliminada",
  350. "failedDelete": "Error al eliminar imagen",
  351. "failedUpdate": "Error al actualizar",
  352. "description": "Descripción...",
  353. "invoice": "Factura"
  354. },
  355. "videos": {
  356. "title": "Videos del Servicio",
  357. "dropzone": "Arrastra videos aquí o haz clic para explorar",
  358. "uploading": "Subiendo...",
  359. "formats": "MP4, WebM, MOV — máx. 10MB cada uno",
  360. "uploadingVideos": "Subiendo videos...",
  361. "uploadingCount": "Subiendo {count} video(s)...",
  362. "uploadedCount": "{count} video(s) subido(s)",
  363. "uploadFailed": "Error al subir",
  364. "deleted": "Video eliminado",
  365. "failedDelete": "Error al eliminar video",
  366. "failedUpdate": "Error al actualizar",
  367. "invoice": "Factura"
  368. },
  369. "documents": {
  370. "diagnosticTitle": "Reportes de Diagnóstico",
  371. "documentsTitle": "Documentos",
  372. "dropzone": "Arrastra archivos aquí o haz clic para explorar",
  373. "uploading": "Subiendo...",
  374. "diagnosticFormats": "PDF, CSV, TXT — máx. 10MB cada uno",
  375. "documentFormats": "PDF, DOCX, XLSX, CSV, TXT — máx. 10MB cada uno",
  376. "uploadingReports": "Subiendo reportes...",
  377. "uploadingDocuments": "Subiendo documentos...",
  378. "diagnosticLimitReached": "Límite de reportes de diagnóstico alcanzado ({count}/{max})",
  379. "documentLimitReached": "Límite de documentos alcanzado ({count}/{max})",
  380. "upgradePrompt": "Actualiza tu plan para subir más.",
  381. "diagnosticLabel": "Reporte de diagnóstico",
  382. "documentLabel": "Documento",
  383. "limitReachedToast": "Límite de {label} alcanzado ({count}/{max}). Actualiza tu plan para más.",
  384. "onlyUploading": "Solo se subirán {count} archivo(s) para no exceder el límite.",
  385. "uploadingCount": "Subiendo {count} archivo(s)...",
  386. "uploadedCount": "{count} archivo(s) subido(s)",
  387. "uploadFailed": "Error al subir",
  388. "deleted": "Archivo eliminado",
  389. "failedDelete": "Error al eliminar archivo",
  390. "failedUpdate": "Error al actualizar",
  391. "invoice": "Factura"
  392. },
  393. "schedule": {
  394. "title": "Horario",
  395. "date": "Fecha",
  396. "startTime": "Hora de inicio",
  397. "endTime": "Hora de fin",
  398. "durationPresets": "Duración",
  399. "technician": "Técnico",
  400. "selectTechnician": "Seleccionar técnico...",
  401. "searchOrCreate": "Buscar o crear técnico...",
  402. "createTechnician": "Crear \"{name}\"",
  403. "creating": "Creando...",
  404. "failedCreate": "Error al crear técnico",
  405. "addNew": "+ Agregar nuevo",
  406. "add": "Agregar",
  407. "newTechPlaceholder": "Nombre del técnico...",
  408. "assign": "Asignar al tablero",
  409. "assigned": "Asignado al tablero de trabajo",
  410. "failedAssign": "Error al asignar",
  411. "assignNotAllowed": "No tienes permiso para asignar técnicos. Pide a un propietario o administrador que permita a tu rol modificar el tablero de trabajo.",
  412. "endBeforeStart": "La hora de fin debe ser posterior a la hora de inicio",
  413. "failedUpdate": "Error al actualizar el horario",
  414. "splitCreated": "El trabajo abarca varios días — continuación creada para el día siguiente",
  415. "customTechnicians": "Personalizados",
  416. "readMore": "Leer más",
  417. "setDefaults": "Configurar valores",
  418. "workBay": "Puesto de trabajo",
  419. "selectWorkBay": "Seleccionar puesto…",
  420. "noWorkBay": "Sin puesto",
  421. "noTechnician": "Sin técnico",
  422. "technicians": "Técnicos",
  423. "otherTeamMembers": "Otros miembros del equipo",
  424. "makeTechnician": "Lo convierte en técnico",
  425. "addSomeoneNew": "Añadir a alguien nuevo",
  426. "notOnBoard": "Aún no está en el tablero",
  427. "putOnBoard": "Poner en el tablero",
  428. "slotTaken": "{count, plural, one {Esta franja ya está reservada} other {Esta franja tiene # conflictos}}",
  429. "anotherJob": "otro trabajo",
  430. "clashTechnician": "el técnico está ocupado",
  431. "clashBay": "la bahía está ocupada",
  432. "clashBoth": "ambos están ocupados",
  433. "bookedAnyway": "Guardado igualmente. Cambia la hora o elige la siguiente franja libre.",
  434. "pickNextAvailable": "Elegir la siguiente franja libre",
  435. "findingSlot": "Buscando una franja…",
  436. "slotPicked": "Reservado en la siguiente franja libre",
  437. "noSlotFound": "No se encontró ninguna franja libre en las próximas semanas",
  438. "assignedTitle": "Técnico asignado",
  439. "boardLink": "Tablero de trabajo",
  440. "someoneElse": "Otra persona",
  441. "loadOf": "{booked} / {capacity} h",
  442. "loadFree": "{hours} h libres",
  443. "loadFull": "Completo",
  444. "loadOn": "Horas reservadas el {date}",
  445. "promisedAt": "Prometido al cliente",
  446. "promisedPlaceholder": "Sin prometer todavía",
  447. "promisedClear": "Borrar"
  448. },
  449. "notifications": {
  450. "title": "Notificaciones al cliente",
  451. "viaSms": "por SMS",
  452. "viaEmail": "por correo",
  453. "justNow": "Ahora mismo",
  454. "minutesAgo": "hace {count}m",
  455. "hoursAgo": "hace {count}h",
  456. "daysAgo": "hace {count}d"
  457. },
  458. "table": {
  459. "warranty": "Garantía"
  460. },
  461. "warranty": {
  462. "title": "Garantía",
  463. "months": "Duración (meses)",
  464. "notes": "Términos de garantía",
  465. "notesPlaceholder": "ej. Garantía de 12 meses en todas las piezas y mano de obra...",
  466. "expiresAt": "Vence",
  467. "presets": {
  468. "3months": "3 m",
  469. "6months": "6 m",
  470. "12months": "12 m",
  471. "24months": "24 m"
  472. },
  473. "status": {
  474. "active": "Activa",
  475. "expiring": "Por vencer",
  476. "expired": "Vencida",
  477. "none": "N/A"
  478. },
  479. "statementLabel": "Lo que se le dice al cliente sobre la garantía",
  480. "statement": {
  481. "none": "Sin indicar",
  482. "included": "Incluida",
  483. "not_included": "No incluida"
  484. },
  485. "noneHint": "En este documento no se imprime nada sobre la garantía.",
  486. "mileageWithUnit": "Límite de distancia ({unit})",
  487. "notIncludedNotes": "Declaración al cliente",
  488. "notIncludedPlaceholder": "p. ej. El taller no ofrece garantía sobre piezas aportadas por el cliente.",
  489. "printedHint": "Se imprime bajo la garantía en el documento.",
  490. "notIncludedHint": "Si lo deja vacío, el documento dice que los derechos legales no se ven afectados.",
  491. "summaryMonths": "{count} m."
  492. },
  493. "concerns": {
  494. "title": "Motivos del cliente",
  495. "hint": "Por qué vino el cliente, con sus propias palabras. Una fila por cada cosa que mencionó.",
  496. "add": "Añadir otro",
  497. "placeholder": "Hace un ruido detrás cuando freno",
  498. "remove": "Quitar este punto",
  499. "notAnswered": "Todavía no se ha encontrado nada",
  500. "answered": "{count} hallazgo(s) sobre esto",
  501. "storyTitle": "Descripción del trabajo",
  502. "storyHint": "Condición, causa, corrección, confirmación. Haz clic en un paso para abrirlo; una fila por cada cosa que mencionó el cliente o que observaste.",
  503. "steps": {
  504. "condition": "Condición",
  505. "cause": "Causa",
  506. "correction": "Corrección",
  507. "confirm": "Confirmación"
  508. },
  509. "conditionPlaceholder": "Lo que informó el cliente o lo que observaste",
  510. "causePlaceholder": "Qué causa raíz mostraron las pruebas",
  511. "correctionPlaceholder": "Qué se hizo para repararlo",
  512. "confirmPlaceholder": "Cómo se comprobó la reparación: prueba de conducción, nuevo escaneo, síntoma desaparecido",
  513. "markConfirmed": "Confirmado",
  514. "confirmedBy": "Confirmado por {name}, {date}",
  515. "confirmedAt": "Confirmado el {date}",
  516. "confirmedOnSave": "Se firma con tu nombre al guardar",
  517. "confirmedCount": "{confirmed} de {total} confirmados",
  518. "findingsCount": "{count, plural, one {# observación} other {# observaciones}}",
  519. "addFinding": "Añadir observación",
  520. "unconfirmedTitle": "¿Completar con motivos sin confirmar?",
  521. "unconfirmedBody": "{count, plural, one {Un motivo no se ha confirmado como reparado:} other {# motivos no se han confirmado como reparados:}}",
  522. "unconfirmedProceed": "Completar igualmente",
  523. "addMedia": "Añadir fotos o vídeo",
  524. "mediaUploading": "Subiendo…",
  525. "mediaAdded": "{count, plural, one {# archivo añadido} other {# archivos añadidos}}",
  526. "mediaFailed": "No se pudo subir {name}",
  527. "mediaTypes": "Elige una foto (JPG, PNG, WebP) o un vídeo.",
  528. "dictate": {
  529. "start": "Dictar",
  530. "listening": "Escuchando",
  531. "startHint": "Habla y se escribe aquí. No se graba nada.",
  532. "stopHint": "Dejar de escuchar",
  533. "notAllowed": "El navegador no tiene permiso para usar el micrófono. Permítelo para este sitio e inténtalo de nuevo.",
  534. "noMicrophone": "No se encontró ningún micrófono.",
  535. "failed": "El dictado se detuvo. Inténtalo de nuevo.",
  536. "startHintServer": "Habla y se escribe mientras hablas. El audio va a tu modelo de voz para transcribirlo y no se guarda.",
  537. "transcribing": "Terminando…",
  538. "language": "Idioma hablado",
  539. "auto": "Auto",
  540. "nothingHeard": "No se oyó nada.",
  541. "fellBack": "Usando por ahora el dictado del propio navegador.",
  542. "autoLong": "Auto (detectar el idioma)",
  543. "engine": "Transcrito por",
  544. "engineAi": "Modelo de voz (más preciso)",
  545. "engineBrowser": "Navegador (escribe mientras hablas)",
  546. "liveFellBack": "Escribiendo en tramos de unos segundos en lugar de palabra por palabra."
  547. },
  548. "stepEmpty": "Sin escribir todavía",
  549. "removeTitle": "¿Quitar este motivo?",
  550. "removeBody": "Su condición, causa, corrección y confirmación se eliminan con él al guardar la orden de trabajo.",
  551. "removeAttached": "Sus observaciones y archivos siguen en el trabajo, ya no archivados bajo un motivo.",
  552. "removeConfirm": "Quitar motivo",
  553. "saveFirst": "Guarda primero la orden de trabajo"
  554. },
  555. "videoCall": {
  556. "title": "Videollamada",
  557. "none": "Esta orden de trabajo no tiene videollamada.",
  558. "needsSchedule": "Defina primero una hora de inicio. La reunión sigue la programación.",
  559. "add": "Añadir reunión de {provider}",
  560. "addedHere": "añadida desde esta orden de trabajo",
  561. "fromCalendar": "del evento del calendario",
  562. "join": "Unirse",
  563. "copy": "Copiar enlace",
  564. "copied": "Enlace copiado",
  565. "remove": "Eliminar",
  566. "removeTitle": "¿Eliminar la videollamada?",
  567. "removeDescription": "La reunión se elimina en el proveedor. Quien ya tenga el enlace no podrá unirse.",
  568. "created": "Reunión creada. El enlace está en la orden de trabajo.",
  569. "removed": "Reunión eliminada",
  570. "failed": "Algo salió mal",
  571. "shareHint": "El cliente solo recibe este enlace cuando lo envías.",
  572. "shareHintNoChannel": "El cliente solo recibe este enlace cuando lo envías. No hay ningún canal de mensajes configurado, así que cópialo tú en un mensaje.",
  573. "send": {
  574. "button": "Enviar al cliente",
  575. "title": "Enviar el enlace de la videollamada",
  576. "description": "Enviar el enlace para unirse a {name}.",
  577. "messageLabel": "Nota (opcional)",
  578. "messagePlaceholder": "Lo que el cliente deba saber antes de la llamada...",
  579. "linkAlwaysIncluded": "El enlace para unirse se añade siempre debajo de tu nota.",
  580. "sms": "SMS",
  581. "email": "Correo",
  582. "telegram": "Telegram",
  583. "noPhone": "(sin teléfono)",
  584. "noEmail": "(sin correo)",
  585. "noTelegram": "(sin chat vinculado)",
  586. "notAvailable": "(no configurado)",
  587. "cancel": "Cancelar",
  588. "send": "Enviar",
  589. "sent": "Enlace de la videollamada enviado",
  590. "partlySent": "Enviado por {sent}; no por {failed}",
  591. "failed": "No se pudo enviar el enlace"
  592. },
  593. "notify": {
  594. "invitation": "Hola {name}, tu videollamada sobre el {vehicle} es el {when}. Únete aquí: {url}",
  595. "invitationNoTime": "Hola {name}, aquí tienes el enlace de la videollamada sobre el {vehicle}: {url}",
  596. "joinLine": "Únete a la videollamada aquí: {url}",
  597. "emailSubject": "Videollamada sobre tu {vehicle}"
  598. }
  599. },
  600. "modern": {
  601. "statusLabel": "Estado de la orden de trabajo",
  602. "back": "Atrás",
  603. "backToClassic": "Volver al diseño clásico",
  604. "openCustomer": "Abrir cliente",
  605. "serviceHistory": "Historial de servicio",
  606. "changeVehicle": "Cambiar vehículo",
  607. "vehicleChangesOnSave": "La orden de trabajo pasa a este vehículo al guardar.",
  608. "phone": "Teléfono",
  609. "email": "Correo electrónico",
  610. "notSet": "Sin definir",
  611. "noCustomer": "No hay cliente en esta orden de trabajo.",
  612. "invoiceTitle": "Factura y pago",
  613. "filesTitle": "Archivos y multimedia",
  614. "activity": {
  615. "title": "Actividad",
  616. "messageSent": "Mensaje enviado al cliente",
  617. "linkShared": "Enlace de la factura compartido",
  618. "linkViewed": "{count, plural, one {El cliente abrió el enlace} other {El cliente abrió el enlace # veces}}",
  619. "paymentTaken": "Pago de {amount} registrado",
  620. "statusSet": "Estado cambiado a {status}"
  621. },
  622. "invite": {
  623. "title": "La página de la orden de trabajo se ha renovado.",
  624. "body": "Un diseño más claro con los mismos campos. Puedes volver al anterior cuando quieras.",
  625. "try": "Probar ahora",
  626. "dismiss": "Ahora no",
  627. "menu": "Probar el nuevo diseño"
  628. },
  629. "promised": "Prometido el {date}",
  630. "promisedOverdue": "Prometido el {date}, con retraso",
  631. "opened": "Abierta el {date}",
  632. "openedBy": "Abierta el {date} por {name}",
  633. "editTitle": "Editar título",
  634. "titleField": "Título",
  635. "media": {
  636. "tabs": {
  637. "all": "Todo",
  638. "photos": "Fotos",
  639. "diagnostics": "Diagnóstico",
  640. "dropoff": "Recepción"
  641. },
  642. "summary": "{count, plural, one {# archivo} other {# archivos}} · se comparten con el cliente solo si se marcan",
  643. "customerCanSee": "Visible para el cliente",
  644. "showToCustomer": "Mostrar al cliente",
  645. "hideFromCustomer": "Ocultar al cliente",
  646. "add": {
  647. "all": "Añadir archivos",
  648. "image": "Añadir fotos",
  649. "document": "Añadir documentos",
  650. "diagnostic": "Añadir informe de diagnóstico",
  651. "video": "Añadir vídeo",
  652. "dropoff": "Añadir fotos de recepción"
  653. },
  654. "dropHint": "Suelta archivos aquí o haz clic para explorar",
  655. "added": "{count, plural, one {# archivo añadido} other {# archivos añadidos}}",
  656. "failed": "No se pudo subir {name}",
  657. "wrongType": "No es el tipo de archivo adecuado para esta pestaña: {names}",
  658. "limit": "Límite alcanzado ({count}/{max})",
  659. "dropoffHint": "El coche tal como llegó, con la hora de cada foto. Se guarda para el taller y no se muestra al cliente salvo que usted lo decida.",
  660. "onInvoice": "Incluir el estado del vehículo en esta factura",
  661. "onInvoiceHint": "Desactivado salvo que lo marque aquí. Para imprimirlo en todas las facturas, active Estado del vehículo en el diseñador de facturas.",
  662. "onInvoiceByDesign": "Activado en el diseñador de facturas para todas las facturas. Desmarque para omitirlo en esta.",
  663. "onInvoiceFailed": "No se pudo guardar la opción"
  664. },
  665. "moneyBar": {
  666. "total": "Total",
  667. "paid": "Pagado",
  668. "balance": "Saldo pendiente",
  669. "settled": "Pagado por completo",
  670. "takePayment": "Cobrar",
  671. "preview": "Vista previa de la factura",
  672. "previewShort": "Vista previa",
  673. "send": "Enviar al cliente",
  674. "sendShort": "Enviar"
  675. },
  676. "vehicleInfo": {
  677. "more": "Más información",
  678. "less": "Menos información",
  679. "copy": "Copiar {label}",
  680. "copied": "Copiado",
  681. "lastInspection": "Última inspección periódica",
  682. "purchaseDate": "Fecha de compra",
  683. "purchasePrice": "Precio de compra",
  684. "overdue": "vencida",
  685. "customerSince": "Cliente desde"
  686. },
  687. "moreStatuses": "Más estados",
  688. "addStatus": "Añadir estado",
  689. "fromInspection": "De la inspección {name}, {date}",
  690. "fromQuote": "Del presupuesto {ref}",
  691. "startInspection": "Iniciar inspección"
  692. },
  693. "photoHandoff": {
  694. "button": "Añadir desde el móvil",
  695. "dialogTitle": "Añadir fotos y documentos desde un móvil",
  696. "dialogBody": "Haz o elige fotos, o comparte un PDF, con cualquier móvil. Todo llega directamente a esta orden de trabajo.",
  697. "expires": "El código funciona hasta las {time}.",
  698. "waiting": "Esperando fotos y documentos…",
  699. "received": "{count, plural, one {# archivo recibido} other {# archivos recibidos}}",
  700. "copyLink": "Copiar enlace",
  701. "linkCopied": "Enlace copiado",
  702. "failed": "No se pudo crear un código. Inténtalo de nuevo.",
  703. "done": "Hecho",
  704. "pageTitle": "Añadir fotos y documentos",
  705. "forJob": "Orden de trabajo {number}",
  706. "takePhoto": "Hacer foto",
  707. "choosePhotos": "Elegir fotos",
  708. "hint": "Todo llega directamente a la orden de trabajo. Haz todas las fotos que necesites.",
  709. "uploading": "Subiendo…",
  710. "added": "Añadida",
  711. "notAdded": "No añadida",
  712. "retry": "Inténtalo de nuevo",
  713. "addedCount": "{count, plural, one {# archivo añadido} other {# archivos añadidos}}",
  714. "expiredTitle": "Este código ha caducado",
  715. "invalidTitle": "Este enlace no funciona",
  716. "errors": {
  717. "expired": "Pide un código nuevo en el mostrador. Cada uno funciona durante 30 minutos.",
  718. "invalid": "Vuelve a escanear el código de la orden de trabajo.",
  719. "limit": "Esta orden de trabajo ya tiene todas las fotos que admite.",
  720. "type": "Aquí solo se pueden añadir fotos y documentos PDF.",
  721. "tooLarge": "Ese archivo es demasiado grande.",
  722. "failed": "La foto no se añadió. Comprueba la conexión e inténtalo de nuevo.",
  723. "codeLimit": "Este código ya ha añadido todas las fotos que permite un código. Escanea un código nuevo en el mostrador."
  724. },
  725. "concernHeading": "Las fotos van a este motivo",
  726. "howTitle": "Cómo funciona",
  727. "step1": "Apunta la cámara del móvil al código y abre el enlace.",
  728. "step2": "Haz fotos o elige fotos o documentos PDF que ya estén en el móvil.",
  729. "step3": "Aparecen en esta orden de trabajo en cuanto llegan.",
  730. "noSignIn": "No hace falta iniciar sesión en el móvil.",
  731. "customerToo": "Lo puede usar el personal, y también el cliente: deja que escanee el código o envíale el enlace.",
  732. "scope": "El enlace solo añade fotos y documentos a esta orden de trabajo y deja de funcionar a los 30 minutos.",
  733. "scanHint": "Escanea con la cámara del móvil",
  734. "chooseDocument": "Subir un documento",
  735. "privacy": "Solo el taller ve lo que añades aquí.",
  736. "dropoff": {
  737. "button": "Fotos de recepción",
  738. "dialogTitle": "Fotografiar el coche a su llegada",
  739. "dialogBody": "Una vuelta al coche antes de empezar: los cuatro lados, el cuentakilómetros y los daños que ya tenga. Es su prueba si algún día se discute un arañazo.",
  740. "step2": "Siga la lista en el móvil: una foto de cada lado, el cuentakilómetros y los daños.",
  741. "scope": "El enlace solo añade fotos de recepción a esta orden de trabajo y deja de funcionar a los 30 minutos.",
  742. "pageTitle": "El coche a su llegada",
  743. "pageBody": "Haga cada foto por orden. Añada un primer plano de los daños que ya existan.",
  744. "retake": "Repetir",
  745. "slots": {
  746. "front": "Frontal",
  747. "right": "Lado derecho",
  748. "rear": "Trasera",
  749. "left": "Lado izquierdo",
  750. "odometer": "Cuentakilómetros",
  751. "other": "Daño u otro"
  752. }
  753. }
  754. },
  755. "payCode": {
  756. "button": "Código de pago",
  757. "title": "Pagar escaneando",
  758. "body": "El cliente lo escanea con la cámara del móvil, se abre la factura y paga allí.",
  759. "sharesInvoice": "Mostrar el código comparte la factura con el cliente, igual que enviarla. Desde ese momento la factura conserva los datos que tiene ahora.",
  760. "show": "Mostrar el código",
  761. "failed": "No se pudo crear el código. Inténtalo de nuevo.",
  762. "toPay": "A pagar",
  763. "scanHint": "Escanear con la cámara del móvil",
  764. "copyLink": "Copiar enlace",
  765. "linkCopied": "Enlace copiado",
  766. "waiting": "Esperando el pago. Se actualiza solo.",
  767. "paid": "Pago recibido",
  768. "paidBody": "El pago ya está en la orden de trabajo.",
  769. "done": "Listo"
  770. },
  771. "customStatus": {
  772. "defaultMessage": "Hola {customer_name}, novedades sobre su {vehicle}: {status}. {company_name}"
  773. }
  774. }