diff --git a/apps/red-ui/src/app/models/file/annotation.wrapper.ts b/apps/red-ui/src/app/models/file/annotation.wrapper.ts
index d27d555d9..177f4cc9b 100644
--- a/apps/red-ui/src/app/models/file/annotation.wrapper.ts
+++ b/apps/red-ui/src/app/models/file/annotation.wrapper.ts
@@ -1,26 +1,29 @@
import { Comment, Point, Rectangle } from '@redaction/red-ui-http';
import { RedactionLogEntryWrapper } from './redaction-log-entry.wrapper';
+import { annotationTypesTranslations } from '../../translations/annotation-types-translations';
+
+export type AnnotationSuperType =
+ | 'add-dictionary'
+ | 'remove-dictionary'
+ | 'remove-only-here'
+ | 'change-legal-basis'
+ | 'suggestion-change-legal-basis'
+ | 'suggestion-recategorize-image'
+ | 'suggestion-add-dictionary'
+ | 'suggestion-force-redaction'
+ | 'suggestion-remove-dictionary'
+ | 'suggestion-add'
+ | 'suggestion-remove'
+ | 'skipped'
+ | 'redaction'
+ | 'manual-redaction'
+ | 'recommendation'
+ | 'hint'
+ | 'pending-analysis'
+ | 'declined-suggestion';
export class AnnotationWrapper {
- superType:
- | 'add-dictionary'
- | 'remove-dictionary'
- | 'remove-only-here'
- | 'change-legal-basis'
- | 'suggestion-change-legal-basis'
- | 'suggestion-recategorize-image'
- | 'suggestion-add-dictionary'
- | 'suggestion-force-redaction'
- | 'suggestion-remove-dictionary'
- | 'suggestion-add'
- | 'suggestion-remove'
- | 'skipped'
- | 'redaction'
- | 'manual-redaction'
- | 'recommendation'
- | 'hint'
- | 'pending-analysis'
- | 'declined-suggestion';
+ superType: AnnotationSuperType;
dictionary: string;
color: string;
@@ -213,7 +216,7 @@ export class AnnotationWrapper {
this._createContent(annotationWrapper, redactionLogEntry);
this._setSuperType(annotationWrapper, redactionLogEntry);
this._handleRecommendations(annotationWrapper, redactionLogEntry);
- annotationWrapper.typeLabel = 'annotation-type.' + annotationWrapper.superType;
+ annotationWrapper.typeLabel = annotationTypesTranslations[annotationWrapper.superType];
return annotationWrapper;
}
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html
index 8862210d7..089ebd3e7 100644
--- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html
+++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html
@@ -28,8 +28,8 @@
diff --git a/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts b/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts
index 1cd4e3e57..c851a5a9c 100644
--- a/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts
+++ b/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts
@@ -3,6 +3,7 @@ import { AnnotationWrapper } from '@models/file/annotation.wrapper';
import { SuperTypeSorter } from '@utils/sorters/super-type-sorter';
import { FilterModel } from '@shared/components/filters/popup-filter/model/filter.model';
import { handleCheckedValue } from '@shared/components/filters/popup-filter/utils/filter-utils';
+import { annotationTypesTranslations } from '../../../translations/annotation-types-translations';
@Injectable()
export class AnnotationProcessingService {
@@ -126,7 +127,7 @@ export class AnnotationProcessingService {
key: key,
topLevelFilter: true,
matches: 1,
- label: 'annotation-type.' + key,
+ label: annotationTypesTranslations[key],
filters: []
};
filterMap.set(key, filter);
diff --git a/apps/red-ui/src/app/modules/shared/components/buttons/chevron-button/chevron-button.component.html b/apps/red-ui/src/app/modules/shared/components/buttons/chevron-button/chevron-button.component.html
index 6c26d9bb7..c15aa6378 100644
--- a/apps/red-ui/src/app/modules/shared/components/buttons/chevron-button/chevron-button.component.html
+++ b/apps/red-ui/src/app/modules/shared/components/buttons/chevron-button/chevron-button.component.html
@@ -1,5 +1,5 @@
diff --git a/apps/red-ui/src/app/modules/shared/components/buttons/chevron-button/chevron-button.component.ts b/apps/red-ui/src/app/modules/shared/components/buttons/chevron-button/chevron-button.component.ts
index 6c1329533..c6b9438ee 100644
--- a/apps/red-ui/src/app/modules/shared/components/buttons/chevron-button/chevron-button.component.ts
+++ b/apps/red-ui/src/app/modules/shared/components/buttons/chevron-button/chevron-button.component.ts
@@ -7,7 +7,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ChevronButtonComponent {
- @Input() text: string;
+ @Input() label: string;
@Input() showDot = false;
@Input() primary = false;
}
diff --git a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.html b/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.html
index 355b3c0a4..ab78f2597 100644
--- a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.html
+++ b/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.html
@@ -1,16 +1,16 @@
0" xPosition="before">
diff --git a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.ts b/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.ts
index 296f0219d..943b7a21b 100644
--- a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.ts
+++ b/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.ts
@@ -27,7 +27,7 @@ export class PopupFilterComponent implements OnChanges {
@Input() actionsTemplate: TemplateRef;
@Input() primaryFilters: FilterModel[] = [];
@Input() secondaryFilters: FilterModel[] = [];
- @Input() filterLabel = this._translateService.instant('filter-menu.label');
+ @Input() filterLabel;
@Input() icon: string;
@Input() chevron = false;
diff --git a/apps/red-ui/src/app/translations/annotation-types-translations.ts b/apps/red-ui/src/app/translations/annotation-types-translations.ts
new file mode 100644
index 000000000..e1917b831
--- /dev/null
+++ b/apps/red-ui/src/app/translations/annotation-types-translations.ts
@@ -0,0 +1,23 @@
+import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
+import { AnnotationSuperType } from '../models/file/annotation.wrapper';
+
+export const annotationTypesTranslations: { [key in AnnotationSuperType]: string } = {
+ 'add-dictionary': _('annotation-type.add-dictionary'),
+ 'change-legal-basis': _('annotation-type.change-legal-basis'),
+ 'declined-suggestion': _('annotation-type.declined-suggestion'),
+ hint: _('annotation-type.hint'),
+ 'manual-redaction': _('annotation-type.manual-redaction'),
+ 'pending-analysis': _('annotation-type.pending-analysis'),
+ recommendation: _('annotation-type.recommendation'),
+ redaction: _('annotation-type.redaction'),
+ 'remove-dictionary': _('annotation-type.remove-dictionary'),
+ 'remove-only-here': _('annotation-type.remove-only-here'),
+ skipped: _('annotation-type.skipped'),
+ 'suggestion-add': _('annotation-type.suggestion-add'),
+ 'suggestion-add-dictionary': _('annotation-type.suggestion-add-dictionary'),
+ 'suggestion-change-legal-basis': _('annotation-type.suggestion-change-legal-basis'),
+ 'suggestion-recategorize-image': _('annotation-type.suggestion-recategorize-image'),
+ 'suggestion-force-redaction': _('annotation-type.suggestion-force-redaction'),
+ 'suggestion-remove': _('annotation-type.suggestion-remove'),
+ 'suggestion-remove-dictionary': _('suggestion-remove-dictionary')
+};
diff --git a/apps/red-ui/src/app/utils/sorters/super-type-sorter.ts b/apps/red-ui/src/app/utils/sorters/super-type-sorter.ts
index 4408f9b5a..47b500cb9 100644
--- a/apps/red-ui/src/app/utils/sorters/super-type-sorter.ts
+++ b/apps/red-ui/src/app/utils/sorters/super-type-sorter.ts
@@ -1,4 +1,10 @@
-export const SuperTypeSorter = {
+import { AnnotationSuperType } from '../../models/file/annotation.wrapper';
+
+export const SuperTypeSorter: { [key in AnnotationSuperType]: number } = {
+ 'suggestion-change-legal-basis': 14,
+ 'suggestion-force-redaction': 15,
+ 'suggestion-recategorize-image': 16,
+ recommendation: 7,
'add-dictionary': 2,
'remove-dictionary': 3,
'pending-analysis': 4,
@@ -10,7 +16,7 @@ export const SuperTypeSorter = {
'suggestion-remove': 11,
skipped: 50,
redaction: 1,
- manual: 2,
- hint: 15,
+ 'manual-redaction': 2,
+ hint: 17,
'declined-suggestion': 20
};
diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json
index ccc7111df..4987f501d 100644
--- a/apps/red-ui/src/assets/i18n/en.json
+++ b/apps/red-ui/src/assets/i18n/en.json
@@ -1,15 +1,4 @@
{
- "APPROVED": "Approved",
- "ERROR": "Re-processing required",
- "EXCLUDED": "Excluded",
- "FULLREPROCESS": "Processing",
- "OCR_PROCESSING": "OCR Processing",
- "PROCESSING": "Processing",
- "REPROCESS": "Processing",
- "UNASSIGNED": "Unassigned",
- "UNDER_APPROVAL": "Under Approval",
- "UNDER_REVIEW": "Under Review",
- "UNPROCESSED": "Unprocessed",
"actions": {
"all": "All",
"none": "None"
@@ -64,6 +53,9 @@
"title": "{type, select, edit{Edit {name}} create{Create} other{}} Dictionary"
},
"add-edit-dossier-attribute": {
+ "error": {
+ "generic": "Failed to save attribute!"
+ },
"form": {
"label": "Attribute Name",
"label-placeholder": "Enter Name",
@@ -71,10 +63,7 @@
"type": "Attribute Type"
},
"save": "Save Attribute",
- "title": "{type, select, edit{Edit {name}} create{Add New} other{}} Dossier Attribute",
- "error": {
- "generic": "Failed to save attribute!"
- }
+ "title": "{type, select, edit{Edit {name}} create{Add New} other{}} Dossier Attribute"
},
"add-edit-dossier-template": {
"form": {
@@ -112,8 +101,8 @@
"email": "Email",
"first-name": "First Name",
"last-name": "Last Name",
- "role": "Role",
- "reset-password": "Reset Password"
+ "reset-password": "Reset Password",
+ "role": "Role"
},
"title": "{type, select, edit{Edit} create{Add New} other{}} User"
},
@@ -168,10 +157,6 @@
"error": "Failed to save redaction: {error}",
"success": "Redaction added!"
},
- "force-redaction": {
- "error": "Failed to save redaction: {error}",
- "success": "Redaction added!"
- },
"approve": {
"error": "Failed to approve suggestion: {error}",
"success": "Suggestion approved."
@@ -184,14 +169,22 @@
"error": "Failed to decline suggestion: {error}",
"success": "Suggestion declined."
},
- "request-change-legal-basis": {
- "error": "Failed to request annotation reason change: {error}",
- "success": "Annotation reason change requested."
+ "force-redaction": {
+ "error": "Failed to save redaction: {error}",
+ "success": "Redaction added!"
},
"recategorize-image": {
"error": "Failed to recategorize image: {error}",
"success": "Image recategorized."
},
+ "request-change-legal-basis": {
+ "error": "Failed to request annotation reason change: {error}",
+ "success": "Annotation reason change requested."
+ },
+ "request-force-redaction": {
+ "error": "Failed to save redaction suggestion: {error}",
+ "success": "Redaction suggestion saved"
+ },
"request-image-recategorization": {
"error": "Failed to request image recategorization: {error}",
"success": "Image recategorization requested."
@@ -201,10 +194,6 @@
"error": "Failed to save redaction suggestion: {error}",
"success": "Redaction suggestion saved"
},
- "request-force-redaction": {
- "error": "Failed to save redaction suggestion: {error}",
- "success": "Redaction suggestion saved"
- },
"undo": {
"error": "Failed to undo: {error}",
"success": "Undo successful"
@@ -238,13 +227,14 @@
"suggestion-add": "Suggested redaction",
"suggestion-add-dictionary": "Suggested dictionary add",
"suggestion-change-legal-basis": "Suggested change legal basis",
- "suggestion-recategorize-image": "Suggested recategorize image",
"suggestion-force-redaction": "Suggestion force redaction",
+ "suggestion-recategorize-image": "Suggested recategorize image",
"suggestion-remove": "Suggested redaction removal",
"suggestion-remove-dictionary": "Suggested dictionary removal"
},
"annotations": "Annotations",
"app-name": "DDA-R",
+ "APPROVED": "Approved",
"archived": "Archived",
"assign-approver-owner": {
"dialog": {
@@ -285,17 +275,17 @@
"all-users": "All Users",
"categories": {
"all-categories": "All Categories",
- "license": "License",
- "download": "Download",
- "audit-log": "Audit Log",
- "project": "Project",
- "dossier": "Dossier",
- "dictionary": "Dictionary",
- "project-template": "Project Template",
- "user": "User",
- "document": "Document",
"audit": "Audit",
- "dossier-template": "Dossier Template"
+ "audit-log": "Audit Log",
+ "dictionary": "Dictionary",
+ "document": "Document",
+ "dossier": "Dossier",
+ "dossier-template": "Dossier Template",
+ "download": "Download",
+ "license": "License",
+ "project": "Project",
+ "project-template": "Project Template",
+ "user": "User"
},
"no-data": {
"title": "No available logs."
@@ -521,9 +511,9 @@
},
"dossier-attribute-types": {
"date": "Date",
+ "image": "Image",
"number": "Number",
- "text": "Free Text",
- "image": "Image"
+ "text": "Free Text"
},
"dossier-attributes": "Dossier Attributes",
"dossier-attributes-listing": {
@@ -535,13 +525,13 @@
"bulk": {
"delete": "Delete Selected Attributes"
},
- "no-match": {
- "title": "No attributes match your current filters."
- },
"no-data": {
"action": "New Attribute",
"title": "There are no dossier attributes."
},
+ "no-match": {
+ "title": "No attributes match your current filters."
+ },
"search": "Search...",
"table-col-names": {
"label": "Label",
@@ -634,8 +624,8 @@
},
"dossier-details": {
"attributes": {
- "image-uploaded": "Image uploaded",
"expand": "{count} custom attributes",
+ "image-uploaded": "Image uploaded",
"show-less": "show less"
},
"charts": {
@@ -781,6 +771,14 @@
"revert": "Revert",
"save": "Save Changes"
},
+ "attributes": {
+ "custom-attributes": "Custom Dossier Attributes",
+ "delete-image": "Delete Image",
+ "image-attributes": "Image Attributes",
+ "no-custom-attributes": "There are no text attributes",
+ "no-image-attributes": "There are no image attributes",
+ "upload-image": "Upload Image"
+ },
"change-successful": "Dossier was updated.",
"delete-successful": "Dossier was deleted.",
"dictionary": {
@@ -814,17 +812,11 @@
"report-attributes": "Report Attributes",
"team-members": "Team Members"
},
- "attributes": {
- "custom-attributes": "Custom Dossier Attributes",
- "image-attributes": "Image Attributes",
- "upload-image": "Upload Image",
- "delete-image": "Delete Image",
- "no-custom-attributes": "There are no text attributes",
- "no-image-attributes": "There are no image attributes"
- },
"unsaved-changes": "You have unsaved changes. Save or revert before changing the tab."
},
"efsa": "EFSA Approval",
+ "ERROR": "Re-processing required",
+ "EXCLUDED": "Excluded",
"file-attribute-types": {
"date": "Date",
"number": "Number",
@@ -950,10 +942,10 @@
"jump-to-next": "Jump to Next",
"jump-to-previous": "Jump to Previous",
"label": "Workload",
+ "page-is": "This page is",
"select": "Select",
"select-all": "All",
- "select-none": "None",
- "page-is": "This page is"
+ "select-none": "None"
},
"document-info": {
"close": "Close Document Info",
@@ -1011,6 +1003,7 @@
"status": "Status"
},
"finished": "Finished",
+ "FULLREPROCESS": "Processing",
"hint": "Hint",
"initials-avatar": {
"unassigned": "Unassigned",
@@ -1087,6 +1080,7 @@
"tomorrow": "Tomorrow",
"yesterday": "Yesterday"
},
+ "OCR_PROCESSING": "OCR Processing",
"overwrite-files-dialog": {
"options": {
"cancel": "Cancel all uploads",
@@ -1111,6 +1105,7 @@
},
"pending-analysis": "Pending Re-Analysis",
"pending-changes-guard": "WARNING: You have unsaved changes. Press Cancel to go back and save these changes, or OK to lose these changes.",
+ "PROCESSING": "Processing",
"readonly": "Read only",
"recategorize-image-dialog": {
"actions": {
@@ -1124,10 +1119,10 @@
},
"header": "Edit Image Type",
"options": {
+ "formula": "Formula",
"image": "Image",
"logo": "Logo",
- "signature": "Signature",
- "formula": "Formula"
+ "signature": "Signature"
}
},
"redaction": "Redaction",
@@ -1162,16 +1157,17 @@
"title": "Reports",
"upload-document": "Upload a Document"
},
+ "REPROCESS": "Processing",
"reset-filters": "Reset Filters",
"reset-password-dialog": {
- "header": "Set Temporary Password for {userName}",
+ "actions": {
+ "cancel": "Cancel",
+ "save": "Save"
+ },
"form": {
"password": "Temporary password"
},
- "actions": {
- "save": "Save",
- "cancel": "Cancel"
- }
+ "header": "Set Temporary Password for {userName}"
},
"roles": {
"inactive": "Inactive",
@@ -1259,66 +1255,13 @@
"submitted": "Submitted",
"suggestion": "Suggestion for redaction",
"time": {
- "no-time-left": "Time to restore already passed",
- "less-than-an-hour": "< 1 hour",
+ "day": "day",
+ "days": "days",
"hour": "hour",
"hours": "hours",
- "day": "day",
- "days": "days"
+ "less-than-an-hour": "< 1 hour",
+ "no-time-left": "Time to restore already passed"
},
- "top-bar": {
- "navigation-items": {
- "back": "Back",
- "dossiers": "Active Dossier",
- "my-account": {
- "children": {
- "admin": "Settings",
- "downloads": "My Downloads",
- "my-profile": "My Profile",
- "trash": "Trash",
- "logout": "Logout"
- }
- }
- }
- },
- "trash": {
- "label": "Trash",
- "table-header": {
- "title": "{length} deleted dossiers",
- "info": "Deleted items can be restored up to {hours} hours from their deletions"
- },
- "bulk": {
- "delete": "Forever Delete Selected Dossiers",
- "restore": "Restore Selected Dossiers"
- },
- "action": {
- "delete": "Delete forever",
- "restore": "Restore"
- },
- "search": "Search...",
- "table-col-names": {
- "name": "Name",
- "owner": "Owner",
- "deleted-on": "Deleted on",
- "time-to-restore": "Time to restore"
- },
- "no-data": {
- "title": "There are no dossiers yet."
- },
- "no-match": {
- "title": "No dossiers match your current filters."
- }
- },
- "sorting": {
- "alphabetically": "Alphabetically",
- "custom": "Custom",
- "number-of-analyses": "Number of analyses",
- "number-of-pages": "Number of pages",
- "oldest": "Oldest",
- "recent": "Recent"
- },
- "submitted": "Submitted",
- "suggestion": "Suggestion for redaction",
"top-bar": {
"navigation-items": {
"back": "Back",
@@ -1332,14 +1275,46 @@
"en": "English",
"label": "Language"
},
+ "logout": "Logout",
"my-profile": "My Profile",
- "trash": "Trash",
- "logout": "Logout"
+ "trash": "Trash"
}
}
}
},
+ "trash": {
+ "action": {
+ "delete": "Delete forever",
+ "restore": "Restore"
+ },
+ "bulk": {
+ "delete": "Forever Delete Selected Dossiers",
+ "restore": "Restore Selected Dossiers"
+ },
+ "label": "Trash",
+ "no-data": {
+ "title": "There are no dossiers yet."
+ },
+ "no-match": {
+ "title": "No dossiers match your current filters."
+ },
+ "search": "Search...",
+ "table-col-names": {
+ "deleted-on": "Deleted on",
+ "name": "Name",
+ "owner": "Owner",
+ "time-to-restore": "Time to restore"
+ },
+ "table-header": {
+ "info": "Deleted items can be restored up to {hours} hours from their deletions",
+ "title": "{length} deleted dossiers"
+ }
+ },
"type": "Type",
+ "UNASSIGNED": "Unassigned",
+ "UNDER_APPROVAL": "Under Approval",
+ "UNDER_REVIEW": "Under Review",
+ "UNPROCESSED": "Unprocessed",
"upload-status": {
"dialog": {
"actions": {
@@ -1380,8 +1355,8 @@
"user-management": "User Management",
"user-profile": {
"actions": {
- "save": "Save profile",
- "change-password": "Change Password"
+ "change-password": "Change Password",
+ "save": "Save profile"
},
"form": {
"email": "Email",
diff --git a/apps/red-ui/src/assets/i18n/te.json b/apps/red-ui/src/assets/i18n/te.json
index 251a6705b..34854b952 100644
--- a/apps/red-ui/src/assets/i18n/te.json
+++ b/apps/red-ui/src/assets/i18n/te.json
@@ -47,7 +47,8 @@
"rank-placeholder": "",
"redaction": ""
},
- "save": ""
+ "save": "",
+ "title": ""
},
"add-edit-dossier-attribute": {
"form": {
@@ -57,10 +58,7 @@
"type": ""
},
"save": "",
- "title": {
- "edit": "",
- "new": ""
- }
+ "title": ""
},
"add-edit-dossier-template": {
"form": {
@@ -72,10 +70,7 @@
"valid-to": ""
},
"save": "",
- "title": {
- "edit": "",
- "new": ""
- }
+ "title": ""
},
"add-edit-file-attribute": {
"form": {
@@ -88,10 +83,7 @@
"type": ""
},
"save": "",
- "title": {
- "edit": "",
- "new": ""
- }
+ "title": ""
},
"add-edit-user": {
"actions": {
@@ -107,10 +99,7 @@
"reset-password": "",
"role": ""
},
- "title": {
- "edit": "",
- "new": ""
- }
+ "title": ""
},
"annotation": "",
"annotation-actions": {
@@ -137,6 +126,25 @@
"show": "",
"undo": ""
},
+ "annotation-type": {
+ "add-dictionary": "",
+ "change-legal-basis": "",
+ "declined-suggestion": "",
+ "hint": "",
+ "manual-redaction": "",
+ "pending-analysis": "",
+ "recommendation": "",
+ "redaction": "",
+ "remove-dictionary": "",
+ "remove-only-here": "",
+ "skipped": "",
+ "suggestion-add": "",
+ "suggestion-add-dictionary": "",
+ "suggestion-change-legal-basis": "",
+ "suggestion-force-redaction": "",
+ "suggestion-recategorize-image": "",
+ "suggestion-remove": ""
+ },
"annotations": "",
"assign-": "",
"assign-dossier-owner": {
@@ -207,6 +215,7 @@
},
"comments": {
"add-comment": "",
+ "comments": "",
"hide-comments": ""
},
"common": {
@@ -986,6 +995,7 @@
"subtitle": "",
"title": ""
},
+ "suggestion-remove-dictionary": "",
"top-bar": {
"navigation-items": {
"back": "",