diff --git a/apps/red-ui/src/app/modules/dossier-overview/components/screen-header/dossier-overview-screen-header.component.html b/apps/red-ui/src/app/modules/dossier-overview/components/screen-header/dossier-overview-screen-header.component.html index 1a46d08ff..317285290 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/components/screen-header/dossier-overview-screen-header.component.html +++ b/apps/red-ui/src/app/modules/dossier-overview/components/screen-header/dossier-overview-screen-header.component.html @@ -6,6 +6,18 @@ [viewModeSelection]="viewModeSelection" > + + + + + + + diff --git a/apps/red-ui/src/app/modules/dossier-overview/components/screen-header/dossier-overview-screen-header.component.ts b/apps/red-ui/src/app/modules/dossier-overview/components/screen-header/dossier-overview-screen-header.component.ts index c525a7751..7d2ffcc07 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/components/screen-header/dossier-overview-screen-header.component.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/components/screen-header/dossier-overview-screen-header.component.ts @@ -14,6 +14,7 @@ import { Roles } from '@users/roles'; import { SortingService } from '@iqser/common-ui/lib/sorting'; import { List, some } from '@iqser/common-ui/lib/utils'; import { TenantsService } from '@iqser/common-ui/lib/tenants'; +import { ComponentLogService } from '@services/files/component-log.service'; @Component({ selector: 'redaction-dossier-overview-screen-header [dossier] [upload]', @@ -41,6 +42,7 @@ export class DossierOverviewScreenHeaderComponent implements OnInit { private readonly _reanalysisService: ReanalysisService, private readonly _loadingService: LoadingService, private readonly _primaryFileAttributeService: PrimaryFileAttributeService, + private readonly _componentLogService: ComponentLogService, ) { const someNotProcessed$ = this.entitiesService.all$.pipe(some(file => !file.lastProcessed)); this.downloadBtnDisabled$ = combineLatest([this.listingService.areSomeSelected$, someNotProcessed$]).pipe( @@ -92,4 +94,12 @@ export class DossierOverviewScreenHeaderComponent implements OnInit { ]; saveAsCSV(fileName, entities, fileFields, mapper); } + + downloadComponentAsJSON() { + return firstValueFrom(this._componentLogService.exportJSON(this.dossier.dossierTemplateId, this.dossier.dossierId)); + } + + async downloadComponentAsXML() { + return firstValueFrom(this._componentLogService.exportXML(this.dossier.dossierTemplateId, this.dossier.dossierId)); + } } diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/structured-component-management-dialog/structured-component-management-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/structured-component-management-dialog/structured-component-management-dialog.component.ts index 9e3f99c15..f8193d7c2 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/structured-component-management-dialog/structured-component-management-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/structured-component-management-dialog/structured-component-management-dialog.component.ts @@ -64,35 +64,21 @@ export class StructuredComponentManagementDialogComponent extends BaseDialogComp exportJSON() { return firstValueFrom( - this._componentLogService.exportJSON( - this.data.file.dossierTemplateId, - this.data.file.dossierId, - this.data.file.fileId, - this.data.file.filename, - ), + this._componentLogService.exportJSON(this.data.file.dossierTemplateId, this.data.file.dossierId, this.data.file), ); } exportXML() { return firstValueFrom( - this._componentLogService.exportXML( - this.data.file.dossierTemplateId, - this.data.file.dossierId, - this.data.file.fileId, - this.data.file.filename, - ), + this._componentLogService.exportXML(this.data.file.dossierTemplateId, this.data.file.dossierId, this.data.file), ); } async exportAllInDossier() { const allFilesInDossier = this._filesMapService.get(this.data.file.dossierId); for (const file of allFilesInDossier) { - await firstValueFrom( - this._componentLogService.exportJSON(this.data.file.dossierTemplateId, file.dossierId, file.fileId, file.filename), - ); - await firstValueFrom( - this._componentLogService.exportXML(this.data.file.dossierTemplateId, file.dossierId, file.fileId, file.filename), - ); + await firstValueFrom(this._componentLogService.exportJSON(this.data.file.dossierTemplateId, file.dossierId, file)); + await firstValueFrom(this._componentLogService.exportXML(this.data.file.dossierTemplateId, file.dossierId, file)); } } diff --git a/apps/red-ui/src/app/services/files/component-log.service.ts b/apps/red-ui/src/app/services/files/component-log.service.ts index 2810607a1..0fa5df860 100644 --- a/apps/red-ui/src/app/services/files/component-log.service.ts +++ b/apps/red-ui/src/app/services/files/component-log.service.ts @@ -4,7 +4,7 @@ import { catchError, map, tap } from 'rxjs/operators'; import { Observable, of } from 'rxjs'; import { HttpHeaders } from '@angular/common/http'; import { saveAs } from 'file-saver'; -import { ComponentDetails, ComponentLogEntry, IComponentLogData, IComponentLogEntry } from '@red/domain'; +import { ComponentDetails, ComponentLogEntry, IComponentLogData, IComponentLogEntry, IFile } from '@red/domain'; import { mapEach } from '@common-ui/utils'; @Injectable({ providedIn: 'root' }) @@ -25,6 +25,15 @@ export class ComponentLogService extends GenericService { ); } + #bulkComponentLogRequest(dossierTemplateId: string, dossierId: string, includeDetails = false): Observable { + return this._http.get( + `/api/dossier-templates/${dossierTemplateId}/dossiers/${dossierId}/files/bulk/get-components`, + { + params: { includeDetails }, + }, + ); + } + getComponentLogData(dossierTemplateId: string, dossierId: string, fileId: string): Observable { return this.#componentLogRequest(dossierTemplateId, dossierId, fileId).pipe( map(data => data.componentDetails), @@ -42,29 +51,34 @@ export class ComponentLogService extends GenericService { return this._post({ components }, `componentLog/override/revert/${dossierId}/${fileId}`); } - exportJSON(dossierTemplateId: string, dossierId: string, fileId: string, name: string): Observable { - return this.#componentLogRequest(dossierTemplateId, dossierId, fileId, false).pipe( + exportJSON(dossierTemplateId: string, dossierId: string, file?: IFile): Observable { + const request$ = file?.fileId + ? this.#componentLogRequest(dossierTemplateId, dossierId, file?.fileId, false) + : this.#bulkComponentLogRequest(dossierTemplateId, dossierId); + return request$.pipe( tap(data => { const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); - saveAs(blob, name + '.component_log.json'); + saveAs(blob, (file?.filename ? `${file.filename}}.` : '') + 'component_log.json'); }), ); } - exportXML(dossierTemplateId, dossierId: string, fileId: string, name: string): Observable { - return this.#getComponentLogDataAsXML(dossierTemplateId, dossierId, fileId).pipe( + exportXML(dossierTemplateId, dossierId: string, file?: IFile): Observable { + return this.#getComponentLogDataAsXML(dossierTemplateId, dossierId, file).pipe( tap(data => { const blob = new Blob([data], { type: 'application/xml' }); - saveAs(blob, name + '.component_log.xml'); + saveAs(blob, (file?.filename ? `${file.filename}}.` : '') + 'component_log.xml'); }), ); } - #getComponentLogDataAsXML(dossierTemplateId: string, dossierId: string, fileId: string) { + #getComponentLogDataAsXML(dossierTemplateId: string, dossierId: string, file?: IFile) { let headers = new HttpHeaders(); headers = headers.set('accept', 'application/xml'); - return this._http.get(`/api/dossier-templates/${dossierTemplateId}/dossiers/${dossierId}/files/${fileId}/components`, { + const pathSuffix = file?.fileId ? `${file.fileId}/components` : 'bulk/get-components'; + + return this._http.get(`/api/dossier-templates/${dossierTemplateId}/dossiers/${dossierId}/files/${pathSuffix}`, { headers: headers, responseType: 'text', observe: 'body', diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 9cb057632..be3460264 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -56,8 +56,7 @@ }, "add-edit-clone-dossier-template": { "error": { - "conflict": "Dossiervorlage konnte nicht erstellt werden: Es existiert bereits eine Dossiervorlage mit demselben Namen.", - "generic": "Fehler beim Erstellen der Dossiervorlage." + "conflict": "Dossiervorlage konnte nicht erstellt werden: Es existiert bereits eine Dossiervorlage mit demselben Namen." }, "form": { "apply-updates-default": { @@ -256,9 +255,6 @@ "user-management": "User Management", "watermarks": "Watermarks" }, - "annotation": { - "pending": "(Pending Analysis)" - }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -341,14 +337,14 @@ "error": "Rekategorisierung des Bildes gescheitert: {error}", "success": "Bild wurde einer neuen Kategorie zugeordnet." }, - "remove": { - "error": "Fehler beim Entfernen der Schwärzung: {error}", - "success": "Schwärzung entfernt!" - }, "remove-hint": { "error": "Failed to remove hint: {error}", "success": "Hint removed!" }, + "remove": { + "error": "Fehler beim Entfernen der Schwärzung: {error}", + "success": "Schwärzung entfernt!" + }, "request-change-legal-basis": { "error": "Fehler beim Vorschlagen der Änderung der Begründung:", "success": "Die Änderung der in der Anmerkung genannten Begründung wurde beantragt." @@ -365,14 +361,14 @@ "error": "Fehler beim Vorschlagen der Neukategorisierung des Bilds: {error}", "success": "Bild-Neuklassifizierung angefordert." }, - "request-remove": { - "error": "Fehler beim Erstellen des Vorschlags für das Entfernen der Schwärzung: {error}", - "success": "Entfernen der Schwärzung wurde vorgeschlagen!" - }, "request-remove-hint": { "error": "Failed to request removal of hint: {error}", "success": "Requested to remove hint!" }, + "request-remove": { + "error": "Fehler beim Erstellen des Vorschlags für das Entfernen der Schwärzung: {error}", + "success": "Entfernen der Schwärzung wurde vorgeschlagen!" + }, "suggest": { "error": "Vorschlag einer Schwärzung wurde nicht gespeichert: {error}", "success": "Vorschlag einer Schwärzung gespeichert" @@ -389,15 +385,15 @@ "remove-highlights": { "label": "Remove Selected Earmarks" }, - "resize": { - "label": "Größe ändern" - }, "resize-accept": { "label": "Größe speichern" }, "resize-cancel": { "label": "Größenänderung abbrechen" }, + "resize": { + "label": "Größe ändern" + }, "see-references": { "label": "See References" }, @@ -439,6 +435,9 @@ "suggestion-resize": "Vorgeschlagene Größenänderung", "text-highlight": "Earmark" }, + "annotation": { + "pending": "(Pending Analysis)" + }, "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -558,6 +557,12 @@ "title": "Aktion bestätigen" } }, + "component-download": { + "disabled-tooltip": "", + "json": "", + "tooltip": "", + "xml": "" + }, "component-log-dialog": { "actions": { "cancel-edit": "Cancel", @@ -638,18 +643,14 @@ "warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!" }, "confirmation-dialog": { - "approve-file": { - "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", - "title": "Warnung!" - }, "approve-file-without-analysis": { "confirmationText": "Approve without analysis", "denyText": "Cancel", "question": "Analysis required to detect new redactions.", "title": "Warning!" }, - "approve-multiple-files": { - "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "approve-file": { + "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", "title": "Warnung!" }, "approve-multiple-files-without-analysis": { @@ -658,6 +659,10 @@ "question": "Analysis required to detect new redactions for at least one file.", "title": "Warning" }, + "approve-multiple-files": { + "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "title": "Warnung!" + }, "assign-file-to-me": { "question": { "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?", @@ -1003,13 +1008,13 @@ "recent": "Neu ({hours} h)", "unassigned": "Niemandem zugewiesen" }, - "reanalyse": { - "action": "Datei analysieren" - }, "reanalyse-dossier": { "error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.", "success": "Dateien für Reanalyse vorgesehen." }, + "reanalyse": { + "action": "Datei analysieren" + }, "start-auto-analysis": "Enable auto-analysis", "stop-auto-analysis": "Stop auto-analysis", "table-col-names": { @@ -1078,14 +1083,6 @@ "total-documents": "Anzahl der Dokumente", "total-people": "{count} {count, plural, one{User} other {Users}}" }, - "dossier-templates": { - "label": "Dossier-Vorlagen", - "status": { - "active": "Active", - "inactive": "Inactive", - "incomplete": "Incomplete" - } - }, "dossier-templates-listing": { "action": { "clone": "Clone Template", @@ -1121,6 +1118,14 @@ "title": "{length} {length, plural, one{Dossier-Vorlage} other{Dossier-Vorlagen}}" } }, + "dossier-templates": { + "label": "Dossier-Vorlagen", + "status": { + "active": "Active", + "inactive": "Inactive", + "incomplete": "Incomplete" + } + }, "dossier-watermark-selector": { "heading": "Watermarks on documents", "no-watermark": "There is no watermark defined for the dossier template.
Contact your app admin to define one.", @@ -1304,15 +1309,6 @@ "title": "{length} {length, plural, one{Wörterbuch} other{Wörterbücher}}" } }, - "entity": { - "info": { - "actions": { - "revert": "Revert", - "save": "Save Changes" - }, - "heading": "Edit Entity" - } - }, "entity-rules-screen": { "error": { "generic": "Something went wrong... Entity rules update failed!" @@ -1326,19 +1322,28 @@ "title": "Entity Rule Editor", "warning-text": "Warning: experimental feature!" }, + "entity": { + "info": { + "actions": { + "revert": "Revert", + "save": "Save Changes" + }, + "heading": "Edit Entity" + } + }, "error": { "deleted-entity": { "dossier": { "action": "Zurück zur Übersicht", "label": "Dieses Dossier wurde gelöscht!" }, - "file": { - "action": "Zurück zum Dossier", - "label": "Diese Datei wurde gelöscht!" - }, "file-dossier": { "action": "Zurück zur Übersicht", "label": "Das Dossier dieser Datei wurde gelöscht!" + }, + "file": { + "action": "Zurück zum Dossier", + "label": "Diese Datei wurde gelöscht!" } }, "file-preview": { @@ -1356,12 +1361,6 @@ }, "exact-date": "{day} {month} {year} um {hour}:{minute} Uhr", "file": "Datei", - "file-attribute": { - "update": { - "error": "Failed to update file attribute value!", - "success": "File attribute value has been updated successfully!" - } - }, "file-attribute-encoding-types": { "ascii": "ASCII", "iso": "ISO-8859-1", @@ -1372,6 +1371,12 @@ "number": "Nummer", "text": "Freier Text" }, + "file-attribute": { + "update": { + "error": "Failed to update file attribute value!", + "success": "File attribute value has been updated successfully!" + } + }, "file-attributes-configurations": { "cancel": "Cancel", "form": { @@ -1585,6 +1590,15 @@ "csv": "File attributes were imported successfully from uploaded CSV file." } }, + "filter-menu": { + "filter-options": "Filteroptionen", + "filter-types": "Filter", + "label": "Filter", + "pages-without-annotations": "Only pages without annotations", + "redaction-changes": "Nur Anmerkungen mit Schwärzungsänderungen", + "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", + "with-comments": "Nur Anmerkungen mit Kommentaren" + }, "filter": { "analysis": "Analyse erforderlich", "comment": "Kommentare", @@ -1595,15 +1609,6 @@ "suggestion": "Vorgeschlagene Schwärzung", "updated": "Aktualisiert" }, - "filter-menu": { - "filter-options": "Filteroptionen", - "filter-types": "Filter", - "label": "Filter", - "pages-without-annotations": "Only pages without annotations", - "redaction-changes": "Nur Anmerkungen mit Schwärzungsänderungen", - "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", - "with-comments": "Nur Anmerkungen mit Kommentaren" - }, "filters": { "assigned-people": "Beauftragt", "documents-status": "Documents State", @@ -1671,13 +1676,6 @@ }, "title": "SMTP-Konto konfigurieren" }, - "generic-errors": { - "400": "The sent request is not valid.", - "403": "Access to the requested resource is not allowed.", - "404": "The requested resource could not be found.", - "409": "The request is incompatible with the current state.", - "500": "The server encountered an unexpected condition that prevented it from fulfilling the request." - }, "help-mode": { "bottom-text": "Hilfe-Modus", "button-text": "Help Mode (H)", @@ -1789,6 +1787,7 @@ "copyright-claim-text": "Copyright © 2020 - {currentYear} knecon", "copyright-claim-title": "Copyright", "custom-app-title": "Name der Anwendung", + "email-report": "E-Mail-Bericht", "email": { "body": { "analyzed": "Im aktuellen Lizenzzeitraum insgesamt analysierte Seiten: {pages}.", @@ -1796,7 +1795,6 @@ }, "title": "Lizenzbericht {licenseCustomer}" }, - "email-report": "E-Mail-Bericht", "end-user-license-text": "Die Nutzung dieses Produkts unterliegt den Bedingungen der Endbenutzer-Lizenzvereinbarung für den RedactManager, sofern darin nichts anderweitig festgelegt.", "end-user-license-title": "Endbenutzer-Lizenzvereinbarung", "licensing-details": { @@ -1889,13 +1887,6 @@ "user-promoted-to-approver": "{user} wurde im Dossier {dossierHref, select, null{{dossierName}} other{{dossierName}}} zum Genehmiger ernannt!", "user-removed-as-dossier-member": "{user} wurde als Mitglied von: {dossierHref, select, null{{dossierName}} other{{dossierName}}} entfernt!" }, - "notifications": { - "button-text": "Notifications", - "deleted-dossier": "Deleted Dossier", - "label": "Benachrichtigungen", - "mark-all-as-read": "Alle als gelesen markieren", - "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" - }, "notifications-screen": { "category": { "email-notifications": "E-Mail Benachrichtigungen", @@ -1909,6 +1900,7 @@ "dossier": "Dossierbezogene Benachrichtigungen", "other": "Andere Benachrichtigungen" }, + "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "options": { "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin", @@ -1926,7 +1918,6 @@ "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" }, - "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "schedule": { "daily": "Tägliche Zusammenfassung", "instant": "Sofortig", @@ -1934,6 +1925,13 @@ }, "title": "Benachrichtigungseinstellungen" }, + "notifications": { + "button-text": "Notifications", + "deleted-dossier": "Deleted Dossier", + "label": "Benachrichtigungen", + "mark-all-as-read": "Alle als gelesen markieren", + "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" + }, "ocr": { "confirmation-dialog": { "cancel": "Cancel", @@ -2025,16 +2023,16 @@ "warnings-subtitle": "Do not show again options", "warnings-title": "Prompts and Dialogs Settings" }, - "processing": { - "basic": "Processing", - "ocr": "OCR" - }, "processing-status": { "ocr": "OCR", "pending": "Pending", "processed": "Processed", "processing": "Processing" }, + "processing": { + "basic": "Processing", + "ocr": "OCR" + }, "readonly": "Lesemodus", "readonly-archived": "Read only (archived)", "redact-text": { @@ -2264,12 +2262,6 @@ "red-user-admin": "Benutzer-Admin", "regular": "Regulär" }, - "search": { - "active-dossiers": "ganze Plattform", - "all-dossiers": "all documents", - "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", - "this-dossier": "in diesem Dossier" - }, "search-screen": { "cols": { "assignee": "Bevollmächtigter", @@ -2293,6 +2285,12 @@ "no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.", "table-header": "{length} {length, plural, one{Suchergebnis} other{Suchergebnisse}}" }, + "search": { + "active-dossiers": "ganze Plattform", + "all-dossiers": "all documents", + "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", + "this-dossier": "in diesem Dossier" + }, "seconds": "seconds", "size": "Size", "smtp-auth-config": { diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 5714e28ab..692805858 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -56,8 +56,7 @@ }, "add-edit-clone-dossier-template": { "error": { - "conflict": "Failed to create dossier template: a dossier template with the same name already exists.", - "generic": "Failed to create dossier template." + "conflict": "Failed to create dossier template: a dossier template with the same name already exists." }, "form": { "apply-updates-default": { @@ -558,6 +557,12 @@ "title": "Confirm Action" } }, + "component-download": { + "disabled-tooltip": "", + "json": "", + "tooltip": "", + "xml": "" + }, "component-log-dialog": { "actions": { "cancel-edit": "Cancel", @@ -2545,12 +2550,5 @@ "select": "Select" } }, - "yesterday": "Yesterday", - "generic-errors": { - "400": "The sent request is not valid.", - "403": "Access to the requested resource is not allowed.", - "404": "The requested resource could not be found.", - "409": "The request is incompatible with the current state.", - "500": "The server encountered an unexpected condition that prevented it from fulfilling the request." - } + "yesterday": "Yesterday" } diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index dc15fc295..e3b4083ef 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -56,8 +56,7 @@ }, "add-edit-clone-dossier-template": { "error": { - "conflict": "Dossiervorlage konnte nicht erstellt werden: Es existiert bereits eine Dossiervorlage mit demselben Namen.", - "generic": "Fehler beim Erstellen der Dossiervorlage." + "conflict": "Dossiervorlage konnte nicht erstellt werden: Es existiert bereits eine Dossiervorlage mit demselben Namen." }, "form": { "apply-updates-default": { @@ -558,6 +557,12 @@ "title": "Aktion bestätigen" } }, + "component-download": { + "disabled-tooltip": "", + "json": "", + "tooltip": "", + "xml": "" + }, "component-log-dialog": { "actions": { "cancel-edit": "Cancel", @@ -2545,12 +2550,5 @@ "select": "Wählen" } }, - "yesterday": "Gestern", - "generic-errors": { - "400": "", - "403": "", - "404": "", - "409": "", - "500": "" - } + "yesterday": "Gestern" } diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 97a19f6b2..0ec68bd7b 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -56,8 +56,7 @@ }, "add-edit-clone-dossier-template": { "error": { - "conflict": "Failed to create dossier template: a dossier template with the same name already exists.", - "generic": "Failed to create dossier template." + "conflict": "Failed to create dossier template: a dossier template with the same name already exists." }, "form": { "apply-updates-default": { @@ -558,6 +557,12 @@ "title": "Confirm Action" } }, + "component-download": { + "disabled-tooltip": "You need to upload at least one file to be able to export the components as JSON or XML", + "json": "Download as JSON", + "tooltip": "Component Download", + "xml": "Download as XML" + }, "component-log-dialog": { "actions": { "cancel-edit": "Cancel", @@ -2545,12 +2550,5 @@ "select": "Select" } }, - "yesterday": "Yesterday", - "generic-errors": { - "400": "The sent request is not valid.", - "403": "Access to the requested resource is not allowed.", - "404": "The requested resource could not be found.", - "409": "The request is incompatible with the current state.", - "500": "The server encountered an unexpected condition that prevented it from fulfilling the request." - } + "yesterday": "Yesterday" }