feat(i18n): Add time blocks translations and fix deployment

- Add comprehensive timeBlocks translations (ES, FR, DE, EN)
- Add myAvailability translations (ES, FR, DE, EN)
- Add full helpTimeBlocks guide content (ES, FR, DE, EN)
- Add contracts guide translations (ES)
- Fix DATABASE_URL env var in deploy.sh for seed_platform_plugins
- Update Contracts page and HelpContracts guide

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-04 17:43:03 -05:00
parent 2d7c1dcd27
commit 29e99631c9
7 changed files with 1938 additions and 116 deletions

View File

@@ -1067,5 +1067,344 @@
}
}
}
},
"contracts": {
"title": "Verträge",
"description": "Verwalten Sie Vertragsvorlagen und gesendete Verträge",
"templates": "Vorlagen",
"sentContracts": "Gesendete Verträge",
"allContracts": "Alle Verträge",
"createTemplate": "Vorlage Erstellen",
"newTemplate": "Neue Vorlage",
"createContract": "Vertrag Erstellen",
"editTemplate": "Vorlage Bearbeiten",
"viewContract": "Vertrag Anzeigen",
"noTemplates": "Noch keine Vertragsvorlagen",
"noTemplatesEmpty": "Noch keine Vorlagen. Erstellen Sie Ihre erste Vorlage, um zu beginnen.",
"noTemplatesSearch": "Keine Vorlagen gefunden",
"noContracts": "Noch keine Verträge",
"noContractsEmpty": "Noch keine Verträge gesendet.",
"noContractsSearch": "Keine Verträge gefunden",
"templateName": "Vorlagenname",
"templateDescription": "Beschreibung",
"content": "Inhalt",
"contentHtml": "Vertragsinhalt (HTML)",
"searchTemplates": "Vorlagen suchen...",
"searchContracts": "Verträge suchen...",
"all": "Alle",
"scope": {
"label": "Geltungsbereich",
"customer": "Kundenebene",
"appointment": "Pro Termin",
"customerDesc": "Einmalige Verträge pro Kunde (z.B. Datenschutzrichtlinie, AGB)",
"appointmentDesc": "Wird bei jeder Buchung unterschrieben (z.B. Haftungsausschlüsse, Dienstleistungsvereinbarungen)"
},
"status": {
"label": "Status",
"draft": "Entwurf",
"active": "Aktiv",
"archived": "Archiviert",
"pending": "Ausstehend",
"signed": "Unterschrieben",
"expired": "Abgelaufen",
"voided": "Storniert"
},
"table": {
"template": "Vorlage",
"scope": "Geltungsbereich",
"status": "Status",
"version": "Version",
"actions": "Aktionen",
"customer": "Kunde",
"contract": "Vertrag",
"created": "Erstellt",
"sent": "Gesendet"
},
"expiresAfterDays": "Läuft ab nach (Tagen)",
"expiresAfterDaysHint": "Leer lassen für keine Ablaufzeit",
"versionNotes": "Versionshinweise",
"versionNotesPlaceholder": "Was hat sich in dieser Version geändert?",
"services": "Anwendbare Dienstleistungen",
"servicesHint": "Leer lassen um auf alle Dienstleistungen anzuwenden",
"customer": "Kunde",
"appointment": "Termin",
"service": "Dienstleistung",
"sentAt": "Gesendet",
"signedAt": "Unterschrieben",
"expiresAt": "Läuft ab am",
"createdAt": "Erstellt",
"availableVariables": "Verfügbare Variablen",
"actions": {
"send": "Vertrag Senden",
"resend": "E-Mail Erneut Senden",
"void": "Vertrag Stornieren",
"duplicate": "Vorlage Duplizieren",
"preview": "PDF-Vorschau",
"previewFailed": "PDF-Vorschau konnte nicht geladen werden.",
"delete": "Löschen",
"edit": "Bearbeiten",
"viewDetails": "Details Anzeigen",
"copyLink": "Unterschriftslink Kopieren",
"sendEmail": "E-Mail Senden",
"openSigningPage": "Unterschriftsseite Öffnen",
"saveChanges": "Änderungen Speichern"
},
"sendContract": {
"title": "Vertrag Senden",
"selectTemplate": "Vertragsvorlage",
"selectTemplatePlaceholder": "Vorlage auswählen...",
"selectCustomer": "Kunde",
"searchCustomers": "Kunden suchen...",
"selectAppointment": "Termin Auswählen (Optional)",
"selectService": "Dienstleistung Auswählen (Optional)",
"send": "Vertrag Senden",
"sendImmediately": "Unterschriftsanfrage sofort per E-Mail senden",
"success": "Vertrag erfolgreich gesendet",
"error": "Vertrag konnte nicht gesendet werden",
"loadingCustomers": "Kunden werden geladen...",
"loadCustomersFailed": "Kunden konnten nicht geladen werden",
"noCustomers": "Keine Kunden verfügbar. Erstellen Sie zuerst Kunden.",
"noMatchingCustomers": "Keine passenden Kunden"
},
"voidContract": {
"title": "Vertrag Stornieren",
"description": "Das Stornieren dieses Vertrags wird ihn widerrufen. Der Kunde kann nicht mehr unterschreiben.",
"reason": "Grund für die Stornierung",
"reasonPlaceholder": "Grund eingeben...",
"confirm": "Vertrag Stornieren",
"success": "Vertrag erfolgreich storniert",
"error": "Vertrag konnte nicht storniert werden"
},
"deleteTemplate": {
"title": "Vorlage Löschen",
"description": "Sind Sie sicher, dass Sie diese Vorlage löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
"confirm": "Löschen",
"success": "Vorlage erfolgreich gelöscht",
"error": "Vorlage konnte nicht gelöscht werden"
},
"contractDetails": {
"title": "Vertragsdetails",
"customer": "Kunde",
"template": "Vorlage",
"status": "Status",
"created": "Erstellt",
"contentPreview": "Inhaltsvorschau",
"signingLink": "Unterschriftslink"
},
"preview": {
"title": "Vertragsvorschau",
"sampleData": "Verwendung von Beispieldaten für die Vorschau"
},
"signing": {
"title": "Vertrag Unterschreiben",
"businessName": "{{businessName}}",
"contractFor": "Vertrag für {{customerName}}",
"pleaseReview": "Bitte überprüfen und unterschreiben Sie diesen Vertrag",
"signerName": "Ihr Vollständiger Name",
"signerNamePlaceholder": "Geben Sie Ihren rechtlichen Namen ein",
"signerEmail": "Ihre E-Mail",
"signatureLabel": "Hier Unterschreiben",
"signaturePlaceholder": "Zeichnen Sie hier Ihre Unterschrift",
"clearSignature": "Löschen",
"agreeToTerms": "Ich habe die in diesem Dokument beschriebenen Bedingungen gelesen und stimme ihnen zu. Durch das Ankreuzen dieses Kästchens verstehe ich, dass dies eine rechtsgültige elektronische Unterschrift darstellt.",
"consentToElectronic": "Ich stimme zu, Geschäfte elektronisch abzuwickeln. Ich verstehe, dass ich das Recht habe, Dokumente auf Anfrage in Papierform zu erhalten, und kann diese Zustimmung jederzeit widerrufen.",
"submitSignature": "Vertrag Unterschreiben",
"submitting": "Unterschrift wird verarbeitet...",
"success": "Vertrag erfolgreich unterschrieben!",
"successMessage": "Sie erhalten eine Bestätigungs-E-Mail mit einer Kopie des unterschriebenen Vertrags.",
"error": "Vertrag konnte nicht unterschrieben werden",
"expired": "Dieser Vertrag ist abgelaufen",
"alreadySigned": "Dieser Vertrag wurde bereits unterschrieben",
"notFound": "Vertrag nicht gefunden",
"voided": "Dieser Vertrag wurde storniert",
"signedBy": "Unterschrieben von {{name}} am {{date}}",
"thankYou": "Vielen Dank für Ihre Unterschrift!",
"loading": "Vertrag wird geladen...",
"geolocationHint": "Der Standort wird für rechtliche Konformität aufgezeichnet"
},
"errors": {
"loadFailed": "Verträge konnten nicht geladen werden",
"createFailed": "Vertrag konnte nicht erstellt werden",
"updateFailed": "Vertrag konnte nicht aktualisiert werden",
"deleteFailed": "Vertrag konnte nicht gelöscht werden",
"sendFailed": "Vertrag konnte nicht gesendet werden",
"voidFailed": "Vertrag konnte nicht storniert werden"
}
},
"timeBlocks": {
"title": "Zeitblöcke",
"subtitle": "Verwalten Sie Betriebsschließungen, Feiertage und Ressourcenverfügbarkeit",
"addBlock": "Block Hinzufügen",
"businessTab": "Geschäftsblöcke",
"resourceTab": "Ressourcenblöcke",
"calendarTab": "Jahresansicht",
"businessInfo": "Geschäftsblöcke gelten für alle Ressourcen. Verwenden Sie diese für Feiertage, Betriebsschließungen und unternehmensweite Ereignisse.",
"noBusinessBlocks": "Keine Geschäftsblöcke",
"noBusinessBlocksDesc": "Fügen Sie Feiertage und Betriebsschließungen hinzu, um Buchungen während dieser Zeiten zu verhindern.",
"addFirstBlock": "Ersten Block Hinzufügen",
"titleCol": "Titel",
"typeCol": "Typ",
"patternCol": "Muster",
"actionsCol": "Aktionen",
"resourceInfo": "Ressourcenblöcke gelten für bestimmtes Personal oder Ausrüstung. Verwenden Sie diese für Urlaub, Wartung oder persönliche Zeit.",
"noResourceBlocks": "Keine Ressourcenblöcke",
"noResourceBlocksDesc": "Fügen Sie Zeitblöcke für bestimmte Ressourcen hinzu, um deren Verfügbarkeit zu verwalten.",
"deleteConfirmTitle": "Zeitblock Löschen?",
"deleteConfirmDesc": "Diese Aktion kann nicht rückgängig gemacht werden.",
"blockTypes": {
"hard": "Harte Blockierung",
"soft": "Weiche Blockierung"
},
"recurrenceTypes": {
"none": "Einmalig",
"weekly": "Wöchentlich",
"monthly": "Monatlich",
"yearly": "Jährlich",
"holiday": "Feiertag"
},
"inactive": "Inaktiv",
"activate": "Aktivieren",
"deactivate": "Deaktivieren"
},
"myAvailability": {
"title": "Meine Verfügbarkeit",
"subtitle": "Verwalten Sie Ihre freien Tage und Abwesenheiten",
"noResource": "Keine Ressource Verknüpft",
"noResourceDesc": "Ihr Konto ist nicht mit einer Ressource verknüpft. Bitte kontaktieren Sie Ihren Manager, um Ihre Verfügbarkeit einzurichten.",
"addBlock": "Zeit Blockieren",
"businessBlocks": "Betriebsschließungen",
"businessBlocksInfo": "Diese Blöcke werden von Ihrem Unternehmen festgelegt und gelten für alle.",
"myBlocks": "Meine Zeitblöcke",
"noBlocks": "Keine Zeitblöcke",
"noBlocksDesc": "Fügen Sie Zeitblöcke für Urlaub, Mittagspausen oder andere benötigte Auszeiten hinzu.",
"addFirstBlock": "Ersten Block Hinzufügen",
"titleCol": "Titel",
"typeCol": "Typ",
"patternCol": "Muster",
"actionsCol": "Aktionen",
"editBlock": "Zeitblock Bearbeiten",
"createBlock": "Auszeit Blockieren",
"create": "Blockieren",
"deleteConfirmTitle": "Zeitblock Löschen?",
"deleteConfirmDesc": "Diese Aktion kann nicht rückgängig gemacht werden.",
"form": {
"title": "Titel",
"description": "Beschreibung",
"blockType": "Blocktyp",
"recurrenceType": "Wiederholung",
"allDay": "Ganztägig",
"startDate": "Startdatum",
"endDate": "Enddatum",
"startTime": "Startzeit",
"endTime": "Endzeit",
"daysOfWeek": "Wochentage",
"daysOfMonth": "Tage des Monats"
}
},
"helpTimeBlocks": {
"title": "Zeitblöcke Anleitung",
"subtitle": "Erfahren Sie, wie Sie Zeit für Schließungen, Feiertage und Abwesenheiten blockieren",
"overview": {
"title": "Was sind Zeitblöcke?",
"description": "Mit Zeitblöcken können Sie bestimmte Daten, Zeiten oder wiederkehrende Zeiträume als nicht buchbar markieren. Verwenden Sie sie für Feiertage, Betriebsschließungen, Mitarbeiterurlaub, Wartungsfenster und mehr.",
"businessBlocks": "Geschäftsblöcke",
"businessBlocksDesc": "Gelten für alle Ressourcen. Perfekt für Unternehmensfeiertage, Büroschließungen und Wartung.",
"resourceBlocks": "Ressourcenblöcke",
"resourceBlocksDesc": "Gelten für bestimmte Ressourcen. Verwenden Sie sie für individuelle Urlaube, Termine oder Schulungen.",
"hardBlocks": "Harte Blockierungen",
"hardBlocksDesc": "Verhindern Buchungen während der blockierten Zeit vollständig. Können nicht überschrieben werden.",
"softBlocks": "Weiche Blockierungen",
"softBlocksDesc": "Zeigen eine Warnung an, erlauben aber Buchungen mit Bestätigung."
},
"levels": {
"title": "Blockebenen",
"levelCol": "Ebene",
"scopeCol": "Umfang",
"examplesCol": "Anwendungsbeispiele",
"business": "Geschäft",
"businessScope": "Alle Ressourcen in Ihrem Unternehmen",
"businessExamples": "Feiertage, Büroschließungen, Firmenveranstaltungen, Wartung",
"resource": "Ressource",
"resourceScope": "Eine bestimmte Ressource (Mitarbeiter, Raum, etc.)",
"resourceExamples": "Urlaub, persönliche Termine, Mittagspausen, Schulung",
"additiveNote": "Blöcke sind Additiv",
"additiveDesc": "Sowohl Geschäfts- als auch Ressourcenblöcke gelten. Wenn das Geschäft an einem Feiertag geschlossen ist, spielen individuelle Ressourcenblöcke für diesen Tag keine Rolle."
},
"types": {
"title": "Blocktypen: Hart vs Weich",
"hardBlock": "Harte Blockierung",
"hardBlockDesc": "Verhindert jegliche Buchungen während der blockierten Zeit vollständig. Kunden können nicht buchen und Mitarbeiter können nicht überschreiben. Der Kalender zeigt eine rot gestreifte Überlagerung.",
"cannotOverride": "Kann nicht überschrieben werden",
"showsInBooking": "Wird bei Kundenbuchungen angezeigt",
"redOverlay": "Rot gestreifte Überlagerung",
"softBlock": "Weiche Blockierung",
"softBlockDesc": "Zeigt eine Warnung an, erlaubt aber Buchungen mit Bestätigung. Nützlich um bevorzugte Ruhezeiten anzuzeigen, die bei Bedarf überschrieben werden können.",
"canOverride": "Kann überschrieben werden",
"showsWarning": "Zeigt nur Warnung an",
"yellowOverlay": "Gelb gestrichelte Überlagerung"
},
"recurrence": {
"title": "Wiederholungsmuster",
"patternCol": "Muster",
"descriptionCol": "Beschreibung",
"exampleCol": "Beispiel",
"oneTime": "Einmalig",
"oneTimeDesc": "Ein bestimmtes Datum oder Datumsbereich, der einmal auftritt",
"oneTimeExample": "24.-26. Dez (Weihnachtspause), 15. Feb (Presidents Day)",
"weekly": "Wöchentlich",
"weeklyDesc": "Wiederholt sich an bestimmten Wochentagen",
"weeklyExample": "Jeden Samstag und Sonntag, Jeden Montag Mittagspause",
"monthly": "Monatlich",
"monthlyDesc": "Wiederholt sich an bestimmten Tagen des Monats",
"monthlyExample": "1. jeden Monats (Inventur), 15. (Gehaltsabrechnung)",
"yearly": "Jährlich",
"yearlyDesc": "Wiederholt sich an einem bestimmten Monat und Tag jedes Jahr",
"yearlyExample": "4. Juli, 25. Dezember, 1. Januar",
"holiday": "Feiertag",
"holidayDesc": "Wählen Sie aus beliebten US-Feiertagen. Mehrfachauswahl unterstützt - jeder Feiertag erstellt seinen eigenen Block.",
"holidayExample": "Weihnachten, Thanksgiving, Memorial Day, Unabhängigkeitstag"
},
"visualization": {
"title": "Zeitblöcke Anzeigen",
"description": "Zeitblöcke erscheinen in mehreren Ansichten der Anwendung mit farbcodierten Indikatoren:",
"colorLegend": "Farblegende",
"businessHard": "Harter Geschäftsblock",
"businessSoft": "Weicher Geschäftsblock",
"resourceHard": "Harter Ressourcenblock",
"resourceSoft": "Weicher Ressourcenblock",
"schedulerOverlay": "Kalenderüberlagerung",
"schedulerOverlayDesc": "Blockierte Zeiten erscheinen direkt im Kalender mit visuellen Indikatoren. Geschäftsblöcke verwenden Rot/Gelb, Ressourcenblöcke verwenden Lila/Cyan. Klicken Sie in der Wochenansicht auf einen blockierten Bereich, um zu diesem Tag zu navigieren.",
"monthView": "Monatsansicht",
"monthViewDesc": "Blockierte Daten werden mit farbigen Hintergründen und Badge-Indikatoren angezeigt. Mehrere Blocktypen am selben Tag zeigen alle anwendbaren Badges.",
"listView": "Listenansicht",
"listViewDesc": "Verwalten Sie alle Zeitblöcke in tabellarischem Format mit Filteroptionen. Bearbeiten, aktivieren/deaktivieren oder löschen Sie Blöcke von hier."
},
"staffAvailability": {
"title": "Mitarbeiterverfügbarkeit (Meine Verfügbarkeit)",
"description": "Mitarbeiter können ihre eigenen Zeitblöcke über die Seite \"Meine Verfügbarkeit\" verwalten. Dies ermöglicht es ihnen, Zeit für persönliche Termine, Urlaub oder andere Verpflichtungen zu blockieren.",
"viewBusiness": "Geschäftsblöcke anzeigen (schreibgeschützt)",
"createPersonal": "Persönliche Zeitblöcke erstellen und verwalten",
"seeCalendar": "Jahreskalender ihrer Verfügbarkeit anzeigen",
"hardBlockPermission": "Berechtigung für Harte Blockierungen",
"hardBlockPermissionDesc": "Standardmäßig können Mitarbeiter nur weiche Blockierungen erstellen. Um einem Mitarbeiter die Erstellung harter Blockierungen zu ermöglichen, aktivieren Sie die Berechtigung \"Kann harte Blockierungen erstellen\" in dessen Mitarbeitereinstellungen."
},
"bestPractices": {
"title": "Bewährte Praktiken",
"tip1Title": "Planen Sie Feiertage im Voraus",
"tip1Desc": "Richten Sie jährliche Feiertage zu Beginn jedes Jahres mit dem Wiederholungstyp Feiertag ein.",
"tip2Title": "Verwenden Sie weiche Blockierungen für Präferenzen",
"tip2Desc": "Reservieren Sie harte Blockierungen für absolute Schließungen. Verwenden Sie weiche Blockierungen für bevorzugte Ruhezeiten, die überschrieben werden könnten.",
"tip3Title": "Prüfen Sie Konflikte vor dem Erstellen",
"tip3Desc": "Das System zeigt bestehende Termine an, die mit neuen Blöcken in Konflikt stehen. Überprüfen Sie vor der Bestätigung.",
"tip4Title": "Setzen Sie Enddaten für Wiederholungen",
"tip4Desc": "Für wiederkehrende Blöcke, die nicht permanent sind, setzen Sie ein Enddatum, um zu verhindern, dass sie sich unbegrenzt erstrecken.",
"tip5Title": "Verwenden Sie beschreibende Titel",
"tip5Desc": "Fügen Sie klare Titel wie \"Weihnachtstag\", \"Teambesprechung\" oder \"Jährliche Wartung\" zur einfachen Identifikation hinzu."
},
"quickAccess": {
"title": "Schnellzugriff",
"manageTimeBlocks": "Zeitblöcke Verwalten",
"myAvailability": "Meine Verfügbarkeit"
}
}
}