service.json 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. {
  2. "page": {
  3. "notFound": "Dossier de service introuvable",
  4. "updated": "Dossier de service mis à jour",
  5. "failedUpdate": "Impossible de mettre à jour le dossier de service",
  6. "deleteTitle": "Supprimer le Dossier de Service",
  7. "deleteDescription": "Cela supprimera définitivement ce dossier de service et toutes les données associées. Cette action ne peut pas être annulée.",
  8. "deleted": "Dossier de service supprimé",
  9. "failedDelete": "Impossible de supprimer",
  10. "datesExpiredTitle": "Dates de facture expirées",
  11. "datesExpiredDescription": "La date de facturation ou la date d'échéance est dépassée. Souhaitez-vous les mettre à jour avant de continuer ?",
  12. "datesExpiredUpdate": "Mettre à jour les dates et continuer",
  13. "datesExpiredProceed": "Continuer sans modifications",
  14. "datesExpiredUseToday": "Mettre à jour à la date du jour",
  15. "datesExpiredCustomize": "Choisir les dates manuellement",
  16. "datesExpiredBack": "Retour",
  17. "datesExpiredSetToday": "Définir à aujourd'hui",
  18. "customFieldsInvalid": "Veuillez remplir tous les champs personnalisés obligatoires",
  19. "customFieldsSaveFailed": "Échec de l'enregistrement des champs personnalisés",
  20. "problems": {
  21. "title": "Le travail doit avoir un titre avant d'être enregistré.",
  22. "negative": "Les quantités, heures, prix et coûts ne peuvent pas être négatifs.",
  23. "partName": "Chaque pièce avec un prix doit avoir un nom.",
  24. "laborDescription": "Chaque ligne de main-d'œuvre avec des heures ou un taux doit avoir une description.",
  25. "concernCondition": "Un point avec une cause, une correction ou un contrôle doit avoir son symptôme renseigné."
  26. }
  27. },
  28. "header": {
  29. "tabs": {
  30. "details": "Détails",
  31. "images": "Images",
  32. "video": "Vidéo",
  33. "documents": "Documents",
  34. "statusReports": "Rapports d'état"
  35. },
  36. "save": "Enregistrer",
  37. "pdf": "PDF",
  38. "email": "Email",
  39. "share": "Partager",
  40. "notify": "Notifier",
  41. "delete": "Supprimer",
  42. "unpaid": "Non Payé",
  43. "unsavedChanges": "Modifications non enregistrées",
  44. "saved": "Enregistré",
  45. "joinCall": "Rejoindre l'appel vidéo",
  46. "moreActions": "Autres actions",
  47. "designMenu": "Design de la facture",
  48. "designMenuLoading": "Recherche du design avec lequel cette facture s'imprime...",
  49. "designMenuExplain": "Partie au client le {date}, elle s'imprime donc toujours avec le design de l'envoi. En choisir un autre ne change que l'apparence. Ce que dit la facture reste tel qu'envoyé, et l'ancienne apparence n'est pas conservée.",
  50. "designSentWith": "Le design lors de l'envoi",
  51. "designFollow": "Suivre le design par défaut",
  52. "designFollowNamed": "Suivre le design par défaut ({name})",
  53. "designDefaultName": "le design par défaut",
  54. "designPickConfirmTitle": "Passer cette facture à {name} ?",
  55. "designPickConfirmBody": "Seule l'apparence change. Les coordonnées de l'atelier, le client, les conditions de paiement et les montants restent exactement tels qu'ils ont été envoyés. Le design actuel n'est pas conservé, l'action est donc irréversible.",
  56. "designPickConfirm": "Changer le design",
  57. "designPickDone": "La facture s'imprime maintenant avec {name}",
  58. "designPickFailed": "Impossible de changer le design",
  59. "designRefresh": "Mettre à jour avec les informations actuelles",
  60. "designRefreshConfirmTitle": "Mettre à jour cette facture avec les informations actuelles ?",
  61. "designRefreshConfirmBody": "Les informations de l'atelier, le client, le véhicule, les conditions de paiement et le design sont relus tels qu'ils sont aujourd'hui, et la facture y est verrouillée. Ses lignes et ses totaux lui appartiennent et ne changent pas. Les copies déjà téléchargées ou envoyées par e-mail restent telles quelles ; le lien de partage et le portail affichent la facture mise à jour. Cette action est irréversible.",
  62. "designRefreshConfirm": "Mettre à jour la facture",
  63. "designRefreshDone": "Cette facture s'imprime désormais avec les informations actuelles",
  64. "designRefreshFailed": "Impossible de mettre à jour la facture",
  65. "printWorkOrder": "Imprimer l'ordre de travail"
  66. },
  67. "basicInfo": {
  68. "title": "Informations de Base",
  69. "invoiceDetails": "Détails de la facture",
  70. "customerInfo": "Client et véhicule",
  71. "paid": "Payé",
  72. "markPaid": "Marquer comme payé",
  73. "markUnpaid": "Marquer comme non payé",
  74. "vehicle": "Véhicule",
  75. "open": "Ouvert",
  76. "customer": "Client",
  77. "titleLabel": "Titre *",
  78. "titlePlaceholder": "Vidange d'Huile",
  79. "date": "Date",
  80. "type": "Type",
  81. "mileage": "Kilométrage",
  82. "mileageMarine": "Heures Moteur",
  83. "status": "Statut",
  84. "technician": "Technicien",
  85. "invoiceNumber": "Numéro de Facture",
  86. "invoiceDate": "Date de facture",
  87. "invoiceDueDate": "Date d'échéance",
  88. "typeOptions": {
  89. "maintenance": "Maintenance",
  90. "repair": "Réparation",
  91. "upgrade": "Mise à Niveau",
  92. "inspection": "Inspection"
  93. },
  94. "statusOptions": {
  95. "pending": "En Attente",
  96. "in_progress": "En Cours",
  97. "waiting_parts": "En Attente de Pièces",
  98. "completed": "Complété"
  99. },
  100. "searchVehicles": "Rechercher des véhicules...",
  101. "noVehicleFound": "Aucun véhicule trouvé.",
  102. "techPicker": {
  103. "placeholder": "Sélectionner ou tapez un nom...",
  104. "searchPlaceholder": "Rechercher ou tapez un nom...",
  105. "useCustom": "Utiliser \"{search}\"",
  106. "typePrompt": "Tapez un nom...",
  107. "boardTechnicians": "Techniciens du Tableau",
  108. "teamMembers": "Membres de l'Équipe"
  109. },
  110. "design": "Design de facture",
  111. "designDefault": "Défaut de l'atelier",
  112. "designFollowing": "Défaut ({name})",
  113. "designSaved": "Design de facture mis à jour",
  114. "designFollowingRule": "Par défaut ({name}, {rule})",
  115. "designRule": {
  116. "parts_sale": "Vente de pièces seule"
  117. },
  118. "designSaveFailed": "Impossible de changer le design de la facture"
  119. },
  120. "parts": {
  121. "title": "Pièces",
  122. "fromInventory": "De l'Inventaire",
  123. "addPart": "Ajouter une Pièce",
  124. "partNumber": "Nº de Pièce",
  125. "name": "Nom",
  126. "qty": "Qté",
  127. "unitCost": "Coût",
  128. "unitCostHint": "Coût fournisseur (interne — non visible par le client)",
  129. "markupPercent": "Marge %",
  130. "markupPercentHint": "Marge appliquée au coût (interne — non visible par le client)",
  131. "applyMarkup": "Appliquer {percent}%",
  132. "applyMarkupHint": "Réappliquer la marge de {percent}% au coût sur chaque ligne",
  133. "unitPrice": "Prix Unitaire",
  134. "total": "Total",
  135. "namePlaceholder": "Nom *",
  136. "subtotal": "Sous-total Pièces: {amount}",
  137. "inventoryTitle": "Sélectionner une Pièce de l'Inventaire",
  138. "searchInventory": "Rechercher l'inventaire...",
  139. "inStock": "{quantity} en stock",
  140. "noInventory": "Aucune pièce d'inventaire trouvée.",
  141. "scanBarcode": "Scanner",
  142. "scanTitle": "Scanner le code-barres",
  143. "partFound": "\"{name}\" ajouté depuis l'inventaire",
  144. "partNotFound": "Aucune pièce trouvée pour le code-barres \"{barcode}\"",
  145. "deleteRow": "Supprimer la ligne",
  146. "outOfStock": "En rupture de stock",
  147. "onBackorder": "En réapprovisionnement ({count})",
  148. "nameMissingHint": "Les lignes sans nom de pièce ne sont pas enregistrées."
  149. },
  150. "labor": {
  151. "title": "Main-d'œuvre",
  152. "addLabor": "Ajouter une Main-d'œuvre",
  153. "fromPresets": "Depuis modèles",
  154. "description": "Description",
  155. "hours": "Heures",
  156. "rate": "Taux ({currency}/h)",
  157. "total": "Total",
  158. "descriptionPlaceholder": "Description *",
  159. "subtotal": "Sous-total Main-d'œuvre: {amount}",
  160. "addService": "Ajouter une Prestation",
  161. "addFinding": "Observation",
  162. "newObservation": "Nouvelle observation",
  163. "addExisting": "Voir existantes ({count})",
  164. "qty": "Qté",
  165. "qtyOrHours": "Unité / Heures",
  166. "hourlyTag": "H",
  167. "serviceTag": "SERV",
  168. "hourlyHint": "À l'heure : facturé selon les heures travaillées (heures × taux/h). Cliquez pour changer.",
  169. "serviceHint": "Forfait : facturé au prix fixe par unité. Cliquez pour changer.",
  170. "deleteRow": "Supprimer la ligne",
  171. "descriptionMissingHint": "Les lignes sans description ne sont pas enregistrées.",
  172. "shopFeeTag": "Frais",
  173. "shopFeeHintFlat": "Les frais d'atelier des Paramètres, en montant fixe. Modifiez le prix pour cette intervention ou supprimez la ligne pour les retirer.",
  174. "shopFeeHintPercentLabor": "Les frais d'atelier des Paramètres : {percent} % de la main-d'œuvre de cette intervention. Supprimez la ligne pour les retirer.",
  175. "shopFeeHintPercentAll": "Les frais d'atelier des Paramètres : {percent} % de la main-d'œuvre et des pièces de cette intervention. Supprimez la ligne pour les retirer."
  176. },
  177. "liveLabor": {
  178. "title": "{count, plural, one {Un technicien a ajouté de la main-d’œuvre à cette intervention} other {Un technicien a ajouté # lignes de main-d’œuvre à cette intervention}}",
  179. "body": "Elle reste hors de la liste pendant votre saisie. Votre prochain enregistrement l’inclura de toute façon.",
  180. "show": "Afficher"
  181. },
  182. "totals": {
  183. "title": "Totaux",
  184. "parts": "Pièces",
  185. "labor": "Main-d'œuvre",
  186. "subtotal": "Sous-total",
  187. "subtotalInclTax": "Sous-total (TTC)",
  188. "discount": "Remise",
  189. "discountNone": "Aucune",
  190. "discountPercentage": "Pourcentage",
  191. "discountFixed": "Fixe",
  192. "tax": "Taxe",
  193. "taxIncluded": "Taxe (incl.)",
  194. "total": "Total",
  195. "inclusiveModeHint": "Les prix de ligne sont saisis taxe incluse. Les totaux affichent la répartition net + taxe.",
  196. "partsCost": "Coût des pièces (interne)"
  197. },
  198. "notes": {
  199. "title": "Notes",
  200. "public": "Public",
  201. "internal": "Interne",
  202. "publicPlaceholder": "Notes visibles sur la facture...",
  203. "internalPlaceholder": "Notes internes (non affichées sur la facture)...",
  204. "publicHelper": "Affichées sur la facture et les documents partagés",
  205. "internalHelper": "Visibles uniquement pour votre équipe",
  206. "aiWrite": "AI Rédiger",
  207. "aiGenerated": "Notes AI générées avec succès",
  208. "aiGenerateFailed": "Échec de la génération des notes AI",
  209. "aiDialogTitle": "IA Écrire",
  210. "aiDialogDescription": "L'IA analysera les pièces et la main-d'œuvre de cet enregistrement de service et générera une description professionnelle. Le résultat sera écrit dans le type de note sélectionné.",
  211. "aiGenerate": "Générer",
  212. "aiOverwriteDescription": "Cette note a déjà du contenu. Vous pouvez le remplacer ou ajouter le texte généré par l'IA en dessous.",
  213. "aiOverwriteReplace": "Remplacer",
  214. "aiOverwriteAppend": "Ajouter",
  215. "aiOverwriteCancel": "Annuler",
  216. "aiDontShowAgain": "Ne plus afficher",
  217. "internalTitle": "Notes internes",
  218. "publicTitle": "Notes client"
  219. },
  220. "invoice": {
  221. "title": "Résumé de la Facture",
  222. "parts": "Pièces",
  223. "labor": "Main-d'œuvre",
  224. "subtotal": "Sous-total",
  225. "subtotalInclTax": "Sous-total (TTC)",
  226. "discount": "Remise",
  227. "tax": "Taxe ({rate}%)",
  228. "taxIncluded": "Taxe (incl., {rate}%)",
  229. "total": "Total",
  230. "paid": "Payé",
  231. "balanceDue": "Solde Dû",
  232. "paidBadge": "PAYÉ",
  233. "entityLabel": "Facture",
  234. "emailSubject": "Confirmation de Paiement",
  235. "statusEmailSubject": "Mise à jour du statut du service",
  236. "markCompletedTitle": "Marquer cette facture comme terminée ?",
  237. "markCompletedDescription": "Elle est partie chez le client mais reste marquée comme non terminée, elle continuera donc d'apparaître sur le tableau.",
  238. "markCompletedConfirm": "Marquer comme terminée",
  239. "lockedFieldsetLabel": "Facture verrouillée, modification désactivée"
  240. },
  241. "payments": {
  242. "title": "Paiements",
  243. "markUnpaid": "Marquer comme Non Payé",
  244. "markPaid": "Marquer comme Payé",
  245. "recordPayment": "Enregistrer un Paiement",
  246. "totalPaid": "Total Payé",
  247. "amount": "Montant",
  248. "date": "Date",
  249. "method": "Méthode",
  250. "note": "Note",
  251. "notePlaceholder": "Note facultative",
  252. "savePayment": "Enregistrer le Paiement",
  253. "methodOptions": {
  254. "cash": "Comptant",
  255. "card": "Carte",
  256. "transfer": "Virement",
  257. "other": "Autre"
  258. },
  259. "recorded": "Paiement enregistré",
  260. "markedPaid": "Marqué comme payé",
  261. "markedUnpaid": "Marqué comme non payé",
  262. "deleted": "Paiement supprimé",
  263. "failedRecord": "Impossible d'enregistrer le paiement",
  264. "failedStatus": "Impossible de mettre à jour le statut du paiement",
  265. "failedDelete": "Impossible de supprimer le paiement",
  266. "deleteTitle": "Supprimer le Paiement",
  267. "deleteDescription": "Cela supprimera ce dossier de paiement.",
  268. "failedPdf": "Impossible de générer la facture PDF",
  269. "received": "Paiements reçus",
  270. "noneYet": "Rien de payé pour l'instant.",
  271. "balanceDue": "Solde dû"
  272. },
  273. "attachments": {
  274. "deleteTitle": "Supprimer la Pièce Jointe",
  275. "deleteDescription": "Cela supprimera définitivement cette pièce jointe. Cette action ne peut pas être annulée.",
  276. "deleted": "Pièce jointe supprimée",
  277. "failedDelete": "Impossible de supprimer",
  278. "images": "Images ({count})",
  279. "videos": "Vidéos ({count})",
  280. "diagnostics": "Rapports Diagnostiques ({count})",
  281. "documents": "Documents ({count})",
  282. "download": "Télécharger",
  283. "close": "Fermer"
  284. },
  285. "share": {
  286. "title": "Partager la Facture",
  287. "description": "Générer un lien public qui permet à n'importe qui de consulter et télécharger cette facture sans se connecter.",
  288. "notifyTitle": "Notifier {name}",
  289. "email": "Email",
  290. "noEmail": "(pas d'email en dossier)",
  291. "sms": "SMS",
  292. "noPhone": "(pas de numéro en dossier)",
  293. "sendNotification": "Envoyer une Notification",
  294. "revokeLink": "Révoquer le Lien",
  295. "generateLink": "Générer un Lien Public",
  296. "emailSent": "Email envoyé",
  297. "failedEmail": "Impossible d'envoyer l'email",
  298. "smsSent": "SMS envoyé",
  299. "failedSms": "Impossible d'envoyer le SMS",
  300. "copyLink": "Copier le lien"
  301. },
  302. "sidebar": {
  303. "vehicle": "Véhicule",
  304. "customer": "Client",
  305. "vin": "VIN: {vin}",
  306. "mileageAtService": "Kilométrage au service: {mileage} {unit}",
  307. "engineHoursAtService": "Heures moteur au service: {mileage} {unit}",
  308. "sharedLink": {
  309. "title": "Lien partagé",
  310. "sharedOn": "Partagé le {date}",
  311. "notViewed": "Pas encore consulté",
  312. "viewedTimes": "Consulté {count, plural, one {# fois} other {# fois}}",
  313. "lastViewed": "Dernier {date}",
  314. "copyLink": "Copier le lien",
  315. "linkCopied": "Lien copié"
  316. }
  317. },
  318. "images": {
  319. "title": "Images du Service",
  320. "dropzone": "Déposez les images ici ou cliquez pour parcourir",
  321. "uploading": "Téléversement...",
  322. "formats": "JPG, PNG, WebP — max. 10 Mo chacune",
  323. "uploadingImages": "Téléversement des images...",
  324. "limitReached": "Limite d'images atteinte ({count}/{max})",
  325. "upgradePrompt": "Mettez à niveau votre plan pour téléverser plus d'images.",
  326. "onlyAllowed": "Seules les images JPG, PNG et WebP sont autorisées. {names} ignoré(es).",
  327. "onlyUploading": "Seules {count} image(s) seront téléversée(s) pour respecter la limite.",
  328. "uploadingCount": "Téléversement de {count} image(s)...",
  329. "uploadedCount": "{count} image(s) téléversée(s)",
  330. "uploadFailed": "Échec du téléversement",
  331. "deleted": "Image supprimée",
  332. "failedDelete": "Impossible de supprimer l'image",
  333. "failedUpdate": "Impossible de mettre à jour",
  334. "description": "Description...",
  335. "invoice": "Facture"
  336. },
  337. "videos": {
  338. "title": "Vidéos du Service",
  339. "dropzone": "Déposez les vidéos ici ou cliquez pour parcourir",
  340. "uploading": "Téléversement...",
  341. "formats": "MP4, WebM, MOV — max. 10 Mo chacune",
  342. "uploadingVideos": "Téléversement des vidéos...",
  343. "uploadingCount": "Téléversement de {count} vidéo(s)...",
  344. "uploadedCount": "{count} vidéo(s) téléversée(s)",
  345. "uploadFailed": "Échec du téléversement",
  346. "deleted": "Vidéo supprimée",
  347. "failedDelete": "Impossible de supprimer la vidéo",
  348. "failedUpdate": "Impossible de mettre à jour",
  349. "invoice": "Facture"
  350. },
  351. "documents": {
  352. "diagnosticTitle": "Rapports de Diagnostic",
  353. "documentsTitle": "Documents",
  354. "dropzone": "Déposez les fichiers ici ou cliquez pour parcourir",
  355. "uploading": "Téléversement...",
  356. "diagnosticFormats": "PDF, CSV, TXT — max. 10 Mo chacun",
  357. "documentFormats": "PDF, DOCX, XLSX, CSV, TXT — max. 10 Mo chacun",
  358. "uploadingReports": "Téléversement des rapports...",
  359. "uploadingDocuments": "Téléversement des documents...",
  360. "diagnosticLimitReached": "Limite de rapports de diagnostic atteinte ({count}/{max})",
  361. "documentLimitReached": "Limite de documents atteinte ({count}/{max})",
  362. "upgradePrompt": "Mettez à niveau votre plan pour téléverser davantage.",
  363. "diagnosticLabel": "Rapport de diagnostic",
  364. "documentLabel": "Document",
  365. "limitReachedToast": "Limite de {label} atteinte ({count}/{max}). Mettez à niveau votre plan pour plus.",
  366. "onlyUploading": "Seuls {count} fichier(s) seront téléversé(s) pour respecter la limite.",
  367. "uploadingCount": "Téléversement de {count} fichier(s)...",
  368. "uploadedCount": "{count} fichier(s) téléversé(s)",
  369. "uploadFailed": "Échec du téléversement",
  370. "deleted": "Fichier supprimé",
  371. "failedDelete": "Impossible de supprimer le fichier",
  372. "failedUpdate": "Impossible de mettre à jour",
  373. "invoice": "Facture"
  374. },
  375. "schedule": {
  376. "title": "Planification",
  377. "date": "Date",
  378. "startTime": "Heure de début",
  379. "endTime": "Heure de fin",
  380. "durationPresets": "Durée",
  381. "technician": "Technicien",
  382. "selectTechnician": "Sélectionner un technicien...",
  383. "searchOrCreate": "Rechercher ou créer un technicien...",
  384. "createTechnician": "Créer \"{name}\"",
  385. "creating": "Création...",
  386. "failedCreate": "Impossible de créer le technicien",
  387. "addNew": "+ Ajouter nouveau",
  388. "add": "Ajouter",
  389. "newTechPlaceholder": "Nom du technicien...",
  390. "assign": "Assigner au tableau",
  391. "assigned": "Assigné au tableau de travail",
  392. "failedAssign": "Échec de l'assignation",
  393. "assignNotAllowed": "Vous n'avez pas l'autorisation d'affecter des techniciens. Demandez à un propriétaire ou à un administrateur d'autoriser votre rôle à modifier le tableau de travail.",
  394. "endBeforeStart": "L'heure de fin doit être après l'heure de début",
  395. "failedUpdate": "Impossible de mettre à jour le planning",
  396. "splitCreated": "Le travail s'étend sur plusieurs jours — suite créée pour le jour suivant",
  397. "customTechnicians": "Personnalisés",
  398. "readMore": "En savoir plus",
  399. "setDefaults": "Paramètres par défaut",
  400. "workBay": "Poste de travail",
  401. "selectWorkBay": "Choisir un poste…",
  402. "noWorkBay": "Aucun poste",
  403. "noTechnician": "Sans technicien",
  404. "technicians": "Techniciens",
  405. "otherTeamMembers": "Autres membres de l’équipe",
  406. "makeTechnician": "En fait un technicien",
  407. "addSomeoneNew": "Ajouter quelqu’un",
  408. "notOnBoard": "Pas encore sur le planning",
  409. "putOnBoard": "Mettre au planning",
  410. "slotTaken": "{count, plural, one {Ce créneau est déjà réservé} other {Ce créneau a # conflits}}",
  411. "anotherJob": "un autre travail",
  412. "clashTechnician": "le technicien est occupé",
  413. "clashBay": "la baie est occupée",
  414. "clashBoth": "les deux sont occupés",
  415. "bookedAnyway": "Enregistré quand même. Changez l'heure ou choisissez le prochain créneau libre.",
  416. "pickNextAvailable": "Choisir le prochain créneau libre",
  417. "findingSlot": "Recherche d'un créneau…",
  418. "slotPicked": "Placé sur le prochain créneau libre",
  419. "noSlotFound": "Aucun créneau libre trouvé dans les prochaines semaines",
  420. "assignedTitle": "Technicien assigné",
  421. "boardLink": "Tableau de travail",
  422. "someoneElse": "Quelqu'un d'autre",
  423. "loadOf": "{booked} / {capacity} h",
  424. "loadFree": "{hours} h libres",
  425. "loadFull": "Complet",
  426. "loadOn": "Heures réservées le {date}",
  427. "promisedAt": "Promis au client",
  428. "promisedPlaceholder": "Pas encore promis",
  429. "promisedClear": "Effacer"
  430. },
  431. "notifications": {
  432. "title": "Notifications client",
  433. "viaSms": "par SMS",
  434. "viaEmail": "par e-mail",
  435. "justNow": "À l'instant",
  436. "minutesAgo": "il y a {count}m",
  437. "hoursAgo": "il y a {count}h",
  438. "daysAgo": "il y a {count}j"
  439. },
  440. "table": {
  441. "warranty": "Garantie"
  442. },
  443. "warranty": {
  444. "title": "Garantie",
  445. "months": "Durée (mois)",
  446. "notes": "Conditions de garantie",
  447. "notesPlaceholder": "ex. Garantie de 12 mois sur toutes les pièces et la main-d'œuvre...",
  448. "expiresAt": "Expire",
  449. "presets": {
  450. "3months": "3 m",
  451. "6months": "6 m",
  452. "12months": "12 m",
  453. "24months": "24 m"
  454. },
  455. "status": {
  456. "active": "Active",
  457. "expiring": "Expire bientôt",
  458. "expired": "Expirée",
  459. "none": "Aucune"
  460. },
  461. "statementLabel": "Ce que le client apprend sur la garantie",
  462. "statement": {
  463. "none": "Non précisé",
  464. "included": "Incluse",
  465. "not_included": "Non incluse"
  466. },
  467. "noneHint": "Rien n'est imprimé sur la garantie dans ce document.",
  468. "mileageWithUnit": "Limite de distance ({unit})",
  469. "notIncludedNotes": "Mention pour le client",
  470. "notIncludedPlaceholder": "ex. L'atelier n'offre aucune garantie sur les pièces fournies par le client.",
  471. "printedHint": "Imprimé sous la garantie sur le document.",
  472. "notIncludedHint": "Laissez vide et le document indique que les droits légaux ne sont pas affectés.",
  473. "summaryMonths": "{count} mois"
  474. },
  475. "concerns": {
  476. "title": "Demandes du client",
  477. "hint": "Pourquoi le client est venu, avec ses propres mots. Une ligne par point mentionné.",
  478. "add": "En ajouter un autre",
  479. "placeholder": "Il y a un bruit à l'arrière quand je freine",
  480. "remove": "Retirer ce point",
  481. "notAnswered": "Rien trouvé à ce sujet pour l'instant",
  482. "answered": "{count} constat(s) à ce sujet",
  483. "storyTitle": "Description du travail",
  484. "storyHint": "Symptôme, cause, correction, contrôle. Cliquez sur une étape pour l'ouvrir ; une ligne par point signalé par le client ou constaté par vous.",
  485. "steps": {
  486. "condition": "Symptôme",
  487. "cause": "Cause",
  488. "correction": "Correction",
  489. "confirm": "Contrôle"
  490. },
  491. "conditionPlaceholder": "Ce que le client a signalé, ou ce que vous avez constaté",
  492. "causePlaceholder": "La cause réelle révélée par les tests",
  493. "correctionPlaceholder": "Ce qui a été fait pour y remédier",
  494. "confirmPlaceholder": "Comment la réparation a été vérifiée : essai routier, nouveau diagnostic, symptôme disparu",
  495. "markConfirmed": "Contrôlé",
  496. "confirmedBy": "Contrôlé par {name}, {date}",
  497. "confirmedAt": "Contrôlé le {date}",
  498. "confirmedOnSave": "Signé à votre nom à l'enregistrement",
  499. "confirmedCount": "{confirmed} sur {total} contrôlés",
  500. "findingsCount": "{count, plural, one {# observation} other {# observations}}",
  501. "addFinding": "Ajouter une observation",
  502. "unconfirmedTitle": "Terminer avec des points non contrôlés ?",
  503. "unconfirmedBody": "{count, plural, one {Un point n'a pas été contrôlé comme réparé :} other {# points n'ont pas été contrôlés comme réparés :}}",
  504. "unconfirmedProceed": "Terminer quand même",
  505. "addMedia": "Ajouter des médias",
  506. "mediaUploading": "Envoi…",
  507. "mediaAdded": "{count, plural, one {# fichier ajouté} other {# fichiers ajoutés}}",
  508. "mediaFailed": "Impossible d'envoyer {name}",
  509. "mediaTypes": "Choisissez une photo (JPG, PNG, WebP) ou une vidéo.",
  510. "dictate": {
  511. "start": "Dicter",
  512. "listening": "À l'écoute",
  513. "startHint": "Parlez et le texte s'écrit ici. Rien n'est enregistré.",
  514. "stopHint": "Arrêter l'écoute",
  515. "notAllowed": "Le navigateur n'a pas été autorisé à utiliser le micro. Autorisez-le pour ce site et réessayez.",
  516. "noMicrophone": "Aucun micro trouvé.",
  517. "failed": "La dictée s'est arrêtée. Réessayez.",
  518. "startHintServer": "Parlez et le texte s'écrit au fil de vos paroles. L'audio est envoyé à votre modèle vocal pour être transcrit et n'est pas conservé.",
  519. "transcribing": "Finalisation…",
  520. "language": "Langue parlée",
  521. "auto": "Auto",
  522. "nothingHeard": "Rien n'a été entendu.",
  523. "fellBack": "Dictée du navigateur utilisée pour l'instant.",
  524. "autoLong": "Auto (détecter la langue)",
  525. "engine": "Transcrit par",
  526. "engineAi": "Modèle vocal (plus précis)",
  527. "engineBrowser": "Navigateur (écrit pendant que vous parlez)",
  528. "liveFellBack": "Écriture par tranches de quelques secondes au lieu de mot à mot."
  529. },
  530. "stepEmpty": "Pas encore rédigé",
  531. "removeTitle": "Retirer ce point ?",
  532. "removeBody": "Son symptôme, sa cause, sa correction et son contrôle sont retirés avec lui à l'enregistrement de l'ordre de travail.",
  533. "removeAttached": "Ses observations et médias restent sur le travail, sans être rattachés à un point.",
  534. "removeConfirm": "Retirer le point",
  535. "saveFirst": "Enregistrez d'abord l'ordre de travail"
  536. },
  537. "videoCall": {
  538. "title": "Appel vidéo",
  539. "none": "Aucun appel vidéo sur cet ordre de travail.",
  540. "needsSchedule": "Définissez d'abord une heure de début. La réunion suit le planning.",
  541. "add": "Ajouter une réunion {provider}",
  542. "addedHere": "ajouté depuis cet ordre de travail",
  543. "fromCalendar": "depuis l'événement du calendrier",
  544. "join": "Rejoindre",
  545. "copy": "Copier le lien",
  546. "copied": "Lien copié",
  547. "remove": "Supprimer",
  548. "removeTitle": "Supprimer l'appel vidéo ?",
  549. "removeDescription": "La réunion est supprimée chez le fournisseur. Ceux qui ont déjà le lien ne pourront plus rejoindre.",
  550. "created": "Réunion créée. Le lien est sur l'ordre de travail.",
  551. "removed": "Réunion supprimée",
  552. "failed": "Une erreur s'est produite",
  553. "shareHint": "Le client ne reçoit ce lien que si vous l'envoyez.",
  554. "shareHintNoChannel": "Le client ne reçoit ce lien que si vous l'envoyez. Aucun canal de messagerie n'est configuré : copiez-le vous-même dans un message.",
  555. "send": {
  556. "button": "Envoyer au client",
  557. "title": "Envoyer le lien de l'appel vidéo",
  558. "description": "Envoyer le lien de connexion à {name}.",
  559. "messageLabel": "Note (facultatif)",
  560. "messagePlaceholder": "Ce que le client doit savoir avant l'appel...",
  561. "linkAlwaysIncluded": "Le lien de connexion est toujours ajouté sous votre note.",
  562. "sms": "SMS",
  563. "email": "E-mail",
  564. "telegram": "Telegram",
  565. "noPhone": "(pas de téléphone)",
  566. "noEmail": "(pas d'e-mail)",
  567. "noTelegram": "(pas de chat lié)",
  568. "notAvailable": "(non configuré)",
  569. "cancel": "Annuler",
  570. "send": "Envoyer",
  571. "sent": "Lien de l'appel vidéo envoyé",
  572. "partlySent": "Envoyé par {sent} ; pas par {failed}",
  573. "failed": "Impossible d'envoyer le lien"
  574. },
  575. "notify": {
  576. "invitation": "Bonjour {name}, votre appel vidéo concernant le véhicule {vehicle} a lieu le {when}. Rejoignez-le ici : {url}",
  577. "invitationNoTime": "Bonjour {name}, voici le lien de l'appel vidéo concernant le véhicule {vehicle} : {url}",
  578. "joinLine": "Rejoignez l'appel vidéo ici : {url}",
  579. "emailSubject": "Appel vidéo concernant votre {vehicle}"
  580. }
  581. },
  582. "modern": {
  583. "statusLabel": "Statut de l'ordre de travail",
  584. "back": "Retour",
  585. "backToClassic": "Revenir à la présentation classique",
  586. "openCustomer": "Ouvrir le client",
  587. "serviceHistory": "Historique des services",
  588. "changeVehicle": "Changer de véhicule",
  589. "vehicleChangesOnSave": "L'ordre de travail passe sur ce véhicule à l'enregistrement.",
  590. "phone": "Téléphone",
  591. "email": "E-mail",
  592. "notSet": "Non renseigné",
  593. "noCustomer": "Aucun client sur cet ordre de travail.",
  594. "invoiceTitle": "Facture et paiement",
  595. "filesTitle": "Fichiers et médias",
  596. "activity": {
  597. "title": "Activité",
  598. "messageSent": "Message envoyé au client",
  599. "linkShared": "Lien de la facture partagé",
  600. "linkViewed": "{count, plural, one {Le client a ouvert le lien} other {Le client a ouvert le lien # fois}}",
  601. "paymentTaken": "Paiement de {amount} enregistré",
  602. "statusSet": "Statut passé à {status}"
  603. },
  604. "invite": {
  605. "title": "La page de l'ordre de travail a été refaite.",
  606. "body": "Une présentation plus claire, avec les mêmes champs. Vous pouvez revenir à l'ancienne à tout moment.",
  607. "try": "Essayer maintenant",
  608. "dismiss": "Plus tard",
  609. "menu": "Essayer la nouvelle présentation"
  610. },
  611. "promised": "Promis pour le {date}",
  612. "promisedOverdue": "Promis pour le {date}, en retard",
  613. "opened": "Ouvert le {date}",
  614. "openedBy": "Ouvert le {date} par {name}",
  615. "editTitle": "Modifier le titre",
  616. "titleField": "Titre",
  617. "media": {
  618. "tabs": {
  619. "photos": "Photos",
  620. "diagnostics": "Diagnostics",
  621. "dropoff": "Réception"
  622. },
  623. "summary": "{count, plural, one {# fichier} other {# fichiers}} · montrés au client seulement s'ils sont marqués",
  624. "customerCanSee": "Visible par le client",
  625. "showToCustomer": "Montrer au client",
  626. "hideFromCustomer": "Masquer au client",
  627. "add": {
  628. "image": "Ajouter des photos",
  629. "document": "Ajouter des documents",
  630. "diagnostic": "Ajouter un rapport de diagnostic",
  631. "video": "Ajouter une vidéo",
  632. "dropoff": "Ajouter des photos de réception"
  633. },
  634. "dropHint": "Déposez des fichiers ou cliquez pour parcourir",
  635. "added": "{count, plural, one {# fichier ajouté} other {# fichiers ajoutés}}",
  636. "failed": "Impossible d'envoyer {name}",
  637. "wrongType": "Type de fichier non adapté à cet onglet : {names}",
  638. "limit": "Limite atteinte ({count}/{max})",
  639. "dropoffHint": "Le véhicule tel qu’il est arrivé, avec l’heure de chaque photo. Conservé pour l’atelier, non montré au client sauf si vous le choisissez.",
  640. "onInvoice": "Inclure l'état du véhicule sur cette facture",
  641. "onInvoiceHint": "Désactivé sauf si vous cochez ici. Pour l'imprimer sur toutes les factures, activez État du véhicule dans le concepteur de factures.",
  642. "onInvoiceByDesign": "Activé dans le concepteur de factures pour toutes les factures. Décochez pour l'omettre sur celle-ci.",
  643. "onInvoiceFailed": "Impossible d'enregistrer le choix"
  644. },
  645. "moneyBar": {
  646. "total": "Total",
  647. "paid": "Payé",
  648. "balance": "Solde dû",
  649. "settled": "Payé en totalité",
  650. "takePayment": "Encaisser",
  651. "preview": "Aperçu de la facture",
  652. "previewShort": "Aperçu",
  653. "send": "Envoyer au client",
  654. "sendShort": "Envoyer"
  655. },
  656. "vehicleInfo": {
  657. "more": "Plus d'infos",
  658. "less": "Moins d'infos",
  659. "copy": "Copier {label}",
  660. "copied": "Copié",
  661. "lastInspection": "Dernier contrôle périodique",
  662. "purchaseDate": "Date d'achat",
  663. "purchasePrice": "Prix d'achat",
  664. "overdue": "en retard",
  665. "customerSince": "Client depuis"
  666. },
  667. "moreStatuses": "Autres statuts",
  668. "fromInspection": "Issu de l'inspection {name}, {date}",
  669. "startInspection": "Commencer l'inspection"
  670. },
  671. "photoHandoff": {
  672. "button": "Ajouter depuis le téléphone",
  673. "dialogTitle": "Ajouter des photos et des documents depuis un téléphone",
  674. "dialogBody": "Prenez ou choisissez des photos, ou partagez un PDF, sur n’importe quel téléphone. Tout arrive directement sur cet ordre de travail.",
  675. "expires": "Le code est valable jusqu'à {time}.",
  676. "waiting": "En attente de photos et de documents…",
  677. "received": "{count, plural, one {# fichier reçu} other {# fichiers reçus}}",
  678. "copyLink": "Copier le lien",
  679. "linkCopied": "Lien copié",
  680. "failed": "Impossible de créer un code. Réessayez.",
  681. "done": "Terminé",
  682. "pageTitle": "Ajouter des photos et des documents",
  683. "forJob": "Ordre de travail {number}",
  684. "takePhoto": "Prendre une photo",
  685. "choosePhotos": "Choisir des photos",
  686. "hint": "Tout arrive directement sur l’ordre de travail. Prenez autant de photos que nécessaire.",
  687. "uploading": "Envoi…",
  688. "added": "Ajoutée",
  689. "notAdded": "Non ajoutée",
  690. "retry": "Réessayer",
  691. "addedCount": "{count, plural, one {# fichier ajouté} other {# fichiers ajoutés}}",
  692. "expiredTitle": "Ce code a expiré",
  693. "invalidTitle": "Ce lien ne fonctionne pas",
  694. "errors": {
  695. "expired": "Demandez un nouveau code à l'accueil. Chaque code est valable 30 minutes.",
  696. "invalid": "Scannez de nouveau le code sur l'ordre de travail.",
  697. "limit": "Cet ordre de travail a déjà autant de photos qu’il peut en contenir.",
  698. "type": "Seuls les photos et les documents PDF peuvent être ajoutés ici.",
  699. "tooLarge": "Ce fichier est trop volumineux.",
  700. "failed": "La photo n'a pas été ajoutée. Vérifiez la connexion et réessayez.",
  701. "codeLimit": "Ce code a déjà ajouté autant de photos qu’un code le permet. Scannez un nouveau code à l’accueil."
  702. },
  703. "concernHeading": "Les photos vont sur ce point",
  704. "howTitle": "Comment ça marche",
  705. "step1": "Pointez l’appareil photo du téléphone vers le code et ouvrez le lien.",
  706. "step2": "Prenez des photos, ou choisissez des photos ou des documents PDF déjà sur le téléphone.",
  707. "step3": "Elles apparaissent sur cet ordre de travail dès leur arrivée.",
  708. "noSignIn": "Aucune connexion nécessaire sur le téléphone.",
  709. "customerToo": "Le personnel peut l’utiliser, et le client aussi : laissez-le scanner le code ou envoyez-lui le lien.",
  710. "scope": "Le lien ajoute uniquement des photos et des documents à cet ordre de travail et cesse de fonctionner après 30 minutes.",
  711. "scanHint": "Scannez avec l’appareil photo du téléphone",
  712. "chooseDocument": "Envoyer un document",
  713. "privacy": "Seul l’atelier voit ce que vous ajoutez ici.",
  714. "dropoff": {
  715. "button": "Photos de réception",
  716. "dialogTitle": "Photographier le véhicule à son arrivée",
  717. "dialogBody": "Un tour du véhicule avant de commencer : les quatre côtés, le compteur et les dégâts déjà présents. C’est votre preuve si une rayure est contestée un jour.",
  718. "step2": "Suivez la liste sur le téléphone : une photo par côté, le compteur et les dégâts.",
  719. "scope": "Le lien n’ajoute que des photos de réception à cet ordre de réparation et cesse de fonctionner après 30 minutes.",
  720. "pageTitle": "Le véhicule à son arrivée",
  721. "pageBody": "Prenez chaque photo dans l’ordre. Ajoutez un gros plan des dégâts déjà présents.",
  722. "retake": "Reprendre",
  723. "slots": {
  724. "front": "Avant",
  725. "right": "Côté droit",
  726. "rear": "Arrière",
  727. "left": "Côté gauche",
  728. "odometer": "Compteur",
  729. "other": "Dégât ou autre"
  730. }
  731. }
  732. },
  733. "payCode": {
  734. "button": "Code de paiement",
  735. "title": "Payer en scannant",
  736. "body": "Le client le scanne avec l’appareil photo de son téléphone, la facture s’ouvre et il paie sur place.",
  737. "sharesInvoice": "Afficher le code partage la facture avec le client, comme un envoi. À partir de là, la facture conserve les informations qu’elle contient maintenant.",
  738. "show": "Afficher le code",
  739. "failed": "Le code n’a pas pu être créé. Réessayez.",
  740. "toPay": "À payer",
  741. "scanHint": "Scanner avec l’appareil photo du téléphone",
  742. "copyLink": "Copier le lien",
  743. "linkCopied": "Lien copié",
  744. "waiting": "En attente du paiement. La mise à jour est automatique.",
  745. "paid": "Paiement reçu",
  746. "paidBody": "Le paiement figure sur l’ordre de réparation.",
  747. "done": "Terminé"
  748. },
  749. "customStatus": {
  750. "defaultMessage": "Bonjour {customer_name}, des nouvelles de votre {vehicle} : {status}. {company_name}"
  751. }
  752. }