diff --git a/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.html b/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.html index f9944495c..61017a470 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.html +++ b/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.html @@ -124,7 +124,7 @@ a.isSkipped); + } + get #sameType() { const type = this.annotations[0].superType; return this.annotations.every(a => a.superType === type); diff --git a/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts b/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts index 0f6ab7b36..faabc82ac 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts @@ -40,6 +40,7 @@ import { PdfAnnotationActionsService } from './pdf-annotation-actions.service'; import { ViewModeService } from './view-mode.service'; import Annotation = Core.Annotations.Annotation; import Quad = Core.Math.Quad; +import { SkippedService } from './skipped.service'; @Injectable() export class PdfProxyService { @@ -92,6 +93,7 @@ export class PdfProxyService { private readonly _listingService: AnnotationsListingService, private readonly _dictionariesMapService: DictionariesMapService, private readonly _iqserPermissionsService: IqserPermissionsService, + private readonly _skippedService: SkippedService, ) { effect( () => { @@ -373,7 +375,8 @@ export class PdfProxyService { let actions = []; // Add hide action as last item const allAreImage = annotationWrappers.reduce((acc, next) => acc && next.isImage, true); - if (allAreImage && !this._annotationManager.resizingAnnotationId) { + const hideSkipped = this._skippedService.hideSkipped() && annotationWrappers.some(a => a.isSkipped); + if (allAreImage && !this._annotationManager.resizingAnnotationId && !hideSkipped) { const allAreVisible = viewerAnnotations.reduce((acc, next) => next.isVisible() && acc, true); const visibilityButton = { diff --git a/apps/red-ui/src/app/modules/file-preview/services/skipped.service.ts b/apps/red-ui/src/app/modules/file-preview/services/skipped.service.ts index eae50c4b3..7f76753b6 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/skipped.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/skipped.service.ts @@ -1,13 +1,20 @@ import { effect, Injectable, Signal, signal } from '@angular/core'; import { bool } from '@iqser/common-ui/lib/utils'; import { REDAnnotationManager } from '../../pdf-viewer/services/annotation-manager.service'; +import { FilePreviewStateService } from './file-preview-state.service'; +import { getLocalStorageDataByFileId, setLocalStorageDataByFileId } from '@utils/local-storage'; + +export const HIDE_SKIPPED = 'hide-skipped'; @Injectable() export class SkippedService { readonly #hideSkipped = signal(false); readonly hideSkipped: Signal; - constructor(private readonly _annotationManager: REDAnnotationManager) { + constructor( + private readonly _annotationManager: REDAnnotationManager, + private readonly _state: FilePreviewStateService, + ) { this.hideSkipped = this.#hideSkipped.asReadonly(); effect(() => { @@ -17,7 +24,13 @@ export class SkippedService { } else { this._annotationManager.show(ignored); } + + setLocalStorageDataByFileId(this._state.fileId, HIDE_SKIPPED, this.#hideSkipped()); }); + + if (getLocalStorageDataByFileId(this._state.fileId, HIDE_SKIPPED)) { + this.toggleSkipped(); + } } toggleSkipped(): void { diff --git a/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts b/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts index e86b97e7c..897fccf87 100644 --- a/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts +++ b/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts @@ -1,8 +1,8 @@ import { inject, Injectable, signal } from '@angular/core'; -import type { List } from '@iqser/common-ui/lib/utils'; +import { bool, List } from '@iqser/common-ui/lib/utils'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { Core } from '@pdftron/webviewer'; -import { getLast } from '@utils/functions'; +import { getLast, urlFileId } from '@utils/functions'; import { NGXLogger } from 'ngx-logger'; import { Subject } from 'rxjs'; import { AnnotationToolNames } from '../utils/constants'; @@ -10,6 +10,8 @@ import { asList, getId, isStringOrWrapper } from '../utils/functions'; import { AnnotationPredicate, DeleteAnnotationsOptions } from '../utils/types'; import AnnotationManager = Core.AnnotationManager; import Annotation = Core.Annotations.Annotation; +import { getLocalStorageDataByFileId } from '@utils/local-storage'; +import { HIDE_SKIPPED } from '../../file-preview/services/skipped.service'; const MODIFY_ACTION = 'modify'; const RESIZE_OPTION = 'resize'; @@ -142,7 +144,7 @@ export class REDAnnotationManager { } #listenForAnnotationSelected() { - this.#manager.addEventListener('annotationSelected', (annotations: Annotation[], action: string) => { + this.#manager.addEventListener('annotationSelected', async (annotations: Annotation[], action: string) => { this.#logger.info('[PDF] Annotation selected: ', annotations, action); const annotation = annotations.length === 1 ? annotations[0] : undefined; if ( @@ -153,6 +155,8 @@ export class REDAnnotationManager { ) { this.delete(annotation.Id); } + + await this.#toggleHiddenAnnotation(annotation, action === 'deselected'); this.#annotationSelected$.next([annotations, action]); }); } @@ -181,6 +185,21 @@ export class REDAnnotationManager { }); } + async #toggleHiddenAnnotation(annotation: Annotation, hide = false) { + if (bool(annotation.getCustomData('skipped'))) { + const fileId = urlFileId(); + const hideSkipped = getLocalStorageDataByFileId(fileId, HIDE_SKIPPED); + if (hideSkipped || this.isHidden(annotation.Id)) { + if (hide) { + this.hide([annotation]); + return; + } + annotation['Opacity'] = 0; + this.show([annotation]); + } + } + } + #getByIds(annotations: List | List) { return annotations.map((item: string | AnnotationWrapper) => this.#getById(item)).filter(a => !!a); } diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts index e94cb4425..2fe15fd2b 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts @@ -1,4 +1,4 @@ -import { AfterViewInit, Component, computed, Inject, Signal, signal, untracked, ViewChild, WritableSignal } from '@angular/core'; +import { AfterViewInit, Component, computed, Inject, Signal, signal, untracked, viewChild, WritableSignal } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Dossier } from '@red/domain'; import { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component'; @@ -45,11 +45,11 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A readonly showHeading: Signal; readonly showActionButtons: Signal; - @ViewChild(EditDossierGeneralInfoComponent) generalInfoComponent: EditDossierGeneralInfoComponent; - @ViewChild(EditDossierDownloadPackageComponent) downloadPackageComponent: EditDossierDownloadPackageComponent; - @ViewChild(EditDossierDictionaryComponent) dictionaryComponent: EditDossierDictionaryComponent; - @ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent; - @ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent; + generalInfoComponent = viewChild(EditDossierGeneralInfoComponent); + downloadPackageComponent = viewChild(EditDossierDownloadPackageComponent); + dictionaryComponent = viewChild(EditDossierDictionaryComponent); + membersComponent = viewChild(EditDossierTeamComponent); + attributesComponent = viewChild(EditDossierAttributesComponent); constructor( private readonly _dossiersService: DossiersService, @@ -128,11 +128,11 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A private _getActiveComponent(section: Section): EditDossierSectionInterface { return { - dossierInfo: this.generalInfoComponent, - downloadPackage: this.downloadPackageComponent, - dossierDictionary: this.dictionaryComponent, - members: this.membersComponent, - dossierAttributes: this.attributesComponent, + dossierInfo: this.generalInfoComponent(), + downloadPackage: this.downloadPackageComponent(), + dossierDictionary: this.dictionaryComponent(), + members: this.membersComponent(), + dossierAttributes: this.attributesComponent(), }[section]; } diff --git a/apps/red-ui/src/app/utils/functions.ts b/apps/red-ui/src/app/utils/functions.ts index a50db47d8..0aca86784 100644 --- a/apps/red-ui/src/app/utils/functions.ts +++ b/apps/red-ui/src/app/utils/functions.ts @@ -137,3 +137,9 @@ export function calcTextWidthInPixels(text: string): number { export function stringToBoolean(str: string): boolean { return str === 'true'; } + +export function urlFileId() { + const splitUrl = window.location.href.split('/'); + const fileId = splitUrl[splitUrl.length - 1]; + return fileId.split('?')[0]; +} diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index ad22e3a79..81060f1f6 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -18,7 +18,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "selected-text": "Ausgewählter Text:", "type": "Type", "type-placeholder": "Select type..." @@ -27,9 +27,9 @@ } }, "add-clone-dossier-template": { - "save": "", - "save-and-edit": "", - "title": "" + "save": "{type, select, clone{Clone} other{Save}}", + "save-and-edit": "{type, select, clone{Clone} other{Save}} and edit", + "title": "{type, select, clone{Clone {dossierTemplateName}} other{Create dossier template}}" }, "add-dossier-dialog": { "actions": { @@ -116,7 +116,7 @@ "rank": "Rank" }, "save": "Save state", - "success": "Successfully {type, select, edit{updated} create{created} other{}} the dossier state!", + "success": "Dossier state {type, select, edit{has been updated} creation successful{created} other{}}.", "title": "{type, select, edit{Edit {name}} create{Create} other{}} dossier state" }, "add-edit-entity": { @@ -142,8 +142,8 @@ "template-and-dossier-dictionaries": "Template & dossier dictionaries" }, "success": { - "create": "Entity added!", - "edit": "Entity updated. Please note that other users need to refresh the browser to see your changes." + "create": "Success: Entity created.", + "edit": "Entity updated.

Please note that other users need to refresh their browsers to see your changes." } }, "add-edit-file-attribute": { @@ -210,7 +210,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "options": { "in-dossier": { "description": "Add hint in every document in {dossierName}.", @@ -529,20 +529,20 @@ "archive": "Archive dossier", "cancel": "Cancel", "checkbox": { - "documents": "All documents will be archived and cannot be put back to active" + "documents": "All documents will be archived and cannot be returned to active status." }, - "details": "Restoring an archived dossier is not possible anymore, once it got archived.", + "details": "Be aware that archiving is an irreversible action. Documents archived will no longer be available for active use.", "title": "Archive {dossierName}", - "toast-error": "Please confirm that you understand the ramifications of your action!", + "toast-error": "Please confirm that you understand the consequences of this action.", "warning": "Are you sure you want to archive the dossier?" }, "confirm-delete-attribute": { "cancel": "{count, plural, one{Attribut} other{Attribute}} behalten", "delete": "{count, plural, one{Attribut} other{Attribute}} löschen", - "dossier-impacted-documents": "All dossiers based on this template will be affected", - "dossier-lost-details": "All values for this attribute will be lost", - "file-impacted-documents": "All documents {count, plural, one{it is} other{they are}} used on will be impacted", - "file-lost-details": "All inputted details on the documents will be lost", + "dossier-impacted-documents": "This action will affect all dossiers that use this template.", + "dossier-lost-details": "All attribute values entered by users on document level will be lost.", + "file-impacted-documents": "All documents that use {count, plural, one{his attribute} other{these attributes}} will be impacted.", + "file-lost-details": "All information entered by users on document level will be lost.", "impacted-report": "{reportsCount}", "title": "{count, plural, one{{name}} other{Datei-Attribute}} löschen", "toast-error": "Bitte bestätigen Sie, dass Ihnen die Konsequenzen dieser Aktion bewusst sind!", @@ -554,9 +554,9 @@ "delete-replace": "Delete and replace", "form": { "state": "Replace state", - "state-placeholder": "Choose another state" + "state-placeholder": "Select another state" }, - "question": "Replace the {count, plural, one{dossier's} other{dossiers'}} state with another state", + "question": "Select another state to replace the current {count, plural, one{dossier} other{dossier}} state", "success": "Successfully deleted state!", "title": "Delete dossier state", "warning": "The {name} state is assigned to {count} {count, plural, one{dossier} other{dossiers}}." @@ -594,7 +594,7 @@ "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?", - "single": "This document is currently assigned to someone else. Are you sure you want to replace the other user and assign it to yourself?" + "single": "This document is currently assigned to another user. Do you still want to assign the files to yourself?" }, "title": "Neuen Reviewer zuweisen" }, @@ -629,9 +629,9 @@ }, "unsaved-changes": { "confirmation-text": "Save and leave", - "details": "If you leave the tab without saving, all the unsaved changes will be lost.", + "details": "Warning: unsaved changes

Please save your changes. If you leave now, any unsaved progress will be lost.", "discard-changes-text": "DISCARD CHANGES", - "question": "Are you sure you want to leave the tab? You have unsaved changes.", + "question": "Warning: unsaved changes.

Do you still want to leave the tab?", "title": "You have unsaved changes" }, "upload-report-template": { @@ -645,7 +645,7 @@ "content": "Begründung", "dashboard": { "empty-template": { - "description": "This template does not contain any dossiers. Start by creating a dossier to use it on.", + "description": "This template does not contain any dossiers. Create a dossier that applies this ruleset.", "new-dossier": "New dossier" }, "greeting": { @@ -1024,7 +1024,7 @@ "entities": "{count} {count, plural, one{entity} other{entities}}", "entries": "{count} {count, plural, one{entry} other{entries}}", "modified-on": "Modified on: {date}", - "title": "", + "title": "Edit dossier template", "valid-from": "Valid from: {date}", "valid-to": "Valid to: {date}" }, @@ -1223,7 +1223,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "custom-rectangle": "Custom Rectangle", "imported": "Imported Redaction", "legal-basis": "Legal basis", @@ -1660,7 +1660,7 @@ }, "convert": { "confirmation": "The {count} selected {count, plural, one{earmark} other{earmarks}} will be converted", - "details": "All earmarks from the document will be converted to imported redactions, using the color set up in the 'Default colors' section of the app.", + "details": "All earmarks from the document will be converted to imported redactions, using the color defined by the application admin.", "options": { "all-pages": { "description": "The earmarks in the selected HEX color will be converted on all pages of the document.", @@ -1899,7 +1899,7 @@ "confirmation-dialog": { "cancel": "Cancel", "question": "Manual changes could get lost if OCR makes changes at those positions. Are you sure you want to proceed?", - "title": "Warning: the file has manual adjustments!" + "title": "Warning: The file contains manual changes!" } }, "overwrite-files-dialog": { @@ -1975,14 +1975,14 @@ }, "form": { "auto-expand-filters-on-action": "Auto-expand filters on my actions", - "help-mode-dialog": "Help Mode Dialog", + "help-mode-dialog": "Help mode activation dialog", "load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview", "open-structured-view-by-default": "Display structured component management modal by default", "table-extraction-type": "Table extraction type" }, "label": "Preferences", "title": "Edit preferences", - "warnings-description": "Selecting the 'Do not show this message again' checkbox will skip the warning dialog the next time you trigger it.", + "warnings-description": "Selecting the 'Do not show this message again' checkbox will skip the dialog the next time you trigger it.", "warnings-label": "Prompts and dialogs", "warnings-subtitle": "Do not show again options" }, @@ -2006,7 +2006,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "edit-text": "Edit text", "legal-basis": "Legal basis", "options": { @@ -2040,7 +2040,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "list-item": "", "list-item-false-positive": "", "options": { @@ -2074,7 +2074,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "options": { "do-not-recommend": { "description": "Do not recommend the selected term in any document of this dossier.", @@ -2272,7 +2272,7 @@ "title": "Authentifizierung aktivieren" }, "table-header": { - "selected-count": "" + "selected-count": "{count} selected" }, "tenant-resolve": { "contact-administrator": "Cannot remember the workspace? Please contact your administrator.", diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 2b66573c3..95937ba04 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -18,7 +18,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "selected-text": "Selected text:", "type": "Type", "type-placeholder": "Select type..." @@ -37,7 +37,7 @@ "save-and-add-members": "Save and edit team" }, "errors": { - "dossier-already-exists": "Dossier with this name already exists! If it is in the trash, you need to permanently delete it first to re-use the name. If it is an active or archived dossier, please choose a different name.", + "dossier-already-exists": "Dossier name already exists.\n
  • If the dossier is in trash, you can delete it permanently to reuse the name.
  • \n
  • If the dossier is active or archived, please use a different name.
", "generic": "Failed to save dossier." }, "form": { @@ -60,7 +60,7 @@ }, "add-edit-clone-dossier-template": { "error": { - "conflict": "Failed to create dossier template: a dossier template with the same name already exists." + "conflict": "Template name already exists.

Please choose a different name." }, "form": { "apply-updates-default": { @@ -96,7 +96,7 @@ }, "add-edit-dossier-attribute": { "error": { - "generic": "Failed to save attribute!" + "generic": "Failed to save attribute" }, "form": { "label": "Attribute name", @@ -116,7 +116,7 @@ "rank": "Rank" }, "save": "Save state", - "success": "Successfully {type, select, edit{updated} create{created} other{}} the dossier state!", + "success": "Dossier state {type, select, edit{has been updated} creation successful{created} other{}}.", "title": "{type, select, edit{Edit {name}} create{Create} other{}} dossier state" }, "add-edit-entity": { @@ -142,8 +142,8 @@ "template-and-dossier-dictionaries": "Template & dossier dictionaries" }, "success": { - "create": "Entity added!", - "edit": "Entity updated. Please note that other users need to refresh the browser to see your changes." + "create": "Success: Entity created.", + "edit": "Entity updated.

Please note that other users need to refresh their browsers to see your changes." } }, "add-edit-file-attribute": { @@ -156,8 +156,8 @@ "filterable-disabled": "The maximum number of filterable attributes ({maxNumber}) has been reached.", "name": "Attribute name", "name-placeholder": "Enter name", - "primary": "Set as primary", - "read-only": "Make read-only", + "primary": "Primary attribute", + "read-only": "Read-only", "type": "Type" }, "save": "Save attribute", @@ -186,8 +186,8 @@ "save-changes": "Save changes" }, "error": { - "email-already-used": "This e-mail address is already in use by a different user!", - "generic": "Failed to save user!" + "email-already-used": "This e-mail address is already associated with another user.", + "generic": "Failed to save user" }, "form": { "email": "E-mail", @@ -210,7 +210,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "options": { "in-dossier": { "description": "Add hint in every document in {dossierName}.", @@ -274,7 +274,7 @@ "message": { "dictionary": { "add": { - "conflict-error": "Cannot add ''{content}'' to the {dictionaryName} dictionary because it was recognized as a general term that appears too often in texts.", + "conflict-error": "Stop word term: ''{content}''

''{content}'' is a frequently occurring term that cannot be stored for annotation across the entire dossier or all dossiers.", "error": "Failed to add entry to dictionary: {error}", "success": "Entry added to dictionary. Changes will be visible after reanalysis." }, @@ -530,24 +530,24 @@ "archive": "Archive dossier", "cancel": "Cancel", "checkbox": { - "documents": "All documents will be archived and cannot be put back to active" + "documents": "All documents will be archived and cannot be returned to active status." }, - "details": "Restoring an archived dossier is not possible anymore, once it got archived.", + "details": "Be aware that archiving is an irreversible action. Documents archived will no longer be available for active use.", "title": "Archive {dossierName}", - "toast-error": "Please confirm that you understand the ramifications of your action!", + "toast-error": "Please confirm that you understand the consequences of this action.", "warning": "Are you sure you want to archive the dossier?" }, "confirm-delete-attribute": { "cancel": "Keep {count, plural, one{attribute} other{attributes}}", "delete": "Delete {count, plural, one{attribute} other{attributes}}", - "dossier-impacted-documents": "All dossiers based on this template will be affected", - "dossier-lost-details": "All values for this attribute will be lost", - "file-impacted-documents": "All documents {count, plural, one{it is} other{they are}} used on will be impacted", - "file-lost-details": "All inputted details on the documents will be lost", - "impacted-report": "{reportsCount} reports use the placeholder for this attribute and need to be adjusted", + "dossier-impacted-documents": "This action will affect all dossiers that use this template.", + "dossier-lost-details": "All attribute values entered by users on document level will be lost.", + "file-impacted-documents": "All documents that use {count, plural, one{his attribute} other{these attributes}} will be impacted.", + "file-lost-details": "All information entered by users on document level will be lost.", + "impacted-report": "{reportsCount} reports currently use the placeholder for this attribute.

Please update them accordingly.", "title": "Delete {count, plural, one{{name}} other{file attributes}}", - "toast-error": "Please confirm that you understand the ramifications of your action!", - "warning": "Warning: this cannot be undone!" + "toast-error": "Please confirm that you understand the consequences of this action.", + "warning": "Warning: This action cannot be undone!" }, "confirm-delete-dossier-state": { "cancel": "Cancel", @@ -555,9 +555,9 @@ "delete-replace": "Delete and replace", "form": { "state": "Replace state", - "state-placeholder": "Choose another state" + "state-placeholder": "Select another state" }, - "question": "Replace the {count, plural, one{dossier's} other{dossiers'}} state with another state", + "question": "Select another state to replace the current {count, plural, one{dossier} other{dossier}} state", "success": "Successfully deleted state!", "title": "Delete dossier state", "warning": "The {name} state is assigned to {count} {count, plural, one{dossier} other{dossiers}}." @@ -568,8 +568,8 @@ "impacted-documents": "All documents pending review from the {usersCount, plural, one{user} other{users}} will be impacted", "impacted-dossiers": "{dossiersCount} {dossiersCount, plural, one{dossier} other{dossiers}} will be impacted", "title": "Delete {usersCount, plural, one{user} other{users}} from workspace", - "toast-error": "Please confirm that you understand the ramifications of your action!", - "warning": "Warning: this cannot be undone!" + "toast-error": "Please confirm that you understand the consequences of this action.", + "warning": "Warning: This action cannot be undone!" }, "confirmation-dialog": { "approve-file-without-analysis": { @@ -579,7 +579,7 @@ "title": "Warning!" }, "approve-file": { - "question": "This document has unseen changes, do you wish to approve it anyway?", + "question": "This document contains unseen changes that have been added during the reanalysis.

Do you still want to approve it?", "title": "Warning!" }, "approve-multiple-files-without-analysis": { @@ -589,18 +589,18 @@ "title": "Warning" }, "approve-multiple-files": { - "question": "At least one of the files you selected has unseen changes, do you wish to approve them anyway?", + "question": "At least one of the selected files contains unseen changes that have been added during the reanalysis.

Do you still want to approve them?", "title": "Warning!" }, "assign-file-to-me": { "question": { - "multiple": "At least one document is currently assigned to someone else. Are you sure you want to replace them and assign yourself to these documents?", - "single": "This document is currently assigned to someone else. Are you sure you want to replace the other user and assign it to yourself?" + "multiple": "At least one of the selected documents is currently assigned to another user.

Do you still want to reassign the files to yourself?", + "single": "This document is currently assigned to another user. Do you still want to assign the files to yourself?" }, "title": "Re-assign user" }, "compare-file": { - "question": "Warning!

Number of pages does not match, current document has {currentDocumentPageCount} page(s). Uploaded document has {compareDocumentPageCount} page(s).

Do you wish to proceed?", + "question": "Warning: page count mismatch

Current document: {currentDocumentPageCount} page(s). Upload document: {compareDocumentPageCount} page(s).

This appears to be a different document. Do you wish to proceed?", "title": "Compare with file: {fileName}" }, "delete-dossier": { @@ -630,23 +630,23 @@ }, "unsaved-changes": { "confirmation-text": "Save and leave", - "details": "If you leave the tab without saving, all the unsaved changes will be lost.", + "details": "Warning: unsaved changes

Please save your changes. If you leave now, any unsaved progress will be lost.", "discard-changes-text": "DISCARD CHANGES", - "question": "Are you sure you want to leave the tab? You have unsaved changes.", + "question": "Warning: unsaved changes.

Do you still want to leave the tab?", "title": "You have unsaved changes" }, "upload-report-template": { "alternate-confirmation-text": "Upload as multi-file report", "confirmation-text": "Upload as single-file report", "deny-text": "Cancel upload", - "question": "Please choose if {fileName} is a single or multi-file report template", + "question": "Please indicate if {fileName} is a single or multi-file report template", "title": "Report template upload" } }, "content": "Reason", "dashboard": { "empty-template": { - "description": "This template does not contain any dossiers. Start by creating a dossier to use it on.", + "description": "This template does not contain any dossiers. Create a dossier that applies this ruleset.", "new-dossier": "New dossier" }, "greeting": { @@ -1049,7 +1049,7 @@ }, "entities": "{length} {length, plural, one{entity} other{entities}}", "error": { - "conflict": "Cannot delete this dossier template! At least one dossier uses this template!", + "conflict": "Cannot delete this dossier template. At least one dossier uses this template.", "generic": "Cannot delete this dossier template!" }, "no-data": { @@ -1144,7 +1144,7 @@ "color-placeholder": "Color" }, "save": "Save", - "success": "Color saved successfully. Please note that the users need to refresh the browser to see the updated color." + "success": "Success: Color saved.

Please note that other users need to refresh their browsers to see your changes." }, "edit-dossier-dialog": { "actions": { @@ -1224,7 +1224,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "custom-rectangle": "Custom Rectangle", "imported": "Imported Redaction", "legal-basis": "Legal basis", @@ -1661,7 +1661,7 @@ }, "convert": { "confirmation": "The {count} selected {count, plural, one{earmark} other{earmarks}} will be converted", - "details": "All earmarks from the document will be converted to imported redactions, using the color set up in the 'Default colors' section of the app.", + "details": "All earmarks from the document will be converted to imported redactions, using the color defined by the application admin.", "options": { "all-pages": { "description": "The earmarks in the selected HEX color will be converted on all pages of the document.", @@ -1900,7 +1900,7 @@ "confirmation-dialog": { "cancel": "Cancel", "question": "Manual changes could get lost if OCR makes changes at those positions. Are you sure you want to proceed?", - "title": "Warning: the file has manual adjustments!" + "title": "Warning: The file contains manual changes!" } }, "overwrite-files-dialog": { @@ -1976,14 +1976,14 @@ }, "form": { "auto-expand-filters-on-action": "Auto-expand filters on my actions", - "help-mode-dialog": "Help Mode Dialog", + "help-mode-dialog": "Help mode activation dialog", "load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview", "open-structured-view-by-default": "Display structured component management modal by default", "table-extraction-type": "Table extraction type" }, "label": "Preferences", "title": "Edit preferences", - "warnings-description": "Selecting the 'Do not show this message again' checkbox will skip the warning dialog the next time you trigger it.", + "warnings-description": "Selecting the 'Do not show this message again' checkbox will skip the dialog the next time you trigger it.", "warnings-label": "Prompts and dialogs", "warnings-subtitle": "Do not show again options" }, @@ -2007,7 +2007,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "edit-text": "Edit text", "legal-basis": "Legal basis", "options": { @@ -2041,7 +2041,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "list-item": "", "list-item-false-positive": "", "options": { @@ -2075,7 +2075,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or mentions...", + "comment-placeholder": "Add remarks or notes...", "options": { "do-not-recommend": { "description": "Do not recommend the selected term in any document of this dossier.", diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index d35779937..9273c9b4a 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -27,9 +27,9 @@ } }, "add-clone-dossier-template": { - "save": "", - "save-and-edit": "", - "title": "" + "save": "{type, select, clone{Clone} other{Save}}", + "save-and-edit": "{type, select, clone{Clone} other{Save}} and edit", + "title": "{type, select, clone{Clone {dossierTemplateName}} other{Create dossier template}}" }, "add-dossier-dialog": { "actions": { @@ -1024,7 +1024,7 @@ "entities": "{count} {count, plural, one{entity} other{entities}}", "entries": "{count} {count, plural, one{entry} other{entries}}", "modified-on": "Modified on: {date}", - "title": "", + "title": "Edit dossier template", "valid-from": "Valid from: {date}", "valid-to": "Valid to: {date}" }, @@ -2272,7 +2272,7 @@ "title": "Authentifizierung aktivieren" }, "table-header": { - "selected-count": "" + "selected-count": "{count} selected" }, "tenant-resolve": { "contact-administrator": "Cannot remember the workspace? Please contact your administrator.",