Просмотр исходного кода

Add European Portuguese and finish translations in every language (#406)

* Add European Portuguese and translate English text left in every language

* quarterly

* tabel

* vehicle table
Bernt Christian Egeland 1 неделя назад
Родитель
Сommit
f6eb1a9566
100 измененных файлов с 1180 добавлено и 1180 удалено
  1. 2 2
      messages/de/admin.json
  2. 1 1
      messages/de/billing.json
  3. 5 5
      messages/de/calendar.json
  4. 2 2
      messages/de/customers.json
  5. 6 6
      messages/de/dashboard.json
  6. 17 17
      messages/de/documentLock.json
  7. 92 92
      messages/de/integrations.json
  8. 1 1
      messages/de/inventory.json
  9. 4 4
      messages/de/laborPresets.json
  10. 3 3
      messages/de/messages.json
  11. 1 1
      messages/de/navigation.json
  12. 1 1
      messages/de/notifications.json
  13. 6 6
      messages/de/pdf.json
  14. 1 1
      messages/de/reminders.json
  15. 80 80
      messages/de/reports.json
  16. 17 17
      messages/de/settings.json
  17. 5 5
      messages/de/share.json
  18. 1 1
      messages/de/statusReport.json
  19. 3 3
      messages/de/telegram.json
  20. 1 1
      messages/de/telegramMessages.json
  21. 24 24
      messages/de/vehicles.json
  22. 7 7
      messages/de/workBoard.json
  23. 1 1
      messages/de/workOrders.json
  24. 1 1
      messages/en/settings.json
  25. 1 1
      messages/en/share.json
  26. 2 2
      messages/es/admin.json
  27. 5 5
      messages/es/calendar.json
  28. 2 2
      messages/es/customers.json
  29. 6 6
      messages/es/dashboard.json
  30. 17 17
      messages/es/documentLock.json
  31. 95 95
      messages/es/integrations.json
  32. 3 3
      messages/es/inventory.json
  33. 4 4
      messages/es/laborPresets.json
  34. 3 3
      messages/es/messages.json
  35. 1 1
      messages/es/navigation.json
  36. 1 1
      messages/es/notifications.json
  37. 6 6
      messages/es/pdf.json
  38. 1 1
      messages/es/reminders.json
  39. 85 85
      messages/es/reports.json
  40. 2 2
      messages/es/service.json
  41. 17 17
      messages/es/settings.json
  42. 5 5
      messages/es/share.json
  43. 2 2
      messages/es/statusReport.json
  44. 3 3
      messages/es/telegram.json
  45. 1 1
      messages/es/telegramMessages.json
  46. 25 25
      messages/es/vehicles.json
  47. 7 7
      messages/es/workBoard.json
  48. 1 1
      messages/es/workOrders.json
  49. 2 2
      messages/fr/admin.json
  50. 1 1
      messages/fr/billing.json
  51. 6 6
      messages/fr/calendar.json
  52. 1 1
      messages/fr/customers.json
  53. 7 7
      messages/fr/dashboard.json
  54. 17 17
      messages/fr/documentLock.json
  55. 94 94
      messages/fr/integrations.json
  56. 2 2
      messages/fr/inventory.json
  57. 6 6
      messages/fr/laborPresets.json
  58. 3 3
      messages/fr/messages.json
  59. 1 1
      messages/fr/navigation.json
  60. 1 1
      messages/fr/notifications.json
  61. 2 2
      messages/fr/quotes.json
  62. 1 1
      messages/fr/reminders.json
  63. 83 83
      messages/fr/reports.json
  64. 2 2
      messages/fr/service.json
  65. 18 18
      messages/fr/settings.json
  66. 5 5
      messages/fr/share.json
  67. 1 1
      messages/fr/statusReport.json
  68. 3 3
      messages/fr/telegram.json
  69. 1 1
      messages/fr/telegramMessages.json
  70. 1 1
      messages/fr/timeTracking.json
  71. 24 24
      messages/fr/vehicles.json
  72. 7 7
      messages/fr/workBoard.json
  73. 1 1
      messages/fr/workOrders.json
  74. 2 2
      messages/it/admin.json
  75. 5 5
      messages/it/calendar.json
  76. 2 2
      messages/it/customers.json
  77. 7 7
      messages/it/dashboard.json
  78. 17 17
      messages/it/documentLock.json
  79. 93 93
      messages/it/integrations.json
  80. 1 1
      messages/it/inventory.json
  81. 4 4
      messages/it/laborPresets.json
  82. 3 3
      messages/it/messages.json
  83. 1 1
      messages/it/navigation.json
  84. 1 1
      messages/it/notifications.json
  85. 7 7
      messages/it/pdf.json
  86. 1 1
      messages/it/reminders.json
  87. 85 85
      messages/it/reports.json
  88. 15 15
      messages/it/settings.json
  89. 6 6
      messages/it/share.json
  90. 1 1
      messages/it/statusReport.json
  91. 3 3
      messages/it/telegram.json
  92. 1 1
      messages/it/telegramMessages.json
  93. 24 24
      messages/it/vehicles.json
  94. 7 7
      messages/it/workBoard.json
  95. 1 1
      messages/it/workOrders.json
  96. 1 1
      messages/lt/admin.json
  97. 2 2
      messages/lt/calendar.json
  98. 2 2
      messages/lt/customers.json
  99. 4 4
      messages/lt/dashboard.json
  100. 17 17
      messages/lt/documentLock.json

+ 2 - 2
messages/de/admin.json

@@ -31,7 +31,7 @@
     "name": "Name",
     "name": "Name",
     "email": "E-Mail",
     "email": "E-Mail",
     "role": "Rolle",
     "role": "Rolle",
-    "orgs": "Orgs",
+    "orgs": "Organisationen",
     "created": "Erstellt",
     "created": "Erstellt",
     "lastSeen": "Zuletzt gesehen",
     "lastSeen": "Zuletzt gesehen",
     "noResults": "Keine Benutzer entsprechen Ihrer Suche.",
     "noResults": "Keine Benutzer entsprechen Ihrer Suche.",
@@ -117,7 +117,7 @@
     "sendgridApiKeyHint": "Holen Sie Ihren API-Schlüssel von app.sendgrid.com"
     "sendgridApiKeyHint": "Holen Sie Ihren API-Schlüssel von app.sendgrid.com"
   },
   },
   "common": {
   "common": {
-    "openMenu": "Open menu"
+    "openMenu": "Menü öffnen"
   },
   },
   "userDetails": {
   "userDetails": {
     "back": "Zurück zu Benutzern",
     "back": "Zurück zu Benutzern",

+ 1 - 1
messages/de/billing.json

@@ -85,7 +85,7 @@
     "failedDelete": "Löschen fehlgeschlagen",
     "failedDelete": "Löschen fehlgeschlagen",
     "processed": "{count} Rechnung(en) verarbeitet",
     "processed": "{count} Rechnung(en) verarbeitet",
     "failedProcess": "Verarbeitung fehlgeschlagen",
     "failedProcess": "Verarbeitung fehlgeschlagen",
-    "pause": "Pause",
+    "pause": "Pausieren",
     "resume": "Fortsetzen",
     "resume": "Fortsetzen",
     "delete": "Löschen",
     "delete": "Löschen",
     "removeRow": "Zeile entfernen"
     "removeRow": "Zeile entfernen"

+ 5 - 5
messages/de/calendar.json

@@ -80,10 +80,10 @@
   },
   },
   "selectVehicle": "Fahrzeug für Arbeitsauftrag auswählen",
   "selectVehicle": "Fahrzeug für Arbeitsauftrag auswählen",
   "dateChoice": {
   "dateChoice": {
-    "title": "Work Order Date",
-    "description": "You have {selectedDate} selected. Which date should this work order be for?",
+    "title": "Auftragsdatum",
+    "description": "Sie haben {selectedDate} ausgewählt. Für welches Datum soll dieser Arbeitsauftrag gelten?",
     "useSelected": "Use {date}",
     "useSelected": "Use {date}",
-    "useToday": "Use today"
+    "useToday": "Heute verwenden"
   },
   },
   "more": "+ {count} weitere",
   "more": "+ {count} weitere",
   "monthTotal": "{count} Termine",
   "monthTotal": "{count} Termine",
@@ -144,6 +144,6 @@
       "readOnly": "Belegte Zeit aus einem verbundenen Kalender. Änderungen dort erscheinen hier bei der nächsten Synchronisierung."
       "readOnly": "Belegte Zeit aus einem verbundenen Kalender. Änderungen dort erscheinen hier bei der nächsten Synchronisierung."
     }
     }
   },
   },
-  "previousMonth": "Previous month",
-  "nextMonth": "Next month"
+  "previousMonth": "Vorheriger Monat",
+  "nextMonth": "Nächster Monat"
 }
 }

+ 2 - 2
messages/de/customers.json

@@ -27,7 +27,7 @@
     "batchDeleteTitle": "Kunden löschen",
     "batchDeleteTitle": "Kunden löschen",
     "batchDeleteDescription": "{count} Kunde(n) löschen? Die zugehörigen Fahrzeuge werden dabei entknüpft.",
     "batchDeleteDescription": "{count} Kunde(n) löschen? Die zugehörigen Fahrzeuge werden dabei entknüpft.",
     "batchDeleteSuccess": "{count} Kunde(n) gelöscht",
     "batchDeleteSuccess": "{count} Kunde(n) gelöscht",
-    "openMenu": "Open menu"
+    "openMenu": "Menü öffnen"
   },
   },
   "detail": {
   "detail": {
     "backToCustomers": "Zurück zur Kundenliste",
     "backToCustomers": "Zurück zur Kundenliste",
@@ -95,7 +95,7 @@
     "customerCreated": "Kunde angelegt",
     "customerCreated": "Kunde angelegt",
     "saveError": "Kunde konnte nicht gespeichert werden",
     "saveError": "Kunde konnte nicht gespeichert werden",
     "customerNumber": "Kundennr.",
     "customerNumber": "Kundennr.",
-    "customerNumberAuto": "Auto",
+    "customerNumberAuto": "Automatisch",
     "sectionContact": "Kontakt",
     "sectionContact": "Kontakt",
     "sectionBilling": "Rechnung",
     "sectionBilling": "Rechnung",
     "addScannedVehicle": "Fahrzeug {vehicle} anlegen",
     "addScannedVehicle": "Fahrzeug {vehicle} anlegen",

+ 6 - 6
messages/de/dashboard.json

@@ -74,8 +74,8 @@
     "noDismissed": "Keine ausgeblendeten Fahrzeuge.",
     "noDismissed": "Keine ausgeblendeten Fahrzeuge.",
     "dismissedOn": "Verworfen am {date}",
     "dismissedOn": "Verworfen am {date}",
     "restore": "Wiederherstellen",
     "restore": "Wiederherstellen",
-    "settingsAriaLabel": "Maintenance settings",
-    "dismissAriaLabel": "Dismiss"
+    "settingsAriaLabel": "Wartungseinstellungen",
+    "dismissAriaLabel": "Ausblenden"
   },
   },
   "reminders": {
   "reminders": {
     "title": "Anstehende Erinnerungen",
     "title": "Anstehende Erinnerungen",
@@ -112,7 +112,7 @@
     "createQuote": "Angebot erstellen",
     "createQuote": "Angebot erstellen",
     "itemsRequested": "{count, plural, one {# Position angefragt} other {# Positionen angefragt}}",
     "itemsRequested": "{count, plural, one {# Position angefragt} other {# Positionen angefragt}}",
     "noData": "Keine ausstehenden Angebotsanfragen.",
     "noData": "Keine ausstehenden Angebotsanfragen.",
-    "dismissAriaLabel": "Dismiss quote request"
+    "dismissAriaLabel": "Angebotsanfrage ausblenden"
   },
   },
   "quoteResponses": {
   "quoteResponses": {
     "title": "Angebotsantworten der Kunden",
     "title": "Angebotsantworten der Kunden",
@@ -120,11 +120,11 @@
     "accepted": "Angenommen",
     "accepted": "Angenommen",
     "changesRequested": "Änderungen gewünscht",
     "changesRequested": "Änderungen gewünscht",
     "convertToWorkOrder": "In Arbeitsauftrag umwandeln",
     "convertToWorkOrder": "In Arbeitsauftrag umwandeln",
-    "convert": "Convert",
+    "convert": "Umwandeln",
     "viewQuote": "Angebot anzeigen",
     "viewQuote": "Angebot anzeigen",
-    "view": "View",
+    "view": "Anzeigen",
     "noData": "Keine Kundenantworten.",
     "noData": "Keine Kundenantworten.",
-    "dismissAriaLabel": "Dismiss response"
+    "dismissAriaLabel": "Antwort ausblenden"
   },
   },
   "recentCompleted": {
   "recentCompleted": {
     "title": "Kürzlich abgeschlossen",
     "title": "Kürzlich abgeschlossen",

+ 17 - 17
messages/de/documentLock.json

@@ -1,27 +1,27 @@
 {
 {
   "lockedTitle": {
   "lockedTitle": {
     "invoice": {
     "invoice": {
-      "sent": "This invoice is locked because it has been sent",
-      "paid": "This invoice is locked because it has been paid"
+      "sent": "Diese Rechnung ist gesperrt, weil sie gesendet wurde",
+      "paid": "Diese Rechnung ist gesperrt, weil sie bezahlt wurde"
     },
     },
     "quote": {
     "quote": {
-      "sent": "This quote is locked because it has been sent",
-      "accepted": "This quote is locked because it has been accepted"
+      "sent": "Dieses Angebot ist gesperrt, weil es gesendet wurde",
+      "accepted": "Dieses Angebot ist gesperrt, weil es angenommen wurde"
     }
     }
   },
   },
-  "lockedBody": "Its parts, labour, prices, discount, tax, number and date can no longer be changed. Payments, status changes, sending and attachments all still work.",
-  "lockedAdminHint": "As an owner or admin you can unlock it if something genuinely needs correcting. The unlock is recorded in the audit log.",
-  "lockedMemberHint": "Ask an owner or admin to unlock it if something needs correcting.",
-  "unlock": "Unlock for editing",
-  "relock": "Lock again",
-  "unlockConfirmTitle": "Unlock this document?",
+  "lockedBody": "Teile, Arbeitsleistung, Preise, Rabatt, Steuer, Nummer und Datum können nicht mehr geändert werden. Zahlungen, Statusänderungen, Versand und Anhänge funktionieren weiterhin.",
+  "lockedAdminHint": "Als Inhaber oder Admin können Sie die Sperre aufheben, wenn wirklich etwas korrigiert werden muss. Das Entsperren wird im Prüfprotokoll festgehalten.",
+  "lockedMemberHint": "Bitten Sie einen Inhaber oder Admin, die Sperre aufzuheben, wenn etwas korrigiert werden muss.",
+  "unlock": "Zum Bearbeiten entsperren",
+  "relock": "Wieder sperren",
+  "unlockConfirmTitle": "Dieses Dokument entsperren?",
   "unlockConfirmDescription": {
   "unlockConfirmDescription": {
-    "invoice": "It will become editable again, and the change will be recorded in the audit log with your name. Prefer a credit note where your local rules require one.",
-    "quote": "It will become editable again, and the change will be recorded in the audit log with your name."
+    "invoice": "Es wird wieder bearbeitbar, und die Änderung wird mit Ihrem Namen im Prüfprotokoll festgehalten. Erstellen Sie lieber eine Gutschrift, wo die Vorschriften in Ihrem Land das verlangen.",
+    "quote": "Es wird wieder bearbeitbar, und die Änderung wird mit Ihrem Namen im Prüfprotokoll festgehalten."
   },
   },
-  "unlocked": "Unlocked for editing",
-  "relocked": "Locked again",
-  "reopenedTitle": "This document has been unlocked for editing",
-  "reopenedBody": "It stays editable until it is locked again.",
-  "failed": "Could not change the lock"
+  "unlocked": "Zum Bearbeiten entsperrt",
+  "relocked": "Wieder gesperrt",
+  "reopenedTitle": "Dieses Dokument wurde zum Bearbeiten entsperrt",
+  "reopenedBody": "Es bleibt bearbeitbar, bis es wieder gesperrt wird.",
+  "failed": "Die Sperre konnte nicht geändert werden"
 }
 }

+ 92 - 92
messages/de/integrations.json

@@ -40,19 +40,19 @@
       "conference": "Links für Videoanrufe"
       "conference": "Links für Videoanrufe"
     },
     },
     "sms": {
     "sms": {
-      "send": "Text messages out",
-      "receive": "Replies back in"
+      "send": "SMS versenden",
+      "receive": "Antworten empfangen"
     },
     },
     "whatsapp": {
     "whatsapp": {
-      "send": "WhatsApp messages out",
-      "receive": "Replies back in"
+      "send": "WhatsApp-Nachrichten versenden",
+      "receive": "Antworten empfangen"
     },
     },
     "telegram": {
     "telegram": {
-      "send": "Telegram messages out",
-      "receive": "Replies back in"
+      "send": "Telegram-Nachrichten versenden",
+      "receive": "Antworten empfangen"
     },
     },
     "email": {
     "email": {
-      "send": "Email out"
+      "send": "E-Mails versenden"
     },
     },
     "vehicle": {
     "vehicle": {
       "lookup": "Kennzeichen- und FIN-Abfrage",
       "lookup": "Kennzeichen- und FIN-Abfrage",
@@ -131,19 +131,19 @@
     "lockedAi": "Verbinden Sie einen KI-Anbieter, um KI-Funktionen in Ihrer Werkstatt zu nutzen.",
     "lockedAi": "Verbinden Sie einen KI-Anbieter, um KI-Funktionen in Ihrer Werkstatt zu nutzen.",
     "ownAppTitle": "Diese Installation verwendet Ihre eigene App beim Anbieter",
     "ownAppTitle": "Diese Installation verwendet Ihre eigene App beim Anbieter",
     "redirectUri": "Beim Anbieter zu registrierende Redirect-URI:",
     "redirectUri": "Beim Anbieter zu registrierende Redirect-URI:",
-    "sendTestEmail": "Send test email",
-    "testEmailSent": "Test email sent to {email}",
-    "testEmailHint": "A test email goes to your own address through this vendor, which proves the from address and the sending rules a key check cannot.",
-    "inboundUrl": "Inbound webhook URL",
-    "inboundHintSecret": "Paste this URL into the vendor's inbound message settings. It carries a secret that identifies your workshop, so keep it private.",
-    "inboundHintMeta": "Paste this URL as the callback URL in your Meta app, with the verify token you entered above, and subscribe to messages.",
+    "sendTestEmail": "Test-E-Mail senden",
+    "testEmailSent": "Test-E-Mail an {email} gesendet",
+    "testEmailHint": "Eine Test-E-Mail geht über diesen Anbieter an Ihre eigene Adresse. So prüfen Sie die Absenderadresse und die Versandregeln, die eine reine Schlüsselprüfung nicht abdeckt.",
+    "inboundUrl": "Webhook-URL für eingehende Nachrichten",
+    "inboundHintSecret": "Fügen Sie diese URL in den Einstellungen des Anbieters für eingehende Nachrichten ein. Sie enthält ein Geheimnis, das Ihre Werkstatt identifiziert, halten Sie sie also vertraulich.",
+    "inboundHintMeta": "Tragen Sie diese URL als Callback-URL in Ihrer Meta-App ein, zusammen mit dem oben eingegebenen Verifizierungstoken, und abonnieren Sie messages.",
     "inboundHintStripe": "Fügen Sie diese URL im Stripe-Dashboard unter Developers, Webhooks hinzu, abonniert auf checkout.session.completed. Tragen Sie dann das von Stripe angezeigte Signaturgeheimnis hier im Feld Webhook-Geheimnis ein, damit Benachrichtigungen geprüft werden können.",
     "inboundHintStripe": "Fügen Sie diese URL im Stripe-Dashboard unter Developers, Webhooks hinzu, abonniert auf checkout.session.completed. Tragen Sie dann das von Stripe angezeigte Signaturgeheimnis hier im Feld Webhook-Geheimnis ein, damit Benachrichtigungen geprüft werden können.",
     "inboundHintVipps": "Tragen Sie diese URL als Callback-URL im Vipps-MobilePay-Portal ein. Vipps verlangt außerdem veröffentlichte Verkaufsbedingungen, die unter Einstellungen, Zahlung hinterlegt werden.",
     "inboundHintVipps": "Tragen Sie diese URL als Callback-URL im Vipps-MobilePay-Portal ein. Vipps verlangt außerdem veröffentlichte Verkaufsbedingungen, die unter Einstellungen, Zahlung hinterlegt werden.",
     "inboundHintPaypal": "Fügen Sie diese URL im PayPal-Entwicklerdashboard unter Webhooks hinzu, abonniert auf PAYMENT.CAPTURE.COMPLETED.",
     "inboundHintPaypal": "Fügen Sie diese URL im PayPal-Entwicklerdashboard unter Webhooks hinzu, abonniert auf PAYMENT.CAPTURE.COMPLETED.",
-    "copy": "Copy",
-    "copied": "Copied",
-    "updateKeys": "Update keys",
-    "updateKeysHint": "The last check failed. Enter the keys again to try once more.",
+    "copy": "Kopieren",
+    "copied": "Kopiert",
+    "updateKeys": "Schlüssel aktualisieren",
+    "updateKeysHint": "Die letzte Prüfung ist fehlgeschlagen. Geben Sie die Schlüssel erneut ein, um es noch einmal zu versuchen.",
     "inspectionSync": {
     "inspectionSync": {
       "title": "HU-Abgleich",
       "title": "HU-Abgleich",
       "vehicles": "{count} Fahrzeuge mit Kennzeichen in dieser Werkstatt",
       "vehicles": "{count} Fahrzeuge mit Kennzeichen in dieser Werkstatt",
@@ -256,155 +256,155 @@
       }
       }
     },
     },
     "twilio-sms": {
     "twilio-sms": {
-      "description": "Send and receive text messages through a Twilio number. Reminders, ready-for-pickup messages and the replies that come back.",
+      "description": "SMS über eine Twilio-Nummer senden und empfangen. Erinnerungen, Abholbereit-Nachrichten und die Antworten darauf.",
       "fields": {
       "fields": {
         "accountSid": "Account SID",
         "accountSid": "Account SID",
-        "authToken": "Auth token"
+        "authToken": "Auth-Token"
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Von dieser Nummer senden"
       }
       }
     },
     },
     "vonage-sms": {
     "vonage-sms": {
-      "description": "Send and receive text messages through a Vonage number.",
+      "description": "SMS über eine Vonage-Nummer senden und empfangen.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "apiSecret": "API secret",
-        "signatureSecret": "Signature secret",
-        "signatureSecretHelp": "From the Vonage dashboard, under API settings. When set, inbound messages are only accepted when Vonage signed them. Without it, only the secret in the webhook URL is checked."
+        "apiKey": "API-Schlüssel",
+        "apiSecret": "API-Secret",
+        "signatureSecret": "Signaturgeheimnis",
+        "signatureSecretHelp": "Aus dem Vonage-Dashboard unter API settings. Ist es gesetzt, werden eingehende Nachrichten nur angenommen, wenn Vonage sie signiert hat. Ohne es wird nur das Geheimnis in der Webhook-URL geprüft."
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Von dieser Nummer senden"
       }
       }
     },
     },
     "telnyx-sms": {
     "telnyx-sms": {
-      "description": "Send and receive text messages through a Telnyx number.",
+      "description": "SMS über eine Telnyx-Nummer senden und empfangen.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "webhookPublicKey": "Webhook public key",
-        "webhookPublicKeyHelp": "From the Telnyx portal, under Account settings, Keys and credentials, Public key. When set, inbound messages are only accepted when Telnyx signed them. Without it, only the secret in the webhook URL is checked."
+        "apiKey": "API-Schlüssel",
+        "webhookPublicKey": "Öffentlicher Webhook-Schlüssel",
+        "webhookPublicKeyHelp": "Aus dem Telnyx-Portal unter Account settings, Keys and credentials, Public key. Ist er gesetzt, werden eingehende Nachrichten nur angenommen, wenn Telnyx sie signiert hat. Ohne ihn wird nur das Geheimnis in der Webhook-URL geprüft."
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Von dieser Nummer senden"
       }
       }
     },
     },
     "whatsapp-meta": {
     "whatsapp-meta": {
-      "description": "Message customers on WhatsApp through Meta directly. Photos of what you found, and the conversation that follows.",
+      "description": "Kunden direkt über Meta auf WhatsApp schreiben. Fotos von dem, was Sie gefunden haben, und die Unterhaltung, die darauf folgt.",
       "fields": {
       "fields": {
-        "phoneNumberId": "Phone number ID",
-        "accessToken": "Access token",
-        "verifyToken": "Webhook verify token",
-        "appSecret": "App secret",
-        "apiVersion": "Graph API version",
-        "appSecretHelp": "Meta signs every delivery with it. Until it is entered, messages posted to the webhook are refused, since anyone who learns the URL could otherwise post as your customers."
+        "phoneNumberId": "Telefonnummer-ID",
+        "accessToken": "Zugriffstoken",
+        "verifyToken": "Webhook-Verifizierungstoken",
+        "appSecret": "App-Secret",
+        "apiVersion": "Graph-API-Version",
+        "appSecretHelp": "Meta signiert damit jede Zustellung. Solange es nicht eingetragen ist, werden an den Webhook gesendete Nachrichten abgewiesen, da sonst jeder, der die URL kennt, im Namen Ihrer Kunden schreiben könnte."
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "phoneNumber": "Send from this number",
-        "templateName": "Template for reopening a conversation",
-        "templateLanguage": "Template language",
-        "templateVariables": "Template values, in order",
-        "mediaTemplateName": "Template for a message with a photo",
-        "mediaTemplateLanguage": "Photo template language",
-        "mediaTemplateVariables": "Photo template values, in order"
+        "enabled": "Nachrichten über diesen Kanal senden",
+        "phoneNumber": "Von dieser Nummer senden",
+        "templateName": "Vorlage zum Wiedereröffnen einer Unterhaltung",
+        "templateLanguage": "Sprache der Vorlage",
+        "templateVariables": "Werte der Vorlage, in Reihenfolge",
+        "mediaTemplateName": "Vorlage für eine Nachricht mit Foto",
+        "mediaTemplateLanguage": "Sprache der Fotovorlage",
+        "mediaTemplateVariables": "Werte der Fotovorlage, in Reihenfolge"
       }
       }
     },
     },
     "whatsapp-twilio": {
     "whatsapp-twilio": {
-      "description": "Message customers on WhatsApp through a Twilio number, if Twilio is who sold you one.",
+      "description": "Kunden über eine Twilio-Nummer auf WhatsApp schreiben, falls Sie Ihre Nummer von Twilio haben.",
       "fields": {
       "fields": {
         "accountSid": "Account SID",
         "accountSid": "Account SID",
-        "authToken": "Auth token",
-        "messagingServiceSid": "Messaging service SID"
+        "authToken": "Auth-Token",
+        "messagingServiceSid": "Messaging Service SID"
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "phoneNumber": "Send from this number",
-        "templateName": "Template for reopening a conversation",
-        "templateLanguage": "Template language",
-        "templateVariables": "Template values, in order",
-        "mediaTemplateName": "Template for a message with a photo",
-        "mediaTemplateLanguage": "Photo template language",
-        "mediaTemplateVariables": "Photo template values, in order"
+        "enabled": "Nachrichten über diesen Kanal senden",
+        "phoneNumber": "Von dieser Nummer senden",
+        "templateName": "Vorlage zum Wiedereröffnen einer Unterhaltung",
+        "templateLanguage": "Sprache der Vorlage",
+        "templateVariables": "Werte der Vorlage, in Reihenfolge",
+        "mediaTemplateName": "Vorlage für eine Nachricht mit Foto",
+        "mediaTemplateLanguage": "Sprache der Fotovorlage",
+        "mediaTemplateVariables": "Werte der Fotovorlage, in Reihenfolge"
       }
       }
     },
     },
     "telegram": {
     "telegram": {
-      "description": "A Telegram bot that reaches customers who use it, and brings their replies into the inbox.",
+      "description": "Ein Telegram-Bot, der Kunden erreicht, die ihn nutzen, und ihre Antworten in den Posteingang holt.",
       "fields": {
       "fields": {
-        "botToken": "Bot token"
+        "botToken": "Bot-Token"
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "botUsername": "Bot username"
+        "enabled": "Nachrichten über diesen Kanal senden",
+        "botUsername": "Bot-Benutzername"
       }
       }
     },
     },
     "smtp": {
     "smtp": {
-      "description": "Send invoices and reminders through your own mail server, rather than the platform mail.",
+      "description": "Rechnungen und Erinnerungen über Ihren eigenen Mailserver statt über den Plattform-Versand senden.",
       "fields": {
       "fields": {
         "host": "Server",
         "host": "Server",
         "port": "Port",
         "port": "Port",
-        "user": "Username",
-        "pass": "Password"
+        "user": "Benutzername",
+        "pass": "Passwort"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender",
-        "secure": "Connect over TLS from the start",
-        "requireTls": "Require the server to upgrade to TLS",
-        "rejectUnauthorized": "Reject a certificate that does not check out"
+        "fromEmail": "Von dieser Adresse senden",
+        "fromName": "Als Absender angezeigter Name",
+        "secure": "Von Anfang an über TLS verbinden",
+        "requireTls": "Vom Server den Wechsel zu TLS verlangen",
+        "rejectUnauthorized": "Zertifikate ablehnen, die die Prüfung nicht bestehen"
       }
       }
     },
     },
     "resend": {
     "resend": {
-      "description": "Send invoices and reminders through Resend.",
+      "description": "Rechnungen und Erinnerungen über Resend senden.",
       "fields": {
       "fields": {
-        "apiKey": "API key"
+        "apiKey": "API-Schlüssel"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Von dieser Adresse senden",
+        "fromName": "Als Absender angezeigter Name"
       }
       }
     },
     },
     "postmark": {
     "postmark": {
-      "description": "Send invoices and reminders through Postmark.",
+      "description": "Rechnungen und Erinnerungen über Postmark senden.",
       "fields": {
       "fields": {
-        "apiKey": "Server token"
+        "apiKey": "Server-Token"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Von dieser Adresse senden",
+        "fromName": "Als Absender angezeigter Name"
       }
       }
     },
     },
     "mailgun": {
     "mailgun": {
-      "description": "Send invoices and reminders through Mailgun.",
+      "description": "Rechnungen und Erinnerungen über Mailgun senden.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "domain": "Sending domain"
+        "apiKey": "API-Schlüssel",
+        "domain": "Versanddomain"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender",
-        "region": "Region the domain is in"
+        "fromEmail": "Von dieser Adresse senden",
+        "fromName": "Als Absender angezeigter Name",
+        "region": "Region der Domain"
       }
       }
     },
     },
     "sendgrid": {
     "sendgrid": {
-      "description": "Send invoices and reminders through SendGrid.",
+      "description": "Rechnungen und Erinnerungen über SendGrid senden.",
       "fields": {
       "fields": {
-        "apiKey": "API key"
+        "apiKey": "API-Schlüssel"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Von dieser Adresse senden",
+        "fromName": "Als Absender angezeigter Name"
       }
       }
     },
     },
     "amazon-ses": {
     "amazon-ses": {
-      "description": "Send invoices and reminders through Amazon SES.",
+      "description": "Rechnungen und Erinnerungen über Amazon SES senden.",
       "fields": {
       "fields": {
-        "accessKeyId": "Access key ID",
-        "secretAccessKey": "Secret access key",
+        "accessKeyId": "Zugriffsschlüssel-ID",
+        "secretAccessKey": "Geheimer Zugriffsschlüssel",
         "region": "Region"
         "region": "Region"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Von dieser Adresse senden",
+        "fromName": "Als Absender angezeigter Name"
       }
       }
     },
     },
     "vegvesen": {
     "vegvesen": {

+ 1 - 1
messages/de/inventory.json

@@ -131,7 +131,7 @@
     "saveChanges": "Änderungen speichern",
     "saveChanges": "Änderungen speichern",
     "addPart": "Teil hinzufügen"
     "addPart": "Teil hinzufügen"
   },
   },
-  "openMenu": "Open menu",
+  "openMenu": "Menü öffnen",
   "history": {
   "history": {
     "title": "Bestandsverlauf",
     "title": "Bestandsverlauf",
     "description": "Alle erfassten Änderungen an {name}, neueste zuerst.",
     "description": "Alle erfassten Änderungen an {name}, neueste zuerst.",

+ 4 - 4
messages/de/laborPresets.json

@@ -16,7 +16,7 @@
   "actions": {
   "actions": {
     "edit": "Bearbeiten",
     "edit": "Bearbeiten",
     "delete": "Löschen",
     "delete": "Löschen",
-    "openMenu": "Open menu"
+    "openMenu": "Menü öffnen"
   },
   },
   "deletePreset": {
   "deletePreset": {
     "title": "Arbeitsvorlage löschen",
     "title": "Arbeitsvorlage löschen",
@@ -43,8 +43,8 @@
     "cancel": "Abbrechen",
     "cancel": "Abbrechen",
     "create": "Erstellen",
     "create": "Erstellen",
     "saveChanges": "Änderungen speichern",
     "saveChanges": "Änderungen speichern",
-    "itemQty": "Qty",
-    "itemQtyOrHours": "Unit / Hours",
+    "itemQty": "Menge",
+    "itemQtyOrHours": "Einheit / Stunden",
     "hourlyTag": "HR",
     "hourlyTag": "HR",
     "serviceTag": "SVC",
     "serviceTag": "SVC",
     "partsTitle": "Teile",
     "partsTitle": "Teile",
@@ -63,7 +63,7 @@
     "noPackages": "Keine Arbeitsvorlagen gefunden.",
     "noPackages": "Keine Arbeitsvorlagen gefunden.",
     "items": "{count} Positionen",
     "items": "{count} Positionen",
     "totalHours": "{hours} Std. gesamt",
     "totalHours": "{hours} Std. gesamt",
-    "totalUnits": "{units} unit(s)",
+    "totalUnits": "{units} Einheit(en)",
     "totalParts": "{count} Teile"
     "totalParts": "{count} Teile"
   },
   },
   "errors": {
   "errors": {

+ 3 - 3
messages/de/messages.json

@@ -30,8 +30,8 @@
     "deleteDescription": "Alle Nachrichten mit {name} werden dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.",
     "deleteDescription": "Alle Nachrichten mit {name} werden dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.",
     "deleted": "Unterhaltung gelöscht",
     "deleted": "Unterhaltung gelöscht",
     "deleteError": "Unterhaltung konnte nicht gelöscht werden",
     "deleteError": "Unterhaltung konnte nicht gelöscht werden",
-    "back": "Back",
-    "conversationMenu": "Conversation menu",
+    "back": "Zurück",
+    "conversationMenu": "Unterhaltungsmenü",
     "searchPlaceholder": "Unterhaltungen durchsuchen",
     "searchPlaceholder": "Unterhaltungen durchsuchen",
     "noSearchResults": "Keine Unterhaltung passt zur Suche",
     "noSearchResults": "Keine Unterhaltung passt zur Suche",
     "now": "jetzt"
     "now": "jetzt"
@@ -47,7 +47,7 @@
     "messageDeleted": "Nachricht gelöscht",
     "messageDeleted": "Nachricht gelöscht",
     "deleteError": "Nachricht konnte nicht gelöscht werden",
     "deleteError": "Nachricht konnte nicht gelöscht werden",
     "sendError": "SMS konnte nicht gesendet werden",
     "sendError": "SMS konnte nicht gesendet werden",
-    "sendMessage": "Send message"
+    "sendMessage": "Nachricht senden"
   },
   },
   "sendDialog": {
   "sendDialog": {
     "send": "{label} senden",
     "send": "{label} senden",

+ 1 - 1
messages/de/navigation.json

@@ -112,7 +112,7 @@
     "reports": "Berichte",
     "reports": "Berichte",
     "timesheets": "Stundenzettel",
     "timesheets": "Stundenzettel",
     "settings": "Einstellungen",
     "settings": "Einstellungen",
-    "superAdmin": "Super Admin",
+    "superAdmin": "Super-Admin",
     "adminPanel": "Admin-Panel",
     "adminPanel": "Admin-Panel",
     "organizations": "Organisationen",
     "organizations": "Organisationen",
     "noOrganization": "Keine Organisation",
     "noOrganization": "Keine Organisation",

+ 1 - 1
messages/de/notifications.json

@@ -7,5 +7,5 @@
     "delete": "Löschen",
     "delete": "Löschen",
     "cancel": "Abbrechen"
     "cancel": "Abbrechen"
   },
   },
-  "openNotifications": "Open notifications"
+  "openNotifications": "Benachrichtigungen öffnen"
 }
 }

+ 6 - 6
messages/de/pdf.json

@@ -32,8 +32,8 @@
     "total": "Gesamt",
     "total": "Gesamt",
     "labor": "Arbeitsleistung",
     "labor": "Arbeitsleistung",
     "hours": "Stunden",
     "hours": "Stunden",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "Std.",
+    "unit": "Einh.",
     "rate": "Stundensatz",
     "rate": "Stundensatz",
     "ratePerHour": "{rate}/Std.",
     "ratePerHour": "{rate}/Std.",
     "subtotal": "Zwischensumme",
     "subtotal": "Zwischensumme",
@@ -75,7 +75,7 @@
     "professionalWorkshop": "Professionelle Werkstattverwaltung",
     "professionalWorkshop": "Professionelle Werkstattverwaltung",
     "tel": "Tel: {phone}",
     "tel": "Tel: {phone}",
     "org": "Org: {org}",
     "org": "Org: {org}",
-    "qtyOrHours": "Unit / Hours",
+    "qtyOrHours": "Einheit / Stunden",
     "customFieldsTitle": "Zusätzliche Informationen",
     "customFieldsTitle": "Zusätzliche Informationen",
     "telegramConnect": "Chatten Sie mit uns auf Telegram",
     "telegramConnect": "Chatten Sie mit uns auf Telegram",
     "taxRegistrationLabel": "{name}-Nr."
     "taxRegistrationLabel": "{name}-Nr."
@@ -96,8 +96,8 @@
     "total": "Gesamt",
     "total": "Gesamt",
     "labor": "Arbeitsleistung",
     "labor": "Arbeitsleistung",
     "hours": "Stunden",
     "hours": "Stunden",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "Std.",
+    "unit": "Einh.",
     "rate": "Stundensatz",
     "rate": "Stundensatz",
     "ratePerHour": "{rate}/Std.",
     "ratePerHour": "{rate}/Std.",
     "subtotal": "Zwischensumme",
     "subtotal": "Zwischensumme",
@@ -115,7 +115,7 @@
     "validityFooter30": "Dieses Angebot ist 30 Tage gültig",
     "validityFooter30": "Dieses Angebot ist 30 Tage gültig",
     "viewPortal": "Ihr Portal ansehen: {url}",
     "viewPortal": "Ihr Portal ansehen: {url}",
     "tel": "Tel: {phone}",
     "tel": "Tel: {phone}",
-    "qtyOrHours": "Unit / Hours",
+    "qtyOrHours": "Einheit / Stunden",
     "customFieldsTitle": "Zusätzliche Informationen",
     "customFieldsTitle": "Zusätzliche Informationen",
     "quoteNumberLabel": "Angebotsnr.",
     "quoteNumberLabel": "Angebotsnr.",
     "validUntilLabel": "Gültig bis"
     "validUntilLabel": "Gültig bis"

+ 1 - 1
messages/de/reminders.json

@@ -8,7 +8,7 @@
   "searchVehicle": "Fahrzeuge suchen...",
   "searchVehicle": "Fahrzeuge suchen...",
   "noVehicle": "Keine Fahrzeuge gefunden.",
   "noVehicle": "Keine Fahrzeuge gefunden.",
   "pickDate": "Datum auswählen",
   "pickDate": "Datum auswählen",
-  "openMenu": "Open menu",
+  "openMenu": "Menü öffnen",
   "relatesTo": "Bezieht sich auf (optional)",
   "relatesTo": "Bezieht sich auf (optional)",
   "selectCustomer": "Kunde (optional)",
   "selectCustomer": "Kunde (optional)",
   "noneOption": "Keiner",
   "noneOption": "Keiner",

+ 80 - 80
messages/de/reports.json

@@ -329,94 +329,94 @@
     "jobsClocked": "Erfasste Aufträge"
     "jobsClocked": "Erfasste Aufträge"
   },
   },
   "pdf": {
   "pdf": {
-    "reportTitle": "Business Report",
-    "revenueSection": "Revenue Report",
-    "taxSection": "Tax Report",
-    "pastDueSection": "Past Due Invoices",
-    "servicesSection": "Services Report",
-    "customersSection": "Customers Report",
-    "techniciansSection": "Technicians Report",
-    "partsSection": "Parts Usage Report",
-    "jobAnalyticsSection": "Job Analytics",
-    "retentionSection": "Customer Retention",
-    "inventorySection": "Inventory Report",
+    "reportTitle": "Geschäftsbericht",
+    "revenueSection": "Umsatzbericht",
+    "taxSection": "Steuerbericht",
+    "pastDueSection": "Überfällige Rechnungen",
+    "servicesSection": "Dienstleistungsbericht",
+    "customersSection": "Kundenbericht",
+    "techniciansSection": "Technikerbericht",
+    "partsSection": "Bericht zum Teileverbrauch",
+    "jobAnalyticsSection": "Auftragsanalyse",
+    "retentionSection": "Kundenbindung",
+    "inventorySection": "Lagerbestandsbericht",
     "monthlyBreakdown": "Monatliche Übersicht",
     "monthlyBreakdown": "Monatliche Übersicht",
-    "revenueByType": "Revenue by Type",
-    "taxByRate": "Tax by Rate",
-    "servicesByStatus": "By Status",
-    "servicesByType": "By Type",
-    "topCustomers": "Top Customers",
-    "topServiceTypes": "Top Service Types",
-    "topReturning": "Top Returning Customers",
-    "dayOfWeek": "Jobs by Day of Week",
-    "monthlyTrend": "Monthly Trend",
-    "lowStock": "Low Stock Items",
-    "revenue": "Revenue",
-    "collected": "Collected",
-    "outstanding": "Outstanding",
-    "services": "Services",
-    "partsCost": "Parts Cost",
+    "revenueByType": "Umsatz nach Typ",
+    "taxByRate": "Steuer nach Satz",
+    "servicesByStatus": "Nach Status",
+    "servicesByType": "Nach Typ",
+    "topCustomers": "Top-Kunden",
+    "topServiceTypes": "Häufigste Dienstleistungstypen",
+    "topReturning": "Top-Stammkunden",
+    "dayOfWeek": "Aufträge nach Wochentag",
+    "monthlyTrend": "Monatlicher Verlauf",
+    "lowStock": "Artikel mit niedrigem Bestand",
+    "revenue": "Umsatz",
+    "collected": "Eingezogen",
+    "outstanding": "Ausstehend",
+    "services": "Dienstleistungen",
+    "partsCost": "Teilekosten",
     "partsNetProfit": "Teile-Nettogewinn",
     "partsNetProfit": "Teile-Nettogewinn",
     "laborRevenue": "Arbeit",
     "laborRevenue": "Arbeit",
-    "netProfit": "Net Profit",
-    "month": "Month",
-    "count": "Count",
-    "type": "Type",
+    "netProfit": "Nettogewinn",
+    "month": "Monat",
+    "count": "Anzahl",
+    "type": "Typ",
     "status": "Status",
     "status": "Status",
     "name": "Name",
     "name": "Name",
-    "company": "Company",
-    "totalSpent": "Total Spent",
-    "customer": "Customer",
-    "invoiceNumber": "Invoice #",
-    "totalAmount": "Total Amount",
-    "amountDue": "Amount Due",
-    "dueDate": "Due Date",
-    "daysPastDue": "Days Past Due",
-    "totalPastDue": "Total Past Due",
-    "totalAmountDue": "Total Amount Due",
-    "over30": "Over 30 Days",
-    "over60": "Over 60 Days",
-    "over90": "Over 90 Days",
-    "taxCollected": "Tax Collected",
-    "taxableAmount": "Taxable Amount",
-    "taxRate": "Tax Rate",
-    "invoiceCount": "Invoice Count",
-    "invoices": "Invoices",
-    "totalServices": "Total Services",
-    "totalCustomers": "Total Customers",
-    "activeCustomers": "Active Customers",
-    "technician": "Technician",
-    "jobs": "Jobs",
-    "totalRevenue": "Total Revenue",
-    "avgRevenue": "Avg Revenue",
-    "totalHours": "Total Hours",
-    "avgHours": "Avg Hours",
-    "totalJobs": "Total Jobs",
-    "partName": "Part Name",
-    "partNumber": "Part #",
-    "usageCount": "Usage Count",
-    "totalQty": "Total Qty",
-    "totalPartsRevenue": "Parts Revenue",
+    "company": "Unternehmen",
+    "totalSpent": "Gesamtausgaben",
+    "customer": "Kunde",
+    "invoiceNumber": "Rechnungsnr.",
+    "totalAmount": "Gesamtbetrag",
+    "amountDue": "Fälliger Betrag",
+    "dueDate": "Fälligkeitsdatum",
+    "daysPastDue": "Tage überfällig",
+    "totalPastDue": "Gesamt überfällig",
+    "totalAmountDue": "Gesamtbetrag fällig",
+    "over30": "Über 30 Tage",
+    "over60": "Über 60 Tage",
+    "over90": "Über 90 Tage",
+    "taxCollected": "Eingenommene Steuer",
+    "taxableAmount": "Steuerpflichtiger Betrag",
+    "taxRate": "Steuersatz",
+    "invoiceCount": "Anzahl Rechnungen",
+    "invoices": "Rechnungen",
+    "totalServices": "Dienstleistungen gesamt",
+    "totalCustomers": "Kunden gesamt",
+    "activeCustomers": "Aktive Kunden",
+    "technician": "Techniker",
+    "jobs": "Aufträge",
+    "totalRevenue": "Gesamtumsatz",
+    "avgRevenue": "Ø Umsatz",
+    "totalHours": "Stunden gesamt",
+    "avgHours": "Ø Stunden",
+    "totalJobs": "Aufträge gesamt",
+    "partName": "Teilename",
+    "partNumber": "Teilenr.",
+    "usageCount": "Verwendungen",
+    "totalQty": "Gesamtmenge",
+    "totalPartsRevenue": "Teileumsatz",
     "totalPartsCost": "Teilekosten",
     "totalPartsCost": "Teilekosten",
     "totalPartsNetProfit": "Nettogewinn",
     "totalPartsNetProfit": "Nettogewinn",
-    "totalPartsUsed": "Parts Used",
-    "serviceType": "Service Type",
-    "avgValue": "Avg Value",
-    "avgJobValue": "Avg Job Value",
-    "returningCustomers": "Returning",
+    "totalPartsUsed": "Verwendete Teile",
+    "serviceType": "Dienstleistungstyp",
+    "avgValue": "Ø Wert",
+    "avgJobValue": "Ø Auftragswert",
+    "returningCustomers": "Wiederkehrend",
     "newCustomers": "New",
     "newCustomers": "New",
-    "totalActive": "Total Active",
-    "avgTimeBetweenVisits": "Avg Days Between Visits",
-    "avgDaysBetweenVisits": "Avg Days",
-    "visits": "Visits",
-    "days": "days",
-    "totalParts": "Total Parts",
-    "totalItems": "Total Items",
-    "totalValue": "Total Value",
-    "totalSellValue": "Sell Value",
+    "totalActive": "Aktiv gesamt",
+    "avgTimeBetweenVisits": "Ø Tage zwischen Besuchen",
+    "avgDaysBetweenVisits": "Ø Tage",
+    "visits": "Besuche",
+    "days": "Tage",
+    "totalParts": "Teile gesamt",
+    "totalItems": "Artikel gesamt",
+    "totalValue": "Gesamtwert",
+    "totalSellValue": "Verkaufswert",
     "quantity": "Qty",
     "quantity": "Qty",
     "minQuantity": "Min Qty",
     "minQuantity": "Min Qty",
-    "unitCost": "Unit Cost",
+    "unitCost": "Stückkosten",
     "vehiclesSection": "Fahrzeugbericht",
     "vehiclesSection": "Fahrzeugbericht",
     "vehicleLabel": "Fahrzeug",
     "vehicleLabel": "Fahrzeug",
     "totalCost": "Gesamtkosten",
     "totalCost": "Gesamtkosten",
@@ -427,7 +427,7 @@
   },
   },
   "empty": "Noch keine Daten geladen. Klicken Sie auf Aktualisieren, um den Bericht zu laden.",
   "empty": "Noch keine Daten geladen. Klicken Sie auf Aktualisieren, um den Bericht zu laden.",
   "pagination": {
   "pagination": {
-    "previousPage": "Previous page",
-    "nextPage": "Next page"
+    "previousPage": "Vorherige Seite",
+    "nextPage": "Nächste Seite"
   }
   }
 }
 }

+ 17 - 17
messages/de/settings.json

@@ -65,7 +65,7 @@
       },
       },
       "telegram": {
       "telegram": {
         "title": "Telegram",
         "title": "Telegram",
-        "description": "Telegram bot & messaging"
+        "description": "Telegram-Bot & Nachrichten"
       },
       },
       "customerPortal": {
       "customerPortal": {
         "title": "Kundenportal",
         "title": "Kundenportal",
@@ -192,7 +192,7 @@
     "serviceTypeDescription": "Wählen Sie die Art der Dienstleistung, die Ihre Werkstatt anbietet. Dies ändert die Feldbezeichnungen in der gesamten Anwendung.",
     "serviceTypeDescription": "Wählen Sie die Art der Dienstleistung, die Ihre Werkstatt anbietet. Dies ändert die Feldbezeichnungen in der gesamten Anwendung.",
     "automotive": "Automobil",
     "automotive": "Automobil",
     "automotiveDescription": "Autos, LKWs und andere Straßenfahrzeuge",
     "automotiveDescription": "Autos, LKWs und andere Straßenfahrzeuge",
-    "marineService": "Marine",
+    "marineService": "Maritim",
     "marineServiceDescription": "Boote, Yachten und Wasserfahrzeuge"
     "marineServiceDescription": "Boote, Yachten und Wasserfahrzeuge"
   },
   },
   "account": {
   "account": {
@@ -418,9 +418,9 @@
     "failedRemoveMember": "Mitglied konnte nicht entfernt werden",
     "failedRemoveMember": "Mitglied konnte nicht entfernt werden",
     "memberRoleUpdated": "Mitgliedsrolle aktualisiert",
     "memberRoleUpdated": "Mitgliedsrolle aktualisiert",
     "failedUpdateRole": "Rolle konnte nicht aktualisiert werden",
     "failedUpdateRole": "Rolle konnte nicht aktualisiert werden",
-    "removeMember": "Remove member",
-    "cancelInvite": "Cancel invitation",
-    "editRole": "Edit role",
+    "removeMember": "Mitglied entfernen",
+    "cancelInvite": "Einladung zurückziehen",
+    "editRole": "Rolle bearbeiten",
     "technician": "Techniker",
     "technician": "Techniker",
     "technicianHint": "Kann Aufträge zugewiesen bekommen und die Techniker-App nutzen",
     "technicianHint": "Kann Aufträge zugewiesen bekommen und die Techniker-App nutzen",
     "technicianFailed": "Konnte nicht geändert werden",
     "technicianFailed": "Konnte nicht geändert werden",
@@ -830,7 +830,7 @@
       "red": "Rot",
       "red": "Rot",
       "purple": "Lila",
       "purple": "Lila",
       "slate": "Schiefer",
       "slate": "Schiefer",
-      "rose": "Rose",
+      "rose": "Rosé",
       "indigo": "Indigo"
       "indigo": "Indigo"
     },
     },
     "layoutTitle": "Rechnungslayout",
     "layoutTitle": "Rechnungslayout",
@@ -1061,8 +1061,8 @@
     "fieldDeleted": "Benutzerdefiniertes Feld gelöscht",
     "fieldDeleted": "Benutzerdefiniertes Feld gelöscht",
     "failedSave": "Feld konnte nicht gespeichert werden",
     "failedSave": "Feld konnte nicht gespeichert werden",
     "failedDelete": "Konnte nicht gelöscht werden",
     "failedDelete": "Konnte nicht gelöscht werden",
-    "edit": "Edit",
-    "delete": "Delete",
+    "edit": "Bearbeiten",
+    "delete": "Löschen",
     "unassigned": "Nicht zugewiesen",
     "unassigned": "Nicht zugewiesen",
     "defaultValue": "Standardwert",
     "defaultValue": "Standardwert",
     "defaultValueHint": "Wird bei neuen Einträgen vorausgefüllt und gedruckt, solange kein Wert eingegeben wurde.",
     "defaultValueHint": "Wird bei neuen Einträgen vorausgefüllt und gedruckt, solange kein Wert eingegeben wurde.",
@@ -1316,7 +1316,7 @@
     "title": "Uber Torqvoice",
     "title": "Uber Torqvoice",
     "description": "Torqvoice ist Ihre komplette Lösung für die Fahrzeug-Serviceverwaltung. Verfolgen Sie Servicehistorie, Reparaturen und mehr.",
     "description": "Torqvoice ist Ihre komplette Lösung für die Fahrzeug-Serviceverwaltung. Verfolgen Sie Servicehistorie, Reparaturen und mehr.",
     "version": "Version",
     "version": "Version",
-    "website": "Website",
+    "website": "Webseite",
     "documentation": "Dokumentation",
     "documentation": "Dokumentation",
     "changelog": "Anderungsprotokoll"
     "changelog": "Anderungsprotokoll"
   },
   },
@@ -1370,7 +1370,7 @@
         "sand": "Sand"
         "sand": "Sand"
       }
       }
     },
     },
-    "copyUrl": "Copy portal URL"
+    "copyUrl": "Portal-URL kopieren"
   },
   },
   "email": {
   "email": {
     "title": "E-Mail-Anbieter",
     "title": "E-Mail-Anbieter",
@@ -1446,7 +1446,7 @@
     "failedSave": "Einstellungen konnten nicht gespeichert werden",
     "failedSave": "Einstellungen konnten nicht gespeichert werden",
     "testSentTo": "Test-SMS gesendet an {phone}",
     "testSentTo": "Test-SMS gesendet an {phone}",
     "testFailed": "SMS-Test fehlgeschlagen",
     "testFailed": "SMS-Test fehlgeschlagen",
-    "copyWebhookUrl": "Copy webhook URL"
+    "copyWebhookUrl": "Webhook-URL kopieren"
   },
   },
   "subscription": {
   "subscription": {
     "title": "Abonnementplan",
     "title": "Abonnementplan",
@@ -1497,7 +1497,7 @@
     "resumeSuccess": "Abonnement erfolgreich fortgesetzt",
     "resumeSuccess": "Abonnement erfolgreich fortgesetzt",
     "resumeError": "Abonnement konnte nicht fortgesetzt werden",
     "resumeError": "Abonnement konnte nicht fortgesetzt werden",
     "billingPortalError": "Abrechnungsportal konnte nicht geöffnet werden",
     "billingPortalError": "Abrechnungsportal konnte nicht geöffnet werden",
-    "checkoutError": "Failed to start checkout",
+    "checkoutError": "Checkout konnte nicht gestartet werden",
     "upgradeTitle": "Plan upgraden",
     "upgradeTitle": "Plan upgraden",
     "upgradeDescription": "Schalten Sie weitere Funktionen frei, indem Sie Ihren Plan upgraden.",
     "upgradeDescription": "Schalten Sie weitere Funktionen frei, indem Sie Ihren Plan upgraden.",
     "upgradeToProDescription": "Upgraden Sie, um unbegrenzte Kunden, Teammitglieder, Berichte, SMTP, API-Zugang und mehr freizuschalten.",
     "upgradeToProDescription": "Upgraden Sie, um unbegrenzte Kunden, Teammitglieder, Berichte, SMTP, API-Zugang und mehr freizuschalten.",
@@ -1557,7 +1557,7 @@
     "biweekly": "Alle 2 Wochen",
     "biweekly": "Alle 2 Wochen",
     "monthly": "Monatlich",
     "monthly": "Monatlich",
     "bimonthly": "Alle 2 Monate",
     "bimonthly": "Alle 2 Monate",
-    "quarterly": "Alle 4 Monate",
+    "quarterly": "Alle 3 Monate",
     "semiannually": "Alle 6 Monate",
     "semiannually": "Alle 6 Monate",
     "yearly": "Jährlich",
     "yearly": "Jährlich",
     "dateRangeLabel": "Zeitraum",
     "dateRangeLabel": "Zeitraum",
@@ -1596,10 +1596,10 @@
     "deleted": "Berichtszeitplan gelöscht",
     "deleted": "Berichtszeitplan gelöscht",
     "toggledOn": "Berichtszeitplan aktiviert",
     "toggledOn": "Berichtszeitplan aktiviert",
     "toggledOff": "Berichtszeitplan deaktiviert",
     "toggledOff": "Berichtszeitplan deaktiviert",
-    "failedSave": "Failed to save",
-    "failedSend": "Failed to send",
-    "failedToggle": "Failed to toggle",
-    "failedDelete": "Failed to delete",
+    "failedSave": "Speichern fehlgeschlagen",
+    "failedSend": "Senden fehlgeschlagen",
+    "failedToggle": "Umschalten fehlgeschlagen",
+    "failedDelete": "Löschen fehlgeschlagen",
     "noMembers": "Keine Teammitglieder gefunden",
     "noMembers": "Keine Teammitglieder gefunden",
     "addRecipient": "Empfänger hinzufügen...",
     "addRecipient": "Empfänger hinzufügen...",
     "searchMembers": "Mitglieder suchen...",
     "searchMembers": "Mitglieder suchen...",

+ 5 - 5
messages/de/share.json

@@ -34,8 +34,8 @@
     "total": "Gesamt",
     "total": "Gesamt",
     "labor": "Arbeitsleistung",
     "labor": "Arbeitsleistung",
     "hours": "Stunden",
     "hours": "Stunden",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "Std.",
+    "unit": "Einh.",
     "qtyOrHours": "Einheit / Stunden",
     "qtyOrHours": "Einheit / Stunden",
     "rate": "Stundensatz",
     "rate": "Stundensatz",
     "ratePerHour": "{rate}/Std.",
     "ratePerHour": "{rate}/Std.",
@@ -93,8 +93,8 @@
     "labor": "Arbeitsleistung",
     "labor": "Arbeitsleistung",
     "laborDescription": "Beschreibung",
     "laborDescription": "Beschreibung",
     "hours": "Stunden",
     "hours": "Stunden",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "Std.",
+    "unit": "Einh.",
     "qtyOrHours": "Einheit / Stunden",
     "qtyOrHours": "Einheit / Stunden",
     "rate": "Stundensatz",
     "rate": "Stundensatz",
     "ratePerHour": "{rate}/Std.",
     "ratePerHour": "{rate}/Std.",
@@ -200,7 +200,7 @@
     "privacyNotice": "Dieser Bericht wird Ihnen von der Werkstatt bereitgestellt, die die Prüfung durchgeführt hat. Er ist für jeden mit diesem Link abrufbar — bitte leiten Sie ihn nicht weiter. Wenden Sie sich an die Werkstatt, um den Link zurückzuziehen oder Ihre Daten löschen zu lassen."
     "privacyNotice": "Dieser Bericht wird Ihnen von der Werkstatt bereitgestellt, die die Prüfung durchgeführt hat. Er ist für jeden mit diesem Link abrufbar — bitte leiten Sie ihn nicht weiter. Wenden Sie sich an die Werkstatt, um den Link zurückzuziehen oder Ihre Daten löschen zu lassen."
   },
   },
   "terms": {
   "terms": {
-    "title": "Verkaufsbedingungen (Salgsvilkår)",
+    "title": "Verkaufsbedingungen",
     "contact": "Kontakt",
     "contact": "Kontakt",
     "tel": "Tel: {phone}"
     "tel": "Tel: {phone}"
   },
   },

+ 1 - 1
messages/de/statusReport.json

@@ -14,7 +14,7 @@
     "createAndSend": "Erstellen & Senden",
     "createAndSend": "Erstellen & Senden",
     "cancel": "Abbrechen",
     "cancel": "Abbrechen",
     "uploadFailed": "Video konnte nicht hochgeladen werden",
     "uploadFailed": "Video konnte nicht hochgeladen werden",
-    "createReportFailed": "Failed to create status report",
+    "createReportFailed": "Statusbericht konnte nicht erstellt werden",
     "created": "Statusbericht erstellt",
     "created": "Statusbericht erstellt",
     "noVideo": "Bitte laden Sie zuerst ein Video hoch",
     "noVideo": "Bitte laden Sie zuerst ein Video hoch",
     "removeVideo": "Video entfernen",
     "removeVideo": "Video entfernen",

+ 3 - 3
messages/de/telegram.json

@@ -5,8 +5,8 @@
     "label": "Bot-Token",
     "label": "Bot-Token",
     "placeholder": "Bot-Token von @BotFather eingeben",
     "placeholder": "Bot-Token von @BotFather eingeben",
     "help": "Erstellen Sie einen Bot über @BotFather auf Telegram, um Ihr Token zu erhalten.",
     "help": "Erstellen Sie einen Bot über @BotFather auf Telegram, um Ihr Token zu erhalten.",
-    "show": "Show token",
-    "hide": "Hide token"
+    "show": "Token anzeigen",
+    "hide": "Token ausblenden"
   },
   },
   "botUsername": {
   "botUsername": {
     "label": "Bot-Benutzername",
     "label": "Bot-Benutzername",
@@ -20,7 +20,7 @@
     "title": "Kunden-Verbindungslink",
     "title": "Kunden-Verbindungslink",
     "description": "Teilen Sie diesen Link mit Kunden, damit sie sich mit Ihrem Bot verbinden können. Ersetzen Sie den Kunden-ID-Platzhalter durch die tatsächliche Kunden-ID.",
     "description": "Teilen Sie diesen Link mit Kunden, damit sie sich mit Ihrem Bot verbinden können. Ersetzen Sie den Kunden-ID-Platzhalter durch die tatsächliche Kunden-ID.",
     "copied": "Link kopiert!",
     "copied": "Link kopiert!",
-    "copy": "Copy deep link"
+    "copy": "Deep Link kopieren"
   },
   },
   "test": {
   "test": {
     "title": "Testnachricht",
     "title": "Testnachricht",

+ 1 - 1
messages/de/telegramMessages.json

@@ -31,7 +31,7 @@
     "messageDeleted": "Nachricht gelöscht",
     "messageDeleted": "Nachricht gelöscht",
     "deleteError": "Nachricht konnte nicht gelöscht werden",
     "deleteError": "Nachricht konnte nicht gelöscht werden",
     "sendError": "Nachricht konnte nicht gesendet werden",
     "sendError": "Nachricht konnte nicht gesendet werden",
-    "sendMessage": "Send message"
+    "sendMessage": "Nachricht senden"
   },
   },
   "sendDialog": {
   "sendDialog": {
     "send": "{label} senden",
     "send": "{label} senden",

+ 24 - 24
messages/de/vehicles.json

@@ -28,10 +28,10 @@
     "unarchiveError": "Fehler beim Wiederherstellen des Fahrzeugs",
     "unarchiveError": "Fehler beim Wiederherstellen des Fahrzeugs",
     "deleteError": "Fehler beim Löschen des Fahrzeugs",
     "deleteError": "Fehler beim Löschen des Fahrzeugs",
     "error": "Fehler beim Laden der Fahrzeuge",
     "error": "Fehler beim Laden der Fahrzeuge",
-    "viewTable": "Table view",
-    "viewGrid": "Grid view",
-    "viewLargeGrid": "Large grid view",
-    "openMenu": "Open menu",
+    "viewTable": "Tabellenansicht",
+    "viewGrid": "Rasteransicht",
+    "viewLargeGrid": "Große Rasteransicht",
+    "openMenu": "Menü öffnen",
     "inspectionOverdue": "HU überfällig",
     "inspectionOverdue": "HU überfällig",
     "inspectionDue30": "Fällig in 30 Tagen",
     "inspectionDue30": "Fällig in 30 Tagen",
     "inspectionDue90": "Fällig in 90 Tagen",
     "inspectionDue90": "Fällig in 90 Tagen",
@@ -95,8 +95,8 @@
     "severityModerate": "Mäßig — von einigen Besitzern gemeldet",
     "severityModerate": "Mäßig — von einigen Besitzern gemeldet",
     "severityUncommon": "Ungewöhnlich — von wenigen Besitzern gemeldet",
     "severityUncommon": "Ungewöhnlich — von wenigen Besitzern gemeldet",
     "severityRare": "Selten — vereinzelte Berichte, aber kritisch wenn es auftritt",
     "severityRare": "Selten — vereinzelte Berichte, aber kritisch wenn es auftritt",
-    "openMenu": "Open menu",
-    "dismissMaintenance": "Dismiss",
+    "openMenu": "Menü öffnen",
+    "dismissMaintenance": "Ausblenden",
     "inspectionDue": "HU fällig {date}",
     "inspectionDue": "HU fällig {date}",
     "inspectionCheckedAt": "Mit dem Register abgeglichen am {date}",
     "inspectionCheckedAt": "Mit dem Register abgeglichen am {date}",
     "notRegistered": "Nicht zugelassen",
     "notRegistered": "Nicht zugelassen",
@@ -184,10 +184,10 @@
     "showing": "Zeige {start}-{end} von {total}",
     "showing": "Zeige {start}-{end} von {total}",
     "perPage": "pro Seite",
     "perPage": "pro Seite",
     "page": "Seite {page} von {totalPages}",
     "page": "Seite {page} von {totalPages}",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "firstPage": "Erste Seite",
+    "previousPage": "Vorherige Seite",
+    "nextPage": "Nächste Seite",
+    "lastPage": "Letzte Seite"
   },
   },
   "notes": {
   "notes": {
     "addNote": "Notiz hinzufügen",
     "addNote": "Notiz hinzufügen",
@@ -213,11 +213,11 @@
     "noteCreated": "Notiz erstellt",
     "noteCreated": "Notiz erstellt",
     "titleRequired": "Titel und Inhalt sind erforderlich",
     "titleRequired": "Titel und Inhalt sind erforderlich",
     "saveError": "Notiz konnte nicht gespeichert werden",
     "saveError": "Notiz konnte nicht gespeichert werden",
-    "openMenu": "Open menu",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "openMenu": "Menü öffnen",
+    "firstPage": "Erste Seite",
+    "previousPage": "Vorherige Seite",
+    "nextPage": "Nächste Seite",
+    "lastPage": "Letzte Seite"
   },
   },
   "findings": {
   "findings": {
     "sectionTitle": "Beobachtungen",
     "sectionTitle": "Beobachtungen",
@@ -266,11 +266,11 @@
     "showing": "Zeige {start}-{end} von {total}",
     "showing": "Zeige {start}-{end} von {total}",
     "perPage": "pro Seite",
     "perPage": "pro Seite",
     "page": "Seite {page} von {totalPages}",
     "page": "Seite {page} von {totalPages}",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page",
-    "openMenu": "Open menu",
+    "firstPage": "Erste Seite",
+    "previousPage": "Vorherige Seite",
+    "nextPage": "Nächste Seite",
+    "lastPage": "Letzte Seite",
+    "openMenu": "Menü öffnen",
     "concernLabel": "Beantwortet welches Anliegen?",
     "concernLabel": "Beantwortet welches Anliegen?",
     "concernNone": "Nichts, wonach der Kunde gefragt hat"
     "concernNone": "Nichts, wonach der Kunde gefragt hat"
   },
   },
@@ -373,10 +373,10 @@
     "archiveError": "Fehler beim Archivieren des Fahrzeugs"
     "archiveError": "Fehler beim Archivieren des Fahrzeugs"
   },
   },
   "serviceRecords": {
   "serviceRecords": {
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "firstPage": "Erste Seite",
+    "previousPage": "Vorherige Seite",
+    "nextPage": "Nächste Seite",
+    "lastPage": "Letzte Seite"
   },
   },
   "inspectionReminders": {
   "inspectionReminders": {
     "title": "HU-Erinnerungen",
     "title": "HU-Erinnerungen",

+ 7 - 7
messages/de/workBoard.json

@@ -8,10 +8,10 @@
     "week": "Woche",
     "week": "Woche",
     "presenter": "Präsentator",
     "presenter": "Präsentator",
     "addTechnician": "Techniker hinzufügen",
     "addTechnician": "Techniker hinzufügen",
-    "previousWeek": "Previous week",
-    "nextWeek": "Next week",
-    "previousDay": "Previous day",
-    "nextDay": "Next day",
+    "previousWeek": "Vorherige Woche",
+    "nextWeek": "Nächste Woche",
+    "previousDay": "Vorheriger Tag",
+    "nextDay": "Nächster Tag",
     "groupBy": "Spalten",
     "groupBy": "Spalten",
     "byTechnician": "Eine Spalte je Mechaniker",
     "byTechnician": "Eine Spalte je Mechaniker",
     "byBay": "Eine Spalte je Arbeitsplatz",
     "byBay": "Eine Spalte je Arbeitsplatz",
@@ -20,7 +20,7 @@
     "add": "Hinzufügen",
     "add": "Hinzufügen",
     "addBay": "Arbeitsplatz hinzufügen",
     "addBay": "Arbeitsplatz hinzufügen",
     "weekNumber": "KW {number}",
     "weekNumber": "KW {number}",
-    "lanes": "Spalten",
+    "lanes": "Bahnen",
     "showAllLanes": "Alle anzeigen",
     "showAllLanes": "Alle anzeigen",
     "onlyBusyLanes": "Nur mit Aufträgen",
     "onlyBusyLanes": "Nur mit Aufträgen",
     "layout": "Ansicht",
     "layout": "Ansicht",
@@ -107,8 +107,8 @@
       "waitingParts": "Warten auf Teile",
       "waitingParts": "Warten auf Teile",
       "completed": "Abgeschlossen"
       "completed": "Abgeschlossen"
     },
     },
-    "previous": "Previous",
-    "next": "Next",
+    "previous": "Zurück",
+    "next": "Weiter",
     "groupingUnused": "Die Statustafel gruppiert nach Status",
     "groupingUnused": "Die Statustafel gruppiert nach Status",
     "connecting": "Verbinden …"
     "connecting": "Verbinden …"
   },
   },

+ 1 - 1
messages/de/workOrders.json

@@ -34,7 +34,7 @@
       "total": "Gesamt"
       "total": "Gesamt"
     },
     },
     "emailSubject": "Fahrzeugstatusupdate: {status}",
     "emailSubject": "Fahrzeugstatusupdate: {status}",
-    "changeStatus": "Change status",
+    "changeStatus": "Status ändern",
     "contextMenu": {
     "contextMenu": {
       "open": "Arbeitsauftrag öffnen",
       "open": "Arbeitsauftrag öffnen",
       "openVehicle": "Fahrzeug öffnen",
       "openVehicle": "Fahrzeug öffnen",

+ 1 - 1
messages/en/settings.json

@@ -1557,7 +1557,7 @@
     "biweekly": "Every 2 Weeks",
     "biweekly": "Every 2 Weeks",
     "monthly": "Monthly",
     "monthly": "Monthly",
     "bimonthly": "Every 2 Months",
     "bimonthly": "Every 2 Months",
-    "quarterly": "Every 4 Months",
+    "quarterly": "Every 3 Months",
     "semiannually": "Every 6 Months",
     "semiannually": "Every 6 Months",
     "yearly": "Yearly",
     "yearly": "Yearly",
     "dateRangeLabel": "Date Range",
     "dateRangeLabel": "Date Range",

+ 1 - 1
messages/en/share.json

@@ -200,7 +200,7 @@
     "privacyNotice": "This report is shared with you by the workshop that carried out the inspection. It is available to anyone holding this link, so please do not forward it. Contact the workshop to have the link withdrawn or your data erased."
     "privacyNotice": "This report is shared with you by the workshop that carried out the inspection. It is available to anyone holding this link, so please do not forward it. Contact the workshop to have the link withdrawn or your data erased."
   },
   },
   "terms": {
   "terms": {
-    "title": "Terms of Sale (Salgsvilkår)",
+    "title": "Terms of Sale",
     "contact": "Contact",
     "contact": "Contact",
     "tel": "Tel: {phone}"
     "tel": "Tel: {phone}"
   },
   },

+ 2 - 2
messages/es/admin.json

@@ -31,7 +31,7 @@
     "name": "Nombre",
     "name": "Nombre",
     "email": "Correo electrónico",
     "email": "Correo electrónico",
     "role": "Rol",
     "role": "Rol",
-    "orgs": "Orgs",
+    "orgs": "Organizaciones",
     "created": "Creado",
     "created": "Creado",
     "lastSeen": "Visto por última vez",
     "lastSeen": "Visto por última vez",
     "noResults": "Ningún usuario coincide con su búsqueda.",
     "noResults": "Ningún usuario coincide con su búsqueda.",
@@ -117,7 +117,7 @@
     "sendgridApiKeyHint": "Obtenga su clave API de app.sendgrid.com"
     "sendgridApiKeyHint": "Obtenga su clave API de app.sendgrid.com"
   },
   },
   "common": {
   "common": {
-    "openMenu": "Open menu"
+    "openMenu": "Abrir menú"
   },
   },
   "userDetails": {
   "userDetails": {
     "back": "Volver a usuarios",
     "back": "Volver a usuarios",

+ 5 - 5
messages/es/calendar.json

@@ -80,10 +80,10 @@
   },
   },
   "selectVehicle": "Seleccionar vehículo para orden de trabajo",
   "selectVehicle": "Seleccionar vehículo para orden de trabajo",
   "dateChoice": {
   "dateChoice": {
-    "title": "Work Order Date",
-    "description": "You have {selectedDate} selected. Which date should this work order be for?",
+    "title": "Fecha de la orden de trabajo",
+    "description": "Tiene seleccionada la fecha {selectedDate}. ¿Para qué fecha debe ser esta orden de trabajo?",
     "useSelected": "Use {date}",
     "useSelected": "Use {date}",
-    "useToday": "Use today"
+    "useToday": "Usar hoy"
   },
   },
   "more": "+ {count} más",
   "more": "+ {count} más",
   "monthTotal": "{count} eventos",
   "monthTotal": "{count} eventos",
@@ -144,6 +144,6 @@
       "readOnly": "Tiempo ocupado de un calendario conectado. Cámbialo allí y se actualizará aquí en la próxima sincronización."
       "readOnly": "Tiempo ocupado de un calendario conectado. Cámbialo allí y se actualizará aquí en la próxima sincronización."
     }
     }
   },
   },
-  "previousMonth": "Previous month",
-  "nextMonth": "Next month"
+  "previousMonth": "Mes anterior",
+  "nextMonth": "Mes siguiente"
 }
 }

+ 2 - 2
messages/es/customers.json

@@ -27,7 +27,7 @@
     "batchDeleteTitle": "Eliminar Clientes",
     "batchDeleteTitle": "Eliminar Clientes",
     "batchDeleteDescription": "¿Eliminar {count} cliente(s)? Esto desvinculará sus vehículos.",
     "batchDeleteDescription": "¿Eliminar {count} cliente(s)? Esto desvinculará sus vehículos.",
     "batchDeleteSuccess": "{count} cliente(s) eliminado(s)",
     "batchDeleteSuccess": "{count} cliente(s) eliminado(s)",
-    "openMenu": "Open menu"
+    "openMenu": "Abrir menú"
   },
   },
   "detail": {
   "detail": {
     "backToCustomers": "Volver a clientes",
     "backToCustomers": "Volver a clientes",
@@ -95,7 +95,7 @@
     "customerCreated": "Cliente creado",
     "customerCreated": "Cliente creado",
     "saveError": "Error al guardar el cliente",
     "saveError": "Error al guardar el cliente",
     "customerNumber": "N.º de cliente",
     "customerNumber": "N.º de cliente",
-    "customerNumberAuto": "Auto",
+    "customerNumberAuto": "Automático",
     "sectionContact": "Contacto",
     "sectionContact": "Contacto",
     "sectionBilling": "Facturación",
     "sectionBilling": "Facturación",
     "addScannedVehicle": "Añadir el vehículo {vehicle}",
     "addScannedVehicle": "Añadir el vehículo {vehicle}",

+ 6 - 6
messages/es/dashboard.json

@@ -74,8 +74,8 @@
     "noDismissed": "No hay vehículos descartados.",
     "noDismissed": "No hay vehículos descartados.",
     "dismissedOn": "Descartado el {date}",
     "dismissedOn": "Descartado el {date}",
     "restore": "Restaurar",
     "restore": "Restaurar",
-    "settingsAriaLabel": "Maintenance settings",
-    "dismissAriaLabel": "Dismiss"
+    "settingsAriaLabel": "Ajustes de mantenimiento",
+    "dismissAriaLabel": "Descartar"
   },
   },
   "reminders": {
   "reminders": {
     "title": "Recordatorios pendientes",
     "title": "Recordatorios pendientes",
@@ -112,7 +112,7 @@
     "createQuote": "Crear presupuesto",
     "createQuote": "Crear presupuesto",
     "itemsRequested": "{count, plural, one {# elemento solicitado} other {# elementos solicitados}}",
     "itemsRequested": "{count, plural, one {# elemento solicitado} other {# elementos solicitados}}",
     "noData": "No hay solicitudes de presupuesto pendientes.",
     "noData": "No hay solicitudes de presupuesto pendientes.",
-    "dismissAriaLabel": "Dismiss quote request"
+    "dismissAriaLabel": "Descartar solicitud de presupuesto"
   },
   },
   "quoteResponses": {
   "quoteResponses": {
     "title": "Respuestas de presupuesto de clientes",
     "title": "Respuestas de presupuesto de clientes",
@@ -120,11 +120,11 @@
     "accepted": "Aceptado",
     "accepted": "Aceptado",
     "changesRequested": "Cambios solicitados",
     "changesRequested": "Cambios solicitados",
     "convertToWorkOrder": "Convertir en orden de trabajo",
     "convertToWorkOrder": "Convertir en orden de trabajo",
-    "convert": "Convert",
+    "convert": "Convertir",
     "viewQuote": "Ver presupuesto",
     "viewQuote": "Ver presupuesto",
-    "view": "View",
+    "view": "Ver",
     "noData": "No hay respuestas de clientes.",
     "noData": "No hay respuestas de clientes.",
-    "dismissAriaLabel": "Dismiss response"
+    "dismissAriaLabel": "Descartar respuesta"
   },
   },
   "recentCompleted": {
   "recentCompleted": {
     "title": "Completados recientemente",
     "title": "Completados recientemente",

+ 17 - 17
messages/es/documentLock.json

@@ -1,27 +1,27 @@
 {
 {
   "lockedTitle": {
   "lockedTitle": {
     "invoice": {
     "invoice": {
-      "sent": "This invoice is locked because it has been sent",
-      "paid": "This invoice is locked because it has been paid"
+      "sent": "Esta factura está bloqueada porque ya se ha enviado",
+      "paid": "Esta factura está bloqueada porque ya se ha pagado"
     },
     },
     "quote": {
     "quote": {
-      "sent": "This quote is locked because it has been sent",
-      "accepted": "This quote is locked because it has been accepted"
+      "sent": "Este presupuesto está bloqueado porque ya se ha enviado",
+      "accepted": "Este presupuesto está bloqueado porque ya se ha aceptado"
     }
     }
   },
   },
-  "lockedBody": "Its parts, labour, prices, discount, tax, number and date can no longer be changed. Payments, status changes, sending and attachments all still work.",
-  "lockedAdminHint": "As an owner or admin you can unlock it if something genuinely needs correcting. The unlock is recorded in the audit log.",
-  "lockedMemberHint": "Ask an owner or admin to unlock it if something needs correcting.",
-  "unlock": "Unlock for editing",
-  "relock": "Lock again",
-  "unlockConfirmTitle": "Unlock this document?",
+  "lockedBody": "Ya no se pueden cambiar sus piezas, mano de obra, precios, descuento, impuestos, número ni fecha. Los pagos, los cambios de estado, el envío y los adjuntos siguen funcionando.",
+  "lockedAdminHint": "Como propietario o administrador puede desbloquearlo si de verdad hay algo que corregir. El desbloqueo queda en el registro de auditoría.",
+  "lockedMemberHint": "Pida a un propietario o administrador que lo desbloquee si hay algo que corregir.",
+  "unlock": "Desbloquear para editar",
+  "relock": "Volver a bloquear",
+  "unlockConfirmTitle": "¿Desbloquear este documento?",
   "unlockConfirmDescription": {
   "unlockConfirmDescription": {
-    "invoice": "It will become editable again, and the change will be recorded in the audit log with your name. Prefer a credit note where your local rules require one.",
-    "quote": "It will become editable again, and the change will be recorded in the audit log with your name."
+    "invoice": "Se podrá volver a editar, y el cambio quedará en el registro de auditoría con su nombre. Emita mejor una factura rectificativa si la normativa local lo exige.",
+    "quote": "Se podrá volver a editar, y el cambio quedará en el registro de auditoría con su nombre."
   },
   },
-  "unlocked": "Unlocked for editing",
-  "relocked": "Locked again",
-  "reopenedTitle": "This document has been unlocked for editing",
-  "reopenedBody": "It stays editable until it is locked again.",
-  "failed": "Could not change the lock"
+  "unlocked": "Desbloqueado para editar",
+  "relocked": "Bloqueado de nuevo",
+  "reopenedTitle": "Este documento se ha desbloqueado para editarlo",
+  "reopenedBody": "Se puede editar hasta que se vuelva a bloquear.",
+  "failed": "No se pudo cambiar el bloqueo"
 }
 }

+ 95 - 95
messages/es/integrations.json

@@ -40,19 +40,19 @@
       "conference": "Enlaces de videollamada"
       "conference": "Enlaces de videollamada"
     },
     },
     "sms": {
     "sms": {
-      "send": "Text messages out",
-      "receive": "Replies back in"
+      "send": "Envío de SMS",
+      "receive": "Recepción de respuestas"
     },
     },
     "whatsapp": {
     "whatsapp": {
-      "send": "WhatsApp messages out",
-      "receive": "Replies back in"
+      "send": "Envío de mensajes de WhatsApp",
+      "receive": "Recepción de respuestas"
     },
     },
     "telegram": {
     "telegram": {
-      "send": "Telegram messages out",
-      "receive": "Replies back in"
+      "send": "Envío de mensajes de Telegram",
+      "receive": "Recepción de respuestas"
     },
     },
     "email": {
     "email": {
-      "send": "Email out"
+      "send": "Envío de correos"
     },
     },
     "vehicle": {
     "vehicle": {
       "lookup": "Consulta por matrícula y VIN",
       "lookup": "Consulta por matrícula y VIN",
@@ -131,19 +131,19 @@
     "lockedAi": "Conecte un proveedor de IA para usar funciones de IA en su taller.",
     "lockedAi": "Conecte un proveedor de IA para usar funciones de IA en su taller.",
     "ownAppTitle": "Esta instalación usa su propia aplicación con el proveedor",
     "ownAppTitle": "Esta instalación usa su propia aplicación con el proveedor",
     "redirectUri": "URI de redirección que debe registrar con el proveedor:",
     "redirectUri": "URI de redirección que debe registrar con el proveedor:",
-    "sendTestEmail": "Send test email",
-    "testEmailSent": "Test email sent to {email}",
-    "testEmailHint": "A test email goes to your own address through this vendor, which proves the from address and the sending rules a key check cannot.",
-    "inboundUrl": "Inbound webhook URL",
-    "inboundHintSecret": "Paste this URL into the vendor's inbound message settings. It carries a secret that identifies your workshop, so keep it private.",
-    "inboundHintMeta": "Paste this URL as the callback URL in your Meta app, with the verify token you entered above, and subscribe to messages.",
+    "sendTestEmail": "Enviar correo de prueba",
+    "testEmailSent": "Correo de prueba enviado a {email}",
+    "testEmailHint": "Se envía un correo de prueba a tu propia dirección a través de este proveedor, lo que confirma la dirección de remitente y las reglas de envío que una comprobación de claves no puede verificar.",
+    "inboundUrl": "URL del webhook de entrada",
+    "inboundHintSecret": "Pega esta URL en los ajustes de mensajes entrantes del proveedor. Contiene un secreto que identifica a tu taller, así que mantenla en privado.",
+    "inboundHintMeta": "Pega esta URL como URL de callback en tu app de Meta, con el token de verificación que introdujiste arriba, y suscríbete a los mensajes.",
     "inboundHintStripe": "Añade esta URL en el panel de Stripe en Developers, Webhooks, suscrita a checkout.session.completed. Luego pega el secreto de firma que muestra Stripe en el campo de secreto del webhook aquí, para que las notificaciones puedan verificarse.",
     "inboundHintStripe": "Añade esta URL en el panel de Stripe en Developers, Webhooks, suscrita a checkout.session.completed. Luego pega el secreto de firma que muestra Stripe en el campo de secreto del webhook aquí, para que las notificaciones puedan verificarse.",
     "inboundHintVipps": "Introduce esta URL como URL de callback en el portal de Vipps MobilePay. Vipps también exige condiciones de venta publicadas, que se configuran en Ajustes, Pago.",
     "inboundHintVipps": "Introduce esta URL como URL de callback en el portal de Vipps MobilePay. Vipps también exige condiciones de venta publicadas, que se configuran en Ajustes, Pago.",
     "inboundHintPaypal": "Añade esta URL en el panel de desarrollador de PayPal en Webhooks, suscrita a PAYMENT.CAPTURE.COMPLETED.",
     "inboundHintPaypal": "Añade esta URL en el panel de desarrollador de PayPal en Webhooks, suscrita a PAYMENT.CAPTURE.COMPLETED.",
-    "copy": "Copy",
-    "copied": "Copied",
-    "updateKeys": "Update keys",
-    "updateKeysHint": "The last check failed. Enter the keys again to try once more.",
+    "copy": "Copiar",
+    "copied": "Copiado",
+    "updateKeys": "Actualizar claves",
+    "updateKeysHint": "La última comprobación falló. Vuelve a introducir las claves para intentarlo de nuevo.",
     "inspectionSync": {
     "inspectionSync": {
       "title": "Sincronización de inspecciones",
       "title": "Sincronización de inspecciones",
       "vehicles": "{count} vehículos con matrícula en este taller",
       "vehicles": "{count} vehículos con matrícula en este taller",
@@ -256,155 +256,155 @@
       }
       }
     },
     },
     "twilio-sms": {
     "twilio-sms": {
-      "description": "Send and receive text messages through a Twilio number. Reminders, ready-for-pickup messages and the replies that come back.",
+      "description": "Envía y recibe SMS a través de un número de Twilio. Recordatorios, avisos de vehículo listo para recoger y las respuestas que llegan.",
       "fields": {
       "fields": {
         "accountSid": "Account SID",
         "accountSid": "Account SID",
-        "authToken": "Auth token"
+        "authToken": "Token de autenticación"
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Enviar desde este número"
       }
       }
     },
     },
     "vonage-sms": {
     "vonage-sms": {
-      "description": "Send and receive text messages through a Vonage number.",
+      "description": "Envía y recibe SMS a través de un número de Vonage.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "apiSecret": "API secret",
-        "signatureSecret": "Signature secret",
-        "signatureSecretHelp": "From the Vonage dashboard, under API settings. When set, inbound messages are only accepted when Vonage signed them. Without it, only the secret in the webhook URL is checked."
+        "apiKey": "Clave de API",
+        "apiSecret": "Secreto de API",
+        "signatureSecret": "Secreto de firma",
+        "signatureSecretHelp": "Del panel de Vonage, en API settings. Si se indica, los mensajes entrantes solo se aceptan cuando Vonage los ha firmado. Sin él, solo se comprueba el secreto de la URL del webhook."
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Enviar desde este número"
       }
       }
     },
     },
     "telnyx-sms": {
     "telnyx-sms": {
-      "description": "Send and receive text messages through a Telnyx number.",
+      "description": "Envía y recibe SMS a través de un número de Telnyx.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "webhookPublicKey": "Webhook public key",
-        "webhookPublicKeyHelp": "From the Telnyx portal, under Account settings, Keys and credentials, Public key. When set, inbound messages are only accepted when Telnyx signed them. Without it, only the secret in the webhook URL is checked."
+        "apiKey": "Clave de API",
+        "webhookPublicKey": "Clave pública del webhook",
+        "webhookPublicKeyHelp": "Del portal de Telnyx, en Account settings, Keys and credentials, Public key. Si se indica, los mensajes entrantes solo se aceptan cuando Telnyx los ha firmado. Sin ella, solo se comprueba el secreto de la URL del webhook."
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Enviar desde este número"
       }
       }
     },
     },
     "whatsapp-meta": {
     "whatsapp-meta": {
-      "description": "Message customers on WhatsApp through Meta directly. Photos of what you found, and the conversation that follows.",
+      "description": "Escribe a tus clientes por WhatsApp directamente a través de Meta. Fotos de lo que has encontrado y la conversación que sigue.",
       "fields": {
       "fields": {
-        "phoneNumberId": "Phone number ID",
-        "accessToken": "Access token",
-        "verifyToken": "Webhook verify token",
-        "appSecret": "App secret",
-        "apiVersion": "Graph API version",
-        "appSecretHelp": "Meta signs every delivery with it. Until it is entered, messages posted to the webhook are refused, since anyone who learns the URL could otherwise post as your customers."
+        "phoneNumberId": "ID del número de teléfono",
+        "accessToken": "Token de acceso",
+        "verifyToken": "Token de verificación del webhook",
+        "appSecret": "Secreto de la app",
+        "apiVersion": "Versión de Graph API",
+        "appSecretHelp": "Meta firma cada entrega con él. Hasta que se introduzca, se rechazan los mensajes enviados al webhook, ya que de lo contrario cualquiera que conozca la URL podría hacerse pasar por tus clientes."
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "phoneNumber": "Send from this number",
-        "templateName": "Template for reopening a conversation",
-        "templateLanguage": "Template language",
-        "templateVariables": "Template values, in order",
-        "mediaTemplateName": "Template for a message with a photo",
-        "mediaTemplateLanguage": "Photo template language",
-        "mediaTemplateVariables": "Photo template values, in order"
+        "enabled": "Enviar mensajes por este canal",
+        "phoneNumber": "Enviar desde este número",
+        "templateName": "Plantilla para reabrir una conversación",
+        "templateLanguage": "Idioma de la plantilla",
+        "templateVariables": "Valores de la plantilla, en orden",
+        "mediaTemplateName": "Plantilla para un mensaje con foto",
+        "mediaTemplateLanguage": "Idioma de la plantilla con foto",
+        "mediaTemplateVariables": "Valores de la plantilla con foto, en orden"
       }
       }
     },
     },
     "whatsapp-twilio": {
     "whatsapp-twilio": {
-      "description": "Message customers on WhatsApp through a Twilio number, if Twilio is who sold you one.",
+      "description": "Escribe a tus clientes por WhatsApp a través de un número de Twilio, si es Twilio quien te lo proporcionó.",
       "fields": {
       "fields": {
         "accountSid": "Account SID",
         "accountSid": "Account SID",
-        "authToken": "Auth token",
-        "messagingServiceSid": "Messaging service SID"
+        "authToken": "Token de autenticación",
+        "messagingServiceSid": "SID del servicio de mensajería"
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "phoneNumber": "Send from this number",
-        "templateName": "Template for reopening a conversation",
-        "templateLanguage": "Template language",
-        "templateVariables": "Template values, in order",
-        "mediaTemplateName": "Template for a message with a photo",
-        "mediaTemplateLanguage": "Photo template language",
-        "mediaTemplateVariables": "Photo template values, in order"
+        "enabled": "Enviar mensajes por este canal",
+        "phoneNumber": "Enviar desde este número",
+        "templateName": "Plantilla para reabrir una conversación",
+        "templateLanguage": "Idioma de la plantilla",
+        "templateVariables": "Valores de la plantilla, en orden",
+        "mediaTemplateName": "Plantilla para un mensaje con foto",
+        "mediaTemplateLanguage": "Idioma de la plantilla con foto",
+        "mediaTemplateVariables": "Valores de la plantilla con foto, en orden"
       }
       }
     },
     },
     "telegram": {
     "telegram": {
-      "description": "A Telegram bot that reaches customers who use it, and brings their replies into the inbox.",
+      "description": "Un bot de Telegram que llega a los clientes que lo usan y trae sus respuestas a la bandeja de entrada.",
       "fields": {
       "fields": {
-        "botToken": "Bot token"
+        "botToken": "Token del bot"
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "botUsername": "Bot username"
+        "enabled": "Enviar mensajes por este canal",
+        "botUsername": "Nombre de usuario del bot"
       }
       }
     },
     },
     "smtp": {
     "smtp": {
-      "description": "Send invoices and reminders through your own mail server, rather than the platform mail.",
+      "description": "Envía facturas y recordatorios a través de tu propio servidor de correo, en lugar del correo de la plataforma.",
       "fields": {
       "fields": {
-        "host": "Server",
-        "port": "Port",
-        "user": "Username",
-        "pass": "Password"
+        "host": "Servidor",
+        "port": "Puerto",
+        "user": "Nombre de usuario",
+        "pass": "Contraseña"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender",
-        "secure": "Connect over TLS from the start",
-        "requireTls": "Require the server to upgrade to TLS",
-        "rejectUnauthorized": "Reject a certificate that does not check out"
+        "fromEmail": "Enviar desde esta dirección",
+        "fromName": "Nombre que se muestra como remitente",
+        "secure": "Conectar por TLS desde el inicio",
+        "requireTls": "Exigir que el servidor pase a TLS",
+        "rejectUnauthorized": "Rechazar un certificado que no sea válido"
       }
       }
     },
     },
     "resend": {
     "resend": {
-      "description": "Send invoices and reminders through Resend.",
+      "description": "Envía facturas y recordatorios a través de Resend.",
       "fields": {
       "fields": {
-        "apiKey": "API key"
+        "apiKey": "Clave de API"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Enviar desde esta dirección",
+        "fromName": "Nombre que se muestra como remitente"
       }
       }
     },
     },
     "postmark": {
     "postmark": {
-      "description": "Send invoices and reminders through Postmark.",
+      "description": "Envía facturas y recordatorios a través de Postmark.",
       "fields": {
       "fields": {
-        "apiKey": "Server token"
+        "apiKey": "Token del servidor"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Enviar desde esta dirección",
+        "fromName": "Nombre que se muestra como remitente"
       }
       }
     },
     },
     "mailgun": {
     "mailgun": {
-      "description": "Send invoices and reminders through Mailgun.",
+      "description": "Envía facturas y recordatorios a través de Mailgun.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "domain": "Sending domain"
+        "apiKey": "Clave de API",
+        "domain": "Dominio de envío"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender",
-        "region": "Region the domain is in"
+        "fromEmail": "Enviar desde esta dirección",
+        "fromName": "Nombre que se muestra como remitente",
+        "region": "Región del dominio"
       }
       }
     },
     },
     "sendgrid": {
     "sendgrid": {
-      "description": "Send invoices and reminders through SendGrid.",
+      "description": "Envía facturas y recordatorios a través de SendGrid.",
       "fields": {
       "fields": {
-        "apiKey": "API key"
+        "apiKey": "Clave de API"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Enviar desde esta dirección",
+        "fromName": "Nombre que se muestra como remitente"
       }
       }
     },
     },
     "amazon-ses": {
     "amazon-ses": {
-      "description": "Send invoices and reminders through Amazon SES.",
+      "description": "Envía facturas y recordatorios a través de Amazon SES.",
       "fields": {
       "fields": {
-        "accessKeyId": "Access key ID",
-        "secretAccessKey": "Secret access key",
-        "region": "Region"
+        "accessKeyId": "ID de clave de acceso",
+        "secretAccessKey": "Clave de acceso secreta",
+        "region": "Región"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Enviar desde esta dirección",
+        "fromName": "Nombre que se muestra como remitente"
       }
       }
     },
     },
     "vegvesen": {
     "vegvesen": {

+ 3 - 3
messages/es/inventory.json

@@ -76,7 +76,7 @@
     "editPart": "Editar pieza",
     "editPart": "Editar pieza",
     "addNewPart": "Añadir nueva pieza",
     "addNewPart": "Añadir nueva pieza",
     "supplierLink": "Enlace del proveedor",
     "supplierLink": "Enlace del proveedor",
-    "supplierLinkPlaceholder": "https://supplier.com/product/...",
+    "supplierLinkPlaceholder": "https://proveedor.com/producto/...",
     "fetch": "Obtener",
     "fetch": "Obtener",
     "fetchFailed": "Error al obtener",
     "fetchFailed": "Error al obtener",
     "fetchError": "No se pudieron obtener los metadatos de la URL",
     "fetchError": "No se pudieron obtener los metadatos de la URL",
@@ -124,14 +124,14 @@
     "supplierPhone": "Teléfono del proveedor",
     "supplierPhone": "Teléfono del proveedor",
     "supplierPhonePlaceholder": "(555) 123-4567",
     "supplierPhonePlaceholder": "(555) 123-4567",
     "supplierEmail": "Correo del proveedor",
     "supplierEmail": "Correo del proveedor",
-    "supplierEmailPlaceholder": "orders@autoparts.com",
+    "supplierEmailPlaceholder": "pedidos@recambios.com",
     "description": "Descripción",
     "description": "Descripción",
     "descriptionPlaceholder": "Descripción de la pieza...",
     "descriptionPlaceholder": "Descripción de la pieza...",
     "cancel": "Cancelar",
     "cancel": "Cancelar",
     "saveChanges": "Guardar cambios",
     "saveChanges": "Guardar cambios",
     "addPart": "Añadir pieza"
     "addPart": "Añadir pieza"
   },
   },
-  "openMenu": "Open menu",
+  "openMenu": "Abrir menú",
   "history": {
   "history": {
     "title": "Historial de stock",
     "title": "Historial de stock",
     "description": "Todos los cambios registrados en {name}, más recientes primero.",
     "description": "Todos los cambios registrados en {name}, más recientes primero.",

+ 4 - 4
messages/es/laborPresets.json

@@ -6,7 +6,7 @@
     "description": "Descripción",
     "description": "Descripción",
     "itemCount": "Elementos",
     "itemCount": "Elementos",
     "type": "Tipo",
     "type": "Tipo",
-    "hrs": "hrs",
+    "hrs": "h",
     "units": "unidad(es)"
     "units": "unidad(es)"
   },
   },
   "empty": {
   "empty": {
@@ -16,7 +16,7 @@
   "actions": {
   "actions": {
     "edit": "Editar",
     "edit": "Editar",
     "delete": "Eliminar",
     "delete": "Eliminar",
-    "openMenu": "Open menu"
+    "openMenu": "Abrir menú"
   },
   },
   "deletePreset": {
   "deletePreset": {
     "title": "Eliminar plantilla de mano de obra",
     "title": "Eliminar plantilla de mano de obra",
@@ -44,7 +44,7 @@
     "create": "Crear",
     "create": "Crear",
     "saveChanges": "Guardar cambios",
     "saveChanges": "Guardar cambios",
     "itemQty": "Qty",
     "itemQty": "Qty",
-    "itemQtyOrHours": "Unit / Hours",
+    "itemQtyOrHours": "Unidad / Horas",
     "hourlyTag": "HR",
     "hourlyTag": "HR",
     "serviceTag": "SVC",
     "serviceTag": "SVC",
     "partsTitle": "Piezas",
     "partsTitle": "Piezas",
@@ -63,7 +63,7 @@
     "noPackages": "No se encontraron plantillas de mano de obra.",
     "noPackages": "No se encontraron plantillas de mano de obra.",
     "items": "{count} elementos",
     "items": "{count} elementos",
     "totalHours": "{hours}h en total",
     "totalHours": "{hours}h en total",
-    "totalUnits": "{units} unit(s)",
+    "totalUnits": "{units} unidad(es)",
     "totalParts": "{count} piezas"
     "totalParts": "{count} piezas"
   },
   },
   "errors": {
   "errors": {

+ 3 - 3
messages/es/messages.json

@@ -30,8 +30,8 @@
     "deleteDescription": "Se eliminarán permanentemente todos los mensajes con {name}. Esta acción no se puede deshacer.",
     "deleteDescription": "Se eliminarán permanentemente todos los mensajes con {name}. Esta acción no se puede deshacer.",
     "deleted": "Conversación eliminada",
     "deleted": "Conversación eliminada",
     "deleteError": "No se pudo eliminar la conversación",
     "deleteError": "No se pudo eliminar la conversación",
-    "back": "Back",
-    "conversationMenu": "Conversation menu",
+    "back": "Volver",
+    "conversationMenu": "Menú de la conversación",
     "searchPlaceholder": "Buscar conversaciones",
     "searchPlaceholder": "Buscar conversaciones",
     "noSearchResults": "Ninguna conversación coincide con la búsqueda",
     "noSearchResults": "Ninguna conversación coincide con la búsqueda",
     "now": "ahora"
     "now": "ahora"
@@ -47,7 +47,7 @@
     "messageDeleted": "Mensaje eliminado",
     "messageDeleted": "Mensaje eliminado",
     "deleteError": "No se pudo eliminar el mensaje",
     "deleteError": "No se pudo eliminar el mensaje",
     "sendError": "No se pudo enviar el SMS",
     "sendError": "No se pudo enviar el SMS",
-    "sendMessage": "Send message"
+    "sendMessage": "Enviar mensaje"
   },
   },
   "sendDialog": {
   "sendDialog": {
     "send": "Enviar {label}",
     "send": "Enviar {label}",

+ 1 - 1
messages/es/navigation.json

@@ -112,7 +112,7 @@
     "reports": "Informes",
     "reports": "Informes",
     "timesheets": "Hojas de horas",
     "timesheets": "Hojas de horas",
     "settings": "Configuración",
     "settings": "Configuración",
-    "superAdmin": "Super Admin",
+    "superAdmin": "Superadministrador",
     "adminPanel": "Panel de administración",
     "adminPanel": "Panel de administración",
     "organizations": "Organizaciones",
     "organizations": "Organizaciones",
     "noOrganization": "Sin organización",
     "noOrganization": "Sin organización",

+ 1 - 1
messages/es/notifications.json

@@ -7,5 +7,5 @@
     "delete": "Eliminar",
     "delete": "Eliminar",
     "cancel": "Cancelar"
     "cancel": "Cancelar"
   },
   },
-  "openNotifications": "Open notifications"
+  "openNotifications": "Abrir notificaciones"
 }
 }

+ 6 - 6
messages/es/pdf.json

@@ -32,8 +32,8 @@
     "total": "Total",
     "total": "Total",
     "labor": "Mano de obra",
     "labor": "Mano de obra",
     "hours": "Horas",
     "hours": "Horas",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "h",
+    "unit": "ud.",
     "rate": "Tarifa",
     "rate": "Tarifa",
     "ratePerHour": "{rate}/h",
     "ratePerHour": "{rate}/h",
     "subtotal": "Subtotal",
     "subtotal": "Subtotal",
@@ -75,7 +75,7 @@
     "professionalWorkshop": "Gestión profesional de talleres",
     "professionalWorkshop": "Gestión profesional de talleres",
     "tel": "Tel: {phone}",
     "tel": "Tel: {phone}",
     "org": "Org: {org}",
     "org": "Org: {org}",
-    "qtyOrHours": "Unit / Hours",
+    "qtyOrHours": "Unidad / Horas",
     "customFieldsTitle": "Información adicional",
     "customFieldsTitle": "Información adicional",
     "telegramConnect": "Chatea con nosotros en Telegram",
     "telegramConnect": "Chatea con nosotros en Telegram",
     "taxRegistrationLabel": "Núm. {name}"
     "taxRegistrationLabel": "Núm. {name}"
@@ -96,8 +96,8 @@
     "total": "Total",
     "total": "Total",
     "labor": "Mano de obra",
     "labor": "Mano de obra",
     "hours": "Horas",
     "hours": "Horas",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "h",
+    "unit": "ud.",
     "rate": "Tarifa",
     "rate": "Tarifa",
     "ratePerHour": "{rate}/h",
     "ratePerHour": "{rate}/h",
     "subtotal": "Subtotal",
     "subtotal": "Subtotal",
@@ -115,7 +115,7 @@
     "validityFooter30": "Este presupuesto es válido por 30 días",
     "validityFooter30": "Este presupuesto es válido por 30 días",
     "viewPortal": "Ver su portal: {url}",
     "viewPortal": "Ver su portal: {url}",
     "tel": "Tel: {phone}",
     "tel": "Tel: {phone}",
-    "qtyOrHours": "Unit / Hours",
+    "qtyOrHours": "Unidad / Horas",
     "customFieldsTitle": "Información adicional",
     "customFieldsTitle": "Información adicional",
     "quoteNumberLabel": "N.º de presupuesto",
     "quoteNumberLabel": "N.º de presupuesto",
     "validUntilLabel": "Válido hasta"
     "validUntilLabel": "Válido hasta"

+ 1 - 1
messages/es/reminders.json

@@ -8,7 +8,7 @@
   "searchVehicle": "Buscar vehículos...",
   "searchVehicle": "Buscar vehículos...",
   "noVehicle": "No se encontraron vehículos.",
   "noVehicle": "No se encontraron vehículos.",
   "pickDate": "Seleccionar fecha",
   "pickDate": "Seleccionar fecha",
-  "openMenu": "Open menu",
+  "openMenu": "Abrir menú",
   "relatesTo": "Se refiere a (opcional)",
   "relatesTo": "Se refiere a (opcional)",
   "selectCustomer": "Cliente (opcional)",
   "selectCustomer": "Cliente (opcional)",
   "noneOption": "Ninguno",
   "noneOption": "Ninguno",

+ 85 - 85
messages/es/reports.json

@@ -329,94 +329,94 @@
     "jobsClocked": "Trabajos registrados"
     "jobsClocked": "Trabajos registrados"
   },
   },
   "pdf": {
   "pdf": {
-    "reportTitle": "Business Report",
-    "revenueSection": "Revenue Report",
-    "taxSection": "Tax Report",
-    "pastDueSection": "Past Due Invoices",
-    "servicesSection": "Services Report",
-    "customersSection": "Customers Report",
-    "techniciansSection": "Technicians Report",
-    "partsSection": "Parts Usage Report",
-    "jobAnalyticsSection": "Job Analytics",
-    "retentionSection": "Customer Retention",
-    "inventorySection": "Inventory Report",
+    "reportTitle": "Informe del Negocio",
+    "revenueSection": "Informe de Ingresos",
+    "taxSection": "Informe de Impuestos",
+    "pastDueSection": "Facturas Vencidas",
+    "servicesSection": "Informe de Servicios",
+    "customersSection": "Informe de Clientes",
+    "techniciansSection": "Informe de Técnicos",
+    "partsSection": "Informe de Uso de Piezas",
+    "jobAnalyticsSection": "Análisis de Trabajos",
+    "retentionSection": "Retención de Clientes",
+    "inventorySection": "Informe de Inventario",
     "monthlyBreakdown": "Desglose Mensual",
     "monthlyBreakdown": "Desglose Mensual",
-    "revenueByType": "Revenue by Type",
-    "taxByRate": "Tax by Rate",
-    "servicesByStatus": "By Status",
-    "servicesByType": "By Type",
-    "topCustomers": "Top Customers",
-    "topServiceTypes": "Top Service Types",
-    "topReturning": "Top Returning Customers",
-    "dayOfWeek": "Jobs by Day of Week",
-    "monthlyTrend": "Monthly Trend",
-    "lowStock": "Low Stock Items",
-    "revenue": "Revenue",
-    "collected": "Collected",
-    "outstanding": "Outstanding",
-    "services": "Services",
-    "partsCost": "Parts Cost",
+    "revenueByType": "Ingresos por Tipo",
+    "taxByRate": "Impuesto por Tasa",
+    "servicesByStatus": "Por Estado",
+    "servicesByType": "Por Tipo",
+    "topCustomers": "Principales Clientes",
+    "topServiceTypes": "Principales Tipos de Servicio",
+    "topReturning": "Principales Clientes Recurrentes",
+    "dayOfWeek": "Trabajos por Día de la Semana",
+    "monthlyTrend": "Tendencia Mensual",
+    "lowStock": "Artículos con Stock Bajo",
+    "revenue": "Ingresos",
+    "collected": "Cobrado",
+    "outstanding": "Pendiente",
+    "services": "Servicios",
+    "partsCost": "Coste de Piezas",
     "partsNetProfit": "Beneficio Neto Repuestos",
     "partsNetProfit": "Beneficio Neto Repuestos",
     "laborRevenue": "Mano de Obra",
     "laborRevenue": "Mano de Obra",
-    "netProfit": "Net Profit",
-    "month": "Month",
-    "count": "Count",
-    "type": "Type",
-    "status": "Status",
-    "name": "Name",
-    "company": "Company",
-    "totalSpent": "Total Spent",
-    "customer": "Customer",
-    "invoiceNumber": "Invoice #",
-    "totalAmount": "Total Amount",
-    "amountDue": "Amount Due",
-    "dueDate": "Due Date",
-    "daysPastDue": "Days Past Due",
-    "totalPastDue": "Total Past Due",
-    "totalAmountDue": "Total Amount Due",
-    "over30": "Over 30 Days",
-    "over60": "Over 60 Days",
-    "over90": "Over 90 Days",
-    "taxCollected": "Tax Collected",
-    "taxableAmount": "Taxable Amount",
-    "taxRate": "Tax Rate",
-    "invoiceCount": "Invoice Count",
-    "invoices": "Invoices",
-    "totalServices": "Total Services",
-    "totalCustomers": "Total Customers",
-    "activeCustomers": "Active Customers",
-    "technician": "Technician",
-    "jobs": "Jobs",
-    "totalRevenue": "Total Revenue",
-    "avgRevenue": "Avg Revenue",
-    "totalHours": "Total Hours",
-    "avgHours": "Avg Hours",
-    "totalJobs": "Total Jobs",
-    "partName": "Part Name",
-    "partNumber": "Part #",
-    "usageCount": "Usage Count",
-    "totalQty": "Total Qty",
-    "totalPartsRevenue": "Parts Revenue",
+    "netProfit": "Beneficio Neto",
+    "month": "Mes",
+    "count": "Cantidad",
+    "type": "Tipo",
+    "status": "Estado",
+    "name": "Nombre",
+    "company": "Empresa",
+    "totalSpent": "Gasto Total",
+    "customer": "Cliente",
+    "invoiceNumber": "N.º Factura",
+    "totalAmount": "Monto Total",
+    "amountDue": "Monto Adeudado",
+    "dueDate": "Fecha de Vencimiento",
+    "daysPastDue": "Días Vencidos",
+    "totalPastDue": "Total Vencidas",
+    "totalAmountDue": "Monto Total Adeudado",
+    "over30": "Más de 30 Días",
+    "over60": "Más de 60 Días",
+    "over90": "Más de 90 Días",
+    "taxCollected": "Impuesto Recaudado",
+    "taxableAmount": "Monto Gravable",
+    "taxRate": "Tasa de Impuesto",
+    "invoiceCount": "Número de Facturas",
+    "invoices": "Facturas",
+    "totalServices": "Total de Servicios",
+    "totalCustomers": "Total de Clientes",
+    "activeCustomers": "Clientes Activos",
+    "technician": "Técnico",
+    "jobs": "Trabajos",
+    "totalRevenue": "Ingresos Totales",
+    "avgRevenue": "Ingreso Prom.",
+    "totalHours": "Horas Totales",
+    "avgHours": "Horas Prom.",
+    "totalJobs": "Total de Trabajos",
+    "partName": "Nombre de Pieza",
+    "partNumber": "N.º Pieza",
+    "usageCount": "Veces Utilizada",
+    "totalQty": "Cant. Total",
+    "totalPartsRevenue": "Ingresos por Piezas",
     "totalPartsCost": "Costo de Repuestos",
     "totalPartsCost": "Costo de Repuestos",
     "totalPartsNetProfit": "Beneficio Neto",
     "totalPartsNetProfit": "Beneficio Neto",
-    "totalPartsUsed": "Parts Used",
-    "serviceType": "Service Type",
-    "avgValue": "Avg Value",
-    "avgJobValue": "Avg Job Value",
-    "returningCustomers": "Returning",
-    "newCustomers": "New",
-    "totalActive": "Total Active",
-    "avgTimeBetweenVisits": "Avg Days Between Visits",
-    "avgDaysBetweenVisits": "Avg Days",
-    "visits": "Visits",
-    "days": "days",
-    "totalParts": "Total Parts",
-    "totalItems": "Total Items",
-    "totalValue": "Total Value",
-    "totalSellValue": "Sell Value",
-    "quantity": "Qty",
-    "minQuantity": "Min Qty",
-    "unitCost": "Unit Cost",
+    "totalPartsUsed": "Piezas Utilizadas",
+    "serviceType": "Tipo de Servicio",
+    "avgValue": "Valor Prom.",
+    "avgJobValue": "Valor Prom. de Trabajo",
+    "returningCustomers": "Recurrentes",
+    "newCustomers": "Nuevos",
+    "totalActive": "Total Activos",
+    "avgTimeBetweenVisits": "Prom. Días Entre Visitas",
+    "avgDaysBetweenVisits": "Prom. Días",
+    "visits": "Visitas",
+    "days": "días",
+    "totalParts": "Total de Piezas",
+    "totalItems": "Total de Artículos",
+    "totalValue": "Valor Total",
+    "totalSellValue": "Valor de Venta",
+    "quantity": "Cant.",
+    "minQuantity": "Cant. Mín.",
+    "unitCost": "Costo Unitario",
     "vehiclesSection": "Informe de Vehículo",
     "vehiclesSection": "Informe de Vehículo",
     "vehicleLabel": "Vehículo",
     "vehicleLabel": "Vehículo",
     "totalCost": "Costo Total",
     "totalCost": "Costo Total",
@@ -427,7 +427,7 @@
   },
   },
   "empty": "Aún no se han cargado datos. Haga clic en Actualizar para cargar el informe.",
   "empty": "Aún no se han cargado datos. Haga clic en Actualizar para cargar el informe.",
   "pagination": {
   "pagination": {
-    "previousPage": "Previous page",
-    "nextPage": "Next page"
+    "previousPage": "Página anterior",
+    "nextPage": "Página siguiente"
   }
   }
 }
 }

+ 2 - 2
messages/es/service.json

@@ -28,7 +28,7 @@
     "tabs": {
     "tabs": {
       "details": "Detalles",
       "details": "Detalles",
       "images": "Imágenes",
       "images": "Imágenes",
-      "video": "Video",
+      "video": "Vídeo",
       "documents": "Documentos",
       "documents": "Documentos",
       "statusReports": "Informes de estado"
       "statusReports": "Informes de estado"
     },
     },
@@ -256,7 +256,7 @@
     "deleted": "Archivo eliminado",
     "deleted": "Archivo eliminado",
     "failedDelete": "Error al eliminar",
     "failedDelete": "Error al eliminar",
     "images": "Imágenes ({count})",
     "images": "Imágenes ({count})",
-    "videos": "Videos ({count})",
+    "videos": "Vídeos ({count})",
     "diagnostics": "Reportes de Diagnóstico ({count})",
     "diagnostics": "Reportes de Diagnóstico ({count})",
     "documents": "Documentos ({count})",
     "documents": "Documentos ({count})",
     "download": "Descargar",
     "download": "Descargar",

+ 17 - 17
messages/es/settings.json

@@ -65,7 +65,7 @@
       },
       },
       "telegram": {
       "telegram": {
         "title": "Telegram",
         "title": "Telegram",
-        "description": "Telegram bot & messaging"
+        "description": "Bot de Telegram y mensajería"
       },
       },
       "customerPortal": {
       "customerPortal": {
         "title": "Portal del cliente",
         "title": "Portal del cliente",
@@ -158,7 +158,7 @@
     "logoAlt": "Logo de la empresa",
     "logoAlt": "Logo de la empresa",
     "upload": "Subir",
     "upload": "Subir",
     "remove": "Eliminar",
     "remove": "Eliminar",
-    "logoHint": "JPG, PNG, WebP, SVG — max 2MB",
+    "logoHint": "JPG, PNG, WebP, SVG, máx. 2 MB",
     "uploadingLogo": "Subiendo logo...",
     "uploadingLogo": "Subiendo logo...",
     "logoUpdated": "Logo actualizado",
     "logoUpdated": "Logo actualizado",
     "failedUploadLogo": "Error al subir el logo",
     "failedUploadLogo": "Error al subir el logo",
@@ -192,7 +192,7 @@
     "serviceTypeDescription": "Seleccione el tipo de servicio que ofrece su taller. Esto cambia las etiquetas de los campos en toda la aplicación.",
     "serviceTypeDescription": "Seleccione el tipo de servicio que ofrece su taller. Esto cambia las etiquetas de los campos en toda la aplicación.",
     "automotive": "Automotriz",
     "automotive": "Automotriz",
     "automotiveDescription": "Coches, camiones y otros vehículos de carretera",
     "automotiveDescription": "Coches, camiones y otros vehículos de carretera",
-    "marineService": "Marine",
+    "marineService": "Náutico",
     "marineServiceDescription": "Barcos, yates y embarcaciones"
     "marineServiceDescription": "Barcos, yates y embarcaciones"
   },
   },
   "account": {
   "account": {
@@ -418,9 +418,9 @@
     "failedRemoveMember": "Error al eliminar el miembro",
     "failedRemoveMember": "Error al eliminar el miembro",
     "memberRoleUpdated": "Rol del miembro actualizado",
     "memberRoleUpdated": "Rol del miembro actualizado",
     "failedUpdateRole": "Error al actualizar el rol",
     "failedUpdateRole": "Error al actualizar el rol",
-    "removeMember": "Remove member",
-    "cancelInvite": "Cancel invitation",
-    "editRole": "Edit role",
+    "removeMember": "Eliminar miembro",
+    "cancelInvite": "Cancelar invitación",
+    "editRole": "Editar rol",
     "technician": "Técnico",
     "technician": "Técnico",
     "technicianHint": "Puede recibir trabajos asignados y usar la aplicación de técnico",
     "technicianHint": "Puede recibir trabajos asignados y usar la aplicación de técnico",
     "technicianFailed": "No se pudo cambiar",
     "technicianFailed": "No se pudo cambiar",
@@ -1061,8 +1061,8 @@
     "fieldDeleted": "Campo personalizado eliminado",
     "fieldDeleted": "Campo personalizado eliminado",
     "failedSave": "No se pudo guardar el campo",
     "failedSave": "No se pudo guardar el campo",
     "failedDelete": "No se pudo eliminar",
     "failedDelete": "No se pudo eliminar",
-    "edit": "Edit",
-    "delete": "Delete",
+    "edit": "Editar",
+    "delete": "Eliminar",
     "unassigned": "Sin asignar",
     "unassigned": "Sin asignar",
     "defaultValue": "Valor predeterminado",
     "defaultValue": "Valor predeterminado",
     "defaultValueHint": "Se rellena automáticamente en registros nuevos y se imprime mientras no se haya introducido un valor.",
     "defaultValueHint": "Se rellena automáticamente en registros nuevos y se imprime mientras no se haya introducido un valor.",
@@ -1315,7 +1315,7 @@
   "about": {
   "about": {
     "title": "Acerca de Torqvoice",
     "title": "Acerca de Torqvoice",
     "description": "Torqvoice es su solucion completa de gestión de servicios de vehículos. Rastree historial de servicio, reparaciones y mas.",
     "description": "Torqvoice es su solucion completa de gestión de servicios de vehículos. Rastree historial de servicio, reparaciones y mas.",
-    "version": "Version",
+    "version": "Versión",
     "website": "Sitio web",
     "website": "Sitio web",
     "documentation": "Documentacion",
     "documentation": "Documentacion",
     "changelog": "Registro de cambios"
     "changelog": "Registro de cambios"
@@ -1370,7 +1370,7 @@
         "sand": "Arena"
         "sand": "Arena"
       }
       }
     },
     },
-    "copyUrl": "Copy portal URL"
+    "copyUrl": "Copiar URL del portal"
   },
   },
   "email": {
   "email": {
     "title": "Proveedor de correo",
     "title": "Proveedor de correo",
@@ -1446,7 +1446,7 @@
     "failedSave": "Error al guardar la configuración",
     "failedSave": "Error al guardar la configuración",
     "testSentTo": "SMS de prueba enviado a {phone}",
     "testSentTo": "SMS de prueba enviado a {phone}",
     "testFailed": "Prueba de SMS fallida",
     "testFailed": "Prueba de SMS fallida",
-    "copyWebhookUrl": "Copy webhook URL"
+    "copyWebhookUrl": "Copiar URL del webhook"
   },
   },
   "subscription": {
   "subscription": {
     "title": "Plan de suscripción",
     "title": "Plan de suscripción",
@@ -1497,7 +1497,7 @@
     "resumeSuccess": "Suscripción reanudada con éxito",
     "resumeSuccess": "Suscripción reanudada con éxito",
     "resumeError": "Error al reanudar la suscripción",
     "resumeError": "Error al reanudar la suscripción",
     "billingPortalError": "Error al abrir el portal de facturación",
     "billingPortalError": "Error al abrir el portal de facturación",
-    "checkoutError": "Failed to start checkout",
+    "checkoutError": "No se pudo iniciar el pago",
     "upgradeTitle": "Mejorar plan",
     "upgradeTitle": "Mejorar plan",
     "upgradeDescription": "Desbloquee más funciones mejorando su plan.",
     "upgradeDescription": "Desbloquee más funciones mejorando su plan.",
     "upgradeToProDescription": "Mejore para desbloquear clientes ilimitados, miembros del equipo, informes, SMTP, acceso API y más.",
     "upgradeToProDescription": "Mejore para desbloquear clientes ilimitados, miembros del equipo, informes, SMTP, acceso API y más.",
@@ -1557,7 +1557,7 @@
     "biweekly": "Cada 2 semanas",
     "biweekly": "Cada 2 semanas",
     "monthly": "Mensual",
     "monthly": "Mensual",
     "bimonthly": "Cada 2 meses",
     "bimonthly": "Cada 2 meses",
-    "quarterly": "Cada 4 meses",
+    "quarterly": "Cada 3 meses",
     "semiannually": "Cada 6 meses",
     "semiannually": "Cada 6 meses",
     "yearly": "Anual",
     "yearly": "Anual",
     "dateRangeLabel": "Período",
     "dateRangeLabel": "Período",
@@ -1596,10 +1596,10 @@
     "deleted": "Programa de informes eliminado",
     "deleted": "Programa de informes eliminado",
     "toggledOn": "Programa de informes activado",
     "toggledOn": "Programa de informes activado",
     "toggledOff": "Programa de informes desactivado",
     "toggledOff": "Programa de informes desactivado",
-    "failedSave": "Failed to save",
-    "failedSend": "Failed to send",
-    "failedToggle": "Failed to toggle",
-    "failedDelete": "Failed to delete",
+    "failedSave": "Error al guardar",
+    "failedSend": "Error al enviar",
+    "failedToggle": "Error al cambiar el estado",
+    "failedDelete": "Error al eliminar",
     "noMembers": "No se encontraron miembros del equipo",
     "noMembers": "No se encontraron miembros del equipo",
     "addRecipient": "Agregar destinatario...",
     "addRecipient": "Agregar destinatario...",
     "searchMembers": "Buscar miembros...",
     "searchMembers": "Buscar miembros...",

+ 5 - 5
messages/es/share.json

@@ -34,8 +34,8 @@
     "total": "Total",
     "total": "Total",
     "labor": "Mano de obra",
     "labor": "Mano de obra",
     "hours": "Horas",
     "hours": "Horas",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "h",
+    "unit": "ud.",
     "qtyOrHours": "Unidad / Horas",
     "qtyOrHours": "Unidad / Horas",
     "rate": "Tarifa",
     "rate": "Tarifa",
     "ratePerHour": "{rate}/h",
     "ratePerHour": "{rate}/h",
@@ -93,8 +93,8 @@
     "labor": "Mano de obra",
     "labor": "Mano de obra",
     "laborDescription": "Descripción",
     "laborDescription": "Descripción",
     "hours": "Horas",
     "hours": "Horas",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "h",
+    "unit": "ud.",
     "qtyOrHours": "Unidad / Horas",
     "qtyOrHours": "Unidad / Horas",
     "rate": "Tarifa",
     "rate": "Tarifa",
     "ratePerHour": "{rate}/h",
     "ratePerHour": "{rate}/h",
@@ -200,7 +200,7 @@
     "privacyNotice": "Este informe se lo facilita el taller que realizó la inspección. Cualquier persona con este enlace puede consultarlo, así que le rogamos que no lo reenvíe. Contacte con el taller para retirar el enlace o solicitar la supresión de sus datos."
     "privacyNotice": "Este informe se lo facilita el taller que realizó la inspección. Cualquier persona con este enlace puede consultarlo, así que le rogamos que no lo reenvíe. Contacte con el taller para retirar el enlace o solicitar la supresión de sus datos."
   },
   },
   "terms": {
   "terms": {
-    "title": "Términos de venta (Salgsvilkår)",
+    "title": "Términos de venta",
     "contact": "Contacto",
     "contact": "Contacto",
     "tel": "Tel: {phone}"
     "tel": "Tel: {phone}"
   },
   },

+ 2 - 2
messages/es/statusReport.json

@@ -14,7 +14,7 @@
     "createAndSend": "Crear y enviar",
     "createAndSend": "Crear y enviar",
     "cancel": "Cancelar",
     "cancel": "Cancelar",
     "uploadFailed": "Error al subir el vídeo",
     "uploadFailed": "Error al subir el vídeo",
-    "createReportFailed": "Failed to create status report",
+    "createReportFailed": "Error al crear el informe de estado",
     "created": "Informe de estado creado",
     "created": "Informe de estado creado",
     "noVideo": "Por favor, suba un vídeo primero",
     "noVideo": "Por favor, suba un vídeo primero",
     "removeVideo": "Eliminar vídeo",
     "removeVideo": "Eliminar vídeo",
@@ -84,7 +84,7 @@
     "sentAt": "Enviado",
     "sentAt": "Enviado",
     "sentVia": "Enviado por",
     "sentVia": "Enviado por",
     "messageLabel": "Mensaje",
     "messageLabel": "Mensaje",
-    "videoLabel": "Video"
+    "videoLabel": "Vídeo"
   },
   },
   "notify": {
   "notify": {
     "defaultMessage": "Hola {name}, tenemos una actualización de estado de su {vehicle}. Véala aquí: {url}",
     "defaultMessage": "Hola {name}, tenemos una actualización de estado de su {vehicle}. Véala aquí: {url}",

+ 3 - 3
messages/es/telegram.json

@@ -5,8 +5,8 @@
     "label": "Token del bot",
     "label": "Token del bot",
     "placeholder": "Ingresa el token de @BotFather",
     "placeholder": "Ingresa el token de @BotFather",
     "help": "Crea un bot a través de @BotFather en Telegram para obtener tu token.",
     "help": "Crea un bot a través de @BotFather en Telegram para obtener tu token.",
-    "show": "Show token",
-    "hide": "Hide token"
+    "show": "Mostrar token",
+    "hide": "Ocultar token"
   },
   },
   "botUsername": {
   "botUsername": {
     "label": "Nombre de usuario del bot",
     "label": "Nombre de usuario del bot",
@@ -20,7 +20,7 @@
     "title": "Enlace de conexión del cliente",
     "title": "Enlace de conexión del cliente",
     "description": "Comparte este enlace con los clientes para que se conecten a tu bot. Reemplaza el marcador de ID del cliente con el ID real.",
     "description": "Comparte este enlace con los clientes para que se conecten a tu bot. Reemplaza el marcador de ID del cliente con el ID real.",
     "copied": "¡Enlace copiado!",
     "copied": "¡Enlace copiado!",
-    "copy": "Copy deep link"
+    "copy": "Copiar enlace directo"
   },
   },
   "test": {
   "test": {
     "title": "Mensaje de prueba",
     "title": "Mensaje de prueba",

+ 1 - 1
messages/es/telegramMessages.json

@@ -31,7 +31,7 @@
     "messageDeleted": "Mensaje eliminado",
     "messageDeleted": "Mensaje eliminado",
     "deleteError": "No se pudo eliminar el mensaje",
     "deleteError": "No se pudo eliminar el mensaje",
     "sendError": "No se pudo enviar el mensaje",
     "sendError": "No se pudo enviar el mensaje",
-    "sendMessage": "Send message"
+    "sendMessage": "Enviar mensaje"
   },
   },
   "sendDialog": {
   "sendDialog": {
     "send": "Enviar {label}",
     "send": "Enviar {label}",

+ 25 - 25
messages/es/vehicles.json

@@ -28,10 +28,10 @@
     "unarchiveError": "Error al desarchivar vehículo",
     "unarchiveError": "Error al desarchivar vehículo",
     "deleteError": "Error al eliminar vehículo",
     "deleteError": "Error al eliminar vehículo",
     "error": "Error al cargar vehículos",
     "error": "Error al cargar vehículos",
-    "viewTable": "Table view",
-    "viewGrid": "Grid view",
-    "viewLargeGrid": "Large grid view",
-    "openMenu": "Open menu",
+    "viewTable": "Vista de tabla",
+    "viewGrid": "Vista de cuadrícula",
+    "viewLargeGrid": "Vista de cuadrícula grande",
+    "openMenu": "Abrir menú",
     "inspectionOverdue": "ITV vencida",
     "inspectionOverdue": "ITV vencida",
     "inspectionDue30": "Vence en 30 días",
     "inspectionDue30": "Vence en 30 días",
     "inspectionDue90": "Vence en 90 días",
     "inspectionDue90": "Vence en 90 días",
@@ -95,8 +95,8 @@
     "severityModerate": "Moderado — reportado por algunos propietarios",
     "severityModerate": "Moderado — reportado por algunos propietarios",
     "severityUncommon": "Poco común — reportado por pocos propietarios",
     "severityUncommon": "Poco común — reportado por pocos propietarios",
     "severityRare": "Raro — reportes aislados pero crítico cuando ocurre",
     "severityRare": "Raro — reportes aislados pero crítico cuando ocurre",
-    "openMenu": "Open menu",
-    "dismissMaintenance": "Dismiss",
+    "openMenu": "Abrir menú",
+    "dismissMaintenance": "Descartar",
     "inspectionDue": "ITV el {date}",
     "inspectionDue": "ITV el {date}",
     "inspectionCheckedAt": "Comprobado en el registro el {date}",
     "inspectionCheckedAt": "Comprobado en el registro el {date}",
     "notRegistered": "Sin matricular",
     "notRegistered": "Sin matricular",
@@ -184,10 +184,10 @@
     "showing": "Mostrando {start}-{end} de {total}",
     "showing": "Mostrando {start}-{end} de {total}",
     "perPage": "por página",
     "perPage": "por página",
     "page": "Página {page} de {totalPages}",
     "page": "Página {page} de {totalPages}",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "firstPage": "Primera página",
+    "previousPage": "Página anterior",
+    "nextPage": "Página siguiente",
+    "lastPage": "Última página"
   },
   },
   "notes": {
   "notes": {
     "addNote": "Agregar nota",
     "addNote": "Agregar nota",
@@ -213,11 +213,11 @@
     "noteCreated": "Nota creada",
     "noteCreated": "Nota creada",
     "titleRequired": "El título y el contenido son obligatorios",
     "titleRequired": "El título y el contenido son obligatorios",
     "saveError": "Error al guardar la nota",
     "saveError": "Error al guardar la nota",
-    "openMenu": "Open menu",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "openMenu": "Abrir menú",
+    "firstPage": "Primera página",
+    "previousPage": "Página anterior",
+    "nextPage": "Página siguiente",
+    "lastPage": "Última página"
   },
   },
   "findings": {
   "findings": {
     "sectionTitle": "Observaciones",
     "sectionTitle": "Observaciones",
@@ -266,11 +266,11 @@
     "showing": "Mostrando {start}-{end} de {total}",
     "showing": "Mostrando {start}-{end} de {total}",
     "perPage": "por página",
     "perPage": "por página",
     "page": "Página {page} de {totalPages}",
     "page": "Página {page} de {totalPages}",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page",
-    "openMenu": "Open menu",
+    "firstPage": "Primera página",
+    "previousPage": "Página anterior",
+    "nextPage": "Página siguiente",
+    "lastPage": "Última página",
+    "openMenu": "Abrir menú",
     "concernLabel": "¿Responde a qué punto?",
     "concernLabel": "¿Responde a qué punto?",
     "concernNone": "No es algo que preguntara el cliente"
     "concernNone": "No es algo que preguntara el cliente"
   },
   },
@@ -313,7 +313,7 @@
     "color": "Color",
     "color": "Color",
     "fuelType": "Tipo de combustible",
     "fuelType": "Tipo de combustible",
     "gasoline": "Gasolina",
     "gasoline": "Gasolina",
-    "diesel": "Diesel",
+    "diesel": "Diésel",
     "electric": "Electrico",
     "electric": "Electrico",
     "hybrid": "Hibrido",
     "hybrid": "Hibrido",
     "other": "Otro",
     "other": "Otro",
@@ -373,10 +373,10 @@
     "archiveError": "Error al archivar vehículo"
     "archiveError": "Error al archivar vehículo"
   },
   },
   "serviceRecords": {
   "serviceRecords": {
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "firstPage": "Primera página",
+    "previousPage": "Página anterior",
+    "nextPage": "Página siguiente",
+    "lastPage": "Última página"
   },
   },
   "inspectionReminders": {
   "inspectionReminders": {
     "title": "Recordatorios de inspección",
     "title": "Recordatorios de inspección",

+ 7 - 7
messages/es/workBoard.json

@@ -8,10 +8,10 @@
     "week": "Semana",
     "week": "Semana",
     "presenter": "Presentador",
     "presenter": "Presentador",
     "addTechnician": "Agregar Técnico",
     "addTechnician": "Agregar Técnico",
-    "previousWeek": "Previous week",
-    "nextWeek": "Next week",
-    "previousDay": "Previous day",
-    "nextDay": "Next day",
+    "previousWeek": "Semana anterior",
+    "nextWeek": "Semana siguiente",
+    "previousDay": "Día anterior",
+    "nextDay": "Día siguiente",
     "groupBy": "Columnas",
     "groupBy": "Columnas",
     "byTechnician": "Una columna por técnico",
     "byTechnician": "Una columna por técnico",
     "byBay": "Una columna por puesto",
     "byBay": "Una columna por puesto",
@@ -20,7 +20,7 @@
     "add": "Añadir",
     "add": "Añadir",
     "addBay": "Añadir puesto",
     "addBay": "Añadir puesto",
     "weekNumber": "Sem. {number}",
     "weekNumber": "Sem. {number}",
-    "lanes": "Columnas",
+    "lanes": "Carriles",
     "showAllLanes": "Mostrar todas",
     "showAllLanes": "Mostrar todas",
     "onlyBusyLanes": "Solo con trabajo",
     "onlyBusyLanes": "Solo con trabajo",
     "layout": "Vista",
     "layout": "Vista",
@@ -107,8 +107,8 @@
       "waitingParts": "Esperando Piezas",
       "waitingParts": "Esperando Piezas",
       "completed": "Completado"
       "completed": "Completado"
     },
     },
-    "previous": "Previous",
-    "next": "Next",
+    "previous": "Anterior",
+    "next": "Siguiente",
     "groupingUnused": "El tablero de estado agrupa por estado",
     "groupingUnused": "El tablero de estado agrupa por estado",
     "connecting": "Conectando…"
     "connecting": "Conectando…"
   },
   },

+ 1 - 1
messages/es/workOrders.json

@@ -34,7 +34,7 @@
       "total": "Total"
       "total": "Total"
     },
     },
     "emailSubject": "Actualización de Estado del Vehículo: {status}",
     "emailSubject": "Actualización de Estado del Vehículo: {status}",
-    "changeStatus": "Change status",
+    "changeStatus": "Cambiar estado",
     "contextMenu": {
     "contextMenu": {
       "open": "Abrir orden de trabajo",
       "open": "Abrir orden de trabajo",
       "openVehicle": "Abrir vehículo",
       "openVehicle": "Abrir vehículo",

+ 2 - 2
messages/fr/admin.json

@@ -31,7 +31,7 @@
     "name": "Nom",
     "name": "Nom",
     "email": "E-mail",
     "email": "E-mail",
     "role": "Rôle",
     "role": "Rôle",
-    "orgs": "Orgs",
+    "orgs": "Organisations",
     "created": "Créé",
     "created": "Créé",
     "lastSeen": "Dernière connexion",
     "lastSeen": "Dernière connexion",
     "noResults": "Aucun utilisateur ne correspond à votre recherche.",
     "noResults": "Aucun utilisateur ne correspond à votre recherche.",
@@ -117,7 +117,7 @@
     "sendgridApiKeyHint": "Obtenez votre clé API sur app.sendgrid.com"
     "sendgridApiKeyHint": "Obtenez votre clé API sur app.sendgrid.com"
   },
   },
   "common": {
   "common": {
-    "openMenu": "Open menu"
+    "openMenu": "Ouvrir le menu"
   },
   },
   "userDetails": {
   "userDetails": {
     "back": "Retour aux utilisateurs",
     "back": "Retour aux utilisateurs",

+ 1 - 1
messages/fr/billing.json

@@ -85,7 +85,7 @@
     "failedDelete": "Échec de la suppression",
     "failedDelete": "Échec de la suppression",
     "processed": "{count} facture(s) traitée(s)",
     "processed": "{count} facture(s) traitée(s)",
     "failedProcess": "Échec du traitement",
     "failedProcess": "Échec du traitement",
-    "pause": "Pause",
+    "pause": "Mettre en pause",
     "resume": "Reprendre",
     "resume": "Reprendre",
     "delete": "Supprimer",
     "delete": "Supprimer",
     "removeRow": "Supprimer la ligne"
     "removeRow": "Supprimer la ligne"

+ 6 - 6
messages/fr/calendar.json

@@ -80,10 +80,10 @@
   },
   },
   "selectVehicle": "Sélectionner un véhicule pour l’ordre de travail",
   "selectVehicle": "Sélectionner un véhicule pour l’ordre de travail",
   "dateChoice": {
   "dateChoice": {
-    "title": "Work Order Date",
-    "description": "You have {selectedDate} selected. Which date should this work order be for?",
-    "useSelected": "Use {date}",
-    "useToday": "Use today"
+    "title": "Date de l'ordre de travail",
+    "description": "Vous avez sélectionné le {selectedDate}. À quelle date cet ordre de travail doit-il correspondre ?",
+    "useSelected": "Utiliser le {date}",
+    "useToday": "Utiliser aujourd'hui"
   },
   },
   "more": "+ {count} de plus",
   "more": "+ {count} de plus",
   "monthTotal": "{count} événements",
   "monthTotal": "{count} événements",
@@ -144,6 +144,6 @@
       "readOnly": "Créneau occupé venant d'un calendrier connecté. Modifiez-le là-bas, il sera mis à jour ici à la prochaine synchronisation."
       "readOnly": "Créneau occupé venant d'un calendrier connecté. Modifiez-le là-bas, il sera mis à jour ici à la prochaine synchronisation."
     }
     }
   },
   },
-  "previousMonth": "Previous month",
-  "nextMonth": "Next month"
+  "previousMonth": "Mois précédent",
+  "nextMonth": "Mois suivant"
 }
 }

+ 1 - 1
messages/fr/customers.json

@@ -27,7 +27,7 @@
     "batchDeleteTitle": "Supprimer les clients",
     "batchDeleteTitle": "Supprimer les clients",
     "batchDeleteDescription": "Supprimer {count} client(s) ? Cela dissociera leurs véhicules.",
     "batchDeleteDescription": "Supprimer {count} client(s) ? Cela dissociera leurs véhicules.",
     "batchDeleteSuccess": "{count} client(s) supprimé(s)",
     "batchDeleteSuccess": "{count} client(s) supprimé(s)",
-    "openMenu": "Open menu"
+    "openMenu": "Ouvrir le menu"
   },
   },
   "detail": {
   "detail": {
     "backToCustomers": "Retour aux clients",
     "backToCustomers": "Retour aux clients",

+ 7 - 7
messages/fr/dashboard.json

@@ -65,7 +65,7 @@
     "description": "Basé sur l’historique d’entretien et le kilométrage quotidien estimé",
     "description": "Basé sur l’historique d’entretien et le kilométrage quotidien estimé",
     "overdue": "En retard",
     "overdue": "En retard",
     "approaching": "Imminent",
     "approaching": "Imminent",
-    "estimated": "Est. {mileage} {unit}",
+    "estimated": "Env. {mileage} {unit}",
     "sinceLastService": "{mileage} {unit} depuis le dernier entretien",
     "sinceLastService": "{mileage} {unit} depuis le dernier entretien",
     "certainty": "{percent} % de certitude",
     "certainty": "{percent} % de certitude",
     "active": "Actifs",
     "active": "Actifs",
@@ -74,8 +74,8 @@
     "noDismissed": "Aucun véhicule ignoré.",
     "noDismissed": "Aucun véhicule ignoré.",
     "dismissedOn": "Ignoré le {date}",
     "dismissedOn": "Ignoré le {date}",
     "restore": "Restaurer",
     "restore": "Restaurer",
-    "settingsAriaLabel": "Maintenance settings",
-    "dismissAriaLabel": "Dismiss"
+    "settingsAriaLabel": "Paramètres de maintenance",
+    "dismissAriaLabel": "Ignorer"
   },
   },
   "reminders": {
   "reminders": {
     "title": "Rappels à venir",
     "title": "Rappels à venir",
@@ -112,7 +112,7 @@
     "createQuote": "Créer un devis",
     "createQuote": "Créer un devis",
     "itemsRequested": "{count, plural, one {# élément demandé} other {# éléments demandés}}",
     "itemsRequested": "{count, plural, one {# élément demandé} other {# éléments demandés}}",
     "noData": "Aucune demande de devis en attente.",
     "noData": "Aucune demande de devis en attente.",
-    "dismissAriaLabel": "Dismiss quote request"
+    "dismissAriaLabel": "Ignorer la demande de devis"
   },
   },
   "quoteResponses": {
   "quoteResponses": {
     "title": "Réponses des clients aux devis",
     "title": "Réponses des clients aux devis",
@@ -120,11 +120,11 @@
     "accepted": "Accepté",
     "accepted": "Accepté",
     "changesRequested": "Modifications demandées",
     "changesRequested": "Modifications demandées",
     "convertToWorkOrder": "Convertir en ordre de travail",
     "convertToWorkOrder": "Convertir en ordre de travail",
-    "convert": "Convert",
+    "convert": "Convertir",
     "viewQuote": "Voir le devis",
     "viewQuote": "Voir le devis",
-    "view": "View",
+    "view": "Voir",
     "noData": "Aucune réponse client.",
     "noData": "Aucune réponse client.",
-    "dismissAriaLabel": "Dismiss response"
+    "dismissAriaLabel": "Ignorer la réponse"
   },
   },
   "recentCompleted": {
   "recentCompleted": {
     "title": "Terminés récemment",
     "title": "Terminés récemment",

+ 17 - 17
messages/fr/documentLock.json

@@ -1,27 +1,27 @@
 {
 {
   "lockedTitle": {
   "lockedTitle": {
     "invoice": {
     "invoice": {
-      "sent": "This invoice is locked because it has been sent",
-      "paid": "This invoice is locked because it has been paid"
+      "sent": "Cette facture est verrouillée car elle a été envoyée",
+      "paid": "Cette facture est verrouillée car elle a été payée"
     },
     },
     "quote": {
     "quote": {
-      "sent": "This quote is locked because it has been sent",
-      "accepted": "This quote is locked because it has been accepted"
+      "sent": "Ce devis est verrouillé car il a été envoyé",
+      "accepted": "Ce devis est verrouillé car il a été accepté"
     }
     }
   },
   },
-  "lockedBody": "Its parts, labour, prices, discount, tax, number and date can no longer be changed. Payments, status changes, sending and attachments all still work.",
-  "lockedAdminHint": "As an owner or admin you can unlock it if something genuinely needs correcting. The unlock is recorded in the audit log.",
-  "lockedMemberHint": "Ask an owner or admin to unlock it if something needs correcting.",
-  "unlock": "Unlock for editing",
-  "relock": "Lock again",
-  "unlockConfirmTitle": "Unlock this document?",
+  "lockedBody": "Ses pièces, sa main-d'œuvre, ses prix, sa remise, sa taxe, son numéro et sa date ne peuvent plus être modifiés. Les paiements, les changements de statut, l'envoi et les pièces jointes restent possibles.",
+  "lockedAdminHint": "En tant que propriétaire ou administrateur, vous pouvez le déverrouiller si une correction est vraiment nécessaire. Le déverrouillage est consigné dans le journal d'audit.",
+  "lockedMemberHint": "Demandez à un propriétaire ou à un administrateur de le déverrouiller si une correction est nécessaire.",
+  "unlock": "Déverrouiller pour modifier",
+  "relock": "Verrouiller à nouveau",
+  "unlockConfirmTitle": "Déverrouiller ce document ?",
   "unlockConfirmDescription": {
   "unlockConfirmDescription": {
-    "invoice": "It will become editable again, and the change will be recorded in the audit log with your name. Prefer a credit note where your local rules require one.",
-    "quote": "It will become editable again, and the change will be recorded in the audit log with your name."
+    "invoice": "Il redeviendra modifiable, et le changement sera consigné dans le journal d'audit avec votre nom. Préférez un avoir lorsque la réglementation locale l'exige.",
+    "quote": "Il redeviendra modifiable, et le changement sera consigné dans le journal d'audit avec votre nom."
   },
   },
-  "unlocked": "Unlocked for editing",
-  "relocked": "Locked again",
-  "reopenedTitle": "This document has been unlocked for editing",
-  "reopenedBody": "It stays editable until it is locked again.",
-  "failed": "Could not change the lock"
+  "unlocked": "Déverrouillé pour modification",
+  "relocked": "Verrouillé à nouveau",
+  "reopenedTitle": "Ce document a été déverrouillé pour modification",
+  "reopenedBody": "Il reste modifiable jusqu'à ce qu'il soit à nouveau verrouillé.",
+  "failed": "Impossible de modifier le verrouillage"
 }
 }

+ 94 - 94
messages/fr/integrations.json

@@ -40,19 +40,19 @@
       "conference": "Liens d'appel vidéo"
       "conference": "Liens d'appel vidéo"
     },
     },
     "sms": {
     "sms": {
-      "send": "Text messages out",
-      "receive": "Replies back in"
+      "send": "SMS sortants",
+      "receive": "Réponses entrantes"
     },
     },
     "whatsapp": {
     "whatsapp": {
-      "send": "WhatsApp messages out",
-      "receive": "Replies back in"
+      "send": "Messages WhatsApp sortants",
+      "receive": "Réponses entrantes"
     },
     },
     "telegram": {
     "telegram": {
-      "send": "Telegram messages out",
-      "receive": "Replies back in"
+      "send": "Messages Telegram sortants",
+      "receive": "Réponses entrantes"
     },
     },
     "email": {
     "email": {
-      "send": "Email out"
+      "send": "E-mails sortants"
     },
     },
     "vehicle": {
     "vehicle": {
       "lookup": "Recherche par plaque et VIN",
       "lookup": "Recherche par plaque et VIN",
@@ -131,19 +131,19 @@
     "lockedAi": "Connectez un fournisseur d'IA pour utiliser les fonctions d'IA dans votre atelier.",
     "lockedAi": "Connectez un fournisseur d'IA pour utiliser les fonctions d'IA dans votre atelier.",
     "ownAppTitle": "Cette installation utilise votre propre application auprès du fournisseur",
     "ownAppTitle": "Cette installation utilise votre propre application auprès du fournisseur",
     "redirectUri": "URI de redirection à enregistrer auprès du fournisseur :",
     "redirectUri": "URI de redirection à enregistrer auprès du fournisseur :",
-    "sendTestEmail": "Send test email",
-    "testEmailSent": "Test email sent to {email}",
-    "testEmailHint": "A test email goes to your own address through this vendor, which proves the from address and the sending rules a key check cannot.",
-    "inboundUrl": "Inbound webhook URL",
-    "inboundHintSecret": "Paste this URL into the vendor's inbound message settings. It carries a secret that identifies your workshop, so keep it private.",
-    "inboundHintMeta": "Paste this URL as the callback URL in your Meta app, with the verify token you entered above, and subscribe to messages.",
+    "sendTestEmail": "Envoyer un e-mail de test",
+    "testEmailSent": "E-mail de test envoyé à {email}",
+    "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.",
+    "inboundUrl": "URL du webhook entrant",
+    "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.",
+    "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.",
     "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.",
     "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.",
     "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.",
     "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.",
     "inboundHintPaypal": "Ajoutez cette URL dans le tableau de bord développeur PayPal sous Webhooks, abonnée à PAYMENT.CAPTURE.COMPLETED.",
     "inboundHintPaypal": "Ajoutez cette URL dans le tableau de bord développeur PayPal sous Webhooks, abonnée à PAYMENT.CAPTURE.COMPLETED.",
-    "copy": "Copy",
-    "copied": "Copied",
-    "updateKeys": "Update keys",
-    "updateKeysHint": "The last check failed. Enter the keys again to try once more.",
+    "copy": "Copier",
+    "copied": "Copié",
+    "updateKeys": "Mettre à jour les clés",
+    "updateKeysHint": "La dernière vérification a échoué. Saisissez à nouveau les clés pour réessayer.",
     "inspectionSync": {
     "inspectionSync": {
       "title": "Synchronisation des contrôles",
       "title": "Synchronisation des contrôles",
       "vehicles": "{count} véhicules avec plaque dans cet atelier",
       "vehicles": "{count} véhicules avec plaque dans cet atelier",
@@ -256,155 +256,155 @@
       }
       }
     },
     },
     "twilio-sms": {
     "twilio-sms": {
-      "description": "Send and receive text messages through a Twilio number. Reminders, ready-for-pickup messages and the replies that come back.",
+      "description": "Envoyez et recevez des SMS via un numéro Twilio. Rappels, messages « prêt à récupérer » et les réponses qui reviennent.",
       "fields": {
       "fields": {
         "accountSid": "Account SID",
         "accountSid": "Account SID",
-        "authToken": "Auth token"
+        "authToken": "Jeton d'authentification"
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Envoyer depuis ce numéro"
       }
       }
     },
     },
     "vonage-sms": {
     "vonage-sms": {
-      "description": "Send and receive text messages through a Vonage number.",
+      "description": "Envoyez et recevez des SMS via un numéro Vonage.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "apiSecret": "API secret",
-        "signatureSecret": "Signature secret",
-        "signatureSecretHelp": "From the Vonage dashboard, under API settings. When set, inbound messages are only accepted when Vonage signed them. Without it, only the secret in the webhook URL is checked."
+        "apiKey": "Clé API",
+        "apiSecret": "Secret API",
+        "signatureSecret": "Secret de signature",
+        "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é."
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Envoyer depuis ce numéro"
       }
       }
     },
     },
     "telnyx-sms": {
     "telnyx-sms": {
-      "description": "Send and receive text messages through a Telnyx number.",
+      "description": "Envoyez et recevez des SMS via un numéro Telnyx.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "webhookPublicKey": "Webhook public key",
-        "webhookPublicKeyHelp": "From the Telnyx portal, under Account settings, Keys and credentials, Public key. When set, inbound messages are only accepted when Telnyx signed them. Without it, only the secret in the webhook URL is checked."
+        "apiKey": "Clé API",
+        "webhookPublicKey": "Clé publique du webhook",
+        "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é."
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Envoyer depuis ce numéro"
       }
       }
     },
     },
     "whatsapp-meta": {
     "whatsapp-meta": {
-      "description": "Message customers on WhatsApp through Meta directly. Photos of what you found, and the conversation that follows.",
+      "description": "Écrivez à vos clients sur WhatsApp directement via Meta. Les photos de ce que vous avez trouvé, et la conversation qui suit.",
       "fields": {
       "fields": {
-        "phoneNumberId": "Phone number ID",
-        "accessToken": "Access token",
-        "verifyToken": "Webhook verify token",
-        "appSecret": "App secret",
-        "apiVersion": "Graph API version",
-        "appSecretHelp": "Meta signs every delivery with it. Until it is entered, messages posted to the webhook are refused, since anyone who learns the URL could otherwise post as your customers."
+        "phoneNumberId": "ID du numéro de téléphone",
+        "accessToken": "Jeton d'accès",
+        "verifyToken": "Jeton de vérification du webhook",
+        "appSecret": "Secret de l'application",
+        "apiVersion": "Version de la Graph API",
+        "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."
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "phoneNumber": "Send from this number",
-        "templateName": "Template for reopening a conversation",
-        "templateLanguage": "Template language",
-        "templateVariables": "Template values, in order",
-        "mediaTemplateName": "Template for a message with a photo",
-        "mediaTemplateLanguage": "Photo template language",
-        "mediaTemplateVariables": "Photo template values, in order"
+        "enabled": "Envoyer des messages sur ce canal",
+        "phoneNumber": "Envoyer depuis ce numéro",
+        "templateName": "Modèle pour rouvrir une conversation",
+        "templateLanguage": "Langue du modèle",
+        "templateVariables": "Valeurs du modèle, dans l'ordre",
+        "mediaTemplateName": "Modèle pour un message avec photo",
+        "mediaTemplateLanguage": "Langue du modèle avec photo",
+        "mediaTemplateVariables": "Valeurs du modèle avec photo, dans l'ordre"
       }
       }
     },
     },
     "whatsapp-twilio": {
     "whatsapp-twilio": {
-      "description": "Message customers on WhatsApp through a Twilio number, if Twilio is who sold you one.",
+      "description": "Écrivez à vos clients sur WhatsApp via un numéro Twilio, si c'est Twilio qui vous l'a fourni.",
       "fields": {
       "fields": {
         "accountSid": "Account SID",
         "accountSid": "Account SID",
-        "authToken": "Auth token",
-        "messagingServiceSid": "Messaging service SID"
+        "authToken": "Jeton d'authentification",
+        "messagingServiceSid": "SID du service de messagerie"
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "phoneNumber": "Send from this number",
-        "templateName": "Template for reopening a conversation",
-        "templateLanguage": "Template language",
-        "templateVariables": "Template values, in order",
-        "mediaTemplateName": "Template for a message with a photo",
-        "mediaTemplateLanguage": "Photo template language",
-        "mediaTemplateVariables": "Photo template values, in order"
+        "enabled": "Envoyer des messages sur ce canal",
+        "phoneNumber": "Envoyer depuis ce numéro",
+        "templateName": "Modèle pour rouvrir une conversation",
+        "templateLanguage": "Langue du modèle",
+        "templateVariables": "Valeurs du modèle, dans l'ordre",
+        "mediaTemplateName": "Modèle pour un message avec photo",
+        "mediaTemplateLanguage": "Langue du modèle avec photo",
+        "mediaTemplateVariables": "Valeurs du modèle avec photo, dans l'ordre"
       }
       }
     },
     },
     "telegram": {
     "telegram": {
-      "description": "A Telegram bot that reaches customers who use it, and brings their replies into the inbox.",
+      "description": "Un bot Telegram qui joint les clients qui l'utilisent et ramène leurs réponses dans la messagerie.",
       "fields": {
       "fields": {
-        "botToken": "Bot token"
+        "botToken": "Jeton du bot"
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "botUsername": "Bot username"
+        "enabled": "Envoyer des messages sur ce canal",
+        "botUsername": "Nom d'utilisateur du bot"
       }
       }
     },
     },
     "smtp": {
     "smtp": {
-      "description": "Send invoices and reminders through your own mail server, rather than the platform mail.",
+      "description": "Envoyez factures et rappels via votre propre serveur de messagerie, plutôt que par la messagerie de la plateforme.",
       "fields": {
       "fields": {
-        "host": "Server",
+        "host": "Serveur",
         "port": "Port",
         "port": "Port",
-        "user": "Username",
-        "pass": "Password"
+        "user": "Nom d'utilisateur",
+        "pass": "Mot de passe"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender",
-        "secure": "Connect over TLS from the start",
-        "requireTls": "Require the server to upgrade to TLS",
-        "rejectUnauthorized": "Reject a certificate that does not check out"
+        "fromEmail": "Envoyer depuis cette adresse",
+        "fromName": "Nom affiché comme expéditeur",
+        "secure": "Se connecter en TLS dès le départ",
+        "requireTls": "Exiger que le serveur passe en TLS",
+        "rejectUnauthorized": "Refuser un certificat qui n'est pas valide"
       }
       }
     },
     },
     "resend": {
     "resend": {
-      "description": "Send invoices and reminders through Resend.",
+      "description": "Envoyez factures et rappels via Resend.",
       "fields": {
       "fields": {
-        "apiKey": "API key"
+        "apiKey": "Clé API"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Envoyer depuis cette adresse",
+        "fromName": "Nom affiché comme expéditeur"
       }
       }
     },
     },
     "postmark": {
     "postmark": {
-      "description": "Send invoices and reminders through Postmark.",
+      "description": "Envoyez factures et rappels via Postmark.",
       "fields": {
       "fields": {
-        "apiKey": "Server token"
+        "apiKey": "Jeton du serveur"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Envoyer depuis cette adresse",
+        "fromName": "Nom affiché comme expéditeur"
       }
       }
     },
     },
     "mailgun": {
     "mailgun": {
-      "description": "Send invoices and reminders through Mailgun.",
+      "description": "Envoyez factures et rappels via Mailgun.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "domain": "Sending domain"
+        "apiKey": "Clé API",
+        "domain": "Domaine d'envoi"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender",
-        "region": "Region the domain is in"
+        "fromEmail": "Envoyer depuis cette adresse",
+        "fromName": "Nom affiché comme expéditeur",
+        "region": "Région du domaine"
       }
       }
     },
     },
     "sendgrid": {
     "sendgrid": {
-      "description": "Send invoices and reminders through SendGrid.",
+      "description": "Envoyez factures et rappels via SendGrid.",
       "fields": {
       "fields": {
-        "apiKey": "API key"
+        "apiKey": "Clé API"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Envoyer depuis cette adresse",
+        "fromName": "Nom affiché comme expéditeur"
       }
       }
     },
     },
     "amazon-ses": {
     "amazon-ses": {
-      "description": "Send invoices and reminders through Amazon SES.",
+      "description": "Envoyez factures et rappels via Amazon SES.",
       "fields": {
       "fields": {
-        "accessKeyId": "Access key ID",
-        "secretAccessKey": "Secret access key",
-        "region": "Region"
+        "accessKeyId": "ID de clé d'accès",
+        "secretAccessKey": "Clé d'accès secrète",
+        "region": "Région"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Envoyer depuis cette adresse",
+        "fromName": "Nom affiché comme expéditeur"
       }
       }
     },
     },
     "vegvesen": {
     "vegvesen": {

+ 2 - 2
messages/fr/inventory.json

@@ -76,7 +76,7 @@
     "editPart": "Modifier la pièce",
     "editPart": "Modifier la pièce",
     "addNewPart": "Ajouter une nouvelle pièce",
     "addNewPart": "Ajouter une nouvelle pièce",
     "supplierLink": "Lien fournisseur",
     "supplierLink": "Lien fournisseur",
-    "supplierLinkPlaceholder": "https://supplier.com/product/...",
+    "supplierLinkPlaceholder": "https://fournisseur.com/produit/...",
     "fetch": "Récupérer",
     "fetch": "Récupérer",
     "fetchFailed": "Échec de la récupération",
     "fetchFailed": "Échec de la récupération",
     "fetchError": "Impossible de récupérer les métadonnées de l'URL",
     "fetchError": "Impossible de récupérer les métadonnées de l'URL",
@@ -131,7 +131,7 @@
     "saveChanges": "Enregistrer les modifications",
     "saveChanges": "Enregistrer les modifications",
     "addPart": "Ajouter une pièce"
     "addPart": "Ajouter une pièce"
   },
   },
-  "openMenu": "Open menu",
+  "openMenu": "Ouvrir le menu",
   "history": {
   "history": {
     "title": "Historique du stock",
     "title": "Historique du stock",
     "description": "Toutes les modifications enregistrées de {name}, les plus récentes d'abord.",
     "description": "Toutes les modifications enregistrées de {name}, les plus récentes d'abord.",

+ 6 - 6
messages/fr/laborPresets.json

@@ -16,7 +16,7 @@
   "actions": {
   "actions": {
     "edit": "Modifier",
     "edit": "Modifier",
     "delete": "Supprimer",
     "delete": "Supprimer",
-    "openMenu": "Open menu"
+    "openMenu": "Ouvrir le menu"
   },
   },
   "deletePreset": {
   "deletePreset": {
     "title": "Supprimer le modèle de main-d'œuvre",
     "title": "Supprimer le modèle de main-d'œuvre",
@@ -43,10 +43,10 @@
     "cancel": "Annuler",
     "cancel": "Annuler",
     "create": "Créer",
     "create": "Créer",
     "saveChanges": "Enregistrer les modifications",
     "saveChanges": "Enregistrer les modifications",
-    "itemQty": "Qty",
-    "itemQtyOrHours": "Unit / Hours",
-    "hourlyTag": "HR",
-    "serviceTag": "SVC",
+    "itemQty": "Qté",
+    "itemQtyOrHours": "Unité / Heures",
+    "hourlyTag": "H",
+    "serviceTag": "SERV",
     "partsTitle": "Pièces",
     "partsTitle": "Pièces",
     "addPart": "Ajouter une pièce",
     "addPart": "Ajouter une pièce",
     "partName": "Nom de la pièce",
     "partName": "Nom de la pièce",
@@ -63,7 +63,7 @@
     "noPackages": "Aucun modèle de main-d'œuvre trouvé.",
     "noPackages": "Aucun modèle de main-d'œuvre trouvé.",
     "items": "{count} éléments",
     "items": "{count} éléments",
     "totalHours": "{hours}h au total",
     "totalHours": "{hours}h au total",
-    "totalUnits": "{units} unit(s)",
+    "totalUnits": "{units} unité(s)",
     "totalParts": "{count} pièces"
     "totalParts": "{count} pièces"
   },
   },
   "errors": {
   "errors": {

+ 3 - 3
messages/fr/messages.json

@@ -30,8 +30,8 @@
     "deleteDescription": "Tous les messages avec {name} seront définitivement supprimés. Cette action est irréversible.",
     "deleteDescription": "Tous les messages avec {name} seront définitivement supprimés. Cette action est irréversible.",
     "deleted": "Conversation supprimée",
     "deleted": "Conversation supprimée",
     "deleteError": "Impossible de supprimer la conversation",
     "deleteError": "Impossible de supprimer la conversation",
-    "back": "Back",
-    "conversationMenu": "Conversation menu",
+    "back": "Retour",
+    "conversationMenu": "Menu de la conversation",
     "searchPlaceholder": "Rechercher des conversations",
     "searchPlaceholder": "Rechercher des conversations",
     "noSearchResults": "Aucune conversation ne correspond à la recherche",
     "noSearchResults": "Aucune conversation ne correspond à la recherche",
     "now": "maintenant"
     "now": "maintenant"
@@ -47,7 +47,7 @@
     "messageDeleted": "Message supprimé",
     "messageDeleted": "Message supprimé",
     "deleteError": "Impossible de supprimer le message",
     "deleteError": "Impossible de supprimer le message",
     "sendError": "Impossible d'envoyer le SMS",
     "sendError": "Impossible d'envoyer le SMS",
-    "sendMessage": "Send message"
+    "sendMessage": "Envoyer le message"
   },
   },
   "sendDialog": {
   "sendDialog": {
     "send": "Envoyer {label}",
     "send": "Envoyer {label}",

+ 1 - 1
messages/fr/navigation.json

@@ -112,7 +112,7 @@
     "reports": "Rapports",
     "reports": "Rapports",
     "timesheets": "Feuilles de temps",
     "timesheets": "Feuilles de temps",
     "settings": "Paramètres",
     "settings": "Paramètres",
-    "superAdmin": "Super Admin",
+    "superAdmin": "Super administrateur",
     "adminPanel": "Panneau d'administration",
     "adminPanel": "Panneau d'administration",
     "organizations": "Organisations",
     "organizations": "Organisations",
     "noOrganization": "Aucune organisation",
     "noOrganization": "Aucune organisation",

+ 1 - 1
messages/fr/notifications.json

@@ -7,5 +7,5 @@
     "delete": "Supprimer",
     "delete": "Supprimer",
     "cancel": "Annuler"
     "cancel": "Annuler"
   },
   },
-  "openNotifications": "Open notifications"
+  "openNotifications": "Ouvrir les notifications"
 }
 }

+ 2 - 2
messages/fr/quotes.json

@@ -94,8 +94,8 @@
     "addService": "Ajouter une prestation",
     "addService": "Ajouter une prestation",
     "qty": "Qté",
     "qty": "Qté",
     "qtyOrHours": "Unité / Heures",
     "qtyOrHours": "Unité / Heures",
-    "hourlyTag": "HR",
-    "serviceTag": "SVC",
+    "hourlyTag": "H",
+    "serviceTag": "SERV",
     "switchToHourlyHint": "À l'heure : facturé selon les heures travaillées (heures × taux/h). Cliquez pour changer.",
     "switchToHourlyHint": "À l'heure : facturé selon les heures travaillées (heures × taux/h). Cliquez pour changer.",
     "switchToServiceHint": "Forfait : facturé au prix fixe par unité. Cliquez pour changer.",
     "switchToServiceHint": "Forfait : facturé au prix fixe par unité. Cliquez pour changer.",
     "deleteRow": "Supprimer la ligne",
     "deleteRow": "Supprimer la ligne",

+ 1 - 1
messages/fr/reminders.json

@@ -8,7 +8,7 @@
   "searchVehicle": "Rechercher des véhicules...",
   "searchVehicle": "Rechercher des véhicules...",
   "noVehicle": "Aucun véhicule trouvé.",
   "noVehicle": "Aucun véhicule trouvé.",
   "pickDate": "Choisir une date",
   "pickDate": "Choisir une date",
-  "openMenu": "Open menu",
+  "openMenu": "Ouvrir le menu",
   "relatesTo": "Concerne (optionnel)",
   "relatesTo": "Concerne (optionnel)",
   "selectCustomer": "Client (optionnel)",
   "selectCustomer": "Client (optionnel)",
   "noneOption": "Aucun",
   "noneOption": "Aucun",

+ 83 - 83
messages/fr/reports.json

@@ -329,94 +329,94 @@
     "jobsClocked": "Travaux pointés"
     "jobsClocked": "Travaux pointés"
   },
   },
   "pdf": {
   "pdf": {
-    "reportTitle": "Business Report",
-    "revenueSection": "Revenue Report",
-    "taxSection": "Tax Report",
-    "pastDueSection": "Past Due Invoices",
-    "servicesSection": "Services Report",
-    "customersSection": "Customers Report",
-    "techniciansSection": "Technicians Report",
-    "partsSection": "Parts Usage Report",
-    "jobAnalyticsSection": "Job Analytics",
-    "retentionSection": "Customer Retention",
-    "inventorySection": "Inventory Report",
+    "reportTitle": "Rapport d'Activité",
+    "revenueSection": "Rapport des Revenus",
+    "taxSection": "Rapport des Taxes",
+    "pastDueSection": "Factures en Retard",
+    "servicesSection": "Rapport des Services",
+    "customersSection": "Rapport des Clients",
+    "techniciansSection": "Rapport des Techniciens",
+    "partsSection": "Rapport d'Utilisation des Pièces",
+    "jobAnalyticsSection": "Analyse des Travaux",
+    "retentionSection": "Fidélisation des Clients",
+    "inventorySection": "Rapport d'Inventaire",
     "monthlyBreakdown": "Répartition Mensuelle",
     "monthlyBreakdown": "Répartition Mensuelle",
-    "revenueByType": "Revenue by Type",
-    "taxByRate": "Tax by Rate",
-    "servicesByStatus": "By Status",
-    "servicesByType": "By Type",
-    "topCustomers": "Top Customers",
-    "topServiceTypes": "Top Service Types",
-    "topReturning": "Top Returning Customers",
-    "dayOfWeek": "Jobs by Day of Week",
-    "monthlyTrend": "Monthly Trend",
-    "lowStock": "Low Stock Items",
-    "revenue": "Revenue",
-    "collected": "Collected",
-    "outstanding": "Outstanding",
+    "revenueByType": "Revenus par Type",
+    "taxByRate": "Taxe par Taux",
+    "servicesByStatus": "Par Statut",
+    "servicesByType": "Par Type",
+    "topCustomers": "Meilleurs Clients",
+    "topServiceTypes": "Principaux Types de Service",
+    "topReturning": "Meilleurs Clients Récurrents",
+    "dayOfWeek": "Travaux par Jour de la Semaine",
+    "monthlyTrend": "Tendance Mensuelle",
+    "lowStock": "Articles en Stock Bas",
+    "revenue": "Revenus",
+    "collected": "Encaissé",
+    "outstanding": "En attente",
     "services": "Services",
     "services": "Services",
-    "partsCost": "Parts Cost",
+    "partsCost": "Coût des Pièces",
     "partsNetProfit": "Bénéfice Net Pièces",
     "partsNetProfit": "Bénéfice Net Pièces",
     "laborRevenue": "Main-d'œuvre",
     "laborRevenue": "Main-d'œuvre",
-    "netProfit": "Net Profit",
-    "month": "Month",
-    "count": "Count",
+    "netProfit": "Bénéfice Net",
+    "month": "Mois",
+    "count": "Nombre",
     "type": "Type",
     "type": "Type",
-    "status": "Status",
-    "name": "Name",
-    "company": "Company",
-    "totalSpent": "Total Spent",
-    "customer": "Customer",
-    "invoiceNumber": "Invoice #",
-    "totalAmount": "Total Amount",
-    "amountDue": "Amount Due",
-    "dueDate": "Due Date",
-    "daysPastDue": "Days Past Due",
-    "totalPastDue": "Total Past Due",
-    "totalAmountDue": "Total Amount Due",
-    "over30": "Over 30 Days",
-    "over60": "Over 60 Days",
-    "over90": "Over 90 Days",
-    "taxCollected": "Tax Collected",
-    "taxableAmount": "Taxable Amount",
-    "taxRate": "Tax Rate",
-    "invoiceCount": "Invoice Count",
-    "invoices": "Invoices",
-    "totalServices": "Total Services",
-    "totalCustomers": "Total Customers",
-    "activeCustomers": "Active Customers",
-    "technician": "Technician",
-    "jobs": "Jobs",
-    "totalRevenue": "Total Revenue",
-    "avgRevenue": "Avg Revenue",
-    "totalHours": "Total Hours",
-    "avgHours": "Avg Hours",
-    "totalJobs": "Total Jobs",
-    "partName": "Part Name",
-    "partNumber": "Part #",
-    "usageCount": "Usage Count",
-    "totalQty": "Total Qty",
-    "totalPartsRevenue": "Parts Revenue",
+    "status": "Statut",
+    "name": "Nom",
+    "company": "Entreprise",
+    "totalSpent": "Total Dépensé",
+    "customer": "Client",
+    "invoiceNumber": "N° Facture",
+    "totalAmount": "Montant Total",
+    "amountDue": "Montant Dû",
+    "dueDate": "Date d'Échéance",
+    "daysPastDue": "Jours de Retard",
+    "totalPastDue": "Total en Retard",
+    "totalAmountDue": "Montant Total Dû",
+    "over30": "Plus de 30 Jours",
+    "over60": "Plus de 60 Jours",
+    "over90": "Plus de 90 Jours",
+    "taxCollected": "Taxe Perçue",
+    "taxableAmount": "Montant Taxable",
+    "taxRate": "Taux de Taxe",
+    "invoiceCount": "Nombre de Factures",
+    "invoices": "Factures",
+    "totalServices": "Total des Services",
+    "totalCustomers": "Total des Clients",
+    "activeCustomers": "Clients Actifs",
+    "technician": "Technicien",
+    "jobs": "Travaux",
+    "totalRevenue": "Revenus Totaux",
+    "avgRevenue": "Revenus Moy.",
+    "totalHours": "Heures Totales",
+    "avgHours": "Heures Moy.",
+    "totalJobs": "Total Travaux",
+    "partName": "Nom de Pièce",
+    "partNumber": "N° Pièce",
+    "usageCount": "Nombre d'Utilisations",
+    "totalQty": "Qté Totale",
+    "totalPartsRevenue": "Revenus Pièces",
     "totalPartsCost": "Coût des Pièces",
     "totalPartsCost": "Coût des Pièces",
     "totalPartsNetProfit": "Bénéfice Net",
     "totalPartsNetProfit": "Bénéfice Net",
-    "totalPartsUsed": "Parts Used",
-    "serviceType": "Service Type",
-    "avgValue": "Avg Value",
-    "avgJobValue": "Avg Job Value",
-    "returningCustomers": "Returning",
-    "newCustomers": "New",
-    "totalActive": "Total Active",
-    "avgTimeBetweenVisits": "Avg Days Between Visits",
-    "avgDaysBetweenVisits": "Avg Days",
-    "visits": "Visits",
-    "days": "days",
-    "totalParts": "Total Parts",
-    "totalItems": "Total Items",
-    "totalValue": "Total Value",
-    "totalSellValue": "Sell Value",
-    "quantity": "Qty",
-    "minQuantity": "Min Qty",
-    "unitCost": "Unit Cost",
+    "totalPartsUsed": "Pièces Utilisées",
+    "serviceType": "Type de Service",
+    "avgValue": "Valeur Moy.",
+    "avgJobValue": "Valeur Moy. du Travail",
+    "returningCustomers": "Récurrents",
+    "newCustomers": "Nouveaux",
+    "totalActive": "Total Actifs",
+    "avgTimeBetweenVisits": "Moy. Jours Entre Visites",
+    "avgDaysBetweenVisits": "Moy. Jours",
+    "visits": "Visites",
+    "days": "jours",
+    "totalParts": "Total des Pièces",
+    "totalItems": "Total des Articles",
+    "totalValue": "Valeur Totale",
+    "totalSellValue": "Valeur de Vente",
+    "quantity": "Qté",
+    "minQuantity": "Qté Min.",
+    "unitCost": "Coût Unitaire",
     "vehiclesSection": "Rapport Véhicule",
     "vehiclesSection": "Rapport Véhicule",
     "vehicleLabel": "Véhicule",
     "vehicleLabel": "Véhicule",
     "totalCost": "Coût Total",
     "totalCost": "Coût Total",
@@ -427,7 +427,7 @@
   },
   },
   "empty": "Aucune donnée chargée. Cliquez sur Actualiser pour charger le rapport.",
   "empty": "Aucune donnée chargée. Cliquez sur Actualiser pour charger le rapport.",
   "pagination": {
   "pagination": {
-    "previousPage": "Previous page",
-    "nextPage": "Next page"
+    "previousPage": "Page précédente",
+    "nextPage": "Page suivante"
   }
   }
 }
 }

+ 2 - 2
messages/fr/service.json

@@ -157,8 +157,8 @@
     "addExisting": "Voir existantes ({count})",
     "addExisting": "Voir existantes ({count})",
     "qty": "Qté",
     "qty": "Qté",
     "qtyOrHours": "Unité / Heures",
     "qtyOrHours": "Unité / Heures",
-    "hourlyTag": "HR",
-    "serviceTag": "SVC",
+    "hourlyTag": "H",
+    "serviceTag": "SERV",
     "switchToHourlyHint": "À l'heure : facturé selon les heures travaillées (heures × taux/h). Cliquez pour changer.",
     "switchToHourlyHint": "À l'heure : facturé selon les heures travaillées (heures × taux/h). Cliquez pour changer.",
     "switchToServiceHint": "Forfait : facturé au prix fixe par unité. Cliquez pour changer.",
     "switchToServiceHint": "Forfait : facturé au prix fixe par unité. Cliquez pour changer.",
     "deleteRow": "Supprimer la ligne",
     "deleteRow": "Supprimer la ligne",

+ 18 - 18
messages/fr/settings.json

@@ -3,7 +3,7 @@
   "subtitle": "Gerez votre atelier, factures et preferences",
   "subtitle": "Gerez votre atelier, factures et preferences",
   "nav": {
   "nav": {
     "categories": {
     "categories": {
-      "general": "General",
+      "general": "Général",
       "billing": "Facturation et documents",
       "billing": "Facturation et documents",
       "communications": "Communications",
       "communications": "Communications",
       "workshop": "Atelier",
       "workshop": "Atelier",
@@ -65,7 +65,7 @@
       },
       },
       "telegram": {
       "telegram": {
         "title": "Telegram",
         "title": "Telegram",
-        "description": "Telegram bot & messaging"
+        "description": "Bot Telegram et messagerie"
       },
       },
       "customerPortal": {
       "customerPortal": {
         "title": "Portail client",
         "title": "Portail client",
@@ -84,7 +84,7 @@
         "description": "Intervalles de service predits"
         "description": "Intervalles de service predits"
       },
       },
       "ai": {
       "ai": {
-        "title": "AI",
+        "title": "IA",
         "description": "Fournisseur IA et fonctionnalités"
         "description": "Fournisseur IA et fonctionnalités"
       },
       },
       "reportSchedule": {
       "reportSchedule": {
@@ -262,7 +262,7 @@
     "backupCodesTitle": "Sauvegarder les codes de secours",
     "backupCodesTitle": "Sauvegarder les codes de secours",
     "backupCodesDescription": "Conservez ces codes dans un endroit sur. Vous pouvez les utiliser pour vous connecter si vous perdez l'accès a votre application d'authentification. Chaque code ne peut être utilise qu'une seule fois.",
     "backupCodesDescription": "Conservez ces codes dans un endroit sur. Vous pouvez les utiliser pour vous connecter si vous perdez l'accès a votre application d'authentification. Chaque code ne peut être utilise qu'une seule fois.",
     "copyCodes": "Copier les codes",
     "copyCodes": "Copier les codes",
-    "copied": "Copie",
+    "copied": "Copié",
     "backupCodesCopied": "Codes de secours copies dans le presse-papiers",
     "backupCodesCopied": "Codes de secours copies dans le presse-papiers",
     "savedBackupCodes": "J'ai sauvegarde mes codes de secours",
     "savedBackupCodes": "J'ai sauvegarde mes codes de secours",
     "twoFactorEnabledSuccess": "Authentification a deux facteurs activee",
     "twoFactorEnabledSuccess": "Authentification a deux facteurs activee",
@@ -418,9 +418,9 @@
     "failedRemoveMember": "Échec du retrait du membre",
     "failedRemoveMember": "Échec du retrait du membre",
     "memberRoleUpdated": "Role du membre mis a jour",
     "memberRoleUpdated": "Role du membre mis a jour",
     "failedUpdateRole": "Échec de la mise a jour du role",
     "failedUpdateRole": "Échec de la mise a jour du role",
-    "removeMember": "Remove member",
-    "cancelInvite": "Cancel invitation",
-    "editRole": "Edit role",
+    "removeMember": "Retirer le membre",
+    "cancelInvite": "Annuler l'invitation",
+    "editRole": "Modifier le rôle",
     "technician": "Technicien",
     "technician": "Technicien",
     "technicianHint": "Peut se voir attribuer des travaux et utiliser l’application technicien",
     "technicianHint": "Peut se voir attribuer des travaux et utiliser l’application technicien",
     "technicianFailed": "Modification impossible",
     "technicianFailed": "Modification impossible",
@@ -1061,8 +1061,8 @@
     "fieldDeleted": "Champ personnalisé supprimé",
     "fieldDeleted": "Champ personnalisé supprimé",
     "failedSave": "Impossible d'enregistrer le champ",
     "failedSave": "Impossible d'enregistrer le champ",
     "failedDelete": "Impossible de supprimer",
     "failedDelete": "Impossible de supprimer",
-    "edit": "Edit",
-    "delete": "Delete",
+    "edit": "Modifier",
+    "delete": "Supprimer",
     "unassigned": "Non assigné",
     "unassigned": "Non assigné",
     "defaultValue": "Valeur par défaut",
     "defaultValue": "Valeur par défaut",
     "defaultValueHint": "Préremplie sur les nouvelles fiches et imprimée tant qu'aucune valeur n'a été saisie.",
     "defaultValueHint": "Préremplie sur les nouvelles fiches et imprimée tant qu'aucune valeur n'a été saisie.",
@@ -1096,7 +1096,7 @@
     "unitsDescription": "Choisissez entre metrique (km, litres) et imperial (miles, gallons).",
     "unitsDescription": "Choisissez entre metrique (km, litres) et imperial (miles, gallons).",
     "unitSystem": "Système d'unites",
     "unitSystem": "Système d'unites",
     "metric": "Metrique (km, litres)",
     "metric": "Metrique (km, litres)",
-    "imperial": "Imperial (miles, gallons)",
+    "imperial": "Impérial (miles, gallons)",
     "distanceLabel": "Distance",
     "distanceLabel": "Distance",
     "volumeLabel": "Volume",
     "volumeLabel": "Volume",
     "kilometers": "kilometres (km)",
     "kilometers": "kilometres (km)",
@@ -1370,7 +1370,7 @@
         "sand": "Sable"
         "sand": "Sable"
       }
       }
     },
     },
-    "copyUrl": "Copy portal URL"
+    "copyUrl": "Copier l'URL du portail"
   },
   },
   "email": {
   "email": {
     "title": "Fournisseur de messagerie",
     "title": "Fournisseur de messagerie",
@@ -1446,7 +1446,7 @@
     "failedSave": "Échec de l'enregistrement des paramètres",
     "failedSave": "Échec de l'enregistrement des paramètres",
     "testSentTo": "SMS de test envoye a {phone}",
     "testSentTo": "SMS de test envoye a {phone}",
     "testFailed": "Échec du test SMS",
     "testFailed": "Échec du test SMS",
-    "copyWebhookUrl": "Copy webhook URL"
+    "copyWebhookUrl": "Copier l'URL du webhook"
   },
   },
   "subscription": {
   "subscription": {
     "title": "Plan d'abonnement",
     "title": "Plan d'abonnement",
@@ -1497,7 +1497,7 @@
     "resumeSuccess": "Abonnement repris avec succès",
     "resumeSuccess": "Abonnement repris avec succès",
     "resumeError": "Échec de la reprise de l'abonnement",
     "resumeError": "Échec de la reprise de l'abonnement",
     "billingPortalError": "Impossible d'ouvrir le portail de facturation",
     "billingPortalError": "Impossible d'ouvrir le portail de facturation",
-    "checkoutError": "Failed to start checkout",
+    "checkoutError": "Impossible de lancer le paiement",
     "upgradeTitle": "Améliorer le plan",
     "upgradeTitle": "Améliorer le plan",
     "upgradeDescription": "Débloquez plus de fonctionnalités en améliorant votre plan.",
     "upgradeDescription": "Débloquez plus de fonctionnalités en améliorant votre plan.",
     "upgradeToProDescription": "Améliorez pour débloquer des clients illimités, des membres d'équipe, des rapports, SMTP, l'accès API et plus encore.",
     "upgradeToProDescription": "Améliorez pour débloquer des clients illimités, des membres d'équipe, des rapports, SMTP, l'accès API et plus encore.",
@@ -1557,7 +1557,7 @@
     "biweekly": "Toutes les 2 semaines",
     "biweekly": "Toutes les 2 semaines",
     "monthly": "Mensuel",
     "monthly": "Mensuel",
     "bimonthly": "Tous les 2 mois",
     "bimonthly": "Tous les 2 mois",
-    "quarterly": "Tous les 4 mois",
+    "quarterly": "Tous les 3 mois",
     "semiannually": "Tous les 6 mois",
     "semiannually": "Tous les 6 mois",
     "yearly": "Annuel",
     "yearly": "Annuel",
     "dateRangeLabel": "Période",
     "dateRangeLabel": "Période",
@@ -1596,10 +1596,10 @@
     "deleted": "Planning de rapports supprimé",
     "deleted": "Planning de rapports supprimé",
     "toggledOn": "Planning de rapports activé",
     "toggledOn": "Planning de rapports activé",
     "toggledOff": "Planning de rapports désactivé",
     "toggledOff": "Planning de rapports désactivé",
-    "failedSave": "Failed to save",
-    "failedSend": "Failed to send",
-    "failedToggle": "Failed to toggle",
-    "failedDelete": "Failed to delete",
+    "failedSave": "Échec de l'enregistrement",
+    "failedSend": "Échec de l'envoi",
+    "failedToggle": "Échec de l'activation ou de la désactivation",
+    "failedDelete": "Échec de la suppression",
     "noMembers": "Aucun membre trouvé",
     "noMembers": "Aucun membre trouvé",
     "addRecipient": "Ajouter un destinataire...",
     "addRecipient": "Ajouter un destinataire...",
     "searchMembers": "Rechercher des membres...",
     "searchMembers": "Rechercher des membres...",

+ 5 - 5
messages/fr/share.json

@@ -34,8 +34,8 @@
     "total": "Total",
     "total": "Total",
     "labor": "Main-d'œuvre",
     "labor": "Main-d'œuvre",
     "hours": "Heures",
     "hours": "Heures",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "h",
+    "unit": "unité",
     "qtyOrHours": "Unité / Heures",
     "qtyOrHours": "Unité / Heures",
     "rate": "Taux",
     "rate": "Taux",
     "ratePerHour": "{rate}/h",
     "ratePerHour": "{rate}/h",
@@ -93,8 +93,8 @@
     "labor": "Main-d'œuvre",
     "labor": "Main-d'œuvre",
     "laborDescription": "Description",
     "laborDescription": "Description",
     "hours": "Heures",
     "hours": "Heures",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "h",
+    "unit": "unité",
     "qtyOrHours": "Unité / Heures",
     "qtyOrHours": "Unité / Heures",
     "rate": "Taux",
     "rate": "Taux",
     "ratePerHour": "{rate}/h",
     "ratePerHour": "{rate}/h",
@@ -200,7 +200,7 @@
     "privacyNotice": "Ce rapport vous est communiqué par l'atelier qui a réalisé le contrôle. Toute personne disposant de ce lien peut le consulter : merci de ne pas le transmettre. Contactez l'atelier pour faire retirer le lien ou effacer vos données."
     "privacyNotice": "Ce rapport vous est communiqué par l'atelier qui a réalisé le contrôle. Toute personne disposant de ce lien peut le consulter : merci de ne pas le transmettre. Contactez l'atelier pour faire retirer le lien ou effacer vos données."
   },
   },
   "terms": {
   "terms": {
-    "title": "Conditions de vente (Salgsvilkår)",
+    "title": "Conditions de vente",
     "contact": "Contact",
     "contact": "Contact",
     "tel": "Tél. : {phone}"
     "tel": "Tél. : {phone}"
   },
   },

+ 1 - 1
messages/fr/statusReport.json

@@ -14,7 +14,7 @@
     "createAndSend": "Créer et envoyer",
     "createAndSend": "Créer et envoyer",
     "cancel": "Annuler",
     "cancel": "Annuler",
     "uploadFailed": "Échec du téléversement de la vidéo",
     "uploadFailed": "Échec du téléversement de la vidéo",
-    "createReportFailed": "Failed to create status report",
+    "createReportFailed": "Échec de la création du rapport d'état",
     "created": "Rapport d'état créé",
     "created": "Rapport d'état créé",
     "noVideo": "Veuillez d'abord téléverser une vidéo",
     "noVideo": "Veuillez d'abord téléverser une vidéo",
     "removeVideo": "Supprimer la vidéo",
     "removeVideo": "Supprimer la vidéo",

+ 3 - 3
messages/fr/telegram.json

@@ -5,8 +5,8 @@
     "label": "Token du bot",
     "label": "Token du bot",
     "placeholder": "Entrez le token de @BotFather",
     "placeholder": "Entrez le token de @BotFather",
     "help": "Créez un bot via @BotFather sur Telegram pour obtenir votre token.",
     "help": "Créez un bot via @BotFather sur Telegram pour obtenir votre token.",
-    "show": "Show token",
-    "hide": "Hide token"
+    "show": "Afficher le jeton",
+    "hide": "Masquer le jeton"
   },
   },
   "botUsername": {
   "botUsername": {
     "label": "Nom d'utilisateur du bot",
     "label": "Nom d'utilisateur du bot",
@@ -20,7 +20,7 @@
     "title": "Lien de connexion client",
     "title": "Lien de connexion client",
     "description": "Partagez ce lien avec les clients pour qu'ils se connectent à votre bot. Remplacez l'espace réservé de l'ID client par l'ID réel.",
     "description": "Partagez ce lien avec les clients pour qu'ils se connectent à votre bot. Remplacez l'espace réservé de l'ID client par l'ID réel.",
     "copied": "Lien copié !",
     "copied": "Lien copié !",
-    "copy": "Copy deep link"
+    "copy": "Copier le lien de connexion"
   },
   },
   "test": {
   "test": {
     "title": "Message test",
     "title": "Message test",

+ 1 - 1
messages/fr/telegramMessages.json

@@ -31,7 +31,7 @@
     "messageDeleted": "Message supprimé",
     "messageDeleted": "Message supprimé",
     "deleteError": "Échec de la suppression du message",
     "deleteError": "Échec de la suppression du message",
     "sendError": "Échec de l'envoi du message",
     "sendError": "Échec de l'envoi du message",
-    "sendMessage": "Send message"
+    "sendMessage": "Envoyer le message"
   },
   },
   "sendDialog": {
   "sendDialog": {
     "send": "Envoyer {label}",
     "send": "Envoyer {label}",

+ 1 - 1
messages/fr/timeTracking.json

@@ -23,7 +23,7 @@
     "openTimesheets": "Ouvrir les feuilles de temps"
     "openTimesheets": "Ouvrir les feuilles de temps"
   },
   },
   "source": {
   "source": {
-    "app": "App",
+    "app": "Application",
     "web": "Web",
     "web": "Web",
     "manual": "Manuel",
     "manual": "Manuel",
     "editedBy": "Ajusté par {name}"
     "editedBy": "Ajusté par {name}"

+ 24 - 24
messages/fr/vehicles.json

@@ -28,10 +28,10 @@
     "unarchiveError": "Échec de la désarchivation du véhicule",
     "unarchiveError": "Échec de la désarchivation du véhicule",
     "deleteError": "Échec de la suppression du véhicule",
     "deleteError": "Échec de la suppression du véhicule",
     "error": "Échec du chargement des véhicules",
     "error": "Échec du chargement des véhicules",
-    "viewTable": "Table view",
-    "viewGrid": "Grid view",
-    "viewLargeGrid": "Large grid view",
-    "openMenu": "Open menu",
+    "viewTable": "Vue tableau",
+    "viewGrid": "Vue grille",
+    "viewLargeGrid": "Vue grande grille",
+    "openMenu": "Ouvrir le menu",
     "inspectionOverdue": "Contrôle en retard",
     "inspectionOverdue": "Contrôle en retard",
     "inspectionDue30": "Dans 30 jours",
     "inspectionDue30": "Dans 30 jours",
     "inspectionDue90": "Dans 90 jours",
     "inspectionDue90": "Dans 90 jours",
@@ -95,8 +95,8 @@
     "severityModerate": "Modéré — signalé par certains propriétaires",
     "severityModerate": "Modéré — signalé par certains propriétaires",
     "severityUncommon": "Peu courant — signalé par peu de propriétaires",
     "severityUncommon": "Peu courant — signalé par peu de propriétaires",
     "severityRare": "Rare — signalements isolés mais critique lorsqu'il survient",
     "severityRare": "Rare — signalements isolés mais critique lorsqu'il survient",
-    "openMenu": "Open menu",
-    "dismissMaintenance": "Dismiss",
+    "openMenu": "Ouvrir le menu",
+    "dismissMaintenance": "Ignorer",
     "inspectionDue": "Contrôle le {date}",
     "inspectionDue": "Contrôle le {date}",
     "inspectionCheckedAt": "Vérifié auprès du registre le {date}",
     "inspectionCheckedAt": "Vérifié auprès du registre le {date}",
     "notRegistered": "Non immatriculé",
     "notRegistered": "Non immatriculé",
@@ -184,10 +184,10 @@
     "showing": "Affichage de {start}-{end} sur {total}",
     "showing": "Affichage de {start}-{end} sur {total}",
     "perPage": "par page",
     "perPage": "par page",
     "page": "Page {page} sur {totalPages}",
     "page": "Page {page} sur {totalPages}",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "firstPage": "Première page",
+    "previousPage": "Page précédente",
+    "nextPage": "Page suivante",
+    "lastPage": "Dernière page"
   },
   },
   "notes": {
   "notes": {
     "addNote": "Ajouter une note",
     "addNote": "Ajouter une note",
@@ -213,11 +213,11 @@
     "noteCreated": "Note créée",
     "noteCreated": "Note créée",
     "titleRequired": "Le titre et le contenu sont obligatoires",
     "titleRequired": "Le titre et le contenu sont obligatoires",
     "saveError": "Échec de l'enregistrement de la note",
     "saveError": "Échec de l'enregistrement de la note",
-    "openMenu": "Open menu",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "openMenu": "Ouvrir le menu",
+    "firstPage": "Première page",
+    "previousPage": "Page précédente",
+    "nextPage": "Page suivante",
+    "lastPage": "Dernière page"
   },
   },
   "findings": {
   "findings": {
     "sectionTitle": "Observations",
     "sectionTitle": "Observations",
@@ -266,11 +266,11 @@
     "showing": "Affichage de {start}-{end} sur {total}",
     "showing": "Affichage de {start}-{end} sur {total}",
     "perPage": "par page",
     "perPage": "par page",
     "page": "Page {page} sur {totalPages}",
     "page": "Page {page} sur {totalPages}",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page",
-    "openMenu": "Open menu",
+    "firstPage": "Première page",
+    "previousPage": "Page précédente",
+    "nextPage": "Page suivante",
+    "lastPage": "Dernière page",
+    "openMenu": "Ouvrir le menu",
     "concernLabel": "Répond à quel point ?",
     "concernLabel": "Répond à quel point ?",
     "concernNone": "Rien que le client ait signalé"
     "concernNone": "Rien que le client ait signalé"
   },
   },
@@ -373,10 +373,10 @@
     "archiveError": "Échec de l'archivage du véhicule"
     "archiveError": "Échec de l'archivage du véhicule"
   },
   },
   "serviceRecords": {
   "serviceRecords": {
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "firstPage": "Première page",
+    "previousPage": "Page précédente",
+    "nextPage": "Page suivante",
+    "lastPage": "Dernière page"
   },
   },
   "inspectionReminders": {
   "inspectionReminders": {
     "title": "Rappels de contrôle technique",
     "title": "Rappels de contrôle technique",

+ 7 - 7
messages/fr/workBoard.json

@@ -8,10 +8,10 @@
     "week": "Semaine",
     "week": "Semaine",
     "presenter": "Présentateur",
     "presenter": "Présentateur",
     "addTechnician": "Ajouter un Technicien",
     "addTechnician": "Ajouter un Technicien",
-    "previousWeek": "Previous week",
-    "nextWeek": "Next week",
-    "previousDay": "Previous day",
-    "nextDay": "Next day",
+    "previousWeek": "Semaine précédente",
+    "nextWeek": "Semaine suivante",
+    "previousDay": "Jour précédent",
+    "nextDay": "Jour suivant",
     "groupBy": "Colonnes",
     "groupBy": "Colonnes",
     "byTechnician": "Une colonne par technicien",
     "byTechnician": "Une colonne par technicien",
     "byBay": "Une colonne par poste",
     "byBay": "Une colonne par poste",
@@ -20,7 +20,7 @@
     "add": "Ajouter",
     "add": "Ajouter",
     "addBay": "Ajouter un poste",
     "addBay": "Ajouter un poste",
     "weekNumber": "Sem. {number}",
     "weekNumber": "Sem. {number}",
-    "lanes": "Colonnes",
+    "lanes": "Couloirs",
     "showAllLanes": "Tout afficher",
     "showAllLanes": "Tout afficher",
     "onlyBusyLanes": "Seulement avec du travail",
     "onlyBusyLanes": "Seulement avec du travail",
     "layout": "Affichage",
     "layout": "Affichage",
@@ -107,8 +107,8 @@
       "waitingParts": "En Attente de Pièces",
       "waitingParts": "En Attente de Pièces",
       "completed": "Complété"
       "completed": "Complété"
     },
     },
-    "previous": "Previous",
-    "next": "Next",
+    "previous": "Précédent",
+    "next": "Suivant",
     "groupingUnused": "Le tableau de statut regroupe par statut",
     "groupingUnused": "Le tableau de statut regroupe par statut",
     "connecting": "Connexion…"
     "connecting": "Connexion…"
   },
   },

+ 1 - 1
messages/fr/workOrders.json

@@ -34,7 +34,7 @@
       "total": "Total"
       "total": "Total"
     },
     },
     "emailSubject": "Mise à jour du Statut du Véhicule: {status}",
     "emailSubject": "Mise à jour du Statut du Véhicule: {status}",
-    "changeStatus": "Change status",
+    "changeStatus": "Changer le statut",
     "contextMenu": {
     "contextMenu": {
       "open": "Ouvrir l'ordre de travail",
       "open": "Ouvrir l'ordre de travail",
       "openVehicle": "Ouvrir le véhicule",
       "openVehicle": "Ouvrir le véhicule",

+ 2 - 2
messages/it/admin.json

@@ -97,7 +97,7 @@
     "requireTlsUpgrade": "Richiedi aggiornamento TLS",
     "requireTlsUpgrade": "Richiedi aggiornamento TLS",
     "requireTlsUpgradeHint": "Forza l'aggiornamento TLS sulle connessioni STARTTLS",
     "requireTlsUpgradeHint": "Forza l'aggiornamento TLS sulle connessioni STARTTLS",
     "apiKey": "Chiave API",
     "apiKey": "Chiave API",
-    "serverToken": "Server Token",
+    "serverToken": "Token del server",
     "domain": "Dominio",
     "domain": "Dominio",
     "region": "Regione",
     "region": "Regione",
     "awsRegion": "Regione AWS",
     "awsRegion": "Regione AWS",
@@ -117,7 +117,7 @@
     "sendgridApiKeyHint": "Ottieni la tua chiave API da app.sendgrid.com"
     "sendgridApiKeyHint": "Ottieni la tua chiave API da app.sendgrid.com"
   },
   },
   "common": {
   "common": {
-    "openMenu": "Open menu"
+    "openMenu": "Apri menu"
   },
   },
   "userDetails": {
   "userDetails": {
     "back": "Torna agli utenti",
     "back": "Torna agli utenti",

+ 5 - 5
messages/it/calendar.json

@@ -80,10 +80,10 @@
   },
   },
   "selectVehicle": "Seleziona veicolo per ordine di lavoro",
   "selectVehicle": "Seleziona veicolo per ordine di lavoro",
   "dateChoice": {
   "dateChoice": {
-    "title": "Work Order Date",
-    "description": "You have {selectedDate} selected. Which date should this work order be for?",
+    "title": "Data dell'ordine di lavoro",
+    "description": "Hai selezionato {selectedDate}. A quale data deve riferirsi questo ordine di lavoro?",
     "useSelected": "Use {date}",
     "useSelected": "Use {date}",
-    "useToday": "Use today"
+    "useToday": "Usa oggi"
   },
   },
   "more": "+ {count} altri",
   "more": "+ {count} altri",
   "monthTotal": "{count} eventi",
   "monthTotal": "{count} eventi",
@@ -144,6 +144,6 @@
       "readOnly": "Tempo occupato da un calendario collegato. Modificalo lì e qui si aggiorna alla prossima sincronizzazione."
       "readOnly": "Tempo occupato da un calendario collegato. Modificalo lì e qui si aggiorna alla prossima sincronizzazione."
     }
     }
   },
   },
-  "previousMonth": "Previous month",
-  "nextMonth": "Next month"
+  "previousMonth": "Mese precedente",
+  "nextMonth": "Mese successivo"
 }
 }

+ 2 - 2
messages/it/customers.json

@@ -27,7 +27,7 @@
     "batchDeleteTitle": "Elimina clienti",
     "batchDeleteTitle": "Elimina clienti",
     "batchDeleteDescription": "Eliminare {count} cliente/i? I veicoli verranno scollegati.",
     "batchDeleteDescription": "Eliminare {count} cliente/i? I veicoli verranno scollegati.",
     "batchDeleteSuccess": "{count} cliente/i eliminato/i",
     "batchDeleteSuccess": "{count} cliente/i eliminato/i",
-    "openMenu": "Open menu"
+    "openMenu": "Apri menu"
   },
   },
   "detail": {
   "detail": {
     "backToCustomers": "Torna ai clienti",
     "backToCustomers": "Torna ai clienti",
@@ -95,7 +95,7 @@
     "customerCreated": "Cliente creato",
     "customerCreated": "Cliente creato",
     "saveError": "Salvataggio del cliente non riuscito",
     "saveError": "Salvataggio del cliente non riuscito",
     "customerNumber": "N. cliente",
     "customerNumber": "N. cliente",
-    "customerNumberAuto": "Auto",
+    "customerNumberAuto": "Automatico",
     "sectionContact": "Contatto",
     "sectionContact": "Contatto",
     "sectionBilling": "Fatturazione",
     "sectionBilling": "Fatturazione",
     "addScannedVehicle": "Aggiungi il veicolo {vehicle}",
     "addScannedVehicle": "Aggiungi il veicolo {vehicle}",

+ 7 - 7
messages/it/dashboard.json

@@ -74,8 +74,8 @@
     "noDismissed": "Nessun veicolo ignorato.",
     "noDismissed": "Nessun veicolo ignorato.",
     "dismissedOn": "Ignorato il {date}",
     "dismissedOn": "Ignorato il {date}",
     "restore": "Ripristina",
     "restore": "Ripristina",
-    "settingsAriaLabel": "Maintenance settings",
-    "dismissAriaLabel": "Dismiss"
+    "settingsAriaLabel": "Impostazioni manutenzione",
+    "dismissAriaLabel": "Ignora"
   },
   },
   "reminders": {
   "reminders": {
     "title": "Promemoria in scadenza",
     "title": "Promemoria in scadenza",
@@ -112,7 +112,7 @@
     "createQuote": "Crea preventivo",
     "createQuote": "Crea preventivo",
     "itemsRequested": "{count, plural, one {# elemento richiesto} other {# elementi richiesti}}",
     "itemsRequested": "{count, plural, one {# elemento richiesto} other {# elementi richiesti}}",
     "noData": "Nessuna richiesta di preventivo in sospeso.",
     "noData": "Nessuna richiesta di preventivo in sospeso.",
-    "dismissAriaLabel": "Dismiss quote request"
+    "dismissAriaLabel": "Ignora richiesta di preventivo"
   },
   },
   "quoteResponses": {
   "quoteResponses": {
     "title": "Risposte ai preventivi dei clienti",
     "title": "Risposte ai preventivi dei clienti",
@@ -120,11 +120,11 @@
     "accepted": "Accettato",
     "accepted": "Accettato",
     "changesRequested": "Modifiche richieste",
     "changesRequested": "Modifiche richieste",
     "convertToWorkOrder": "Converti in ordine di lavoro",
     "convertToWorkOrder": "Converti in ordine di lavoro",
-    "convert": "Convert",
+    "convert": "Converti",
     "viewQuote": "Visualizza preventivo",
     "viewQuote": "Visualizza preventivo",
-    "view": "View",
+    "view": "Visualizza",
     "noData": "Nessuna risposta dai clienti.",
     "noData": "Nessuna risposta dai clienti.",
-    "dismissAriaLabel": "Dismiss response"
+    "dismissAriaLabel": "Ignora risposta"
   },
   },
   "recentCompleted": {
   "recentCompleted": {
     "title": "Completati di recente",
     "title": "Completati di recente",
@@ -232,7 +232,7 @@
     "options": {
     "options": {
       "maintenance": "Manutenzione",
       "maintenance": "Manutenzione",
       "repair": "Riparazione",
       "repair": "Riparazione",
-      "upgrade": "Upgrade",
+      "upgrade": "Aggiornamento",
       "inspection": "Ispezione",
       "inspection": "Ispezione",
       "pending": "In attesa",
       "pending": "In attesa",
       "in-progress": "In corso",
       "in-progress": "In corso",

+ 17 - 17
messages/it/documentLock.json

@@ -1,27 +1,27 @@
 {
 {
   "lockedTitle": {
   "lockedTitle": {
     "invoice": {
     "invoice": {
-      "sent": "This invoice is locked because it has been sent",
-      "paid": "This invoice is locked because it has been paid"
+      "sent": "Questa fattura è bloccata perché è stata inviata",
+      "paid": "Questa fattura è bloccata perché è stata pagata"
     },
     },
     "quote": {
     "quote": {
-      "sent": "This quote is locked because it has been sent",
-      "accepted": "This quote is locked because it has been accepted"
+      "sent": "Questo preventivo è bloccato perché è stato inviato",
+      "accepted": "Questo preventivo è bloccato perché è stato accettato"
     }
     }
   },
   },
-  "lockedBody": "Its parts, labour, prices, discount, tax, number and date can no longer be changed. Payments, status changes, sending and attachments all still work.",
-  "lockedAdminHint": "As an owner or admin you can unlock it if something genuinely needs correcting. The unlock is recorded in the audit log.",
-  "lockedMemberHint": "Ask an owner or admin to unlock it if something needs correcting.",
-  "unlock": "Unlock for editing",
-  "relock": "Lock again",
-  "unlockConfirmTitle": "Unlock this document?",
+  "lockedBody": "Ricambi, manodopera, prezzi, sconto, imposta, numero e data non possono più essere modificati. Pagamenti, cambi di stato, invio e allegati funzionano ancora.",
+  "lockedAdminHint": "Come proprietario o amministratore puoi sbloccarlo se qualcosa deve davvero essere corretto. Lo sblocco viene registrato nel registro attività.",
+  "lockedMemberHint": "Chiedi a un proprietario o a un amministratore di sbloccarlo se qualcosa deve essere corretto.",
+  "unlock": "Sblocca per modificare",
+  "relock": "Blocca di nuovo",
+  "unlockConfirmTitle": "Sbloccare questo documento?",
   "unlockConfirmDescription": {
   "unlockConfirmDescription": {
-    "invoice": "It will become editable again, and the change will be recorded in the audit log with your name. Prefer a credit note where your local rules require one.",
-    "quote": "It will become editable again, and the change will be recorded in the audit log with your name."
+    "invoice": "Tornerà modificabile e la modifica verrà registrata nel registro attività con il tuo nome. Preferisci una nota di credito dove le norme locali la richiedono.",
+    "quote": "Tornerà modificabile e la modifica verrà registrata nel registro attività con il tuo nome."
   },
   },
-  "unlocked": "Unlocked for editing",
-  "relocked": "Locked again",
-  "reopenedTitle": "This document has been unlocked for editing",
-  "reopenedBody": "It stays editable until it is locked again.",
-  "failed": "Could not change the lock"
+  "unlocked": "Sbloccato per la modifica",
+  "relocked": "Bloccato di nuovo",
+  "reopenedTitle": "Questo documento è stato sbloccato per la modifica",
+  "reopenedBody": "Resta modificabile finché non viene bloccato di nuovo.",
+  "failed": "Impossibile modificare il blocco"
 }
 }

+ 93 - 93
messages/it/integrations.json

@@ -40,19 +40,19 @@
       "conference": "Link per videochiamate"
       "conference": "Link per videochiamate"
     },
     },
     "sms": {
     "sms": {
-      "send": "Text messages out",
-      "receive": "Replies back in"
+      "send": "SMS in uscita",
+      "receive": "Risposte in entrata"
     },
     },
     "whatsapp": {
     "whatsapp": {
-      "send": "WhatsApp messages out",
-      "receive": "Replies back in"
+      "send": "Messaggi WhatsApp in uscita",
+      "receive": "Risposte in entrata"
     },
     },
     "telegram": {
     "telegram": {
-      "send": "Telegram messages out",
-      "receive": "Replies back in"
+      "send": "Messaggi Telegram in uscita",
+      "receive": "Risposte in entrata"
     },
     },
     "email": {
     "email": {
-      "send": "Email out"
+      "send": "Email in uscita"
     },
     },
     "vehicle": {
     "vehicle": {
       "lookup": "Ricerca per targa e VIN",
       "lookup": "Ricerca per targa e VIN",
@@ -131,19 +131,19 @@
     "lockedAi": "Collega un fornitore di IA per usare le funzioni di IA nella tua officina.",
     "lockedAi": "Collega un fornitore di IA per usare le funzioni di IA nella tua officina.",
     "ownAppTitle": "Questa installazione usa la tua app presso il provider",
     "ownAppTitle": "Questa installazione usa la tua app presso il provider",
     "redirectUri": "URI di reindirizzamento da registrare presso il provider:",
     "redirectUri": "URI di reindirizzamento da registrare presso il provider:",
-    "sendTestEmail": "Send test email",
-    "testEmailSent": "Test email sent to {email}",
-    "testEmailHint": "A test email goes to your own address through this vendor, which proves the from address and the sending rules a key check cannot.",
-    "inboundUrl": "Inbound webhook URL",
-    "inboundHintSecret": "Paste this URL into the vendor's inbound message settings. It carries a secret that identifies your workshop, so keep it private.",
-    "inboundHintMeta": "Paste this URL as the callback URL in your Meta app, with the verify token you entered above, and subscribe to messages.",
+    "sendTestEmail": "Invia email di prova",
+    "testEmailSent": "Email di prova inviata a {email}",
+    "testEmailHint": "Un'email di prova arriva al tuo indirizzo tramite questo provider: così verifichi l'indirizzo mittente e le regole di invio, cosa che il controllo delle chiavi non può fare.",
+    "inboundUrl": "URL del webhook in entrata",
+    "inboundHintSecret": "Incolla questo URL nelle impostazioni dei messaggi in entrata del provider. Contiene un segreto che identifica la tua officina, quindi tienilo riservato.",
+    "inboundHintMeta": "Incolla questo URL come URL di callback nella tua app Meta, con il token di verifica inserito sopra, e iscriviti ai messaggi.",
     "inboundHintStripe": "Aggiungi questo URL nella dashboard di Stripe sotto Developers, Webhooks, iscritto a checkout.session.completed. Poi incolla il segreto di firma mostrato da Stripe nel campo segreto del webhook qui, così le notifiche possono essere verificate.",
     "inboundHintStripe": "Aggiungi questo URL nella dashboard di Stripe sotto Developers, Webhooks, iscritto a checkout.session.completed. Poi incolla il segreto di firma mostrato da Stripe nel campo segreto del webhook qui, così le notifiche possono essere verificate.",
     "inboundHintVipps": "Inserisci questo URL come URL di callback nel portale Vipps MobilePay. Vipps richiede anche condizioni di vendita pubblicate, impostate in Impostazioni, Pagamento.",
     "inboundHintVipps": "Inserisci questo URL come URL di callback nel portale Vipps MobilePay. Vipps richiede anche condizioni di vendita pubblicate, impostate in Impostazioni, Pagamento.",
     "inboundHintPaypal": "Aggiungi questo URL nella dashboard sviluppatori di PayPal sotto Webhooks, iscritto a PAYMENT.CAPTURE.COMPLETED.",
     "inboundHintPaypal": "Aggiungi questo URL nella dashboard sviluppatori di PayPal sotto Webhooks, iscritto a PAYMENT.CAPTURE.COMPLETED.",
-    "copy": "Copy",
-    "copied": "Copied",
-    "updateKeys": "Update keys",
-    "updateKeysHint": "The last check failed. Enter the keys again to try once more.",
+    "copy": "Copia",
+    "copied": "Copiato",
+    "updateKeys": "Aggiorna le chiavi",
+    "updateKeysHint": "L'ultimo controllo non è riuscito. Inserisci di nuovo le chiavi per riprovare.",
     "inspectionSync": {
     "inspectionSync": {
       "title": "Sincronizzazione revisioni",
       "title": "Sincronizzazione revisioni",
       "vehicles": "{count} veicoli con targa in questa officina",
       "vehicles": "{count} veicoli con targa in questa officina",
@@ -244,8 +244,8 @@
       "description": "Aggiungi una riunione Zoom a un ordine di lavoro programmato e tieni il link sull'ordine, per una diagnosi a distanza o per illustrare i risultati al cliente.",
       "description": "Aggiungi una riunione Zoom a un ordine di lavoro programmato e tieni il link sull'ordine, per una diagnosi a distanza o per illustrare i risultati al cliente.",
       "tenantHelp": "Nello Zoom App Marketplace crea un'app General (user-managed), aggiungi l'URI di reindirizzamento qui sotto, aggiungi gli scope meeting:write:meeting, meeting:update:meeting, meeting:delete:meeting, meeting:read:meeting e user:read:user, quindi incolla qui client ID e secret.",
       "tenantHelp": "Nello Zoom App Marketplace crea un'app General (user-managed), aggiungi l'URI di reindirizzamento qui sotto, aggiungi gli scope meeting:write:meeting, meeting:update:meeting, meeting:delete:meeting, meeting:read:meeting e user:read:user, quindi incolla qui client ID e secret.",
       "fields": {
       "fields": {
-        "clientId": "Client ID",
-        "clientSecret": "Client secret"
+        "clientId": "ID client",
+        "clientSecret": "Segreto client"
       },
       },
       "settings": {
       "settings": {
         "autoCreate": "Crea automaticamente una riunione Zoom per ogni ordine di lavoro programmato",
         "autoCreate": "Crea automaticamente una riunione Zoom per ogni ordine di lavoro programmato",
@@ -256,155 +256,155 @@
       }
       }
     },
     },
     "twilio-sms": {
     "twilio-sms": {
-      "description": "Send and receive text messages through a Twilio number. Reminders, ready-for-pickup messages and the replies that come back.",
+      "description": "Invia e ricevi SMS tramite un numero Twilio. Promemoria, avvisi di veicolo pronto per il ritiro e le risposte dei clienti.",
       "fields": {
       "fields": {
         "accountSid": "Account SID",
         "accountSid": "Account SID",
         "authToken": "Auth token"
         "authToken": "Auth token"
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Invia da questo numero"
       }
       }
     },
     },
     "vonage-sms": {
     "vonage-sms": {
-      "description": "Send and receive text messages through a Vonage number.",
+      "description": "Invia e ricevi SMS tramite un numero Vonage.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "apiSecret": "API secret",
-        "signatureSecret": "Signature secret",
-        "signatureSecretHelp": "From the Vonage dashboard, under API settings. When set, inbound messages are only accepted when Vonage signed them. Without it, only the secret in the webhook URL is checked."
+        "apiKey": "Chiave API",
+        "apiSecret": "Segreto API",
+        "signatureSecret": "Segreto di firma",
+        "signatureSecretHelp": "Dalla dashboard di Vonage, sotto API settings. Se impostato, i messaggi in entrata vengono accettati solo se firmati da Vonage. Senza di esso, viene controllato solo il segreto nell'URL del webhook."
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Invia da questo numero"
       }
       }
     },
     },
     "telnyx-sms": {
     "telnyx-sms": {
-      "description": "Send and receive text messages through a Telnyx number.",
+      "description": "Invia e ricevi SMS tramite un numero Telnyx.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "webhookPublicKey": "Webhook public key",
-        "webhookPublicKeyHelp": "From the Telnyx portal, under Account settings, Keys and credentials, Public key. When set, inbound messages are only accepted when Telnyx signed them. Without it, only the secret in the webhook URL is checked."
+        "apiKey": "Chiave API",
+        "webhookPublicKey": "Chiave pubblica del webhook",
+        "webhookPublicKeyHelp": "Dal portale Telnyx, sotto Account settings, Keys and credentials, Public key. Se impostata, i messaggi in entrata vengono accettati solo se firmati da Telnyx. Senza di essa, viene controllato solo il segreto nell'URL del webhook."
       },
       },
       "settings": {
       "settings": {
-        "phoneNumber": "Send from this number"
+        "phoneNumber": "Invia da questo numero"
       }
       }
     },
     },
     "whatsapp-meta": {
     "whatsapp-meta": {
-      "description": "Message customers on WhatsApp through Meta directly. Photos of what you found, and the conversation that follows.",
+      "description": "Scrivi ai clienti su WhatsApp direttamente tramite Meta. Le foto di ciò che hai trovato e la conversazione che segue.",
       "fields": {
       "fields": {
-        "phoneNumberId": "Phone number ID",
-        "accessToken": "Access token",
-        "verifyToken": "Webhook verify token",
-        "appSecret": "App secret",
-        "apiVersion": "Graph API version",
-        "appSecretHelp": "Meta signs every delivery with it. Until it is entered, messages posted to the webhook are refused, since anyone who learns the URL could otherwise post as your customers."
+        "phoneNumberId": "ID del numero di telefono",
+        "accessToken": "Token di accesso",
+        "verifyToken": "Token di verifica del webhook",
+        "appSecret": "Chiave segreta dell'app",
+        "apiVersion": "Versione della Graph API",
+        "appSecretHelp": "Meta firma ogni consegna con questa chiave. Finché non viene inserita, i messaggi inviati al webhook vengono rifiutati, perché altrimenti chiunque conosca l'URL potrebbe scrivere a nome dei tuoi clienti."
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "phoneNumber": "Send from this number",
-        "templateName": "Template for reopening a conversation",
-        "templateLanguage": "Template language",
-        "templateVariables": "Template values, in order",
-        "mediaTemplateName": "Template for a message with a photo",
-        "mediaTemplateLanguage": "Photo template language",
-        "mediaTemplateVariables": "Photo template values, in order"
+        "enabled": "Invia messaggi su questo canale",
+        "phoneNumber": "Invia da questo numero",
+        "templateName": "Modello per riaprire una conversazione",
+        "templateLanguage": "Lingua del modello",
+        "templateVariables": "Valori del modello, in ordine",
+        "mediaTemplateName": "Modello per un messaggio con foto",
+        "mediaTemplateLanguage": "Lingua del modello con foto",
+        "mediaTemplateVariables": "Valori del modello con foto, in ordine"
       }
       }
     },
     },
     "whatsapp-twilio": {
     "whatsapp-twilio": {
-      "description": "Message customers on WhatsApp through a Twilio number, if Twilio is who sold you one.",
+      "description": "Scrivi ai clienti su WhatsApp tramite un numero Twilio, se è Twilio ad avertelo fornito.",
       "fields": {
       "fields": {
         "accountSid": "Account SID",
         "accountSid": "Account SID",
         "authToken": "Auth token",
         "authToken": "Auth token",
-        "messagingServiceSid": "Messaging service SID"
+        "messagingServiceSid": "SID del Messaging Service"
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "phoneNumber": "Send from this number",
-        "templateName": "Template for reopening a conversation",
-        "templateLanguage": "Template language",
-        "templateVariables": "Template values, in order",
-        "mediaTemplateName": "Template for a message with a photo",
-        "mediaTemplateLanguage": "Photo template language",
-        "mediaTemplateVariables": "Photo template values, in order"
+        "enabled": "Invia messaggi su questo canale",
+        "phoneNumber": "Invia da questo numero",
+        "templateName": "Modello per riaprire una conversazione",
+        "templateLanguage": "Lingua del modello",
+        "templateVariables": "Valori del modello, in ordine",
+        "mediaTemplateName": "Modello per un messaggio con foto",
+        "mediaTemplateLanguage": "Lingua del modello con foto",
+        "mediaTemplateVariables": "Valori del modello con foto, in ordine"
       }
       }
     },
     },
     "telegram": {
     "telegram": {
-      "description": "A Telegram bot that reaches customers who use it, and brings their replies into the inbox.",
+      "description": "Un bot Telegram che raggiunge i clienti che lo usano e porta le loro risposte nella posta in arrivo.",
       "fields": {
       "fields": {
-        "botToken": "Bot token"
+        "botToken": "Token del bot"
       },
       },
       "settings": {
       "settings": {
-        "enabled": "Send messages on this channel",
-        "botUsername": "Bot username"
+        "enabled": "Invia messaggi su questo canale",
+        "botUsername": "Nome utente del bot"
       }
       }
     },
     },
     "smtp": {
     "smtp": {
-      "description": "Send invoices and reminders through your own mail server, rather than the platform mail.",
+      "description": "Invia fatture e promemoria tramite il tuo server di posta, anziché la posta della piattaforma.",
       "fields": {
       "fields": {
         "host": "Server",
         "host": "Server",
-        "port": "Port",
-        "user": "Username",
+        "port": "Porta",
+        "user": "Nome utente",
         "pass": "Password"
         "pass": "Password"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender",
-        "secure": "Connect over TLS from the start",
-        "requireTls": "Require the server to upgrade to TLS",
-        "rejectUnauthorized": "Reject a certificate that does not check out"
+        "fromEmail": "Invia da questo indirizzo",
+        "fromName": "Nome mostrato come mittente",
+        "secure": "Connetti tramite TLS fin dall'inizio",
+        "requireTls": "Richiedi che il server passi a TLS",
+        "rejectUnauthorized": "Rifiuta un certificato che non risulta valido"
       }
       }
     },
     },
     "resend": {
     "resend": {
-      "description": "Send invoices and reminders through Resend.",
+      "description": "Invia fatture e promemoria tramite Resend.",
       "fields": {
       "fields": {
-        "apiKey": "API key"
+        "apiKey": "Chiave API"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Invia da questo indirizzo",
+        "fromName": "Nome mostrato come mittente"
       }
       }
     },
     },
     "postmark": {
     "postmark": {
-      "description": "Send invoices and reminders through Postmark.",
+      "description": "Invia fatture e promemoria tramite Postmark.",
       "fields": {
       "fields": {
-        "apiKey": "Server token"
+        "apiKey": "Token del server"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Invia da questo indirizzo",
+        "fromName": "Nome mostrato come mittente"
       }
       }
     },
     },
     "mailgun": {
     "mailgun": {
-      "description": "Send invoices and reminders through Mailgun.",
+      "description": "Invia fatture e promemoria tramite Mailgun.",
       "fields": {
       "fields": {
-        "apiKey": "API key",
-        "domain": "Sending domain"
+        "apiKey": "Chiave API",
+        "domain": "Dominio di invio"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender",
-        "region": "Region the domain is in"
+        "fromEmail": "Invia da questo indirizzo",
+        "fromName": "Nome mostrato come mittente",
+        "region": "Regione del dominio"
       }
       }
     },
     },
     "sendgrid": {
     "sendgrid": {
-      "description": "Send invoices and reminders through SendGrid.",
+      "description": "Invia fatture e promemoria tramite SendGrid.",
       "fields": {
       "fields": {
-        "apiKey": "API key"
+        "apiKey": "Chiave API"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Invia da questo indirizzo",
+        "fromName": "Nome mostrato come mittente"
       }
       }
     },
     },
     "amazon-ses": {
     "amazon-ses": {
-      "description": "Send invoices and reminders through Amazon SES.",
+      "description": "Invia fatture e promemoria tramite Amazon SES.",
       "fields": {
       "fields": {
-        "accessKeyId": "Access key ID",
-        "secretAccessKey": "Secret access key",
-        "region": "Region"
+        "accessKeyId": "ID chiave di accesso",
+        "secretAccessKey": "Chiave di accesso segreta",
+        "region": "Regione"
       },
       },
       "settings": {
       "settings": {
-        "fromEmail": "Send from this address",
-        "fromName": "Name shown as the sender"
+        "fromEmail": "Invia da questo indirizzo",
+        "fromName": "Nome mostrato come mittente"
       }
       }
     },
     },
     "vegvesen": {
     "vegvesen": {

+ 1 - 1
messages/it/inventory.json

@@ -131,7 +131,7 @@
     "saveChanges": "Salva modifiche",
     "saveChanges": "Salva modifiche",
     "addPart": "Aggiungi ricambio"
     "addPart": "Aggiungi ricambio"
   },
   },
-  "openMenu": "Open menu",
+  "openMenu": "Apri menu",
   "history": {
   "history": {
     "title": "Storico magazzino",
     "title": "Storico magazzino",
     "description": "Tutte le modifiche registrate a {name}, dalla più recente.",
     "description": "Tutte le modifiche registrate a {name}, dalla più recente.",

+ 4 - 4
messages/it/laborPresets.json

@@ -16,7 +16,7 @@
   "actions": {
   "actions": {
     "edit": "Modifica",
     "edit": "Modifica",
     "delete": "Elimina",
     "delete": "Elimina",
-    "openMenu": "Open menu"
+    "openMenu": "Apri menu"
   },
   },
   "deletePreset": {
   "deletePreset": {
     "title": "Elimina modello di manodopera",
     "title": "Elimina modello di manodopera",
@@ -43,8 +43,8 @@
     "cancel": "Annulla",
     "cancel": "Annulla",
     "create": "Crea",
     "create": "Crea",
     "saveChanges": "Salva modifiche",
     "saveChanges": "Salva modifiche",
-    "itemQty": "Qty",
-    "itemQtyOrHours": "Unit / Hours",
+    "itemQty": "Qtà",
+    "itemQtyOrHours": "Unità / Ore",
     "hourlyTag": "HR",
     "hourlyTag": "HR",
     "serviceTag": "SVC",
     "serviceTag": "SVC",
     "partsTitle": "Ricambi",
     "partsTitle": "Ricambi",
@@ -63,7 +63,7 @@
     "noPackages": "Nessun modello di manodopera trovato.",
     "noPackages": "Nessun modello di manodopera trovato.",
     "items": "{count} voci",
     "items": "{count} voci",
     "totalHours": "{hours}h in totale",
     "totalHours": "{hours}h in totale",
-    "totalUnits": "{units} unit(s)",
+    "totalUnits": "{units} unità",
     "totalParts": "{count} ricambi"
     "totalParts": "{count} ricambi"
   },
   },
   "errors": {
   "errors": {

+ 3 - 3
messages/it/messages.json

@@ -30,8 +30,8 @@
     "deleteDescription": "Tutti i messaggi con {name} verranno eliminati definitivamente. Questa azione non può essere annullata.",
     "deleteDescription": "Tutti i messaggi con {name} verranno eliminati definitivamente. Questa azione non può essere annullata.",
     "deleted": "Conversazione eliminata",
     "deleted": "Conversazione eliminata",
     "deleteError": "Impossibile eliminare la conversazione",
     "deleteError": "Impossibile eliminare la conversazione",
-    "back": "Back",
-    "conversationMenu": "Conversation menu",
+    "back": "Indietro",
+    "conversationMenu": "Menu conversazione",
     "searchPlaceholder": "Cerca conversazioni",
     "searchPlaceholder": "Cerca conversazioni",
     "noSearchResults": "Nessuna conversazione corrisponde alla ricerca",
     "noSearchResults": "Nessuna conversazione corrisponde alla ricerca",
     "now": "ora"
     "now": "ora"
@@ -47,7 +47,7 @@
     "messageDeleted": "Messaggio eliminato",
     "messageDeleted": "Messaggio eliminato",
     "deleteError": "Impossibile eliminare il messaggio",
     "deleteError": "Impossibile eliminare il messaggio",
     "sendError": "Impossibile inviare l'SMS",
     "sendError": "Impossibile inviare l'SMS",
-    "sendMessage": "Send message"
+    "sendMessage": "Invia messaggio"
   },
   },
   "sendDialog": {
   "sendDialog": {
     "send": "Invia {label}",
     "send": "Invia {label}",

+ 1 - 1
messages/it/navigation.json

@@ -112,7 +112,7 @@
     "reports": "Report",
     "reports": "Report",
     "timesheets": "Fogli ore",
     "timesheets": "Fogli ore",
     "settings": "Impostazioni",
     "settings": "Impostazioni",
-    "superAdmin": "Super Admin",
+    "superAdmin": "Super amministratore",
     "adminPanel": "Pannello di amministrazione",
     "adminPanel": "Pannello di amministrazione",
     "organizations": "Organizzazioni",
     "organizations": "Organizzazioni",
     "noOrganization": "Nessuna organizzazione",
     "noOrganization": "Nessuna organizzazione",

+ 1 - 1
messages/it/notifications.json

@@ -7,5 +7,5 @@
     "delete": "Elimina",
     "delete": "Elimina",
     "cancel": "Annulla"
     "cancel": "Annulla"
   },
   },
-  "openNotifications": "Open notifications"
+  "openNotifications": "Apri notifiche"
 }
 }

+ 7 - 7
messages/it/pdf.json

@@ -32,8 +32,8 @@
     "total": "Totale",
     "total": "Totale",
     "labor": "Manodopera",
     "labor": "Manodopera",
     "hours": "Ore",
     "hours": "Ore",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "ore",
+    "unit": "unità",
     "rate": "Tariffa",
     "rate": "Tariffa",
     "ratePerHour": "{rate}/ora",
     "ratePerHour": "{rate}/ora",
     "subtotal": "Subtotale",
     "subtotal": "Subtotale",
@@ -75,7 +75,7 @@
     "professionalWorkshop": "Gestione Officina Professionale",
     "professionalWorkshop": "Gestione Officina Professionale",
     "tel": "Tel: {phone}",
     "tel": "Tel: {phone}",
     "org": "Org: {org}",
     "org": "Org: {org}",
-    "qtyOrHours": "Unit / Hours",
+    "qtyOrHours": "Unità / Ore",
     "customFieldsTitle": "Informazioni aggiuntive",
     "customFieldsTitle": "Informazioni aggiuntive",
     "telegramConnect": "Scrivici su Telegram",
     "telegramConnect": "Scrivici su Telegram",
     "taxRegistrationLabel": "N. {name}"
     "taxRegistrationLabel": "N. {name}"
@@ -96,8 +96,8 @@
     "total": "Totale",
     "total": "Totale",
     "labor": "Manodopera",
     "labor": "Manodopera",
     "hours": "Ore",
     "hours": "Ore",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "ore",
+    "unit": "unità",
     "rate": "Tariffa",
     "rate": "Tariffa",
     "ratePerHour": "{rate}/ora",
     "ratePerHour": "{rate}/ora",
     "subtotal": "Subtotale",
     "subtotal": "Subtotale",
@@ -115,7 +115,7 @@
     "validityFooter30": "Questo preventivo è valido per 30 giorni",
     "validityFooter30": "Questo preventivo è valido per 30 giorni",
     "viewPortal": "Visualizza il tuo portale: {url}",
     "viewPortal": "Visualizza il tuo portale: {url}",
     "tel": "Tel: {phone}",
     "tel": "Tel: {phone}",
-    "qtyOrHours": "Unit / Hours",
+    "qtyOrHours": "Unità / Ore",
     "customFieldsTitle": "Informazioni aggiuntive",
     "customFieldsTitle": "Informazioni aggiuntive",
     "quoteNumberLabel": "N. preventivo",
     "quoteNumberLabel": "N. preventivo",
     "validUntilLabel": "Valido fino al"
     "validUntilLabel": "Valido fino al"
@@ -193,6 +193,6 @@
     "mileageColMarine": "Ore Motore"
     "mileageColMarine": "Ore Motore"
   },
   },
   "common": {
   "common": {
-    "poweredBy": "Powered by"
+    "poweredBy": "Realizzato con"
   }
   }
 }
 }

+ 1 - 1
messages/it/reminders.json

@@ -8,7 +8,7 @@
   "searchVehicle": "Cerca veicoli...",
   "searchVehicle": "Cerca veicoli...",
   "noVehicle": "Nessun veicolo trovato.",
   "noVehicle": "Nessun veicolo trovato.",
   "pickDate": "Seleziona una data",
   "pickDate": "Seleziona una data",
-  "openMenu": "Open menu",
+  "openMenu": "Apri menu",
   "relatesTo": "Riguarda (opzionale)",
   "relatesTo": "Riguarda (opzionale)",
   "selectCustomer": "Cliente (opzionale)",
   "selectCustomer": "Cliente (opzionale)",
   "noneOption": "Nessuno",
   "noneOption": "Nessuno",

+ 85 - 85
messages/it/reports.json

@@ -329,94 +329,94 @@
     "jobsClocked": "Lavori registrati"
     "jobsClocked": "Lavori registrati"
   },
   },
   "pdf": {
   "pdf": {
-    "reportTitle": "Business Report",
-    "revenueSection": "Revenue Report",
-    "taxSection": "Tax Report",
-    "pastDueSection": "Past Due Invoices",
-    "servicesSection": "Services Report",
-    "customersSection": "Customers Report",
-    "techniciansSection": "Technicians Report",
-    "partsSection": "Parts Usage Report",
-    "jobAnalyticsSection": "Job Analytics",
-    "retentionSection": "Customer Retention",
-    "inventorySection": "Inventory Report",
+    "reportTitle": "Report Aziendale",
+    "revenueSection": "Report Ricavi",
+    "taxSection": "Report Imposte",
+    "pastDueSection": "Fatture Scadute",
+    "servicesSection": "Report Servizi",
+    "customersSection": "Report Clienti",
+    "techniciansSection": "Report Tecnici",
+    "partsSection": "Report Utilizzo Ricambi",
+    "jobAnalyticsSection": "Analisi Lavori",
+    "retentionSection": "Fidelizzazione Clienti",
+    "inventorySection": "Report Inventario",
     "monthlyBreakdown": "Ripartizione Mensile",
     "monthlyBreakdown": "Ripartizione Mensile",
-    "revenueByType": "Revenue by Type",
-    "taxByRate": "Tax by Rate",
-    "servicesByStatus": "By Status",
-    "servicesByType": "By Type",
-    "topCustomers": "Top Customers",
-    "topServiceTypes": "Top Service Types",
-    "topReturning": "Top Returning Customers",
-    "dayOfWeek": "Jobs by Day of Week",
-    "monthlyTrend": "Monthly Trend",
-    "lowStock": "Low Stock Items",
-    "revenue": "Revenue",
-    "collected": "Collected",
-    "outstanding": "Outstanding",
-    "services": "Services",
-    "partsCost": "Parts Cost",
+    "revenueByType": "Ricavi per Tipo",
+    "taxByRate": "Imposte per Aliquota",
+    "servicesByStatus": "Per Stato",
+    "servicesByType": "Per Tipo",
+    "topCustomers": "Migliori Clienti",
+    "topServiceTypes": "Tipi di Servizio Principali",
+    "topReturning": "Migliori Clienti Ricorrenti",
+    "dayOfWeek": "Lavori per Giorno della Settimana",
+    "monthlyTrend": "Andamento Mensile",
+    "lowStock": "Articoli Sotto Scorta",
+    "revenue": "Ricavi",
+    "collected": "Incassato",
+    "outstanding": "In Sospeso",
+    "services": "Servizi",
+    "partsCost": "Costo Ricambi",
     "partsNetProfit": "Profitto Netto Ricambi",
     "partsNetProfit": "Profitto Netto Ricambi",
     "laborRevenue": "Manodopera",
     "laborRevenue": "Manodopera",
-    "netProfit": "Net Profit",
-    "month": "Month",
-    "count": "Count",
-    "type": "Type",
-    "status": "Status",
-    "name": "Name",
-    "company": "Company",
-    "totalSpent": "Total Spent",
-    "customer": "Customer",
-    "invoiceNumber": "Invoice #",
-    "totalAmount": "Total Amount",
-    "amountDue": "Amount Due",
-    "dueDate": "Due Date",
-    "daysPastDue": "Days Past Due",
-    "totalPastDue": "Total Past Due",
-    "totalAmountDue": "Total Amount Due",
-    "over30": "Over 30 Days",
-    "over60": "Over 60 Days",
-    "over90": "Over 90 Days",
-    "taxCollected": "Tax Collected",
-    "taxableAmount": "Taxable Amount",
-    "taxRate": "Tax Rate",
-    "invoiceCount": "Invoice Count",
-    "invoices": "Invoices",
-    "totalServices": "Total Services",
-    "totalCustomers": "Total Customers",
-    "activeCustomers": "Active Customers",
-    "technician": "Technician",
-    "jobs": "Jobs",
-    "totalRevenue": "Total Revenue",
-    "avgRevenue": "Avg Revenue",
-    "totalHours": "Total Hours",
-    "avgHours": "Avg Hours",
-    "totalJobs": "Total Jobs",
-    "partName": "Part Name",
-    "partNumber": "Part #",
-    "usageCount": "Usage Count",
-    "totalQty": "Total Qty",
-    "totalPartsRevenue": "Parts Revenue",
+    "netProfit": "Profitto Netto",
+    "month": "Mese",
+    "count": "Conteggio",
+    "type": "Tipo",
+    "status": "Stato",
+    "name": "Nome",
+    "company": "Azienda",
+    "totalSpent": "Totale Speso",
+    "customer": "Cliente",
+    "invoiceNumber": "N. Fattura",
+    "totalAmount": "Importo Totale",
+    "amountDue": "Importo Dovuto",
+    "dueDate": "Data di Scadenza",
+    "daysPastDue": "Giorni di Ritardo",
+    "totalPastDue": "Totale Scaduto",
+    "totalAmountDue": "Importo Totale Dovuto",
+    "over30": "Oltre 30 Giorni",
+    "over60": "Oltre 60 Giorni",
+    "over90": "Oltre 90 Giorni",
+    "taxCollected": "Imposta Riscossa",
+    "taxableAmount": "Imponibile",
+    "taxRate": "Aliquota",
+    "invoiceCount": "Numero Fatture",
+    "invoices": "Fatture",
+    "totalServices": "Totale Servizi",
+    "totalCustomers": "Clienti Totali",
+    "activeCustomers": "Clienti Attivi",
+    "technician": "Tecnico",
+    "jobs": "Lavori",
+    "totalRevenue": "Ricavi Totali",
+    "avgRevenue": "Ricavo Medio",
+    "totalHours": "Ore Totali",
+    "avgHours": "Ore Medie",
+    "totalJobs": "Totale Lavori",
+    "partName": "Nome Ricambio",
+    "partNumber": "N. Ricambio",
+    "usageCount": "Utilizzi",
+    "totalQty": "Qtà Totale",
+    "totalPartsRevenue": "Ricavi Ricambi",
     "totalPartsCost": "Costo Ricambi",
     "totalPartsCost": "Costo Ricambi",
     "totalPartsNetProfit": "Profitto Netto",
     "totalPartsNetProfit": "Profitto Netto",
-    "totalPartsUsed": "Parts Used",
-    "serviceType": "Service Type",
-    "avgValue": "Avg Value",
-    "avgJobValue": "Avg Job Value",
-    "returningCustomers": "Returning",
-    "newCustomers": "New",
-    "totalActive": "Total Active",
-    "avgTimeBetweenVisits": "Avg Days Between Visits",
-    "avgDaysBetweenVisits": "Avg Days",
-    "visits": "Visits",
-    "days": "days",
-    "totalParts": "Total Parts",
-    "totalItems": "Total Items",
-    "totalValue": "Total Value",
-    "totalSellValue": "Sell Value",
-    "quantity": "Qty",
-    "minQuantity": "Min Qty",
-    "unitCost": "Unit Cost",
+    "totalPartsUsed": "Ricambi Utilizzati",
+    "serviceType": "Tipo di Servizio",
+    "avgValue": "Valore Medio",
+    "avgJobValue": "Valore Medio Lavoro",
+    "returningCustomers": "Ricorrenti",
+    "newCustomers": "Nuovi",
+    "totalActive": "Totale Attivi",
+    "avgTimeBetweenVisits": "Media Giorni tra le Visite",
+    "avgDaysBetweenVisits": "Giorni Medi",
+    "visits": "Visite",
+    "days": "giorni",
+    "totalParts": "Ricambi Totali",
+    "totalItems": "Articoli Totali",
+    "totalValue": "Valore Totale",
+    "totalSellValue": "Valore di Vendita",
+    "quantity": "Qtà",
+    "minQuantity": "Qtà Min",
+    "unitCost": "Costo Unitario",
     "vehiclesSection": "Report Veicolo",
     "vehiclesSection": "Report Veicolo",
     "vehicleLabel": "Veicolo",
     "vehicleLabel": "Veicolo",
     "totalCost": "Costo Totale",
     "totalCost": "Costo Totale",
@@ -427,7 +427,7 @@
   },
   },
   "empty": "Nessun dato caricato. Clicca su Aggiorna per caricare il report.",
   "empty": "Nessun dato caricato. Clicca su Aggiorna per caricare il report.",
   "pagination": {
   "pagination": {
-    "previousPage": "Previous page",
-    "nextPage": "Next page"
+    "previousPage": "Pagina precedente",
+    "nextPage": "Pagina successiva"
   }
   }
 }
 }

+ 15 - 15
messages/it/settings.json

@@ -65,7 +65,7 @@
       },
       },
       "telegram": {
       "telegram": {
         "title": "Telegram",
         "title": "Telegram",
-        "description": "Telegram bot & messaging"
+        "description": "Bot Telegram e messaggistica"
       },
       },
       "customerPortal": {
       "customerPortal": {
         "title": "Portale clienti",
         "title": "Portale clienti",
@@ -192,7 +192,7 @@
     "serviceTypeDescription": "Seleziona il tipo di servizio offerto dalla tua officina. Questo cambia le etichette dei campi in tutta l'applicazione.",
     "serviceTypeDescription": "Seleziona il tipo di servizio offerto dalla tua officina. Questo cambia le etichette dei campi in tutta l'applicazione.",
     "automotive": "Automobilistico",
     "automotive": "Automobilistico",
     "automotiveDescription": "Auto, camion e altri veicoli stradali",
     "automotiveDescription": "Auto, camion e altri veicoli stradali",
-    "marineService": "Marine",
+    "marineService": "Nautico",
     "marineServiceDescription": "Barche, yacht e imbarcazioni"
     "marineServiceDescription": "Barche, yacht e imbarcazioni"
   },
   },
   "account": {
   "account": {
@@ -418,9 +418,9 @@
     "failedRemoveMember": "Rimozione membro non riuscita",
     "failedRemoveMember": "Rimozione membro non riuscita",
     "memberRoleUpdated": "Ruolo membro aggiornato",
     "memberRoleUpdated": "Ruolo membro aggiornato",
     "failedUpdateRole": "Aggiornamento ruolo non riuscito",
     "failedUpdateRole": "Aggiornamento ruolo non riuscito",
-    "removeMember": "Remove member",
-    "cancelInvite": "Cancel invitation",
-    "editRole": "Edit role",
+    "removeMember": "Rimuovi membro",
+    "cancelInvite": "Annulla invito",
+    "editRole": "Modifica ruolo",
     "technician": "Tecnico",
     "technician": "Tecnico",
     "technicianHint": "Può ricevere lavori assegnati e usare l’app tecnico",
     "technicianHint": "Può ricevere lavori assegnati e usare l’app tecnico",
     "technicianFailed": "Impossibile modificare",
     "technicianFailed": "Impossibile modificare",
@@ -1061,8 +1061,8 @@
     "fieldDeleted": "Campo personalizzato eliminato",
     "fieldDeleted": "Campo personalizzato eliminato",
     "failedSave": "Impossibile salvare il campo",
     "failedSave": "Impossibile salvare il campo",
     "failedDelete": "Impossibile eliminare",
     "failedDelete": "Impossibile eliminare",
-    "edit": "Edit",
-    "delete": "Delete",
+    "edit": "Modifica",
+    "delete": "Elimina",
     "unassigned": "Non assegnato",
     "unassigned": "Non assegnato",
     "defaultValue": "Valore predefinito",
     "defaultValue": "Valore predefinito",
     "defaultValueHint": "Precompilato nei nuovi record e stampato finché non viene inserito un valore.",
     "defaultValueHint": "Precompilato nei nuovi record e stampato finché non viene inserito un valore.",
@@ -1370,7 +1370,7 @@
         "sand": "Sabbia"
         "sand": "Sabbia"
       }
       }
     },
     },
-    "copyUrl": "Copy portal URL"
+    "copyUrl": "Copia URL del portale"
   },
   },
   "email": {
   "email": {
     "title": "Provider e-mail",
     "title": "Provider e-mail",
@@ -1446,7 +1446,7 @@
     "failedSave": "Salvataggio impostazioni non riuscito",
     "failedSave": "Salvataggio impostazioni non riuscito",
     "testSentTo": "SMS di test inviato a {phone}",
     "testSentTo": "SMS di test inviato a {phone}",
     "testFailed": "Test SMS non riuscito",
     "testFailed": "Test SMS non riuscito",
-    "copyWebhookUrl": "Copy webhook URL"
+    "copyWebhookUrl": "Copia URL webhook"
   },
   },
   "subscription": {
   "subscription": {
     "title": "Piano di abbonamento",
     "title": "Piano di abbonamento",
@@ -1497,7 +1497,7 @@
     "resumeSuccess": "Abbonamento ripreso con successo",
     "resumeSuccess": "Abbonamento ripreso con successo",
     "resumeError": "Ripresa dell'abbonamento non riuscita",
     "resumeError": "Ripresa dell'abbonamento non riuscita",
     "billingPortalError": "Impossibile aprire il portale di fatturazione",
     "billingPortalError": "Impossibile aprire il portale di fatturazione",
-    "checkoutError": "Failed to start checkout",
+    "checkoutError": "Impossibile avviare il pagamento",
     "upgradeTitle": "Aggiorna piano",
     "upgradeTitle": "Aggiorna piano",
     "upgradeDescription": "Sblocca più funzionalità aggiornando il tuo piano.",
     "upgradeDescription": "Sblocca più funzionalità aggiornando il tuo piano.",
     "upgradeToProDescription": "Aggiorna per sbloccare clienti illimitati, membri del team, report, SMTP, accesso API e altro.",
     "upgradeToProDescription": "Aggiorna per sbloccare clienti illimitati, membri del team, report, SMTP, accesso API e altro.",
@@ -1557,7 +1557,7 @@
     "biweekly": "Ogni 2 settimane",
     "biweekly": "Ogni 2 settimane",
     "monthly": "Mensile",
     "monthly": "Mensile",
     "bimonthly": "Ogni 2 mesi",
     "bimonthly": "Ogni 2 mesi",
-    "quarterly": "Ogni 4 mesi",
+    "quarterly": "Ogni 3 mesi",
     "semiannually": "Ogni 6 mesi",
     "semiannually": "Ogni 6 mesi",
     "yearly": "Annuale",
     "yearly": "Annuale",
     "dateRangeLabel": "Periodo",
     "dateRangeLabel": "Periodo",
@@ -1596,10 +1596,10 @@
     "deleted": "Pianificazione report eliminata",
     "deleted": "Pianificazione report eliminata",
     "toggledOn": "Pianificazione report attivata",
     "toggledOn": "Pianificazione report attivata",
     "toggledOff": "Pianificazione report disattivata",
     "toggledOff": "Pianificazione report disattivata",
-    "failedSave": "Failed to save",
-    "failedSend": "Failed to send",
-    "failedToggle": "Failed to toggle",
-    "failedDelete": "Failed to delete",
+    "failedSave": "Salvataggio non riuscito",
+    "failedSend": "Invio non riuscito",
+    "failedToggle": "Impossibile cambiare lo stato",
+    "failedDelete": "Eliminazione non riuscita",
     "noMembers": "Nessun membro trovato",
     "noMembers": "Nessun membro trovato",
     "addRecipient": "Aggiungi destinatario...",
     "addRecipient": "Aggiungi destinatario...",
     "searchMembers": "Cerca membri...",
     "searchMembers": "Cerca membri...",

+ 6 - 6
messages/it/share.json

@@ -34,8 +34,8 @@
     "total": "Totale",
     "total": "Totale",
     "labor": "Manodopera",
     "labor": "Manodopera",
     "hours": "Ore",
     "hours": "Ore",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "ore",
+    "unit": "unità",
     "qtyOrHours": "Unità / Ore",
     "qtyOrHours": "Unità / Ore",
     "rate": "Tariffa",
     "rate": "Tariffa",
     "ratePerHour": "{rate}/ora",
     "ratePerHour": "{rate}/ora",
@@ -93,8 +93,8 @@
     "labor": "Manodopera",
     "labor": "Manodopera",
     "laborDescription": "Descrizione",
     "laborDescription": "Descrizione",
     "hours": "Ore",
     "hours": "Ore",
-    "hrs": "hrs",
-    "unit": "unit",
+    "hrs": "ore",
+    "unit": "unità",
     "qtyOrHours": "Unità / Ore",
     "qtyOrHours": "Unità / Ore",
     "rate": "Tariffa",
     "rate": "Tariffa",
     "ratePerHour": "{rate}/ora",
     "ratePerHour": "{rate}/ora",
@@ -200,7 +200,7 @@
     "privacyNotice": "Questo rapporto le viene fornito dall'officina che ha eseguito il controllo. È consultabile da chiunque disponga di questo link: la preghiamo di non inoltrarlo. Contatti l'officina per revocare il link o cancellare i suoi dati."
     "privacyNotice": "Questo rapporto le viene fornito dall'officina che ha eseguito il controllo. È consultabile da chiunque disponga di questo link: la preghiamo di non inoltrarlo. Contatti l'officina per revocare il link o cancellare i suoi dati."
   },
   },
   "terms": {
   "terms": {
-    "title": "Condizioni di Vendita (Salgsvilkår)",
+    "title": "Condizioni di Vendita",
     "contact": "Contatto",
     "contact": "Contatto",
     "tel": "Tel: {phone}"
     "tel": "Tel: {phone}"
   },
   },
@@ -222,7 +222,7 @@
     "submitError": "Invio della richiesta non riuscito"
     "submitError": "Invio della richiesta non riuscito"
   },
   },
   "common": {
   "common": {
-    "poweredBy": "Powered by",
+    "poweredBy": "Realizzato con",
     "termsOfSale": "Condizioni di Vendita",
     "termsOfSale": "Condizioni di Vendita",
     "portalMessage": "Visualizza i tuoi veicoli, fatture e altro nel tuo",
     "portalMessage": "Visualizza i tuoi veicoli, fatture e altro nel tuo",
     "customerPortal": "portale clienti",
     "customerPortal": "portale clienti",

+ 1 - 1
messages/it/statusReport.json

@@ -14,7 +14,7 @@
     "createAndSend": "Crea e invia",
     "createAndSend": "Crea e invia",
     "cancel": "Annulla",
     "cancel": "Annulla",
     "uploadFailed": "Caricamento video non riuscito",
     "uploadFailed": "Caricamento video non riuscito",
-    "createReportFailed": "Failed to create status report",
+    "createReportFailed": "Impossibile creare il rapporto di stato",
     "created": "Rapporto di stato creato",
     "created": "Rapporto di stato creato",
     "noVideo": "Carica prima un video",
     "noVideo": "Carica prima un video",
     "removeVideo": "Rimuovi video",
     "removeVideo": "Rimuovi video",

+ 3 - 3
messages/it/telegram.json

@@ -5,8 +5,8 @@
     "label": "Token del bot",
     "label": "Token del bot",
     "placeholder": "Inserisci il token da @BotFather",
     "placeholder": "Inserisci il token da @BotFather",
     "help": "Crea un bot tramite @BotFather su Telegram per ottenere il tuo token.",
     "help": "Crea un bot tramite @BotFather su Telegram per ottenere il tuo token.",
-    "show": "Show token",
-    "hide": "Hide token"
+    "show": "Mostra token",
+    "hide": "Nascondi token"
   },
   },
   "botUsername": {
   "botUsername": {
     "label": "Nome utente del bot",
     "label": "Nome utente del bot",
@@ -20,7 +20,7 @@
     "title": "Link di connessione cliente",
     "title": "Link di connessione cliente",
     "description": "Condividi questo link con i clienti per connettersi al tuo bot. Sostituisci il segnaposto dell'ID cliente con l'ID reale.",
     "description": "Condividi questo link con i clienti per connettersi al tuo bot. Sostituisci il segnaposto dell'ID cliente con l'ID reale.",
     "copied": "Link copiato!",
     "copied": "Link copiato!",
-    "copy": "Copy deep link"
+    "copy": "Copia link diretto"
   },
   },
   "test": {
   "test": {
     "title": "Messaggio di prova",
     "title": "Messaggio di prova",

+ 1 - 1
messages/it/telegramMessages.json

@@ -31,7 +31,7 @@
     "messageDeleted": "Messaggio eliminato",
     "messageDeleted": "Messaggio eliminato",
     "deleteError": "Eliminazione messaggio fallita",
     "deleteError": "Eliminazione messaggio fallita",
     "sendError": "Invio messaggio fallito",
     "sendError": "Invio messaggio fallito",
-    "sendMessage": "Send message"
+    "sendMessage": "Invia messaggio"
   },
   },
   "sendDialog": {
   "sendDialog": {
     "send": "Invia {label}",
     "send": "Invia {label}",

+ 24 - 24
messages/it/vehicles.json

@@ -28,10 +28,10 @@
     "unarchiveError": "Impossibile ripristinare il veicolo",
     "unarchiveError": "Impossibile ripristinare il veicolo",
     "deleteError": "Impossibile eliminare il veicolo",
     "deleteError": "Impossibile eliminare il veicolo",
     "error": "Impossibile caricare i veicoli",
     "error": "Impossibile caricare i veicoli",
-    "viewTable": "Table view",
-    "viewGrid": "Grid view",
-    "viewLargeGrid": "Large grid view",
-    "openMenu": "Open menu",
+    "viewTable": "Vista tabella",
+    "viewGrid": "Vista griglia",
+    "viewLargeGrid": "Vista griglia grande",
+    "openMenu": "Apri menu",
     "inspectionOverdue": "Revisione scaduta",
     "inspectionOverdue": "Revisione scaduta",
     "inspectionDue30": "Scade entro 30 giorni",
     "inspectionDue30": "Scade entro 30 giorni",
     "inspectionDue90": "Scade entro 90 giorni",
     "inspectionDue90": "Scade entro 90 giorni",
@@ -95,8 +95,8 @@
     "severityModerate": "Moderato — segnalato da alcuni proprietari",
     "severityModerate": "Moderato — segnalato da alcuni proprietari",
     "severityUncommon": "Non comune — segnalato da pochi proprietari",
     "severityUncommon": "Non comune — segnalato da pochi proprietari",
     "severityRare": "Raro — segnalazioni isolate ma critico quando si verifica",
     "severityRare": "Raro — segnalazioni isolate ma critico quando si verifica",
-    "openMenu": "Open menu",
-    "dismissMaintenance": "Dismiss",
+    "openMenu": "Apri menu",
+    "dismissMaintenance": "Ignora",
     "inspectionDue": "Revisione il {date}",
     "inspectionDue": "Revisione il {date}",
     "inspectionCheckedAt": "Verificato nel registro il {date}",
     "inspectionCheckedAt": "Verificato nel registro il {date}",
     "notRegistered": "Non immatricolato",
     "notRegistered": "Non immatricolato",
@@ -184,10 +184,10 @@
     "showing": "Visualizzando {start}-{end} di {total}",
     "showing": "Visualizzando {start}-{end} di {total}",
     "perPage": "per pagina",
     "perPage": "per pagina",
     "page": "Pagina {page} di {totalPages}",
     "page": "Pagina {page} di {totalPages}",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "firstPage": "Prima pagina",
+    "previousPage": "Pagina precedente",
+    "nextPage": "Pagina successiva",
+    "lastPage": "Ultima pagina"
   },
   },
   "notes": {
   "notes": {
     "addNote": "Aggiungi Nota",
     "addNote": "Aggiungi Nota",
@@ -213,11 +213,11 @@
     "noteCreated": "Nota creata",
     "noteCreated": "Nota creata",
     "titleRequired": "Titolo e contenuto sono obbligatori",
     "titleRequired": "Titolo e contenuto sono obbligatori",
     "saveError": "Impossibile salvare la nota",
     "saveError": "Impossibile salvare la nota",
-    "openMenu": "Open menu",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "openMenu": "Apri menu",
+    "firstPage": "Prima pagina",
+    "previousPage": "Pagina precedente",
+    "nextPage": "Pagina successiva",
+    "lastPage": "Ultima pagina"
   },
   },
   "findings": {
   "findings": {
     "sectionTitle": "Osservazioni",
     "sectionTitle": "Osservazioni",
@@ -266,11 +266,11 @@
     "showing": "Visualizzando {start}-{end} di {total}",
     "showing": "Visualizzando {start}-{end} di {total}",
     "perPage": "per pagina",
     "perPage": "per pagina",
     "page": "Pagina {page} di {totalPages}",
     "page": "Pagina {page} di {totalPages}",
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page",
-    "openMenu": "Open menu",
+    "firstPage": "Prima pagina",
+    "previousPage": "Pagina precedente",
+    "nextPage": "Pagina successiva",
+    "lastPage": "Ultima pagina",
+    "openMenu": "Apri menu",
     "concernLabel": "A quale punto risponde?",
     "concernLabel": "A quale punto risponde?",
     "concernNone": "Non è qualcosa che ha segnalato il cliente"
     "concernNone": "Non è qualcosa che ha segnalato il cliente"
   },
   },
@@ -373,10 +373,10 @@
     "archiveError": "Impossibile archiviare il veicolo"
     "archiveError": "Impossibile archiviare il veicolo"
   },
   },
   "serviceRecords": {
   "serviceRecords": {
-    "firstPage": "First page",
-    "previousPage": "Previous page",
-    "nextPage": "Next page",
-    "lastPage": "Last page"
+    "firstPage": "Prima pagina",
+    "previousPage": "Pagina precedente",
+    "nextPage": "Pagina successiva",
+    "lastPage": "Ultima pagina"
   },
   },
   "inspectionReminders": {
   "inspectionReminders": {
     "title": "Promemoria revisione",
     "title": "Promemoria revisione",

+ 7 - 7
messages/it/workBoard.json

@@ -8,10 +8,10 @@
     "week": "Settimana",
     "week": "Settimana",
     "presenter": "Presentatore",
     "presenter": "Presentatore",
     "addTechnician": "Aggiungi Tecnico",
     "addTechnician": "Aggiungi Tecnico",
-    "previousWeek": "Previous week",
-    "nextWeek": "Next week",
-    "previousDay": "Previous day",
-    "nextDay": "Next day",
+    "previousWeek": "Settimana precedente",
+    "nextWeek": "Settimana successiva",
+    "previousDay": "Giorno precedente",
+    "nextDay": "Giorno successivo",
     "groupBy": "Colonne",
     "groupBy": "Colonne",
     "byTechnician": "Una colonna per tecnico",
     "byTechnician": "Una colonna per tecnico",
     "byBay": "Una colonna per postazione",
     "byBay": "Una colonna per postazione",
@@ -20,7 +20,7 @@
     "add": "Aggiungi",
     "add": "Aggiungi",
     "addBay": "Aggiungi postazione",
     "addBay": "Aggiungi postazione",
     "weekNumber": "Sett. {number}",
     "weekNumber": "Sett. {number}",
-    "lanes": "Colonne",
+    "lanes": "Corsie",
     "showAllLanes": "Mostra tutte",
     "showAllLanes": "Mostra tutte",
     "onlyBusyLanes": "Solo con lavoro",
     "onlyBusyLanes": "Solo con lavoro",
     "layout": "Vista",
     "layout": "Vista",
@@ -107,8 +107,8 @@
       "waitingParts": "In Attesa di Pezzi",
       "waitingParts": "In Attesa di Pezzi",
       "completed": "Completato"
       "completed": "Completato"
     },
     },
-    "previous": "Previous",
-    "next": "Next",
+    "previous": "Precedente",
+    "next": "Successivo",
     "groupingUnused": "La lavagna di stato raggruppa per stato",
     "groupingUnused": "La lavagna di stato raggruppa per stato",
     "connecting": "Connessione…"
     "connecting": "Connessione…"
   },
   },

+ 1 - 1
messages/it/workOrders.json

@@ -34,7 +34,7 @@
       "total": "Totale"
       "total": "Totale"
     },
     },
     "emailSubject": "Aggiornamento Stato Veicolo: {status}",
     "emailSubject": "Aggiornamento Stato Veicolo: {status}",
-    "changeStatus": "Change status",
+    "changeStatus": "Cambia stato",
     "contextMenu": {
     "contextMenu": {
       "open": "Apri ordine di lavoro",
       "open": "Apri ordine di lavoro",
       "openVehicle": "Apri veicolo",
       "openVehicle": "Apri veicolo",

+ 1 - 1
messages/lt/admin.json

@@ -117,7 +117,7 @@
     "sendgridApiKeyHint": "Gaukite API raktą iš app.sendgrid.com"
     "sendgridApiKeyHint": "Gaukite API raktą iš app.sendgrid.com"
   },
   },
   "common": {
   "common": {
-    "openMenu": "Open menu"
+    "openMenu": "Atidaryti meniu"
   },
   },
   "userDetails": {
   "userDetails": {
     "back": "Atgal į vartotojus",
     "back": "Atgal į vartotojus",

+ 2 - 2
messages/lt/calendar.json

@@ -144,6 +144,6 @@
       "readOnly": "Užimtas laikas iš prijungto kalendoriaus. Keiskite jį ten, čia atsinaujins per kitą sinchronizaciją."
       "readOnly": "Užimtas laikas iš prijungto kalendoriaus. Keiskite jį ten, čia atsinaujins per kitą sinchronizaciją."
     }
     }
   },
   },
-  "previousMonth": "Previous month",
-  "nextMonth": "Next month"
+  "previousMonth": "Ankstesnis mėnuo",
+  "nextMonth": "Kitas mėnuo"
 }
 }

+ 2 - 2
messages/lt/customers.json

@@ -20,14 +20,14 @@
     "assignNumbers": "Priskirti numerius",
     "assignNumbers": "Priskirti numerius",
     "assignNumbersTitle": "Priskirti klientų numerius?",
     "assignNumbersTitle": "Priskirti klientų numerius?",
     "assignNumbersDescription": "{count, plural, one {# klientas dar neturi} few {# klientai dar neturi} many {# klientų dar neturi} other {# klientų dar neturi}} numerio. Kiekvienas gauna kitą numerį iš eilės, seniausi pirmi. Klientai, kurie jau turi numerį, nekeičiami.",
     "assignNumbersDescription": "{count, plural, one {# klientas dar neturi} few {# klientai dar neturi} many {# klientų dar neturi} other {# klientų dar neturi}} numerio. Kiekvienas gauna kitą numerį iš eilės, seniausi pirmi. Klientai, kurie jau turi numerį, nekeičiami.",
-    "assignNumbersDone": "Sunumeruota klientų: {count}",
+    "assignNumbersDone": "{count, plural, one {Sunumeruotas # klientas} few {Sunumeruoti # klientai} many {Sunumeruota # kliento} other {Sunumeruota # klientų}}",
     "selectedCount": "{count} pasirinkta",
     "selectedCount": "{count} pasirinkta",
     "clearSelection": "Valyti",
     "clearSelection": "Valyti",
     "batchDelete": "Ištrinti ({count})",
     "batchDelete": "Ištrinti ({count})",
     "batchDeleteTitle": "Ištrinti klientus",
     "batchDeleteTitle": "Ištrinti klientus",
     "batchDeleteDescription": "Ištrinti {count} klientą(-ų)? Bus atsiejamos jų transporto priemonės.",
     "batchDeleteDescription": "Ištrinti {count} klientą(-ų)? Bus atsiejamos jų transporto priemonės.",
     "batchDeleteSuccess": "{count} klientas(-ų) ištrintas",
     "batchDeleteSuccess": "{count} klientas(-ų) ištrintas",
-    "openMenu": "Open menu"
+    "openMenu": "Atidaryti meniu"
   },
   },
   "detail": {
   "detail": {
     "backToCustomers": "Grįžti prie klientų",
     "backToCustomers": "Grįžti prie klientų",

+ 4 - 4
messages/lt/dashboard.json

@@ -74,8 +74,8 @@
     "noDismissed": "Nėra atmestų transporto priemonių.",
     "noDismissed": "Nėra atmestų transporto priemonių.",
     "dismissedOn": "Atmesta {date}",
     "dismissedOn": "Atmesta {date}",
     "restore": "Atkurti",
     "restore": "Atkurti",
-    "settingsAriaLabel": "Maintenance settings",
-    "dismissAriaLabel": "Dismiss"
+    "settingsAriaLabel": "Priežiūros nustatymai",
+    "dismissAriaLabel": "Atmesti"
   },
   },
   "reminders": {
   "reminders": {
     "title": "Artėjantys priminimai",
     "title": "Artėjantys priminimai",
@@ -112,7 +112,7 @@
     "createQuote": "Sukurti pasiūlymą",
     "createQuote": "Sukurti pasiūlymą",
     "itemsRequested": "{count, plural, one {# elementas prašomas} other {# elementai prašomi}}",
     "itemsRequested": "{count, plural, one {# elementas prašomas} other {# elementai prašomi}}",
     "noData": "Laukiančių pasiūlymų užklausų nėra.",
     "noData": "Laukiančių pasiūlymų užklausų nėra.",
-    "dismissAriaLabel": "Dismiss quote request"
+    "dismissAriaLabel": "Atmesti pasiūlymo užklausą"
   },
   },
   "quoteResponses": {
   "quoteResponses": {
     "title": "Klientų atsakymai į pasiūlymus",
     "title": "Klientų atsakymai į pasiūlymus",
@@ -124,7 +124,7 @@
     "viewQuote": "Peržiūrėti pasiūlymą",
     "viewQuote": "Peržiūrėti pasiūlymą",
     "view": "Peržiūrėti",
     "view": "Peržiūrėti",
     "noData": "Klientų atsakymų nėra.",
     "noData": "Klientų atsakymų nėra.",
-    "dismissAriaLabel": "Dismiss response"
+    "dismissAriaLabel": "Atmesti atsakymą"
   },
   },
   "recentCompleted": {
   "recentCompleted": {
     "title": "Neseniai užbaigti",
     "title": "Neseniai užbaigti",

+ 17 - 17
messages/lt/documentLock.json

@@ -1,27 +1,27 @@
 {
 {
   "lockedTitle": {
   "lockedTitle": {
     "invoice": {
     "invoice": {
-      "sent": "This invoice is locked because it has been sent",
-      "paid": "This invoice is locked because it has been paid"
+      "sent": "Ši sąskaita užrakinta, nes ji jau išsiųsta",
+      "paid": "Ši sąskaita užrakinta, nes ji jau apmokėta"
     },
     },
     "quote": {
     "quote": {
-      "sent": "This quote is locked because it has been sent",
-      "accepted": "This quote is locked because it has been accepted"
+      "sent": "Šis pasiūlymas užrakintas, nes jis jau išsiųstas",
+      "accepted": "Šis pasiūlymas užrakintas, nes jis jau priimtas"
     }
     }
   },
   },
-  "lockedBody": "Its parts, labour, prices, discount, tax, number and date can no longer be changed. Payments, status changes, sending and attachments all still work.",
-  "lockedAdminHint": "As an owner or admin you can unlock it if something genuinely needs correcting. The unlock is recorded in the audit log.",
-  "lockedMemberHint": "Ask an owner or admin to unlock it if something needs correcting.",
-  "unlock": "Unlock for editing",
-  "relock": "Lock again",
-  "unlockConfirmTitle": "Unlock this document?",
+  "lockedBody": "Dalių, darbų, kainų, nuolaidos, mokesčių, numerio ir datos nebegalima keisti. Mokėjimai, būsenos keitimai, siuntimas ir priedai vis dar veikia.",
+  "lockedAdminHint": "Kaip savininkas ar administratorius galite atrakinti dokumentą, jei tikrai reikia ką nors pataisyti. Atrakinimas įrašomas į audito žurnalą.",
+  "lockedMemberHint": "Jei reikia ką nors pataisyti, paprašykite savininko ar administratoriaus atrakinti dokumentą.",
+  "unlock": "Atrakinti redagavimui",
+  "relock": "Vėl užrakinti",
+  "unlockConfirmTitle": "Atrakinti šį dokumentą?",
   "unlockConfirmDescription": {
   "unlockConfirmDescription": {
-    "invoice": "It will become editable again, and the change will be recorded in the audit log with your name. Prefer a credit note where your local rules require one.",
-    "quote": "It will become editable again, and the change will be recorded in the audit log with your name."
+    "invoice": "Dokumentą vėl bus galima redaguoti, o pakeitimas bus įrašytas į audito žurnalą su jūsų vardu. Jei to reikalauja vietinės taisyklės, verčiau išrašykite kreditinę sąskaitą.",
+    "quote": "Dokumentą vėl bus galima redaguoti, o pakeitimas bus įrašytas į audito žurnalą su jūsų vardu."
   },
   },
-  "unlocked": "Unlocked for editing",
-  "relocked": "Locked again",
-  "reopenedTitle": "This document has been unlocked for editing",
-  "reopenedBody": "It stays editable until it is locked again.",
-  "failed": "Could not change the lock"
+  "unlocked": "Atrakinta redagavimui",
+  "relocked": "Vėl užrakinta",
+  "reopenedTitle": "Šis dokumentas atrakintas redagavimui",
+  "reopenedBody": "Jį bus galima redaguoti, kol jis vėl bus užrakintas.",
+  "failed": "Nepavyko pakeisti užrakto"
 }
 }

Некоторые файлы не были показаны из-за большого количества измененных файлов