Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 2m14s
Foundations:
- TranslationSegment model + migration f7e8d9c0b1a2 (segments, workspaces,
workspace_members, glossaries.workspace_id)
- SegmentRecorder injected into all 4 translators: unique (source,
translation) pairs captured per job and persisted (best-effort)
- set_segment_overrides: human-reviewed translations applied verbatim on
rebuild — top priority over TM and provider, zero API calls
Review API (routes/review_routes.py):
- GET /translations/{id}/segments (owner or job token)
- PATCH /segments/{id} edit/approve — feeds the per-user TM so approved
translations are reused in later jobs
- POST /translations/{id}/rebuild — rebuild document with reviewed text
- GET/POST /translations/{id}/xliff — XLIFF 1.2 export/import (edited
segments export their reviewed text)
Review editor (frontend /dashboard/reviews/[jobId]):
- side-by-side source/translation table, inline edit, approve (single or
all), rebuild & download (auth blob), XLIFF export/import, 13 locales
- 'Relire et corriger' link on the translation-complete screen
Team workspaces (routes/workspace_routes.py + /dashboard/teams):
- Workspace/WorkspaceMember models, roles owner/admin/member
- create (Business plan), list with seat usage, invite by email with
seat-limit enforcement (Business=5, Enterprise unlimited), removal
- shared glossaries: workspace members can use a glossary shared to their
workspace (access check extended)
Tests: 1184 passed / 0 failed (11 new: recorder, overrides, docx
capture->rebuild e2e, XLIFF structure/escaping, seats, workspace CRUD,
shared glossary access)
113 lines
7.5 KiB
JSON
113 lines
7.5 KiB
JSON
{
|
|
"dashboard.nav.translate": "Übersetzen",
|
|
"dashboard.nav.profile": "Mein Profil",
|
|
"dashboard.nav.settings": "Einstellungen",
|
|
"dashboard.nav.context": "Kontext",
|
|
"dashboard.nav.services": "Dienste",
|
|
"dashboard.nav.apiKeys": "API-Schlüssel",
|
|
"dashboard.nav.glossaries": "Glossare",
|
|
"dashboard.header.title": "Dashboard",
|
|
"dashboard.header.subtitle": "Verwalten Sie Ihre Übersetzungen",
|
|
"dashboard.header.toggleMenu": "Menü",
|
|
"dashboard.header.profileTitle": "Mein Profil",
|
|
"dashboard.sidebar.theme": "Design",
|
|
"dashboard.sidebar.signOut": "Abmelden",
|
|
"dashboard.sidebar.backHome": "Zurück zur Startseite",
|
|
"dashboard.sidebar.upgradeToPro": "Auf Pro upgraden →",
|
|
"dashboard.translate.pageTitle": "Dokument übersetzen",
|
|
"dashboard.translate.pageSubtitle": "Datei importieren und Zielsprache wählen",
|
|
"dashboard.translate.errorNotificationTitle": "Fehler",
|
|
"dashboard.translate.dropzone.uploadAria": "Datei-Ablagebereich",
|
|
"dashboard.translate.dropzone.title": "Datei hierher ziehen und ablegen",
|
|
"dashboard.translate.dropzone.subtitle": "oder klicken, um auszuwählen (DOCX, XLSX, PPTX, PDF)",
|
|
"dashboard.translate.dropzone.replaceFile": "Datei ersetzen",
|
|
"dashboard.translate.language.source": "Ausgangssprache",
|
|
"dashboard.translate.language.target": "Zielsprache",
|
|
"dashboard.translate.language.loading": "Sprachen werden geladen…",
|
|
"dashboard.translate.language.autoDetect": "Automatisch erkennen",
|
|
"dashboard.translate.language.selectPlaceholder": "Auswählen…",
|
|
"dashboard.translate.language.loadErrorPrefix": "Fehler beim Laden der Sprachen",
|
|
"dashboard.translate.provider.loading": "Anbieter werden geladen…",
|
|
"dashboard.translate.provider.noneConfigured": "Keine Anbieter konfiguriert",
|
|
"dashboard.translate.provider.modelTitle": "Modell",
|
|
"dashboard.translate.provider.sectionTitle": "Anbieter",
|
|
"dashboard.translate.provider.llmDivider": "KI · Kontextbasiert",
|
|
"dashboard.translate.provider.llmDividerPro": "KI · Kontextbasiert (Pro)",
|
|
"dashboard.translate.provider.upgrade": "Auf Pro upgraden",
|
|
"dashboard.translate.provider.upgradeSuffix": "um KI-Übersetzung freizuschalten",
|
|
"dashboard.translate.trust.zeroRetention": "Keine Datenspeicherung",
|
|
"dashboard.translate.trust.deletedAfter": "Dateien nach Verarbeitung gelöscht",
|
|
"dashboard.translate.actions.uploading": "Wird hochgeladen…",
|
|
"dashboard.translate.actions.translate": "Übersetzen",
|
|
"dashboard.translate.actions.filePrefix": "Datei: ",
|
|
"dashboard.translate.actions.cancel": "Abbrechen",
|
|
"dashboard.translate.actions.tryAgain": "Erneut versuchen",
|
|
"dashboard.translate.steps.uploading": "Datei wird hochgeladen…",
|
|
"dashboard.translate.steps.starting": "Übersetzung wird gestartet…",
|
|
"dashboard.translate.complete.title": "Übersetzung abgeschlossen!",
|
|
"dashboard.translate.complete.descNamed": "Ihre Datei {name} wurde erfolgreich übersetzt.",
|
|
"dashboard.translate.complete.descGeneric": "Ihre Datei wurde erfolgreich übersetzt.",
|
|
"dashboard.translate.complete.downloading": "Wird heruntergeladen…",
|
|
"dashboard.translate.complete.download": "Herunterladen",
|
|
"dashboard.translate.complete.newTranslation": "Neue Übersetzung",
|
|
"dashboard.translate.complete.toastOkTitle": "Erfolgreich",
|
|
"dashboard.translate.complete.toastOkDesc": "{name} wurde erfolgreich heruntergeladen.",
|
|
"dashboard.translate.complete.toastFailTitle": "Fehlgeschlagen",
|
|
"dashboard.translate.complete.toastFailDesc": "Übersetzung fehlgeschlagen. Bitte versuchen Sie es erneut.",
|
|
"dashboard.translate.sourceDocument": "Quelldokument",
|
|
"dashboard.translate.configuration": "Konfiguration",
|
|
"dashboard.translate.translating": "Übersetzung läuft",
|
|
"dashboard.translate.liveMonitor": "Live-Monitor",
|
|
"dashboard.translate.summary": "Zusammenfassung",
|
|
"dashboard.translate.engine": "Engine",
|
|
"dashboard.translate.confidence": "Konfidenz",
|
|
"dashboard.translate.cancel": "Abbrechen",
|
|
"dashboard.translate.segments": "Segmente",
|
|
"dashboard.translate.characters": "Zeichen",
|
|
"dashboard.translate.elapsed": "Verstrichen",
|
|
"dashboard.translate.segPerMin": "Seg/Min",
|
|
"dashboard.translate.highQuality": "Hohe Qualität",
|
|
"dashboard.translate.quality": "Qualität",
|
|
"dashboard.translate.completed": "Übersetzung abgeschlossen",
|
|
"dashboard.translate.replace": "Ersetzen",
|
|
"dashboard.translate.pdfMode.title": "PDF-Übersetzungsmodus",
|
|
"dashboard.translate.pdfMode.preserveLayout": "Layout beibehalten",
|
|
"dashboard.translate.pdfMode.textOnly": "Nur Text",
|
|
"dashboard.translate.pdfMode.preserveLayoutDesc": "Behält Bilder, Tabellen und Formatierung. Ideal für einfache PDFs.",
|
|
"dashboard.translate.pdfMode.textOnlyDesc": "Übersetzt den gesamten Text perfekt. Saubere Ausgabe ohne Layoutprobleme.",
|
|
"dashboard.translate.pipeline.upload": "Hochladen",
|
|
"dashboard.translate.pipeline.analyze": "Analysieren",
|
|
"dashboard.translate.pipeline.translate": "Übersetzung",
|
|
"dashboard.translate.pipeline.rebuild": "Rekonstruieren",
|
|
"dashboard.translate.pipeline.finalize": "Finalisieren",
|
|
"dashboard.translate.progress.processingFallback": "Verarbeitung läuft…",
|
|
"dashboard.translate.progress.connectionLost": "Verbindung verloren. Erneut versuchen…",
|
|
"dashboard.translate.progress.failedTitle": "Übersetzung fehlgeschlagen",
|
|
"dashboard.translate.error.unexpected": "Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es erneut.",
|
|
"dashboard.translate.error.noResult": "Die Übersetzung hat keine Ergebnisse geliefert. Stellen Sie sicher, dass das Dokument Text enthält, und versuchen Sie es erneut oder wählen Sie eine andere Engine.",
|
|
"dashboard.translate.error.apiKey": "Ungültiger oder fehlender API-Schlüssel. Kontaktieren Sie den Administrator zur Konfiguration.",
|
|
"dashboard.translate.error.quota": "Nutzungslimit erreicht. Versuchen Sie es in wenigen Minuten erneut oder wählen Sie eine andere Engine.",
|
|
"dashboard.translate.error.timeout": "Verbindung zum Übersetzungsdienst zeitüberschritten. Prüfen Sie Ihr Netzwerk und versuchen Sie es erneut.",
|
|
"dashboard.translate.error.sessionExpired": "Sitzung abgelaufen. Klicken Sie auf Erneut versuchen, um die Übersetzung neu zu starten.",
|
|
"dashboard.translate.error.empty": "Das Dokument scheint leer zu sein oder enthält keinen übersetzbaren Text (eingescanntes PDF?).",
|
|
"dashboard.translate.error.unsupported": "Nicht unterstütztes Dateiformat oder beschädigte Datei.",
|
|
"dashboard.translate.error.connection": "Verbindung verloren. Prüfen Sie Ihr Netzwerk und versuchen Sie es erneut.",
|
|
"dashboard.translate.error.generic": "Übersetzung fehlgeschlagen: {detail}",
|
|
"dashboard.translate.error.title": "Übersetzung fehlgeschlagen",
|
|
"dashboard.translate.retry": "Übersetzung erneut versuchen",
|
|
"dashboard.translate.newFile": "Neue Datei",
|
|
"dashboard.translate.modeAI": "KI-Modus",
|
|
"dashboard.translate.modeClassic": "Klassischer Modus",
|
|
"dashboard.translate.glossaryLLMHint": "Glossare im KI-Modus verfügbar",
|
|
"dashboard.translate.submitting": "Wird gesendet...",
|
|
"dashboard.translate.submit": "Übersetzung starten",
|
|
"dashboard.translate.noFile": "Laden Sie zuerst eine Datei hoch",
|
|
"dashboard.translate.noTargetLang": "Wählen Sie eine Zielsprache",
|
|
"dashboard.topbar.interfaceLabel": "Übersetzungsoberfläche",
|
|
"dashboard.topbar.premiumAccess": "Premium-Zugang",
|
|
"dashboard.checkoutSyncError": "Fehler beim Synchronisieren der Zahlung.",
|
|
"dashboard.networkRefresh": "Netzwerkfehler. Bitte aktualisieren Sie die Seite.",
|
|
"dashboard.continueToTranslate": "Weiter zur Übersetzung",
|
|
"dashboard.nav.teams": "Team"
|
|
}
|