i18n(contracts): German translations for the contract detail page

The whole contracts.detail.* namespace was English-fallback-only, so the
contract detail page rendered English in German. Add all 64 keys to en +
de (native German), covering actions, signing/counter-sign, audit trail,
convert, and PDF flows. Also dedupe a duplicate events.createInvoice key
(identical value).
This commit is contained in:
Luca
2026-06-03 14:49:22 +02:00
parent 807ae3d4fa
commit e8960a41cf
2 changed files with 130 additions and 4 deletions
+65 -2
View File
@@ -863,7 +863,6 @@
"copyLink": "Link kopieren", "copyLink": "Link kopieren",
"linkCopied": "Link kopiert!", "linkCopied": "Link kopiert!",
"viewGallery": "Galerie ansehen", "viewGallery": "Galerie ansehen",
"createInvoice": "Rechnung erstellen",
"uploadPhotos": "Fotos hochladen", "uploadPhotos": "Fotos hochladen",
"archiveEvent": "Veranstaltung archivieren", "archiveEvent": "Veranstaltung archivieren",
"archiveConfirm": "Sind Sie sicher, dass Sie diese Veranstaltung archivieren möchten? Diese Aktion kann nicht rückgängig gemacht werden.", "archiveConfirm": "Sind Sie sicher, dass Sie diese Veranstaltung archivieren möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
@@ -4192,7 +4191,71 @@
"expected": "erwartet", "expected": "erwartet",
"actual": "tatsächlich", "actual": "tatsächlich",
"error": "Integritätsprüfung fehlgeschlagen." "error": "Integritätsprüfung fehlgeschlagen."
} },
"alreadyEventToast": "Bereits mit einem Anlass verknüpft.",
"auditEmpty": "Noch keine Audit-Log-Einträge.",
"auditTrail": "Audit-Verlauf",
"auditTrailHelp": "Jedes auf diesem Vertrag erfasste Ereignis. Die Liste ist anhängend (append-only) und ist die Quelle der Wahrheit, falls der Vertrag angefochten wird.",
"back": "Zurück zur Liste",
"blocks": "Enthaltene Bausteine",
"cancel": "Stornieren",
"cancelConfirm": "Diesen Vertrag stornieren? Der Signatur-Link des Kunden wird ungültig.",
"cancelError": "Stornierung fehlgeschlagen",
"cancelledToast": "Vertrag storniert.",
"clearSignature": "Löschen",
"confirmConvertEvent": "Diesen Vertrag in einen Anlass + geplante Rechnungen umwandeln?",
"confirmConvertInvoice": "Diesen Vertrag nur in Rechnung(en) umwandeln? Es wird keine Galerie / kein Anlass erstellt.",
"confirmCountersign": "Gegenzeichnen",
"confirmResendSigned": "Das signierte Vertrags-PDF erneut an beide Parteien senden?",
"confirmRestamp": "PDF neu stempeln & neu rendern",
"convertError": "Umwandlung fehlgeschlagen",
"convertToEvent": "In Anlass umwandeln",
"convertToInvoice": "Nur in Rechnung umwandeln",
"convertedToEvent": "In Anlass umgewandelt",
"convertedToEventToast": "Vertrag in Anlass #{{id}} umgewandelt",
"convertedToInvoiceToast": "{{count}} Rechnung(en) aus diesem Vertrag erstellt",
"countersignError": "Gegenzeichnen fehlgeschlagen",
"countersignHelp": "Geben Sie Ihren Namen ein UND zeichnen Sie unten Ihre Unterschrift — beide werden auf das neu gerenderte PDF gestempelt. IP und Zeitstempel werden für das Audit erfasst.",
"countersignSignaturePrompt": "Zeichnen Sie Ihre Unterschrift",
"countersignTitle": "Gegenzeichnen, um den Vertrag bindend zu machen",
"countersignedToast": "Gegengezeichnet.",
"customer": "Kunde",
"dates": "Daten",
"downloadPdf": "PDF herunterladen",
"downloadSignedPdf": "Signiertes PDF herunterladen",
"edit": "Bearbeiten",
"fromQuote": "Aus Angebot",
"issued": "Ausgestellt",
"linkedInvoice": "Rechnung",
"newInvoice": "Neue Rechnung",
"noBlocks": "Keine Bausteine enthalten.",
"noSignatureImage": "Kein Unterschriftsbild erfasst — nutzen Sie unten „Unterschriften neu stempeln“, um eines hinzuzufügen.",
"notFound": "Vertrag nicht gefunden.",
"parties": "Parteien",
"popupBlocked": "Erlauben Sie Pop-ups für diese Seite, um die PDF-Vorschau anzuzeigen.",
"renderFailedBody": "Der Signaturnachweis ist erfasst, aber das gestempelte PDF wurde beim letzten Versuch nicht erzeugt. Klicken Sie oben auf „Signiertes PDF erneut senden“, um es aus dem Originaldokument neu zu stempeln und erneut zu senden.",
"renderFailedTitle": "Stempeln des signierten PDFs fehlgeschlagen — Neustempeln erforderlich",
"resendError": "Erneutes Senden fehlgeschlagen",
"resendSigned": "Signiertes PDF erneut senden",
"resentSignedToast": "Signierter Vertrag erneut an beide Parteien gesendet.",
"restampAdmin": "Admin-Unterschrift",
"restampCustomer": "Kundenunterschrift",
"restampError": "Neustempeln fehlgeschlagen",
"restampHelp": "Bei einer oder beiden Unterschriften wurde kein Bild erfasst. Zeichnen Sie die fehlende(n) Unterschrift(en) hier und wir rendern das PDF neu. Die bereits gespeicherten getippten Namen, Zeitstempel und IPs bleiben unverändert.",
"restampTitle": "Fehlende Unterschriften neu stempeln",
"restampedToast": "Unterschriften neu gestempelt und PDF neu gerendert.",
"send": "An Kunden senden",
"sendError": "Senden fehlgeschlagen",
"sentAt": "Gesendet am",
"sentToast": "Vertrag gesendet.",
"signBy": "Unterzeichnen bis",
"signatures": "Unterschriften",
"signedByAdmin": "Gegengezeichnet",
"signedByCustomer": "Vom Kunden signiert",
"signedNamePlaceholder": "Ihr vollständiger Name",
"uploadError": "Upload fehlgeschlagen",
"uploadSigned": "Signiertes PDF hochladen",
"uploadedToast": "Signiertes PDF hochgeladen."
}, },
"editor": { "editor": {
"back": "Zurück zur Liste", "back": "Zurück zur Liste",
+65 -2
View File
@@ -629,7 +629,6 @@
"noTemplate": "No Template", "noTemplate": "No Template",
"useThemeOnly": "Use theme preset only", "useThemeOnly": "Use theme preset only",
"customTemplate": "Custom Template", "customTemplate": "Custom Template",
"createInvoice": "Create invoice",
"rename": { "rename": {
"button": "Rename", "button": "Rename",
"title": "Rename Event", "title": "Rename Event",
@@ -4190,7 +4189,71 @@
"expected": "expected", "expected": "expected",
"actual": "actual", "actual": "actual",
"error": "Integrity check failed." "error": "Integrity check failed."
} },
"alreadyEventToast": "Already linked to an event.",
"auditEmpty": "No audit-log entries yet.",
"auditTrail": "Audit trail",
"auditTrailHelp": "Every event recorded on this contract. The list is append-only and is the source of truth if the contract is challenged.",
"back": "Back to list",
"blocks": "Included blocks",
"cancel": "Cancel",
"cancelConfirm": "Cancel this contract? Customer signing link will be invalidated.",
"cancelError": "Cancel failed",
"cancelledToast": "Contract cancelled.",
"clearSignature": "Clear",
"confirmConvertEvent": "Convert this contract into an event + scheduled invoices?",
"confirmConvertInvoice": "Convert this contract into invoice(s) only? No gallery / event will be created.",
"confirmCountersign": "Counter-sign",
"confirmResendSigned": "Re-send the signed contract PDF to both parties?",
"confirmRestamp": "Re-stamp & re-render PDF",
"convertError": "Convert failed",
"convertToEvent": "Convert to event",
"convertToInvoice": "Convert to invoice only",
"convertedToEvent": "Converted to event",
"convertedToEventToast": "Contract converted to event #{{id}}",
"convertedToInvoiceToast": "{{count}} invoice(s) created from this contract",
"countersignError": "Counter-sign failed",
"countersignHelp": "Type your name AND draw your signature below — both are stamped onto the re-rendered PDF. IP and timestamp are recorded for audit.",
"countersignSignaturePrompt": "Draw your signature",
"countersignTitle": "Counter-sign to make it binding",
"countersignedToast": "Counter-signed.",
"customer": "Customer",
"dates": "Dates",
"downloadPdf": "Download PDF",
"downloadSignedPdf": "Download signed PDF",
"edit": "Edit",
"fromQuote": "From quote",
"issued": "Issued",
"linkedInvoice": "Invoice",
"newInvoice": "New invoice",
"noBlocks": "No blocks included.",
"noSignatureImage": "No signature image captured — use \"Re-stamp signatures\" below to add one.",
"notFound": "Contract not found.",
"parties": "Parties",
"popupBlocked": "Allow pop-ups for this site to preview the PDF.",
"renderFailedBody": "The signature evidence is recorded, but the stamped PDF was not generated on the last attempt. Click \"Re-send signed PDF\" above to re-stamp from the original document and resend.",
"renderFailedTitle": "Signed PDF stamp failed — re-stamp required",
"resendError": "Resend failed",
"resendSigned": "Re-send signed PDF",
"resentSignedToast": "Signed contract re-sent to both parties.",
"restampAdmin": "Admin signature",
"restampCustomer": "Customer signature",
"restampError": "Re-stamp failed",
"restampHelp": "One or both signatures didn't capture an image. Draw the missing signature(s) here and we'll re-render the PDF. The typed names, timestamps, and IPs already on file stay untouched.",
"restampTitle": "Re-stamp missing signatures",
"restampedToast": "Signatures re-stamped and PDF re-rendered.",
"send": "Send to customer",
"sendError": "Send failed",
"sentAt": "Sent at",
"sentToast": "Contract sent.",
"signBy": "Sign by",
"signatures": "Signatures",
"signedByAdmin": "Counter-signed",
"signedByCustomer": "Signed by customer",
"signedNamePlaceholder": "Your full name",
"uploadError": "Upload failed",
"uploadSigned": "Upload signed PDF",
"uploadedToast": "Signed PDF uploaded."
}, },
"editor": { "editor": {
"back": "Back to list", "back": "Back to list",