integrations.json 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624
  1. {
  2. "catalog": {
  3. "title": "Intégrations",
  4. "description": "Connectez les services que votre atelier utilise déjà. Chaque intégration se configure une seule fois et fonctionne en arrière-plan.",
  5. "all": "Toutes",
  6. "empty": "Aucune intégration dans cette catégorie pour le moment.",
  7. "notConnected": "Non connectée",
  8. "connect": "Connecter",
  9. "manage": "Gérer",
  10. "connectedTitle": "Connectés",
  11. "connectedDescription": "Services configurés par cet atelier. Ouvrez-en un pour vérifier son état, modifier les réglages ou le déconnecter.",
  12. "noneConnected": "Rien de connecté pour l'instant. Choisissez un service ci-dessous pour commencer.",
  13. "availableTitle": "Disponibles",
  14. "availableDescription": "Services que vous pouvez ajouter. Chacun se configure une fois et fonctionne en arrière-plan.",
  15. "allConnected": "Tous les services disponibles sont connectés.",
  16. "searchPlaceholder": "Rechercher une intégration",
  17. "noMatches": "Rien ne correspond à « {query} ».",
  18. "readMore": "En savoir plus",
  19. "suggestTitle": "Il manque un service que vous utilisez ?",
  20. "suggestDescription": "Dites-nous quelle intégration aiderait votre atelier et nous l'étudierons.",
  21. "suggest": "Suggérer une intégration",
  22. "suggestSubject": "Suggestion d'intégration"
  23. },
  24. "categories": {
  25. "calendar": "Calendrier",
  26. "conferencing": "Appels vidéo",
  27. "accounting": "Comptabilité",
  28. "messaging": "Messagerie",
  29. "payments": "Paiements",
  30. "automation": "Automatisation",
  31. "storage": "Fichiers",
  32. "registry": "Registre des véhicules",
  33. "other": "Autre",
  34. "ai": "IA"
  35. },
  36. "capabilities": {
  37. "calendar": {
  38. "push": "Ordres de travail vers le calendrier",
  39. "pull": "Plages occupées du calendrier",
  40. "conference": "Liens d'appel vidéo"
  41. },
  42. "sms": {
  43. "send": "SMS sortants",
  44. "receive": "Réponses entrantes"
  45. },
  46. "whatsapp": {
  47. "send": "Messages WhatsApp sortants",
  48. "receive": "Réponses entrantes"
  49. },
  50. "telegram": {
  51. "send": "Messages Telegram sortants",
  52. "receive": "Réponses entrantes"
  53. },
  54. "email": {
  55. "send": "E-mails sortants"
  56. },
  57. "vehicle": {
  58. "lookup": "Recherche par plaque et VIN",
  59. "inspection": "Dates de contrôle technique",
  60. "safety": "Rappels et plaintes de propriétaires"
  61. },
  62. "ai": {
  63. "chat": "Textes et résumés",
  64. "transcribe": "Dictée"
  65. },
  66. "payments": {
  67. "checkout": "Payer depuis le lien de la facture"
  68. },
  69. "accounting": {
  70. "invoices": "Factures vers la comptabilité",
  71. "customers": "Clients vers la comptabilité",
  72. "payments": "Paiements dans les deux sens"
  73. }
  74. },
  75. "statuses": {
  76. "active": "Connectée",
  77. "error": "Attention requise",
  78. "pending": "Configuration en cours",
  79. "disconnected": "Déconnectée",
  80. "needsSetup": "Configuration inachevée"
  81. },
  82. "connection": {
  83. "back": "Toutes les intégrations",
  84. "account": "Compte connecté",
  85. "lastHealth": "Dernière vérification",
  86. "lastSync": "Dernière synchronisation",
  87. "lastError": "La dernière exécution a échoué",
  88. "setupMissingTitle": "Configuration inachevée",
  89. "setupMissing": "Choisissez {fields} dans les réglages ci-dessous. D'ici là, rien n'est synchronisé.",
  90. "connected": "{name} est connecté.",
  91. "connectedShort": "Connecté",
  92. "connectWith": "Connecter {name}",
  93. "connect": "Connecter",
  94. "reconnect": "Reconnecter",
  95. "disconnect": "Déconnecter",
  96. "disconnectTitle": "Déconnecter {name} ?",
  97. "disconnectDescription": "Torqvoice oublie le compte et cesse de l'utiliser. Rien de ce qui a déjà été envoyé à {name} ou stocké dedans n'est touché.",
  98. "disconnectDescriptionCalendar": "Torqvoice oublie le compte et cesse de synchroniser. Les ordres de travail déjà placés dans {name} y restent. Le temps occupé affiché depuis ce calendrier est retiré du calendrier Torqvoice.",
  99. "disconnectDescriptionConferencing": "Torqvoice oublie le compte et cesse de créer des réunions. Les réunions déjà créées restent dans {name} et les liens sur les ordres de travail sont conservés.",
  100. "disconnectDescriptionAccounting": "Torqvoice oublie le compte et cesse d'envoyer et de lire. Les factures, clients et paiements déjà dans {name} y restent.",
  101. "removeSetup": "Retirer",
  102. "removeSetupTitle": "Retirer {name} ?",
  103. "removeSetupDescription": "Rien n'est encore connecté. Torqvoice oublie ce qui a été saisi et {name} revient dans la liste des services disponibles.",
  104. "removeSetupDone": "{name} retiré",
  105. "removeSetupHint": "Vous n'allez pas plus loin ? Retirez-le et le service revient dans la liste ci-dessous.",
  106. "disconnected": "Déconnecté",
  107. "test": "Tester la connexion",
  108. "testPassed": "La connexion fonctionne",
  109. "syncNow": "Synchroniser maintenant",
  110. "syncQueued": "Synchronisation en file d'attente ; elle démarre d'ici une minute",
  111. "pullNow": "Récupérer les paiements maintenant",
  112. "pullQueued": "Récupération des paiements en file d'attente ; elle démarre d'ici une minute",
  113. "backfill": "Envoyer les ordres de travail planifiés",
  114. "backfillQueued": "Les ordres de travail planifiés depuis la semaine dernière ont été mis en file d'attente",
  115. "backfillInvoices": "Envoyer les factures émises",
  116. "backfillInvoicesQueuedCount": "Mise en file de {count, plural, one {# facture émise} other {# factures émises}} à transmettre",
  117. "backfillInvoicesNone": "Aucune facture émise à envoyer. Seules les factures envoyées, partagées ou payées sont transmises, à partir de la date de début si vous en avez fixé une.",
  118. "retryQueued": "Tâche remise en file d'attente",
  119. "settingsTitle": "Paramètres",
  120. "settingsDescription": "Ce qu'il faut synchroniser et vers où. Les modifications s'appliquent à la prochaine synchronisation.",
  121. "settingsSaved": "Paramètres enregistrés",
  122. "save": "Enregistrer",
  123. "loading": "Chargement...",
  124. "choose": "Choisir...",
  125. "search": "Rechercher...",
  126. "noMatch": "Aucun résultat",
  127. "leaveEmpty": "Laisser vide",
  128. "noLimit": "Sans limite",
  129. "planLocked": "Les intégrations ne sont pas incluses dans votre forfait.",
  130. "lockedIntegrations": "Connectez des calendriers, des appels vidéo et d'autres services à votre atelier.",
  131. "lockedPayments": "Laissez vos clients régler leurs factures en ligne, chaque paiement étant enregistré sur la facture.",
  132. "lockedAi": "Connectez un fournisseur d'IA pour utiliser les fonctions d'IA dans votre atelier.",
  133. "ownAppTitle": "Cette installation utilise votre propre application auprès du fournisseur",
  134. "redirectUri": "URI de redirection à enregistrer auprès du fournisseur :",
  135. "sendTestEmail": "Envoyer un e-mail de test",
  136. "testEmailSent": "E-mail de test envoyé à {email}",
  137. "testEmailHint": "Un e-mail de test part vers votre propre adresse via ce fournisseur. Il valide l'adresse d'expédition et les règles d'envoi, ce qu'une simple vérification des clés ne peut pas faire.",
  138. "inboundUrl": "URL du webhook entrant",
  139. "inboundHintSecret": "Collez cette URL dans les réglages des messages entrants du fournisseur. Elle contient un secret qui identifie votre atelier : gardez-la privée.",
  140. "inboundHintMeta": "Collez cette URL comme URL de rappel dans votre application Meta, avec le jeton de vérification saisi ci-dessus, et abonnez-vous aux messages.",
  141. "inboundHintStripe": "Ajoutez cette URL dans le tableau de bord Stripe sous Developers, Webhooks, abonnée à checkout.session.completed. Collez ensuite le secret de signature affiché par Stripe dans le champ secret du webhook ici, pour que les notifications puissent être vérifiées.",
  142. "inboundHintVipps": "Saisissez cette URL comme URL de rappel dans le portail Vipps MobilePay. Vipps exige aussi des conditions de vente publiées, à renseigner sous Paramètres, Paiement.",
  143. "inboundHintPaypal": "Ajoutez cette URL dans le tableau de bord développeur PayPal sous Webhooks, abonnée à PAYMENT.CAPTURE.COMPLETED.",
  144. "copy": "Copier",
  145. "copied": "Copié",
  146. "updateKeys": "Mettre à jour les clés",
  147. "updateKeysHint": "La dernière vérification a échoué. Saisissez à nouveau les clés pour réessayer.",
  148. "inspectionSync": {
  149. "title": "Synchronisation des contrôles",
  150. "vehicles": "{count} véhicules avec plaque dans cet atelier",
  151. "dueNow": "{count} seraient recherchés à la prochaine exécution",
  152. "withDate": "{count} ont déjà une date de contrôle",
  153. "lastPass": "Dernier passage complet {date}",
  154. "never": "Aucun passage complet pour l'instant",
  155. "inProgress": "Un passage est en cours",
  156. "off": "Activez le réglage et enregistrez ; d'ici là, un passage ne vérifie rien.",
  157. "syncNowHelp": "Synchroniser maintenant lance un passage immédiatement au lieu d'attendre celui de l'heure. Il recherche 25 véhicules à la fois et continue seul jusqu'à ce que tous les véhicules à vérifier soient traités."
  158. },
  159. "supersedes": "Connecter {next} déconnecte {current}. Un seul peut être actif à la fois : {current} cesse d'être utilisé dès que {next} est en service.",
  160. "batchRetried": "{count, plural, =0 {Rien à réessayer} one {# tâche remise en file} other {# tâches remises en file}}",
  161. "advanced": "Avancé"
  162. },
  163. "activity": {
  164. "title": "Activité",
  165. "description": "Tâches récentes et lignes de journal pour cette connexion.",
  166. "retry": "Réessayer",
  167. "jobStatus": {
  168. "queued": "En file d'attente",
  169. "running": "En cours",
  170. "done": "Terminée",
  171. "failed": "Échec",
  172. "dead": "Abandonnée"
  173. },
  174. "jobs": "{count, plural, one {# tâche} other {# tâches}}",
  175. "counts": {
  176. "queued": "{count} en attente",
  177. "running": "{count} en cours",
  178. "done": "{count} terminées",
  179. "failed": "{count} échouées",
  180. "dead": "{count} abandonnées"
  181. },
  182. "noFailures": "Aucun échec.",
  183. "retryFailed": "Réessayer les échecs",
  184. "details": "Afficher les détails"
  185. },
  186. "errors": {
  187. "generic": "Une erreur s'est produite",
  188. "demo": "Les intégrations ne peuvent pas être connectées sur la démo.",
  189. "forbidden": "Seul un administrateur peut connecter des intégrations.",
  190. "unknown": "Intégration inconnue.",
  191. "plan": "Cette intégration n'est pas incluse dans votre forfait.",
  192. "no-client": "Aucun identifiant d'application n'est configuré pour ce fournisseur.",
  193. "denied": "Vous avez annulé la connexion auprès du fournisseur.",
  194. "vendor": "Le fournisseur a renvoyé une erreur. Réessayez.",
  195. "invalid": "La réponse du fournisseur était incomplète. Réessayez.",
  196. "state": "Cette connexion a expiré ou appartient à une autre session. Recommencez.",
  197. "exchange": "Le fournisseur a refusé la connexion. Vérifiez les identifiants de l'application et réessayez.",
  198. "identify": "Connecté, mais le compte n'a pas pu être lu. Essayez de vous reconnecter."
  199. },
  200. "meeting": {
  201. "join": "Rejoindre l'appel vidéo",
  202. "google-meet": "Google Meet",
  203. "teams": "Microsoft Teams",
  204. "zoom": "Zoom"
  205. },
  206. "calendar": {
  207. "external": "Depuis les calendriers connectés",
  208. "busy": "Occupé"
  209. },
  210. "connectors": {
  211. "google-calendar": {
  212. "description": "Ajoutez les ordres de travail planifiés à un Google Calendar, joignez un lien Google Meet et consultez les plages occupées du calendrier dans Torqvoice.",
  213. "tenantHelp": "Créez un client OAuth dans Google Cloud Console (API et services → Identifiants), activez l'API Google Calendar, ajoutez l'URI de redirection ci-dessous, puis collez ici l'identifiant client et le secret.",
  214. "fields": {
  215. "clientId": "Identifiant client",
  216. "clientSecret": "Secret client"
  217. },
  218. "settings": {
  219. "calendarId": "Calendrier",
  220. "pushEnabled": "Ajouter les ordres de travail planifiés à ce calendrier",
  221. "includeCustomer": "Inclure le nom et le téléphone du client dans l'événement",
  222. "addConference": "Ajouter une réunion Google Meet à chaque ordre de travail planifié",
  223. "addConferenceHelp": "Activé : chaque ordre de travail envoyé au calendrier reçoit une réunion Google Meet, et le lien apparaît sur l'ordre. Désactivé : ajoutez une réunion Google Meet à un ordre précis depuis sa page. Dans les deux cas, le client ne reçoit le lien que lorsque vous l'envoyez.",
  224. "pullEnabled": "Afficher les plages occupées de ce calendrier dans le calendrier Torqvoice",
  225. "pullEnabledHelp": "Lecture seule. Actualisé toutes les 15 minutes, une semaine en arrière et deux mois en avant."
  226. }
  227. },
  228. "microsoft-365": {
  229. "description": "Ajoutez les ordres de travail planifiés à un calendrier Outlook, joignez un lien Microsoft Teams et consultez les plages occupées du calendrier dans Torqvoice.",
  230. "tenantHelp": "Enregistrez une application dans Microsoft Entra (Inscriptions d'applications), autorisez les comptes personnels et professionnels, ajoutez l'URI de redirection ci-dessous comme plateforme Web, créez un secret client, puis collez les deux ici.",
  231. "fields": {
  232. "clientId": "ID d'application (client)",
  233. "clientSecret": "Secret client"
  234. },
  235. "settings": {
  236. "calendarId": "Calendrier",
  237. "pushEnabled": "Ajouter les ordres de travail planifiés à ce calendrier",
  238. "includeCustomer": "Inclure le nom et le téléphone du client dans l'événement",
  239. "addConference": "Ajouter une réunion Microsoft Teams à chaque ordre de travail planifié",
  240. "addConferenceHelp": "Activé : chaque ordre de travail envoyé au calendrier reçoit une réunion Microsoft Teams, et le lien apparaît sur l'ordre. Désactivé : ajoutez une réunion Microsoft Teams à un ordre précis depuis sa page. Dans les deux cas, le client ne reçoit le lien que lorsque vous l'envoyez.",
  241. "pullEnabled": "Afficher les plages occupées de ce calendrier dans le calendrier Torqvoice",
  242. "pullEnabledHelp": "Lecture seule. Actualisé toutes les 15 minutes, une semaine en arrière et deux mois en avant."
  243. }
  244. },
  245. "zoom": {
  246. "description": "Ajoutez une réunion Zoom à un ordre de travail planifié et gardez le lien dessus, pour un diagnostic à distance ou pour présenter des constats au client.",
  247. "tenantHelp": "Dans Zoom App Marketplace, créez une application General (user-managed), ajoutez l'URI de redirection ci-dessous, ajoutez les scopes meeting:write:meeting, meeting:update:meeting, meeting:delete:meeting, meeting:read:meeting et user:read:user, puis collez ici l'ID client et le secret.",
  248. "fields": {
  249. "clientId": "ID client",
  250. "clientSecret": "Secret client"
  251. },
  252. "settings": {
  253. "autoCreate": "Créer automatiquement une réunion Zoom pour chaque ordre de travail planifié",
  254. "autoCreateHelp": "Désactivé : vous ajoutez vous-même l'appel vidéo à un ordre de travail, depuis sa page. Activé : chaque ordre avec une heure de début reçoit une réunion, déplacée en cas de report et supprimée en cas d'annulation. Dans les deux cas, le client ne reçoit le lien que si vous l'envoyez.",
  255. "includeCustomer": "Inclure le nom du client dans le sujet de la réunion",
  256. "joinBeforeHost": "Laisser le client rejoindre avant vous",
  257. "waitingRoom": "Utiliser une salle d'attente"
  258. }
  259. },
  260. "twilio-sms": {
  261. "description": "Envoyez et recevez des SMS via un numéro Twilio. Rappels, messages « prêt à récupérer » et les réponses qui reviennent.",
  262. "fields": {
  263. "accountSid": "Account SID",
  264. "authToken": "Jeton d'authentification"
  265. },
  266. "settings": {
  267. "phoneNumber": "Envoyer depuis ce numéro"
  268. }
  269. },
  270. "vonage-sms": {
  271. "description": "Envoyez et recevez des SMS via un numéro Vonage.",
  272. "fields": {
  273. "apiKey": "Clé API",
  274. "apiSecret": "Secret API",
  275. "signatureSecret": "Secret de signature",
  276. "signatureSecretHelp": "Dans le tableau de bord Vonage, sous API settings. S'il est renseigné, les messages entrants ne sont acceptés que s'ils sont signés par Vonage. Sans lui, seul le secret contenu dans l'URL du webhook est vérifié."
  277. },
  278. "settings": {
  279. "phoneNumber": "Envoyer depuis ce numéro"
  280. }
  281. },
  282. "telnyx-sms": {
  283. "description": "Envoyez et recevez des SMS via un numéro Telnyx.",
  284. "fields": {
  285. "apiKey": "Clé API",
  286. "webhookPublicKey": "Clé publique du webhook",
  287. "webhookPublicKeyHelp": "Dans le portail Telnyx, sous Account settings, Keys and credentials, Public key. Si elle est renseignée, les messages entrants ne sont acceptés que s'ils sont signés par Telnyx. Sans elle, seul le secret contenu dans l'URL du webhook est vérifié."
  288. },
  289. "settings": {
  290. "phoneNumber": "Envoyer depuis ce numéro"
  291. }
  292. },
  293. "whatsapp-meta": {
  294. "description": "Écrivez à vos clients sur WhatsApp directement via Meta. Les photos de ce que vous avez trouvé, et la conversation qui suit.",
  295. "fields": {
  296. "phoneNumberId": "ID du numéro de téléphone",
  297. "accessToken": "Jeton d'accès",
  298. "verifyToken": "Jeton de vérification du webhook",
  299. "appSecret": "Secret de l'application",
  300. "apiVersion": "Version de la Graph API",
  301. "appSecretHelp": "Meta signe chaque envoi avec ce secret. Tant qu'il n'est pas saisi, les messages envoyés au webhook sont refusés, car sinon toute personne connaissant l'URL pourrait se faire passer pour vos clients."
  302. },
  303. "settings": {
  304. "enabled": "Envoyer des messages sur ce canal",
  305. "phoneNumber": "Envoyer depuis ce numéro",
  306. "templateName": "Modèle pour rouvrir une conversation",
  307. "templateLanguage": "Langue du modèle",
  308. "templateVariables": "Valeurs du modèle, dans l'ordre",
  309. "mediaTemplateName": "Modèle pour un message avec photo",
  310. "mediaTemplateLanguage": "Langue du modèle avec photo",
  311. "mediaTemplateVariables": "Valeurs du modèle avec photo, dans l'ordre"
  312. }
  313. },
  314. "whatsapp-twilio": {
  315. "description": "Écrivez à vos clients sur WhatsApp via un numéro Twilio, si c'est Twilio qui vous l'a fourni.",
  316. "fields": {
  317. "accountSid": "Account SID",
  318. "authToken": "Jeton d'authentification",
  319. "messagingServiceSid": "SID du service de messagerie"
  320. },
  321. "settings": {
  322. "enabled": "Envoyer des messages sur ce canal",
  323. "phoneNumber": "Envoyer depuis ce numéro",
  324. "templateName": "Modèle pour rouvrir une conversation",
  325. "templateLanguage": "Langue du modèle",
  326. "templateVariables": "Valeurs du modèle, dans l'ordre",
  327. "mediaTemplateName": "Modèle pour un message avec photo",
  328. "mediaTemplateLanguage": "Langue du modèle avec photo",
  329. "mediaTemplateVariables": "Valeurs du modèle avec photo, dans l'ordre"
  330. }
  331. },
  332. "telegram": {
  333. "description": "Un bot Telegram qui joint les clients qui l'utilisent et ramène leurs réponses dans la messagerie.",
  334. "fields": {
  335. "botToken": "Jeton du bot"
  336. },
  337. "settings": {
  338. "enabled": "Envoyer des messages sur ce canal",
  339. "botUsername": "Nom d'utilisateur du bot"
  340. }
  341. },
  342. "smtp": {
  343. "description": "Envoyez factures et rappels via votre propre serveur de messagerie, plutôt que par la messagerie de la plateforme.",
  344. "fields": {
  345. "host": "Serveur",
  346. "port": "Port",
  347. "user": "Nom d'utilisateur",
  348. "pass": "Mot de passe"
  349. },
  350. "settings": {
  351. "fromEmail": "Envoyer depuis cette adresse",
  352. "fromName": "Nom affiché comme expéditeur",
  353. "secure": "Se connecter en TLS dès le départ",
  354. "requireTls": "Exiger que le serveur passe en TLS",
  355. "rejectUnauthorized": "Refuser un certificat qui n'est pas valide"
  356. }
  357. },
  358. "resend": {
  359. "description": "Envoyez factures et rappels via Resend.",
  360. "fields": {
  361. "apiKey": "Clé API"
  362. },
  363. "settings": {
  364. "fromEmail": "Envoyer depuis cette adresse",
  365. "fromName": "Nom affiché comme expéditeur"
  366. }
  367. },
  368. "postmark": {
  369. "description": "Envoyez factures et rappels via Postmark.",
  370. "fields": {
  371. "apiKey": "Jeton du serveur"
  372. },
  373. "settings": {
  374. "fromEmail": "Envoyer depuis cette adresse",
  375. "fromName": "Nom affiché comme expéditeur"
  376. }
  377. },
  378. "mailgun": {
  379. "description": "Envoyez factures et rappels via Mailgun.",
  380. "fields": {
  381. "apiKey": "Clé API",
  382. "domain": "Domaine d'envoi"
  383. },
  384. "settings": {
  385. "fromEmail": "Envoyer depuis cette adresse",
  386. "fromName": "Nom affiché comme expéditeur",
  387. "region": "Région du domaine"
  388. }
  389. },
  390. "sendgrid": {
  391. "description": "Envoyez factures et rappels via SendGrid.",
  392. "fields": {
  393. "apiKey": "Clé API"
  394. },
  395. "settings": {
  396. "fromEmail": "Envoyer depuis cette adresse",
  397. "fromName": "Nom affiché comme expéditeur"
  398. }
  399. },
  400. "amazon-ses": {
  401. "description": "Envoyez factures et rappels via Amazon SES.",
  402. "fields": {
  403. "accessKeyId": "ID de clé d'accès",
  404. "secretAccessKey": "Clé d'accès secrète",
  405. "region": "Région"
  406. },
  407. "settings": {
  408. "fromEmail": "Envoyer depuis cette adresse",
  409. "fromName": "Nom affiché comme expéditeur"
  410. }
  411. },
  412. "vegvesen": {
  413. "description": "Remplissez un véhicule à partir de sa plaque ou de son VIN norvégien : marque, modèle, année, carburant, boîte de vitesses, moteur, couleur, dimensions des pneus et date du prochain EU-kontroll, directement depuis le registre de Statens vegvesen. Aucune donnée sur le propriétaire n'est renvoyée.",
  414. "fields": {
  415. "apiKey": "Clé API",
  416. "apiKeyHelp": "Gratuite. Commandez la clé sur vegvesen.no, rubrique « API for tekniske kjøretøyopplysninger » : connectez-vous avec BankID, représentez l'atelier, et la clé est délivrée immédiatement. Elle autorise 50 000 recherches par jour."
  417. },
  418. "settings": {
  419. "syncInspections": "Tenir à jour les dates de contrôle de tous les véhicules de cet atelier",
  420. "syncInspectionsHelp": "Une fois par heure, les véhicules non vérifiés récemment sont recherchés par plaque et la date du prochain EU-kontroll est enregistrée. Seuls les véhicules de cet atelier sont envoyés. Un véhicule est revérifié chaque mois, et chaque semaine lorsque l'échéance est à moins de deux mois."
  421. }
  422. },
  423. "openapi-automotive": {
  424. "description": "Remplissez un véhicule à partir de sa plaque française, italienne, espagnole, portugaise ou britannique : marque, modèle, année, VIN, carburant, cylindrée et plus, depuis les données d'immatriculation du pays via Openapi.com. Chaque recherche est facturée sur le compte Openapi de l'atelier. Aucune donnée sur le propriétaire n'est renvoyée.",
  425. "fields": {
  426. "token": "Jeton d'API",
  427. "tokenHelp": "Créez un compte sur console.openapi.com, créditez le portefeuille et, dans Automotive, créez un jeton pour l'environnement de production. Chaque recherche aboutie coûte quelques dizaines de centimes ; une recherche sans résultat est gratuite."
  428. },
  429. "settings": {
  430. "country": "Pays",
  431. "countryHelp": "Le registre à interroger. Les plaques françaises et italiennes ont le même format, le pays ne peut donc pas être déduit de la plaque.",
  432. "bikes": "Rechercher aussi les motos",
  433. "bikesHelp": "Quand une plaque n'est pas celle d'une voiture, le registre des motos est interrogé à son tour. Une recherche voiture sans résultat est gratuite, cela ne coûte donc rien de plus sauf si une moto est trouvée. Indisponible pour le Portugal."
  434. }
  435. },
  436. "rdw": {
  437. "description": "Remplissez un véhicule à partir de sa plaque néerlandaise : marque, modèle, année, carburant, cylindrée, couleur, masses et date du prochain APK, directement depuis le registre ouvert des véhicules de la RDW. Gratuit, sans clé. Ni les données du propriétaire ni le VIN ne sont publiés.",
  438. "fields": {
  439. "appToken": "Jeton d'application (facultatif)",
  440. "appTokenHelp": "Les données ouvertes de la RDW fonctionnent sans clé, mais les requêtes anonymes partagent un quota limité. Pour la synchronisation des contrôles, créez un compte gratuit sur opendata.rdw.nl, ouvrez les paramètres développeur de votre profil et créez un jeton d'application."
  441. },
  442. "settings": {
  443. "syncInspections": "Tenir à jour les dates d'APK de tous les véhicules de cet atelier",
  444. "syncInspectionsHelp": "Une fois par heure, les véhicules non vérifiés récemment sont recherchés par plaque et la date du prochain APK est enregistrée. Seuls les véhicules de cet atelier sont envoyés. Un véhicule est revérifié chaque mois, et chaque semaine lorsque l'échéance est à moins de deux mois."
  445. }
  446. },
  447. "regcheck": {
  448. "description": "Remplissez un véhicule à partir de sa plaque en Australie, Nouvelle-Zélande, aux États-Unis, en Irlande, Norvège, Suède, Danemark, Finlande, Estonie, Tchéquie, Slovaquie, Hongrie ou Croatie : marque, modèle, année, VIN, carburant et cylindrée lorsque le pays les publie, via RegCheck. Chaque recherche aboutie consomme un crédit du compte RegCheck de l'atelier. Aucune donnée sur le propriétaire n'est renvoyée.",
  449. "fields": {
  450. "username": "Nom d'utilisateur RegCheck",
  451. "usernameHelp": "Inscrivez-vous sur regcheck.org.uk ; le compte comprend 10 recherches gratuites, les suivantes s'achètent par blocs de 100 depuis le tableau de bord. Seul le nom d'utilisateur est nécessaire ici, jamais le mot de passe. Une plaque introuvable ne coûte rien."
  452. },
  453. "settings": {
  454. "country": "Pays",
  455. "countryHelp": "Le registre à interroger. Chaque pays a son propre service, la connexion n'en interroge donc qu'un.",
  456. "auState": "État ou territoire",
  457. "auStateHelp": "L'Australie immatricule les véhicules par État et le registre doit savoir lequel interroger. Choisissez celui où la plupart des véhicules de vos clients sont immatriculés.",
  458. "usState": "État",
  459. "usStateHelp": "Le code à deux lettres de l'État où les véhicules sont immatriculés, comme CA ou TX. Les registres américains sont interrogés par État."
  460. }
  461. },
  462. "openai": {
  463. "description": "Descriptions de service, résumés d'historique, lecture de documents et assistant, traités par votre propre compte OpenAI. Chaque appel est facturé à ce compte, et vous choisissez le modèle.",
  464. "fields": {
  465. "apiKey": "Clé API",
  466. "apiKeyHelp": "À créer sur platform.openai.com, dans API keys. Le compte doit être approvisionné ; OpenAI facture à l’appel."
  467. },
  468. "settings": {
  469. "model": "Modèle",
  470. "modelHelp": "Le modèle qui répond. La liste vient de votre compte, les plus récents en premier. Les petits modèles coûtent moins par appel et suffisent à la plupart des textes d'atelier."
  471. }
  472. },
  473. "anthropic": {
  474. "description": "Descriptions de service, résumés d'historique, lecture de documents et assistant, traités par Claude sur votre propre compte Anthropic. Chaque appel est facturé à ce compte, et vous choisissez le modèle.",
  475. "fields": {
  476. "apiKey": "Clé API",
  477. "apiKeyHelp": "À créer sur console.anthropic.com, dans API keys. Le compte doit être approvisionné ; Anthropic facture à l’appel."
  478. },
  479. "settings": {
  480. "model": "Modèle",
  481. "modelHelp": "Le modèle qui répond. La liste vient de votre compte, les plus récents en premier. Les petits modèles coûtent moins par appel et suffisent à la plupart des textes d'atelier."
  482. }
  483. },
  484. "openai-compatible": {
  485. "description": "Descriptions de service, résumés d'historique, lecture de documents et assistant, fournis par tout serveur parlant l'API de chat d'OpenAI : Ollama, Open WebUI, LocalAI, vLLM, LM Studio, LiteLLM et consorts. Vos données restent sur votre propre matériel.",
  486. "fields": {
  487. "baseUrl": "URL de base",
  488. "baseUrlHelp": "Là où commence l'API façon OpenAI du serveur, chemin compris : /v1 pour Ollama, vLLM, LocalAI et LM Studio, /api pour Open WebUI. Torqvoice y ajoute /models et /chat/completions.",
  489. "apiKey": "Clé API",
  490. "apiKeyHelp": "Seulement si le serveur en exige une. Ollama et vLLM tournent généralement sans clé ; Open WebUI en délivre une dans Paramètres, Compte."
  491. },
  492. "settings": {
  493. "model": "Modèle",
  494. "modelHelp": "Quel modèle répond. La liste reprend tout ce que le serveur annonce, par nom. Choisissez un modèle avec vision pour la lecture de photos."
  495. }
  496. },
  497. "stripe": {
  498. "description": "Paiements par carte depuis le lien de la facture, sur votre propre compte Stripe. Le client paie, Stripe prévient Torqvoice et la facture se marque payée toute seule.",
  499. "fields": {
  500. "secretKey": "Clé secrète",
  501. "secretKeyHelp": "Depuis le tableau de bord Stripe sous Developers, API keys. Les clés de test ne traitent rien de réel : essayez d'abord un paiement avec elles, puis passez aux clés réelles.",
  502. "publishableKey": "Clé publiable",
  503. "webhookSecret": "Secret de signature du webhook",
  504. "webhookSecretHelp": "Affiché par Stripe une fois l'URL de notification de cette page ajoutée comme webhook. Avec lui, chaque notification est vérifiée avant qu'un paiement soit enregistré."
  505. },
  506. "settings": {
  507. "enabled": "Proposer sur les liens de facture",
  508. "enabledHelp": "Désactivez pour retirer le bouton de paiement des factures partagées pendant un temps, sans déconnecter. Les paiements déjà lancés sont toujours enregistrés."
  509. }
  510. },
  511. "vipps": {
  512. "description": "Vipps MobilePay depuis le lien de la facture. Le client paie dans l'application qu'il a déjà et la facture se marque payée toute seule.",
  513. "fields": {
  514. "clientId": "ID client",
  515. "clientSecret": "Secret client",
  516. "subscriptionKey": "Clé d'abonnement",
  517. "subscriptionKeyHelp": "La Ocp-Apim-Subscription-Key du portail Vipps MobilePay, dans les clés API de l'unité de vente.",
  518. "merchantSerialNumber": "Numéro de série marchand"
  519. },
  520. "settings": {
  521. "enabled": "Proposer sur les liens de facture",
  522. "enabledHelp": "Désactivez pour retirer le bouton de paiement des factures partagées pendant un temps, sans déconnecter. Les paiements déjà lancés sont toujours enregistrés.",
  523. "testMode": "Mode test",
  524. "testModeHelp": "Utiliser l'environnement de test Vipps avec des clés de test. Laissez-le activé jusqu'à ce qu'un paiement complet ait abouti, puis désactivez-le et saisissez les clés réelles."
  525. }
  526. },
  527. "paypal": {
  528. "description": "Paiement PayPal depuis le lien de la facture, via votre propre application PayPal. Le client paie avec un compte PayPal ou une carte et la facture se marque payée toute seule.",
  529. "fields": {
  530. "clientId": "ID client",
  531. "clientSecret": "Secret client"
  532. },
  533. "settings": {
  534. "enabled": "Proposer sur les liens de facture",
  535. "enabledHelp": "Désactivez pour retirer le bouton de paiement des factures partagées pendant un temps, sans déconnecter. Les paiements déjà lancés sont toujours enregistrés.",
  536. "sandbox": "Mode sandbox",
  537. "sandboxHelp": "Utiliser le sandbox PayPal avec les clés de l'application sandbox. Laissez-le activé jusqu'à ce qu'un paiement complet ait abouti, puis désactivez-le et saisissez les clés de l'application réelle."
  538. }
  539. },
  540. "quickbooks": {
  541. "description": "Envoyez les factures émises, leurs clients et leurs paiements vers QuickBooks Online, et récupérez les paiements enregistrés là-bas.",
  542. "tenantHelp": "Créez une application sur le portail développeur Intuit. Copiez le client id et le secret depuis Keys and credentials, et saisissez l'URI de redirection ci-dessous sous Settings, Redirect URIs. Les clés de développement atteignent les entreprises sandbox, les clés de production les vraies.",
  543. "fields": {
  544. "clientId": "Identifiant client",
  545. "clientSecret": "Secret client"
  546. },
  547. "settings": {
  548. "pushInvoices": "Envoyer les factures émises vers QuickBooks",
  549. "pushOnComplete": "Envoyer aussi les factures quand le travail est marqué terminé",
  550. "pushOnCompleteHelp": "Sans cette option, une facture part une fois envoyée, partagée ou payée. Avec, un travail terminé part tout de suite et est mis à jour s'il change.",
  551. "startDate": "Uniquement les factures datées à partir du",
  552. "startDateHelp": "Laissez vide pour envoyer toutes les factures émises. Utilisez la date où votre comptabilité est passée sur QuickBooks pour ne pas saisir deux fois les anciennes factures.",
  553. "includeVehicle": "Indiquer le véhicule sur la facture",
  554. "includeVehicleHelp": "Une ligne de texte au-dessus des lignes facturées avec l'année, la marque, le modèle, la plaque et le kilométrage, pour que la comptabilité sache de quelle voiture il s'agit.",
  555. "laborItemId": "Article pour les lignes de main-d'œuvre",
  556. "laborItemIdHelp": "Laissez vide et un article nommé Labour sera créé sous votre compte de produits la première fois.",
  557. "partsItemId": "Article pour les lignes de pièces",
  558. "partsItemIdHelp": "Laissez vide et un article nommé Parts sera créé sous votre compte de produits la première fois.",
  559. "taxAmounts": "Montants de taxe",
  560. "taxAmountsHelp": "Tel que facturé envoie la taxe exactement telle qu'elle figure sur la facture reçue par le client, pour que les deux systèmes concordent au centime. Calculé par QuickBooks laisse QuickBooks appliquer le taux du code de taxe, ou l'adresse du client aux États-Unis, et le journal signale les totaux différents.",
  561. "taxAmountsBilled": "Tel que facturé dans Torqvoice",
  562. "taxAmountsQuickbooks": "Calculé par QuickBooks",
  563. "taxCodeId": "Code de taxe pour les factures taxables",
  564. "taxCodeIdHelp": "QuickBooks enregistre la taxe sous un code de taxe. Torqvoice choisit le code dont le taux correspond à chaque facture ; celui-ci sert quand aucun ne correspond. Une société américaine utilise TAX sauf si vous choisissez un autre code.",
  565. "zeroTaxCodeId": "Code de taxe pour les factures sans taxe",
  566. "zeroTaxCodeIdHelp": "Utilisé quand la facture n'a pas de taxe ou que le client est exonéré. Une société américaine utilise NON sauf si vous choisissez un autre code.",
  567. "pushPayments": "Enregistrer les paiements dans QuickBooks",
  568. "depositAccountId": "Déposer les paiements sur",
  569. "depositAccountIdHelp": "Laissez vide pour utiliser Undeposited Funds.",
  570. "manualPaidAsPayment": "Enregistrer un paiement quand une facture est marquée payée à la main",
  571. "manualPaidAsPaymentHelp": "Une facture marquée payée dans Torqvoice sans écriture de paiement reçoit dans QuickBooks un paiement du montant qu'elle y affiche encore comme dû. Désactivé, elle y reste ouverte jusqu'à l'enregistrement d'un paiement.",
  572. "pullPayments": "Récupérer les paiements enregistrés dans QuickBooks",
  573. "pullPaymentsHelp": "Toutes les 30 minutes. Un paiement reçu dans QuickBooks sur une facture Torqvoice est enregistré ici sur la facture."
  574. }
  575. },
  576. "nhtsa": {
  577. "description": "Remplissez un véhicule à partir de son VIN et consultez les rappels, les plaintes de propriétaires et les notes aux crash-tests pour chaque année-modèle, auprès de l'autorité de sécurité américaine. Gratuit, sans clé.",
  578. "fields": {},
  579. "settings": {
  580. "refreshFleet": "Tenir à jour les données de rappels et de plaintes pour chaque véhicule de cet atelier",
  581. "refreshFleetHelp": "Une fois par jour, les modèles non actualisés depuis une semaine sont récupérés à nouveau, pour que la page du véhicule n'attende jamais et qu'un nouveau rappel apparaisse dans la semaine. Seuls la marque, le modèle et l'année sont envoyés."
  582. }
  583. },
  584. "speech-to-text": {
  585. "description": "La dictée sur un ordre de travail, transcrite par un modèle vocal plutôt que par le navigateur : bien plus précise, dans toutes les langues, et elle connaît le vocabulaire de l'atelier. Indépendant de votre fournisseur d'IA, que vous pouvez garder tel quel. Utilise votre propre clé OpenAI, ou votre propre serveur compatible avec l'API de transcription d'OpenAI. L'enregistrement est envoyé pour être transcrit et n'est pas conservé.",
  586. "fields": {
  587. "apiKey": "Clé API",
  588. "apiKeyHelp": "Une clé OpenAI, sur platform.openai.com sous API keys ; OpenAI facture l'usage à la minute. Pour votre propre serveur, seulement s'il en demande une.",
  589. "baseUrl": "Adresse du serveur",
  590. "baseUrlHelp": "Laissez vide pour utiliser OpenAI. Pour votre propre serveur (un Whisper local, LocalAI, Groq), l'adresse où commence son API de type OpenAI, chemin compris, par exemple /v1. Torqvoice y ajoute /audio/transcriptions."
  591. },
  592. "settings": {
  593. "model": "Modèle",
  594. "modelHelp": "Le modèle vocal à utiliser. gpt-4o-mini-transcribe est précis et bon marché ; gpt-4o-transcribe est le plus grand. Votre propre serveur répond en général à whisper-1.",
  595. "mode": "Qui choisit comment la dictée est transcrite",
  596. "modeHelp": "Le navigateur écrit pendant que vous parlez mais il est moins bon, surtout dans les langues moins répandues. Le modèle vocal écrit quand vous vous arrêtez.",
  597. "modeAi": "Toujours le modèle vocal",
  598. "modeChoice": "Chacun choisit : modèle vocal ou navigateur"
  599. }
  600. }
  601. },
  602. "jobKinds": {
  603. "calendar": {
  604. "push": "Ordres de travail vers l'agenda",
  605. "pull": "Temps occupé depuis l'agenda"
  606. },
  607. "conference": {
  608. "sync": "Liens de visioconférence"
  609. },
  610. "inspection": {
  611. "refresh": "Mise à jour des dates de contrôle"
  612. },
  613. "accounting": {
  614. "invoice": "Facture vers la comptabilité",
  615. "payment": "Paiement vers la comptabilité",
  616. "customer": "Client vers la comptabilité",
  617. "pull": "Paiements depuis la comptabilité"
  618. },
  619. "safety": {
  620. "refresh": "Actualisation des données de rappel",
  621. "vehicle": "Vérification des rappels pour un nouveau véhicule"
  622. }
  623. }
  624. }