service.json 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852
  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. "laborGuide": {
  179. "button": "Guía de tiempos",
  180. "title": "Guía de tiempos",
  181. "description": "Tiempos de mano de obra y fluidos de este vehículo",
  182. "tabLabor": "Tiempos de mano de obra",
  183. "tabFluids": "Fluidos",
  184. "engine": "Motor",
  185. "categories": "Categorías de trabajo",
  186. "allJobs": "Todos los trabajos",
  187. "search": "Buscar trabajos, como pastillas de freno",
  188. "clearSearch": "Borrar búsqueda",
  189. "jobCount": "{count, plural, one {# trabajo} other {# trabajos}}",
  190. "noMatch": "Ningún trabajo coincide con «{query}»",
  191. "noJobs": "La guía no tiene trabajos para este motor.",
  192. "showAll": "Ver todos los trabajos",
  193. "showHours": "Ver horas",
  194. "show": "Ver",
  195. "lockedValue": "No se muestra con esta clave",
  196. "hours": "{hours} h",
  197. "range": "{low} a {high} h",
  198. "bookTime": "Tiempo de guía {hours} h",
  199. "add": "Añadir como línea de mano de obra",
  200. "added": "Añadido",
  201. "addJob": "Añadir {job} como línea de mano de obra",
  202. "addedJob": "{job} está añadido",
  203. "addedCount": "{count, plural, one {# trabajo añadido} other {# trabajos añadidos}}",
  204. "partsAddedCount": "{count, plural, one {# pieza añadida} other {# piezas añadidas}}",
  205. "done": "Listo",
  206. "loading": "Buscando el vehículo",
  207. "stillLooking": "Seguimos buscando. Open Labor Project puede tardar hasta medio minuto con un vehículo del que tiene pocos datos.",
  208. "notFoundTitle": "No está en la guía",
  209. "notFound": "La guía no tiene datos de este vehículo. Comprueba que la marca, el modelo y el año estén escritos como los nombra el fabricante, o añade el VIN.",
  210. "fluidsNotFoundTitle": "No hay especificaciones de fluidos para este vehículo",
  211. "fluidsNotFound": "Open Labor Project aún no tiene especificaciones de fluidos para este vehículo.",
  212. "failedTitle": "La consulta no se completó",
  213. "failed": "La consulta falló",
  214. "unlockFailed": "No se pudo obtener ese valor",
  215. "retry": "Reintentar",
  216. "matchNone": "Ninguno de los motores de la lista coincide con el registrado para este vehículo, así que estos tiempos pueden ser de otro motor. Elige arriba el motor más parecido.",
  217. "matchFuel": "El motor se eligió por el tipo de combustible. Comprueba que sea el correcto.",
  218. "matchUnknown": "Este vehículo no tiene cilindrada registrada, así que comprueba que el motor de arriba sea el correcto.",
  219. "hiddenByConfidence": "{count, plural, one {Se oculta # tiempo por debajo de tu confianza mínima.} other {Se ocultan # tiempos por debajo de tu confianza mínima.}}",
  220. "changeSettings": "Cambiar",
  221. "liters": "{value} L",
  222. "quarts": "{value} qt",
  223. "km": "{value} km",
  224. "miles": "{value} mi",
  225. "capacity": "Capacidad",
  226. "drainRefill": "Vaciado y llenado",
  227. "interval": "Cambiar cada",
  228. "copySpec": "Copiar {spec}",
  229. "copied": "Copiado",
  230. "noFluids": "La guía no tiene fluidos para este motor.",
  231. "addAsPart": "Añadir como pieza",
  232. "addFluidAsPart": "Añadir {system} como pieza",
  233. "partAdded": "Añadido",
  234. "fromStock": "Del almacén",
  235. "addWithoutStock": "Añadir sin artículo del almacén",
  236. "takesDrainRefill": "Lleva {amount} al vaciar y rellenar",
  237. "takesCapacity": "Lleva {amount} en total",
  238. "attribution": "Datos de {source}",
  239. "market": "Mercado: {region}",
  240. "about": "¿Qué fiabilidad tiene?",
  241. "aboutTitle": "Fiabilidad según la fuente",
  242. "estimateNote": "Los valores marcados como Estimación se generan con IA y no se han comprobado con la guía del fabricante. Revísalos antes de presupuestar a un cliente.",
  243. "lockedNote": "Esta clave muestra los valores de uno en uno y cada uno cuenta como una consulta. Un plan de pago los muestra todos a la vez.",
  244. "settings": "Ajustes de la guía de tiempos",
  245. "confidence": {
  246. "oem": "OEM",
  247. "oemHelp": "Cotejado con los datos del fabricante",
  248. "high": "Verificado",
  249. "highHelp": "Verificado por la fuente",
  250. "medium": "Media",
  251. "mediumHelp": "La fuente da a este valor una confianza media",
  252. "estimated": "Estimación",
  253. "estimatedHelp": "Generado con IA y no comprobado con la guía del fabricante"
  254. }
  255. },
  256. "liveLabor": {
  257. "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}}",
  258. "body": "Se mantiene fuera de la lista mientras editas. Se guardará de todos modos al guardar.",
  259. "show": "Mostrar"
  260. },
  261. "totals": {
  262. "title": "Totales",
  263. "parts": "Piezas",
  264. "labor": "Mano de Obra",
  265. "subtotal": "Subtotal",
  266. "subtotalInclTax": "Subtotal (con impuesto)",
  267. "discount": "Descuento",
  268. "discountNone": "Ninguno",
  269. "discountOff": "No",
  270. "discountPercentage": "Porcentaje",
  271. "discountFixed": "Fijo",
  272. "tax": "Impuesto",
  273. "taxIncluded": "Impuesto (incl.)",
  274. "taxableAmount": "Base imponible",
  275. "total": "Total",
  276. "inclusiveModeHint": "Los precios por línea se introducen con impuesto incluido. Los totales muestran el desglose neto + impuesto.",
  277. "partsCost": "Costo de repuestos (interno)"
  278. },
  279. "lineTax": {
  280. "label": "Impuesto en esta línea",
  281. "taxedTag": "IMP.",
  282. "untaxedTag": "SIN IMP.",
  283. "taxedHint": "Esta línea lleva impuesto. Haz clic para dejarla fuera del impuesto.",
  284. "untaxedHint": "Esta línea no lleva impuesto. Haz clic para aplicarlo."
  285. },
  286. "taxOffer": {
  287. "noTax": "Esto se creó sin impuesto. El taller cobra ahora un {rate} %.",
  288. "otherRate": "Esto está al {current} %. El taller cobra ahora un {rate} %.",
  289. "apply": "Aplicar {rate} % de impuesto",
  290. "failed": "No se pudo actualizar el impuesto",
  291. "saveFirst": "Guarda primero los cambios y después aplica el impuesto."
  292. },
  293. "notes": {
  294. "title": "Notas",
  295. "public": "Público",
  296. "internal": "Interno",
  297. "publicPlaceholder": "Notas visibles en la factura...",
  298. "internalPlaceholder": "Notas internas (no mostradas en la factura)...",
  299. "publicHelper": "Se muestra en la factura y documentos compartidos",
  300. "internalHelper": "Solo visible para su equipo",
  301. "aiWrite": "AI Escribir",
  302. "aiGenerated": "Notas AI generadas exitosamente",
  303. "aiGenerateFailed": "Error al generar notas AI",
  304. "aiDialogTitle": "IA Escribir",
  305. "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.",
  306. "aiGenerate": "Generar",
  307. "aiOverwriteDescription": "Esta nota ya tiene contenido. Puede reemplazarlo o agregar el texto generado por IA debajo.",
  308. "aiOverwriteReplace": "Reemplazar",
  309. "aiOverwriteAppend": "Agregar",
  310. "aiOverwriteCancel": "Cancelar",
  311. "aiDontShowAgain": "No mostrar de nuevo",
  312. "internalTitle": "Notas internas",
  313. "publicTitle": "Notas para el cliente"
  314. },
  315. "invoice": {
  316. "title": "Resumen de Factura",
  317. "parts": "Piezas",
  318. "labor": "Mano de Obra",
  319. "subtotal": "Subtotal",
  320. "subtotalInclTax": "Subtotal (con impuesto)",
  321. "discount": "Descuento",
  322. "tax": "Impuesto ({rate}%)",
  323. "taxIncluded": "Impuesto (incl., {rate}%)",
  324. "taxableAmount": "Base imponible",
  325. "total": "Total",
  326. "paid": "Pagado",
  327. "balanceDue": "Saldo Pendiente",
  328. "paidBadge": "PAGADO",
  329. "entityLabel": "Factura",
  330. "emailSubject": "Confirmación de Pago",
  331. "statusEmailSubject": "Actualización del estado del servicio",
  332. "markCompletedTitle": "¿Marcar esta factura como completada?",
  333. "markCompletedDescription": "Ya se ha enviado al cliente, pero sigue marcada como no terminada, así que continuará apareciendo en el tablero.",
  334. "markCompletedConfirm": "Marcar como completada",
  335. "lockedFieldsetLabel": "Factura bloqueada, edición desactivada"
  336. },
  337. "payments": {
  338. "title": "Pagos",
  339. "markUnpaid": "Marcar como Sin Pagar",
  340. "markPaid": "Marcar como Pagado",
  341. "recordPayment": "Registrar Pago",
  342. "totalPaid": "Total Pagado",
  343. "amount": "Cantidad",
  344. "date": "Fecha",
  345. "method": "Método",
  346. "note": "Nota",
  347. "notePlaceholder": "Nota opcional",
  348. "savePayment": "Guardar Pago",
  349. "methodOptions": {
  350. "cash": "Efectivo",
  351. "card": "Tarjeta",
  352. "transfer": "Transferencia",
  353. "other": "Otro"
  354. },
  355. "recorded": "Pago registrado",
  356. "markedPaid": "Marcado como pagado",
  357. "markedUnpaid": "Marcado como sin pagar",
  358. "deleted": "Pago eliminado",
  359. "failedRecord": "Error al registrar pago",
  360. "failedStatus": "Error al actualizar estado del pago",
  361. "failedDelete": "Error al eliminar pago",
  362. "deleteTitle": "Eliminar Pago",
  363. "deleteDescription": "Esto eliminará este registro de pago.",
  364. "failedPdf": "Error al generar factura en PDF",
  365. "received": "Pagos recibidos",
  366. "noneYet": "Todavía no se ha pagado nada.",
  367. "balanceDue": "Saldo pendiente"
  368. },
  369. "attachments": {
  370. "deleteTitle": "Eliminar Archivo",
  371. "deleteDescription": "Esto eliminará permanentemente este archivo. Esto no se puede deshacer.",
  372. "deleted": "Archivo eliminado",
  373. "failedDelete": "Error al eliminar",
  374. "images": "Imágenes ({count})",
  375. "videos": "Vídeos ({count})",
  376. "diagnostics": "Reportes de Diagnóstico ({count})",
  377. "documents": "Documentos ({count})",
  378. "download": "Descargar",
  379. "close": "Cerrar"
  380. },
  381. "share": {
  382. "title": "Compartir Factura",
  383. "description": "Genere un enlace público que permita a cualquiera ver y descargar esta factura sin iniciar sesión.",
  384. "notifyTitle": "Notificar a {name}",
  385. "email": "Correo Electrónico",
  386. "noEmail": "(sin correo electrónico registrado)",
  387. "sms": "SMS",
  388. "noPhone": "(sin teléfono registrado)",
  389. "sendNotification": "Enviar Notificación",
  390. "revokeLink": "Revocar Enlace",
  391. "generateLink": "Generar Enlace Público",
  392. "emailSent": "Correo electrónico enviado",
  393. "failedEmail": "Error al enviar correo electrónico",
  394. "smsSent": "SMS enviado",
  395. "failedSms": "Error al enviar SMS",
  396. "copyLink": "Copiar enlace"
  397. },
  398. "sidebar": {
  399. "vehicle": "Vehículo",
  400. "customer": "Cliente",
  401. "vin": "VIN: {vin}",
  402. "mileageAtService": "Millaje en el servicio: {mileage} {unit}",
  403. "engineHoursAtService": "Horas de motor en servicio: {mileage} {unit}",
  404. "sharedLink": {
  405. "title": "Enlace compartido",
  406. "sharedOn": "Compartido el {date}",
  407. "notViewed": "Aún no visto",
  408. "viewedTimes": "Visto {count, plural, one {# vez} other {# veces}}",
  409. "lastViewed": "Último {date}",
  410. "copyLink": "Copiar enlace",
  411. "linkCopied": "Enlace copiado"
  412. }
  413. },
  414. "images": {
  415. "title": "Imágenes del Servicio",
  416. "dropzone": "Arrastra imágenes aquí o haz clic para explorar",
  417. "uploading": "Subiendo...",
  418. "formats": "JPG, PNG, WebP — máx. 10MB cada una",
  419. "uploadingImages": "Subiendo imágenes...",
  420. "limitReached": "Límite de imágenes alcanzado ({count}/{max})",
  421. "upgradePrompt": "Actualiza tu plan para subir más imágenes.",
  422. "onlyAllowed": "Solo se permiten imágenes JPG, PNG y WebP. {names} omitidas.",
  423. "onlyUploading": "Solo se subirán {count} imagen(es) para no exceder el límite.",
  424. "uploadingCount": "Subiendo {count} imagen(es)...",
  425. "uploadedCount": "{count} imagen(es) subida(s)",
  426. "uploadFailed": "Error al subir",
  427. "deleted": "Imagen eliminada",
  428. "failedDelete": "Error al eliminar imagen",
  429. "failedUpdate": "Error al actualizar",
  430. "description": "Descripción...",
  431. "invoice": "Factura"
  432. },
  433. "videos": {
  434. "title": "Videos del Servicio",
  435. "dropzone": "Arrastra videos aquí o haz clic para explorar",
  436. "uploading": "Subiendo...",
  437. "formats": "MP4, WebM, MOV — máx. 10MB cada uno",
  438. "uploadingVideos": "Subiendo videos...",
  439. "uploadingCount": "Subiendo {count} video(s)...",
  440. "uploadedCount": "{count} video(s) subido(s)",
  441. "uploadFailed": "Error al subir",
  442. "deleted": "Video eliminado",
  443. "failedDelete": "Error al eliminar video",
  444. "failedUpdate": "Error al actualizar",
  445. "invoice": "Factura"
  446. },
  447. "documents": {
  448. "diagnosticTitle": "Reportes de Diagnóstico",
  449. "documentsTitle": "Documentos",
  450. "dropzone": "Arrastra archivos aquí o haz clic para explorar",
  451. "uploading": "Subiendo...",
  452. "diagnosticFormats": "PDF, CSV, TXT — máx. 10MB cada uno",
  453. "documentFormats": "PDF, DOCX, XLSX, CSV, TXT — máx. 10MB cada uno",
  454. "uploadingReports": "Subiendo reportes...",
  455. "uploadingDocuments": "Subiendo documentos...",
  456. "diagnosticLimitReached": "Límite de reportes de diagnóstico alcanzado ({count}/{max})",
  457. "documentLimitReached": "Límite de documentos alcanzado ({count}/{max})",
  458. "upgradePrompt": "Actualiza tu plan para subir más.",
  459. "diagnosticLabel": "Reporte de diagnóstico",
  460. "documentLabel": "Documento",
  461. "limitReachedToast": "Límite de {label} alcanzado ({count}/{max}). Actualiza tu plan para más.",
  462. "onlyUploading": "Solo se subirán {count} archivo(s) para no exceder el límite.",
  463. "uploadingCount": "Subiendo {count} archivo(s)...",
  464. "uploadedCount": "{count} archivo(s) subido(s)",
  465. "uploadFailed": "Error al subir",
  466. "deleted": "Archivo eliminado",
  467. "failedDelete": "Error al eliminar archivo",
  468. "failedUpdate": "Error al actualizar",
  469. "invoice": "Factura"
  470. },
  471. "schedule": {
  472. "title": "Horario",
  473. "date": "Fecha",
  474. "startTime": "Hora de inicio",
  475. "endTime": "Hora de fin",
  476. "durationPresets": "Duración",
  477. "technician": "Técnico",
  478. "selectTechnician": "Seleccionar técnico...",
  479. "searchOrCreate": "Buscar o crear técnico...",
  480. "createTechnician": "Crear \"{name}\"",
  481. "creating": "Creando...",
  482. "failedCreate": "Error al crear técnico",
  483. "addNew": "+ Agregar nuevo",
  484. "add": "Agregar",
  485. "newTechPlaceholder": "Nombre del técnico...",
  486. "assign": "Asignar al tablero",
  487. "assigned": "Asignado al tablero de trabajo",
  488. "failedAssign": "Error al asignar",
  489. "assignNotAllowed": "No tienes permiso para asignar técnicos. Pide a un propietario o administrador que permita a tu rol modificar el tablero de trabajo.",
  490. "endBeforeStart": "La hora de fin debe ser posterior a la hora de inicio",
  491. "failedUpdate": "Error al actualizar el horario",
  492. "splitCreated": "El trabajo abarca varios días — continuación creada para el día siguiente",
  493. "customTechnicians": "Personalizados",
  494. "readMore": "Leer más",
  495. "setDefaults": "Configurar valores",
  496. "workBay": "Puesto de trabajo",
  497. "selectWorkBay": "Seleccionar puesto…",
  498. "noWorkBay": "Sin puesto",
  499. "noTechnician": "Sin técnico",
  500. "technicians": "Técnicos",
  501. "otherTeamMembers": "Otros miembros del equipo",
  502. "makeTechnician": "Lo convierte en técnico",
  503. "addSomeoneNew": "Añadir a alguien nuevo",
  504. "notOnBoard": "Aún no está en el tablero",
  505. "putOnBoard": "Poner en el tablero",
  506. "slotTaken": "{count, plural, one {Esta franja ya está reservada} other {Esta franja tiene # conflictos}}",
  507. "anotherJob": "otro trabajo",
  508. "clashTechnician": "el técnico está ocupado",
  509. "clashBay": "la bahía está ocupada",
  510. "clashBoth": "ambos están ocupados",
  511. "bookedAnyway": "Guardado igualmente. Cambia la hora o elige la siguiente franja libre.",
  512. "pickNextAvailable": "Elegir la siguiente franja libre",
  513. "findingSlot": "Buscando una franja…",
  514. "slotPicked": "Reservado en la siguiente franja libre",
  515. "noSlotFound": "No se encontró ninguna franja libre en las próximas semanas",
  516. "assignedTitle": "Técnico asignado",
  517. "boardLink": "Tablero de trabajo",
  518. "someoneElse": "Otra persona",
  519. "loadOf": "{booked} / {capacity} h",
  520. "loadFree": "{hours} h libres",
  521. "loadFull": "Completo",
  522. "loadOn": "Horas reservadas el {date}",
  523. "promisedAt": "Prometido al cliente",
  524. "promisedPlaceholder": "Sin prometer todavía",
  525. "promisedClear": "Borrar"
  526. },
  527. "notifications": {
  528. "title": "Notificaciones al cliente",
  529. "viaSms": "por SMS",
  530. "viaEmail": "por correo",
  531. "justNow": "Ahora mismo",
  532. "minutesAgo": "hace {count}m",
  533. "hoursAgo": "hace {count}h",
  534. "daysAgo": "hace {count}d"
  535. },
  536. "table": {
  537. "warranty": "Garantía"
  538. },
  539. "warranty": {
  540. "title": "Garantía",
  541. "months": "Duración (meses)",
  542. "notes": "Términos de garantía",
  543. "notesPlaceholder": "ej. Garantía de 12 meses en todas las piezas y mano de obra...",
  544. "expiresAt": "Vence",
  545. "presets": {
  546. "3months": "3 m",
  547. "6months": "6 m",
  548. "12months": "12 m",
  549. "24months": "24 m"
  550. },
  551. "status": {
  552. "active": "Activa",
  553. "expiring": "Por vencer",
  554. "expired": "Vencida",
  555. "none": "N/A"
  556. },
  557. "statementLabel": "Lo que se le dice al cliente sobre la garantía",
  558. "statement": {
  559. "none": "Sin indicar",
  560. "included": "Incluida",
  561. "not_included": "No incluida"
  562. },
  563. "noneHint": "En este documento no se imprime nada sobre la garantía.",
  564. "mileageWithUnit": "Límite de distancia ({unit})",
  565. "notIncludedNotes": "Declaración al cliente",
  566. "notIncludedPlaceholder": "p. ej. El taller no ofrece garantía sobre piezas aportadas por el cliente.",
  567. "printedHint": "Se imprime bajo la garantía en el documento.",
  568. "notIncludedHint": "Si lo deja vacío, el documento dice que los derechos legales no se ven afectados.",
  569. "summaryMonths": "{count} m."
  570. },
  571. "concerns": {
  572. "title": "Motivos del cliente",
  573. "hint": "Por qué vino el cliente, con sus propias palabras. Una fila por cada cosa que mencionó.",
  574. "add": "Añadir otro",
  575. "placeholder": "Hace un ruido detrás cuando freno",
  576. "remove": "Quitar este punto",
  577. "notAnswered": "Todavía no se ha encontrado nada",
  578. "answered": "{count} hallazgo(s) sobre esto",
  579. "storyTitle": "Descripción del trabajo",
  580. "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.",
  581. "steps": {
  582. "condition": "Condición",
  583. "cause": "Causa",
  584. "correction": "Corrección",
  585. "confirm": "Confirmación"
  586. },
  587. "conditionPlaceholder": "Lo que informó el cliente o lo que observaste",
  588. "causePlaceholder": "Qué causa raíz mostraron las pruebas",
  589. "correctionPlaceholder": "Qué se hizo para repararlo",
  590. "confirmPlaceholder": "Cómo se comprobó la reparación: prueba de conducción, nuevo escaneo, síntoma desaparecido",
  591. "markConfirmed": "Confirmado",
  592. "confirmedBy": "Confirmado por {name}, {date}",
  593. "confirmedAt": "Confirmado el {date}",
  594. "confirmedOnSave": "Se firma con tu nombre al guardar",
  595. "confirmedCount": "{confirmed} de {total} confirmados",
  596. "findingsCount": "{count, plural, one {# observación} other {# observaciones}}",
  597. "addFinding": "Añadir observación",
  598. "unconfirmedTitle": "¿Completar con motivos sin confirmar?",
  599. "unconfirmedBody": "{count, plural, one {Un motivo no se ha confirmado como reparado:} other {# motivos no se han confirmado como reparados:}}",
  600. "unconfirmedProceed": "Completar igualmente",
  601. "addMedia": "Añadir fotos o vídeo",
  602. "mediaUploading": "Subiendo…",
  603. "mediaAdded": "{count, plural, one {# archivo añadido} other {# archivos añadidos}}",
  604. "mediaFailed": "No se pudo subir {name}",
  605. "mediaTypes": "Elige una foto (JPG, PNG, WebP) o un vídeo.",
  606. "dictate": {
  607. "start": "Dictar",
  608. "listening": "Escuchando",
  609. "startHint": "Habla y se escribe aquí. No se graba nada.",
  610. "stopHint": "Dejar de escuchar",
  611. "notAllowed": "El navegador no tiene permiso para usar el micrófono. Permítelo para este sitio e inténtalo de nuevo.",
  612. "noMicrophone": "No se encontró ningún micrófono.",
  613. "failed": "El dictado se detuvo. Inténtalo de nuevo.",
  614. "startHintServer": "Habla y se escribe mientras hablas. El audio va a tu modelo de voz para transcribirlo y no se guarda.",
  615. "transcribing": "Terminando…",
  616. "language": "Idioma hablado",
  617. "auto": "Auto",
  618. "nothingHeard": "No se oyó nada.",
  619. "fellBack": "Usando por ahora el dictado del propio navegador.",
  620. "autoLong": "Auto (detectar el idioma)",
  621. "engine": "Transcrito por",
  622. "engineAi": "Modelo de voz (más preciso)",
  623. "engineBrowser": "Navegador (escribe mientras hablas)",
  624. "liveFellBack": "Escribiendo en tramos de unos segundos en lugar de palabra por palabra."
  625. },
  626. "stepEmpty": "Sin escribir todavía",
  627. "removeTitle": "¿Quitar este motivo?",
  628. "removeBody": "Su condición, causa, corrección y confirmación se eliminan con él al guardar la orden de trabajo.",
  629. "removeAttached": "Sus observaciones y archivos siguen en el trabajo, ya no archivados bajo un motivo.",
  630. "removeConfirm": "Quitar motivo",
  631. "saveFirst": "Guarda primero la orden de trabajo"
  632. },
  633. "videoCall": {
  634. "title": "Videollamada",
  635. "none": "Esta orden de trabajo no tiene videollamada.",
  636. "needsSchedule": "Defina primero una hora de inicio. La reunión sigue la programación.",
  637. "add": "Añadir reunión de {provider}",
  638. "addedHere": "añadida desde esta orden de trabajo",
  639. "fromCalendar": "del evento del calendario",
  640. "join": "Unirse",
  641. "copy": "Copiar enlace",
  642. "copied": "Enlace copiado",
  643. "remove": "Eliminar",
  644. "removeTitle": "¿Eliminar la videollamada?",
  645. "removeDescription": "La reunión se elimina en el proveedor. Quien ya tenga el enlace no podrá unirse.",
  646. "created": "Reunión creada. El enlace está en la orden de trabajo.",
  647. "removed": "Reunión eliminada",
  648. "failed": "Algo salió mal",
  649. "shareHint": "El cliente solo recibe este enlace cuando lo envías.",
  650. "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.",
  651. "send": {
  652. "button": "Enviar al cliente",
  653. "title": "Enviar el enlace de la videollamada",
  654. "description": "Enviar el enlace para unirse a {name}.",
  655. "messageLabel": "Nota (opcional)",
  656. "messagePlaceholder": "Lo que el cliente deba saber antes de la llamada...",
  657. "linkAlwaysIncluded": "El enlace para unirse se añade siempre debajo de tu nota.",
  658. "sms": "SMS",
  659. "email": "Correo",
  660. "telegram": "Telegram",
  661. "noPhone": "(sin teléfono)",
  662. "noEmail": "(sin correo)",
  663. "noTelegram": "(sin chat vinculado)",
  664. "notAvailable": "(no configurado)",
  665. "cancel": "Cancelar",
  666. "send": "Enviar",
  667. "sent": "Enlace de la videollamada enviado",
  668. "partlySent": "Enviado por {sent}; no por {failed}",
  669. "failed": "No se pudo enviar el enlace"
  670. },
  671. "notify": {
  672. "invitation": "Hola {name}, tu videollamada sobre el {vehicle} es el {when}. Únete aquí: {url}",
  673. "invitationNoTime": "Hola {name}, aquí tienes el enlace de la videollamada sobre el {vehicle}: {url}",
  674. "joinLine": "Únete a la videollamada aquí: {url}",
  675. "emailSubject": "Videollamada sobre tu {vehicle}"
  676. }
  677. },
  678. "modern": {
  679. "statusLabel": "Estado de la orden de trabajo",
  680. "back": "Atrás",
  681. "backToClassic": "Volver al diseño clásico",
  682. "openCustomer": "Abrir cliente",
  683. "serviceHistory": "Historial de servicio",
  684. "changeVehicle": "Cambiar vehículo",
  685. "vehicleChangesOnSave": "La orden de trabajo pasa a este vehículo al guardar.",
  686. "phone": "Teléfono",
  687. "email": "Correo electrónico",
  688. "notSet": "Sin definir",
  689. "noCustomer": "No hay cliente en esta orden de trabajo.",
  690. "invoiceTitle": "Factura y pago",
  691. "filesTitle": "Archivos y multimedia",
  692. "activity": {
  693. "title": "Actividad",
  694. "messageSent": "Mensaje enviado al cliente",
  695. "linkShared": "Enlace de la factura compartido",
  696. "linkViewed": "{count, plural, one {El cliente abrió el enlace} other {El cliente abrió el enlace # veces}}",
  697. "paymentTaken": "Pago de {amount} registrado",
  698. "statusSet": "Estado cambiado a {status}"
  699. },
  700. "invite": {
  701. "title": "La página de la orden de trabajo se ha renovado.",
  702. "body": "Un diseño más claro con los mismos campos. Puedes volver al anterior cuando quieras.",
  703. "try": "Probar ahora",
  704. "dismiss": "Ahora no",
  705. "menu": "Probar el nuevo diseño"
  706. },
  707. "promised": "Prometido el {date}",
  708. "promisedOverdue": "Prometido el {date}, con retraso",
  709. "opened": "Abierta el {date}",
  710. "openedBy": "Abierta el {date} por {name}",
  711. "editTitle": "Editar título",
  712. "titleField": "Título",
  713. "media": {
  714. "tabs": {
  715. "all": "Todo",
  716. "photos": "Fotos",
  717. "diagnostics": "Diagnóstico",
  718. "dropoff": "Recepción"
  719. },
  720. "summary": "{count, plural, one {# archivo} other {# archivos}} · se comparten con el cliente solo si se marcan",
  721. "customerCanSee": "Visible para el cliente",
  722. "showToCustomer": "Mostrar al cliente",
  723. "hideFromCustomer": "Ocultar al cliente",
  724. "add": {
  725. "all": "Añadir archivos",
  726. "image": "Añadir fotos",
  727. "document": "Añadir documentos",
  728. "diagnostic": "Añadir informe de diagnóstico",
  729. "video": "Añadir vídeo",
  730. "dropoff": "Añadir fotos de recepción"
  731. },
  732. "dropHint": "Suelta archivos aquí o haz clic para explorar",
  733. "added": "{count, plural, one {# archivo añadido} other {# archivos añadidos}}",
  734. "failed": "No se pudo subir {name}",
  735. "wrongType": "No es el tipo de archivo adecuado para esta pestaña: {names}",
  736. "limit": "Límite alcanzado ({count}/{max})",
  737. "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.",
  738. "onInvoice": "Incluir el estado del vehículo en esta factura",
  739. "onInvoiceHint": "Desactivado salvo que lo marque aquí. Para imprimirlo en todas las facturas, active Estado del vehículo en el diseñador de facturas.",
  740. "onInvoiceByDesign": "Activado en el diseñador de facturas para todas las facturas. Desmarque para omitirlo en esta.",
  741. "onInvoiceFailed": "No se pudo guardar la opción"
  742. },
  743. "moneyBar": {
  744. "total": "Total",
  745. "paid": "Pagado",
  746. "balance": "Saldo pendiente",
  747. "settled": "Pagado por completo",
  748. "takePayment": "Cobrar",
  749. "preview": "Vista previa de la factura",
  750. "previewShort": "Vista previa",
  751. "send": "Enviar al cliente",
  752. "sendShort": "Enviar"
  753. },
  754. "vehicleInfo": {
  755. "more": "Más información",
  756. "less": "Menos información",
  757. "copy": "Copiar {label}",
  758. "copied": "Copiado",
  759. "lastInspection": "Última inspección periódica",
  760. "purchaseDate": "Fecha de compra",
  761. "purchasePrice": "Precio de compra",
  762. "overdue": "vencida",
  763. "customerSince": "Cliente desde"
  764. },
  765. "moreStatuses": "Más estados",
  766. "addStatus": "Añadir estado",
  767. "fromInspection": "De la inspección {name}, {date}",
  768. "fromQuote": "Del presupuesto {ref}",
  769. "startInspection": "Iniciar inspección"
  770. },
  771. "photoHandoff": {
  772. "button": "Añadir desde el móvil",
  773. "dialogTitle": "Añadir fotos y documentos desde un móvil",
  774. "dialogBody": "Haz o elige fotos, o comparte un PDF, con cualquier móvil. Todo llega directamente a esta orden de trabajo.",
  775. "expires": "El código funciona hasta las {time}.",
  776. "waiting": "Esperando fotos y documentos…",
  777. "received": "{count, plural, one {# archivo recibido} other {# archivos recibidos}}",
  778. "copyLink": "Copiar enlace",
  779. "linkCopied": "Enlace copiado",
  780. "failed": "No se pudo crear un código. Inténtalo de nuevo.",
  781. "done": "Hecho",
  782. "pageTitle": "Añadir fotos y documentos",
  783. "forJob": "Orden de trabajo {number}",
  784. "takePhoto": "Hacer foto",
  785. "choosePhotos": "Elegir fotos",
  786. "hint": "Todo llega directamente a la orden de trabajo. Haz todas las fotos que necesites.",
  787. "uploading": "Subiendo…",
  788. "added": "Añadida",
  789. "notAdded": "No añadida",
  790. "retry": "Inténtalo de nuevo",
  791. "addedCount": "{count, plural, one {# archivo añadido} other {# archivos añadidos}}",
  792. "expiredTitle": "Este código ha caducado",
  793. "invalidTitle": "Este enlace no funciona",
  794. "errors": {
  795. "expired": "Pide un código nuevo en el mostrador. Cada uno funciona durante 30 minutos.",
  796. "invalid": "Vuelve a escanear el código de la orden de trabajo.",
  797. "limit": "Esta orden de trabajo ya tiene todas las fotos que admite.",
  798. "type": "Aquí solo se pueden añadir fotos y documentos PDF.",
  799. "tooLarge": "Ese archivo es demasiado grande.",
  800. "failed": "La foto no se añadió. Comprueba la conexión e inténtalo de nuevo.",
  801. "codeLimit": "Este código ya ha añadido todas las fotos que permite un código. Escanea un código nuevo en el mostrador."
  802. },
  803. "concernHeading": "Las fotos van a este motivo",
  804. "howTitle": "Cómo funciona",
  805. "step1": "Apunta la cámara del móvil al código y abre el enlace.",
  806. "step2": "Haz fotos o elige fotos o documentos PDF que ya estén en el móvil.",
  807. "step3": "Aparecen en esta orden de trabajo en cuanto llegan.",
  808. "noSignIn": "No hace falta iniciar sesión en el móvil.",
  809. "customerToo": "Lo puede usar el personal, y también el cliente: deja que escanee el código o envíale el enlace.",
  810. "scope": "El enlace solo añade fotos y documentos a esta orden de trabajo y deja de funcionar a los 30 minutos.",
  811. "scanHint": "Escanea con la cámara del móvil",
  812. "chooseDocument": "Subir un documento",
  813. "privacy": "Solo el taller ve lo que añades aquí.",
  814. "dropoff": {
  815. "button": "Fotos de recepción",
  816. "dialogTitle": "Fotografiar el coche a su llegada",
  817. "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.",
  818. "step2": "Siga la lista en el móvil: una foto de cada lado, el cuentakilómetros y los daños.",
  819. "scope": "El enlace solo añade fotos de recepción a esta orden de trabajo y deja de funcionar a los 30 minutos.",
  820. "pageTitle": "El coche a su llegada",
  821. "pageBody": "Haga cada foto por orden. Añada un primer plano de los daños que ya existan.",
  822. "retake": "Repetir",
  823. "slots": {
  824. "front": "Frontal",
  825. "right": "Lado derecho",
  826. "rear": "Trasera",
  827. "left": "Lado izquierdo",
  828. "odometer": "Cuentakilómetros",
  829. "other": "Daño u otro"
  830. }
  831. }
  832. },
  833. "payCode": {
  834. "button": "Código de pago",
  835. "title": "Pagar escaneando",
  836. "body": "El cliente lo escanea con la cámara del móvil, se abre la factura y paga allí.",
  837. "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.",
  838. "show": "Mostrar el código",
  839. "failed": "No se pudo crear el código. Inténtalo de nuevo.",
  840. "toPay": "A pagar",
  841. "scanHint": "Escanear con la cámara del móvil",
  842. "copyLink": "Copiar enlace",
  843. "linkCopied": "Enlace copiado",
  844. "waiting": "Esperando el pago. Se actualiza solo.",
  845. "paid": "Pago recibido",
  846. "paidBody": "El pago ya está en la orden de trabajo.",
  847. "done": "Listo"
  848. },
  849. "customStatus": {
  850. "defaultMessage": "Hola {customer_name}, novedades sobre su {vehicle}: {status}. {company_name}"
  851. }
  852. }